From 8cdb1859e3fb132fbc14209831f37fa0330318af Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Sun, 15 Jun 2025 23:32:02 +0200 Subject: [PATCH 01/37] fix(flake): use same Electron version as normal build Also fix the source filtering logic to work properly. --- flake.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index 3b3736081..7513dcd48 100644 --- a/flake.nix +++ b/flake.nix @@ -21,7 +21,7 @@ system: let pkgs = import nixpkgs { inherit system; }; - electron = pkgs.electron_35; + electron = pkgs."electron_${lib.versions.major packageJsonDesktop.devDependencies.electron}"; nodejs = pkgs.nodejs_22; pnpm = pkgs.pnpm_10; inherit (pkgs) @@ -40,13 +40,13 @@ fullCleanSourceFilter = name: type: (lib.cleanSourceFilter name type) - || ( + && ( let baseName = baseNameOf (toString name); in # No need to copy the flake. # Don't copy local development instance of NX cache. - baseName == "flake.nix" || baseName == "flake.lock" || baseName == ".nx" + baseName != "flake.nix" && baseName != "flake.lock" && baseName != ".nx" ); fullCleanSource = src: @@ -55,6 +55,7 @@ src = src; }; packageJson = builtins.fromJSON (builtins.readFile ./package.json); + packageJsonDesktop = builtins.fromJSON (builtins.readFile ./apps/desktop/package.json); makeApp = { From f56ba7295ab2311248e6abf04556f05f95f232a3 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Mon, 16 Jun 2025 07:46:31 +0200 Subject: [PATCH 02/37] chore(flake): note differences to electron-forge build --- flake.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 7513dcd48..125992fa5 100644 --- a/flake.nix +++ b/flake.nix @@ -163,7 +163,9 @@ comment = meta.description; desktopName = "TriliumNext Notes"; categories = [ "Office" ]; - startupWMClass = "Trilium Notes Next"; + # TODO: electron-forge build has this set to PRODUCT_NAME (forge.config.cjs) + # But the plain build doesn't set this (or the app icon). + startupWMClass = "TriliumNext Notes"; }) ]; From e8f2f0f5778d1893f0423d1e48895501647eecd7 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Mon, 16 Jun 2025 08:05:12 +0200 Subject: [PATCH 03/37] feat(flake): Wayland support --- flake.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 125992fa5..318d6e830 100644 --- a/flake.nix +++ b/flake.nix @@ -30,6 +30,7 @@ lib makeBinaryWrapper makeDesktopItem + makeShellWrapper moreutils removeReferencesTo stdenv @@ -102,15 +103,20 @@ extraNativeBuildInputs = [ - makeBinaryWrapper moreutils # sponge nodejs.python removeReferencesTo ] ++ lib.optionals (app == "desktop") [ copyDesktopItems + # required for NIXOS_OZONE_WL expansion + # https://github.com/NixOS/nixpkgs/issues/172583 + makeShellWrapper wrapGAppsHook3 ] + ++ lib.optionals (app == "server") [ + makeBinaryWrapper + ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcodebuild darwin.cctools @@ -187,8 +193,9 @@ mkdir -p $out/{bin,share/icons/hicolor/512x512/apps,opt/trilium} cp --archive apps/desktop/dist/* $out/opt/trilium cp apps/client/src/assets/icon.png $out/share/icons/hicolor/512x512/apps/trilium.png - makeWrapper ${lib.getExe electron} $out/bin/trilium \ + makeShellWrapper ${lib.getExe electron} $out/bin/trilium \ "''${gappsWrapperArgs[@]}" \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ --set-default ELECTRON_IS_DEV 0 \ --add-flags $out/opt/trilium/main.cjs ''; From a13e4d5d796c98563d7009afa496fe982fc6fd37 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Mon, 16 Jun 2025 08:08:22 +0200 Subject: [PATCH 04/37] fix(flake): set resourceDir explicitly --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index 318d6e830..53cf37765 100644 --- a/flake.nix +++ b/flake.nix @@ -197,6 +197,7 @@ "''${gappsWrapperArgs[@]}" \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ --set-default ELECTRON_IS_DEV 0 \ + --set TRILIUM_RESOURCE_DIR $out/opt/trilium \ --add-flags $out/opt/trilium/main.cjs ''; }; From c0b746e03faa08e9e04616af3d3270da98e4a80d Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Mon, 16 Jun 2025 08:29:21 +0200 Subject: [PATCH 05/37] fix(desktop): proper icon path The previous value points to a file that no longer exists in the release builds. This file also only exists in the flake build. --- apps/server/src/services/window.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index a803e150d..42969cf39 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -257,7 +257,7 @@ async function configureWebContents(webContents: WebContents, spellcheckEnabled: } function getIcon() { - return path.join(RESOURCE_DIR, "images/app-icons/png/256x256" + (isDev ? "-dev" : "") + ".png"); + return path.join(RESOURCE_DIR, "../public/assets/icon.png"); } async function createSetupWindow() { From dab43d9372acf0ca30a8375e23ad9f3cb0d0d23c Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Mon, 16 Jun 2025 08:46:24 +0200 Subject: [PATCH 06/37] docs: mention escaped backslashes in regex search --- .../Basic Concepts and Features/Navigation/Search.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 c4a1e3023..69a28b73d 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,4 +1,4 @@ -# Search +# 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. @@ -69,6 +69,7 @@ The options available are: * `#dateNote >= TODAY-30`: A "smart search" to find notes with the "dateNote" label within the last 30 days. Supported smart values include NOW +- seconds, TODAY +- days, MONTH +- months, YEAR +- years. * `~author.title *=* Tolkien`: Find notes related to an author whose title contains "Tolkien". * `#publicationYear %= '19[0-9]{2}'`: Use the '%=' operator to match a regular expression (regex). This feature has been available since Trilium 0.52. +* `note.content %= '\\d{2}:\\d{2} (PM|AM)'`: Find notes that mention a time. Backslashes in a regex must be escaped. ### Advanced Use Cases From 1de02b85b368bbb25b2faab5fac38598e749d4d2 Mon Sep 17 00:00:00 2001 From: Arne Keller Date: Tue, 17 Jun 2025 12:38:04 +0200 Subject: [PATCH 07/37] chore(docs): restore dev docs --- docs/Developer Guide/!!!meta.json | 3143 ++++++++--------- .../Copy image reference to the cl.md | 0 .../Export diagram as SVG.md | 0 .../Adding a new note type/First steps.md | 0 .../First steps/mind_map.js | 0 .../Adding a new note type/Loading data.md | 0 .../Note type checklist.md | 0 .../Adding a new note type/SVG rendering.md | 0 .../Saving data via spaced update.md | 0 .../Development and architecture/Backlinks.md | 0 .../Branch prefixes.md | 0 .../Build information.md | 2 +- .../Database/attachments.md | 0 .../Database/attributes.md | 0 .../Database/blobs.md | 0 .../Database/branches.md | 0 .../Database/entity_changes.md | 0 .../Database/etapi_tokens.md | 0 .../Database/notes.md | 0 .../Database/options.md | 0 .../Database/recent_notes.md | 0 .../Database/revisions.md | 0 .../Deleted notes.md | 0 .../Demo document.md | 0 .../Development and architecture/Docker.md | 0 .../Hidden notes.md | 0 .../Development and architecture/Icons.md | 2 +- .../Icons/1_Icons on Mac_image.png | Bin .../Icons/Icons on Mac.md | 0 .../Icons on Mac/1_Adaptive icon_image.png | Bin .../1_Slightly blurry icon on Ma.png | Bin .../Icons on Mac/2_Adaptive icon_image.png | Bin .../2_Slightly blurry icon on Ma.png | Bin .../Icons on Mac/3_Adaptive icon_image.png | Bin .../Icons on Mac/4_Adaptive icon_image.png | Bin .../Icons on Mac/5_Adaptive icon_image.png | Bin .../Icons on Mac/6_Adaptive icon_image.png | Bin .../Icons/Icons on Mac/Adaptive icon.md | 0 .../Icons on Mac/Adaptive icon_image.png | Bin .../Slightly blurry icon on Ma.png | Bin .../Slightly blurry icon on Mac.md | 0 .../Icons/Icons on Mac_image.png | Bin .../Icons/Removed icons.md | 0 .../Internationalisation Translat.md | 0 .../Guidelines.md | 0 .../Server translations.md | 0 .../i18n-ally.md | 0 .../Development and architecture/Launchers.md | 0 .../Live reload.md | 0 .../Note types.md | 0 .../Development and architecture/Options.md | 0 .../Options/Check box option.md | 0 .../Options/Creating a new option.md | 0 .../Options/Displaying the option in setti.md | 0 .../Options/Refresh widget with option cha.md | 0 .../Options/Trigger UI refresh.md | 0 .../Development and architecture/Printing.md | 0 .../Protected entities.md | 0 .../Development and architecture/Revisions.md | 0 .../Development and architecture/Safe mode.md | 0 .../Special notes.md | 0 .../Synchronisation/Content hashing.md | 0 .../Syntax highlighting.md | 0 .../Development and architecture/Themes.md | 0 64 files changed, 1546 insertions(+), 1601 deletions(-) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/Copy image reference to the cl.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/Export diagram as SVG.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/First steps.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/First steps/mind_map.js (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/Loading data.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/Note type checklist.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/SVG rendering.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Adding a new note type/Saving data via spaced update.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Backlinks.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Branch prefixes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Build information.md (80%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/attachments.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/attributes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/blobs.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/branches.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/entity_changes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/etapi_tokens.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/notes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/options.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/recent_notes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Database/revisions.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Deleted notes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Demo document.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Docker.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Hidden notes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons.md (61%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/1_Icons on Mac_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/1_Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/1_Slightly blurry icon on Ma.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/2_Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/2_Slightly blurry icon on Ma.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/3_Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/4_Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/5_Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/6_Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/Adaptive icon.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/Adaptive icon_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Ma.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Mac.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Icons on Mac_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Icons/Removed icons.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Internationalisation Translat.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Internationalisation Translations/Guidelines.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Internationalisation Translations/Server translations.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Internationalisation Translations/i18n-ally.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Launchers.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Live reload.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Note types.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Options.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Options/Check box option.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Options/Creating a new option.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Options/Displaying the option in setti.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Options/Refresh widget with option cha.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Options/Trigger UI refresh.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Printing.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Protected entities.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Revisions.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Safe mode.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Special notes.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Synchronisation/Content hashing.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Syntax highlighting.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Development and architecture/Themes.md (100%) diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index 38f1e2c47..96654d061 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -1,6 +1,6 @@ { "formatVersion": 2, - "appVersion": "0.94.1", + "appVersion": "0.95.0", "files": [ { "isClone": false, @@ -178,6 +178,1548 @@ } ] }, + { + "isClone": false, + "noteId": "wbVIolLKDhe2", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2" + ], + "title": "Development and architecture", + "notePosition": 220, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Development and architecture", + "children": [ + { + "isClone": false, + "noteId": "TLXJwBDo8Rdv", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "TLXJwBDo8Rdv" + ], + "title": "Internationalisation / Translations", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "ky5zpmxXZhhr", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-globe", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Internationalisation Translat.md", + "attachments": [], + "dirFileName": "Internationalisation Translations", + "children": [ + { + "isClone": false, + "noteId": "ky5zpmxXZhhr", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "TLXJwBDo8Rdv", + "ky5zpmxXZhhr" + ], + "title": "Guidelines", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Guidelines.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VTebBD3jZjdp", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "TLXJwBDo8Rdv", + "VTebBD3jZjdp" + ], + "title": "i18n-ally", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "ky5zpmxXZhhr", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "i18n-ally.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "KhDvxPlQQybs", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "TLXJwBDo8Rdv", + "KhDvxPlQQybs" + ], + "title": "Server translations", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Server translations.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "fI16A7NrT713", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "fI16A7NrT713" + ], + "title": "Live reload", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Live reload.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "7BCukQTCm7fv", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "7BCukQTCm7fv" + ], + "title": "Themes", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Themes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "n9wYW9nUTynV", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "n9wYW9nUTynV" + ], + "title": "Synchronisation", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Synchronisation", + "children": [ + { + "isClone": false, + "noteId": "wA6tm9xcWWaB", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "n9wYW9nUTynV", + "wA6tm9xcWWaB" + ], + "title": "Content hashing", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Content hashing.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "aGlhNBEA9wwo", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "aGlhNBEA9wwo" + ], + "title": "Build information", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "PXzm2t3sCdsP", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Build information.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "vNMojjUN76jc", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc" + ], + "title": "Database", + "notePosition": 60, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Database", + "children": [ + { + "isClone": false, + "noteId": "e6GnYOXeIWjg", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "e6GnYOXeIWjg" + ], + "title": "attachments", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "UvXpeSqfYc6d", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "VIcWnKGs0sMh", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 40 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "attachments.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "ciL84vNBNi9y", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "ciL84vNBNi9y" + ], + "title": "attributes", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "r11Bh3uxFGRj", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "attributes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VIcWnKGs0sMh", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "VIcWnKGs0sMh" + ], + "title": "blobs", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "blobs.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "GskLPkgY5n6E", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "GskLPkgY5n6E" + ], + "title": "branches", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "h8AsuFjSD4fB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "branches.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "ohhExR078MPU", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "ohhExR078MPU" + ], + "title": "entity_changes", + "notePosition": 51, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "entity_changes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "bRqbIg633nCs", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "bRqbIg633nCs" + ], + "title": "etapi_tokens", + "notePosition": 52, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "etapi_tokens.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "DSkl8C325tEC", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "DSkl8C325tEC" + ], + "title": "notes", + "notePosition": 53, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "VIcWnKGs0sMh", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "UvXpeSqfYc6d", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "notes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "4oeftEmy77Bt", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "4oeftEmy77Bt" + ], + "title": "options", + "notePosition": 54, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "options.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VyFirdgAOoh5", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "VyFirdgAOoh5" + ], + "title": "recent_notes", + "notePosition": 55, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "recent_notes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "s7ZBiaJVNumK", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "vNMojjUN76jc", + "s7ZBiaJVNumK" + ], + "title": "revisions", + "notePosition": 56, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "VIcWnKGs0sMh", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "UvXpeSqfYc6d", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "revisions.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "UvXpeSqfYc6d", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "UvXpeSqfYc6d" + ], + "title": "Protected entities", + "notePosition": 80, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "e6GnYOXeIWjg", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s7ZBiaJVNumK", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Protected entities.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "tM3rIZQzlum4", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "tM3rIZQzlum4" + ], + "title": "Deleted notes", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Deleted notes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "r11Bh3uxFGRj", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "r11Bh3uxFGRj" + ], + "title": "Special notes", + "notePosition": 100, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Special notes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "h8AsuFjSD4fB", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "h8AsuFjSD4fB" + ], + "title": "Branch prefixes", + "notePosition": 110, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Branch prefixes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "qjQNyaYXSNWu", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "qjQNyaYXSNWu" + ], + "title": "Revisions", + "notePosition": 120, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Revisions.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "3mz4ZYhi9Cy8", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "3mz4ZYhi9Cy8" + ], + "title": "Backlinks", + "notePosition": 130, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Backlinks.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "ItZRqNGeGSU0", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "ItZRqNGeGSU0" + ], + "title": "Note types", + "notePosition": 140, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Note types.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "64ZTlUPgEPtW", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "64ZTlUPgEPtW" + ], + "title": "Safe mode", + "notePosition": 150, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Safe mode.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "m2W35hwSDUeh", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "m2W35hwSDUeh" + ], + "title": "Icons", + "notePosition": 160, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "PXzm2t3sCdsP", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oLhKpfi2kGON", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Icons.md", + "attachments": [], + "dirFileName": "Icons", + "children": [ + { + "isClone": false, + "noteId": "rUkJPiX0sJSk", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "m2W35hwSDUeh", + "rUkJPiX0sJSk" + ], + "title": "Removed icons", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Removed icons.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "GzrBXey1UTUW", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "m2W35hwSDUeh", + "GzrBXey1UTUW" + ], + "title": "Icons on Mac", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Icons on Mac.md", + "attachments": [ + { + "attachmentId": "gMQM37l1tgDc", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Icons on Mac_image.png" + }, + { + "attachmentId": "KBbeDSs1hueu", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Icons on Mac_image.png" + } + ], + "dirFileName": "Icons on Mac", + "children": [ + { + "isClone": false, + "noteId": "0btkkp7llQdO", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "m2W35hwSDUeh", + "GzrBXey1UTUW", + "0btkkp7llQdO" + ], + "title": "Slightly blurry icon on Mac", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Slightly blurry icon on Mac.md", + "attachments": [ + { + "attachmentId": "6USSTMu15E6N", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Slightly blurry icon on Ma.png" + }, + { + "attachmentId": "KEkBj1bOyfQ5", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Slightly blurry icon on Ma.png" + }, + { + "attachmentId": "XaG2VbiqKYtR", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "2_Slightly blurry icon on Ma.png" + } + ] + }, + { + "isClone": false, + "noteId": "8zAJ5J8SFEp8", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "m2W35hwSDUeh", + "GzrBXey1UTUW", + "8zAJ5J8SFEp8" + ], + "title": "Adaptive icon", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Adaptive icon.md", + "attachments": [ + { + "attachmentId": "38usIA7IJTpY", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Adaptive icon_image.png" + }, + { + "attachmentId": "4eQa9Eqkuekv", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Adaptive icon_image.png" + }, + { + "attachmentId": "gM1I22x3bYDv", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "2_Adaptive icon_image.png" + }, + { + "attachmentId": "Im2xMquSwizu", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "3_Adaptive icon_image.png" + }, + { + "attachmentId": "l2xu0BHxfPfq", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "4_Adaptive icon_image.png" + }, + { + "attachmentId": "wM6YPPsas7tA", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "5_Adaptive icon_image.png" + }, + { + "attachmentId": "zPLIBv0Xvgwm", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "6_Adaptive icon_image.png" + } + ] + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "oLhKpfi2kGON", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "oLhKpfi2kGON" + ], + "title": "Demo document", + "notePosition": 170, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Demo document.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "mXFYlhuEr1mZ", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "mXFYlhuEr1mZ" + ], + "title": "Docker", + "notePosition": 180, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Docker.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "6dC7ha5vjqqS", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "6dC7ha5vjqqS" + ], + "title": "Options", + "notePosition": 190, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Options.md", + "attachments": [], + "dirFileName": "Options", + "children": [ + { + "isClone": false, + "noteId": "Qk5Q0Xty3ITv", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "6dC7ha5vjqqS", + "Qk5Q0Xty3ITv" + ], + "title": "Check box option", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Check box option.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VnqYvYEuMMvb", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "6dC7ha5vjqqS", + "VnqYvYEuMMvb" + ], + "title": "Trigger UI refresh", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Trigger UI refresh.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "3TbiQZODAp6y", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "6dC7ha5vjqqS", + "3TbiQZODAp6y" + ], + "title": "Displaying the option in settings", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Displaying the option in setti.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "1TVWljchsc0t", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "6dC7ha5vjqqS", + "1TVWljchsc0t" + ], + "title": "Refresh widget with option change", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Refresh widget with option cha.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "NcHcYOEn4ol5", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "6dC7ha5vjqqS", + "NcHcYOEn4ol5" + ], + "title": "Creating a new option", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Creating a new option.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "AdNRgGrYeTCy", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy" + ], + "title": "Adding a new note type", + "notePosition": 210, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Adding a new note type", + "children": [ + { + "isClone": false, + "noteId": "UFtOg3sLumZM", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "UFtOg3sLumZM" + ], + "title": "First steps", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "lgFwLJT72mdf", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "oLhKpfi2kGON", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "First steps.md", + "attachments": [], + "dirFileName": "First steps", + "children": [ + { + "isClone": false, + "noteId": "aSO1wqK7L1ma", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "UFtOg3sLumZM", + "aSO1wqK7L1ma" + ], + "title": "mind_map.js", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "code", + "mime": "application/javascript;env=frontend", + "attributes": [], + "dataFileName": "mind_map.js", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "lgFwLJT72mdf", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "lgFwLJT72mdf" + ], + "title": "Note type checklist", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "UFtOg3sLumZM", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OGYpAbrmEXbX", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-list-check", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Note type checklist.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "PoxUNujeKJ7T", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "PoxUNujeKJ7T" + ], + "title": "Saving data via spaced update", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "OGYpAbrmEXbX", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Saving data via spaced update.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "xYVE7qA3EBwb", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "xYVE7qA3EBwb" + ], + "title": "Loading data", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "PoxUNujeKJ7T", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Loading data.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "OGYpAbrmEXbX", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "OGYpAbrmEXbX" + ], + "title": "SVG rendering", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "SVG rendering.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "Q8hgB8EEen80", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "Q8hgB8EEen80" + ], + "title": "Copy image reference to the clipboard", + "notePosition": 60, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Copy image reference to the cl.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "AwWq8bJRl6XD", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "AdNRgGrYeTCy", + "AwWq8bJRl6XD" + ], + "title": "Export diagram as SVG", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "OGYpAbrmEXbX", + "isInheritable": false, + "position": 10 + } + ], + "format": "markdown", + "dataFileName": "Export diagram as SVG.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "W0msUwLxm40d", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "W0msUwLxm40d" + ], + "title": "Printing", + "notePosition": 220, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Printing.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "Usiyzn9C4WFv", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "Usiyzn9C4WFv" + ], + "title": "Launchers", + "notePosition": 230, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Launchers.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "k7RavjuXQt8z", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "k7RavjuXQt8z" + ], + "title": "Syntax highlighting", + "notePosition": 240, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Syntax highlighting.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "UzRirf46Xi46", + "notePath": [ + "jdjRLhLV3TtI", + "wbVIolLKDhe2", + "UzRirf46Xi46" + ], + "title": "Hidden notes", + "notePosition": 250, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Hidden notes.md", + "attachments": [] + } + ] + }, { "isClone": false, "noteId": "ibAPHul7Efvr", @@ -186,7 +1728,7 @@ "ibAPHul7Efvr" ], "title": "Old documentation", - "notePosition": 220, + "notePosition": 230, "prefix": null, "isExpanded": false, "type": "text", @@ -602,1603 +2144,6 @@ } ] }, - { - "isClone": false, - "noteId": "wbVIolLKDhe2", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2" - ], - "title": "Development and architecture", - "notePosition": 70, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Development and architecture", - "children": [ - { - "isClone": false, - "noteId": "TLXJwBDo8Rdv", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "TLXJwBDo8Rdv" - ], - "title": "Internationalisation / Translations", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "ky5zpmxXZhhr", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-globe", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Internationalisation Translat.md", - "attachments": [], - "dirFileName": "Internationalisation Translations", - "children": [ - { - "isClone": false, - "noteId": "ky5zpmxXZhhr", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "TLXJwBDo8Rdv", - "ky5zpmxXZhhr" - ], - "title": "Guidelines", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Guidelines.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VTebBD3jZjdp", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "TLXJwBDo8Rdv", - "VTebBD3jZjdp" - ], - "title": "i18n-ally", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "ky5zpmxXZhhr", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "i18n-ally.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "KhDvxPlQQybs", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "TLXJwBDo8Rdv", - "KhDvxPlQQybs" - ], - "title": "Server translations", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Server translations.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "fI16A7NrT713", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "fI16A7NrT713" - ], - "title": "Live reload", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Live reload.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "7BCukQTCm7fv", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "7BCukQTCm7fv" - ], - "title": "Themes", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Themes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "n9wYW9nUTynV", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "n9wYW9nUTynV" - ], - "title": "Synchronisation", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Synchronisation", - "children": [ - { - "isClone": false, - "noteId": "wA6tm9xcWWaB", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "n9wYW9nUTynV", - "wA6tm9xcWWaB" - ], - "title": "Content hashing", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Content hashing.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "aGlhNBEA9wwo", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "aGlhNBEA9wwo" - ], - "title": "Build information", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "PXzm2t3sCdsP", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Build information.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "vNMojjUN76jc", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc" - ], - "title": "Database", - "notePosition": 60, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Database", - "children": [ - { - "isClone": false, - "noteId": "e6GnYOXeIWjg", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "e6GnYOXeIWjg" - ], - "title": "attachments", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UvXpeSqfYc6d", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 40 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "attachments.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "ciL84vNBNi9y", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "ciL84vNBNi9y" - ], - "title": "attributes", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "r11Bh3uxFGRj", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "attributes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VIcWnKGs0sMh", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "VIcWnKGs0sMh" - ], - "title": "blobs", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "blobs.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "GskLPkgY5n6E", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "GskLPkgY5n6E" - ], - "title": "branches", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "h8AsuFjSD4fB", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "branches.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "ohhExR078MPU", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "ohhExR078MPU" - ], - "title": "entity_changes", - "notePosition": 51, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "entity_changes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "bRqbIg633nCs", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "bRqbIg633nCs" - ], - "title": "etapi_tokens", - "notePosition": 52, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "etapi_tokens.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "DSkl8C325tEC", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "DSkl8C325tEC" - ], - "title": "notes", - "notePosition": 53, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UvXpeSqfYc6d", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "notes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "4oeftEmy77Bt", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "4oeftEmy77Bt" - ], - "title": "options", - "notePosition": 54, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "options.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VyFirdgAOoh5", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "VyFirdgAOoh5" - ], - "title": "recent_notes", - "notePosition": 55, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "recent_notes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "s7ZBiaJVNumK", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "vNMojjUN76jc", - "s7ZBiaJVNumK" - ], - "title": "revisions", - "notePosition": 56, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UvXpeSqfYc6d", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "revisions.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "UvXpeSqfYc6d", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "UvXpeSqfYc6d" - ], - "title": "Protected entities", - "notePosition": 80, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "e6GnYOXeIWjg", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s7ZBiaJVNumK", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Protected entities.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "tM3rIZQzlum4", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "tM3rIZQzlum4" - ], - "title": "Deleted notes", - "notePosition": 90, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Deleted notes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "r11Bh3uxFGRj", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "r11Bh3uxFGRj" - ], - "title": "Special notes", - "notePosition": 100, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Special notes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "h8AsuFjSD4fB", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "h8AsuFjSD4fB" - ], - "title": "Branch prefixes", - "notePosition": 110, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Branch prefixes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "qjQNyaYXSNWu", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "qjQNyaYXSNWu" - ], - "title": "Revisions", - "notePosition": 120, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Revisions.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "3mz4ZYhi9Cy8", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "3mz4ZYhi9Cy8" - ], - "title": "Backlinks", - "notePosition": 130, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Backlinks.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "ItZRqNGeGSU0", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "ItZRqNGeGSU0" - ], - "title": "Note types", - "notePosition": 140, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Note types.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "64ZTlUPgEPtW", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "64ZTlUPgEPtW" - ], - "title": "Safe mode", - "notePosition": 150, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Safe mode.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "m2W35hwSDUeh", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "m2W35hwSDUeh" - ], - "title": "Icons", - "notePosition": 160, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "PXzm2t3sCdsP", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "oLhKpfi2kGON", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Icons.md", - "attachments": [], - "dirFileName": "Icons", - "children": [ - { - "isClone": false, - "noteId": "rUkJPiX0sJSk", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "m2W35hwSDUeh", - "rUkJPiX0sJSk" - ], - "title": "Removed icons", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Removed icons.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "GzrBXey1UTUW", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "m2W35hwSDUeh", - "GzrBXey1UTUW" - ], - "title": "Icons on Mac", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Icons on Mac.md", - "attachments": [ - { - "attachmentId": "gMQM37l1tgDc", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Icons on Mac_image.png" - }, - { - "attachmentId": "KBbeDSs1hueu", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "1_Icons on Mac_image.png" - } - ], - "dirFileName": "Icons on Mac", - "children": [ - { - "isClone": false, - "noteId": "0btkkp7llQdO", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "m2W35hwSDUeh", - "GzrBXey1UTUW", - "0btkkp7llQdO" - ], - "title": "Slightly blurry icon on Mac", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Slightly blurry icon on Mac.md", - "attachments": [ - { - "attachmentId": "6USSTMu15E6N", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Slightly blurry icon on Ma.png" - }, - { - "attachmentId": "KEkBj1bOyfQ5", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "1_Slightly blurry icon on Ma.png" - }, - { - "attachmentId": "XaG2VbiqKYtR", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "2_Slightly blurry icon on Ma.png" - } - ] - }, - { - "isClone": false, - "noteId": "8zAJ5J8SFEp8", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "m2W35hwSDUeh", - "GzrBXey1UTUW", - "8zAJ5J8SFEp8" - ], - "title": "Adaptive icon", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Adaptive icon.md", - "attachments": [ - { - "attachmentId": "38usIA7IJTpY", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Adaptive icon_image.png" - }, - { - "attachmentId": "4eQa9Eqkuekv", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "1_Adaptive icon_image.png" - }, - { - "attachmentId": "gM1I22x3bYDv", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "2_Adaptive icon_image.png" - }, - { - "attachmentId": "Im2xMquSwizu", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "3_Adaptive icon_image.png" - }, - { - "attachmentId": "l2xu0BHxfPfq", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "4_Adaptive icon_image.png" - }, - { - "attachmentId": "wM6YPPsas7tA", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "5_Adaptive icon_image.png" - }, - { - "attachmentId": "zPLIBv0Xvgwm", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "6_Adaptive icon_image.png" - } - ] - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "oLhKpfi2kGON", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "oLhKpfi2kGON" - ], - "title": "Demo document", - "notePosition": 170, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Demo document.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "mXFYlhuEr1mZ", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "mXFYlhuEr1mZ" - ], - "title": "Docker", - "notePosition": 180, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Docker.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "6dC7ha5vjqqS", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "6dC7ha5vjqqS" - ], - "title": "Options", - "notePosition": 190, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Options.md", - "attachments": [], - "dirFileName": "Options", - "children": [ - { - "isClone": false, - "noteId": "Qk5Q0Xty3ITv", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "6dC7ha5vjqqS", - "Qk5Q0Xty3ITv" - ], - "title": "Check box option", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Check box option.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VnqYvYEuMMvb", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "6dC7ha5vjqqS", - "VnqYvYEuMMvb" - ], - "title": "Trigger UI refresh", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Trigger UI refresh.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "3TbiQZODAp6y", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "6dC7ha5vjqqS", - "3TbiQZODAp6y" - ], - "title": "Displaying the option in settings", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Displaying the option in setti.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "1TVWljchsc0t", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "6dC7ha5vjqqS", - "1TVWljchsc0t" - ], - "title": "Refresh widget with option change", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Refresh widget with option cha.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "NcHcYOEn4ol5", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "6dC7ha5vjqqS", - "NcHcYOEn4ol5" - ], - "title": "Creating a new option", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Creating a new option.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "AdNRgGrYeTCy", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy" - ], - "title": "Adding a new note type", - "notePosition": 210, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Adding a new note type", - "children": [ - { - "isClone": false, - "noteId": "UFtOg3sLumZM", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "UFtOg3sLumZM" - ], - "title": "First steps", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "lgFwLJT72mdf", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "oLhKpfi2kGON", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "First steps.md", - "attachments": [], - "dirFileName": "First steps", - "children": [ - { - "isClone": false, - "noteId": "aSO1wqK7L1ma", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "UFtOg3sLumZM", - "aSO1wqK7L1ma" - ], - "title": "mind_map.js", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "code", - "mime": "application/javascript;env=frontend", - "attributes": [], - "dataFileName": "mind_map.js", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "lgFwLJT72mdf", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "lgFwLJT72mdf" - ], - "title": "Note type checklist", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "UFtOg3sLumZM", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "OGYpAbrmEXbX", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-list-check", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "Note type checklist.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "PoxUNujeKJ7T", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "PoxUNujeKJ7T" - ], - "title": "Saving data via spaced update", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "OGYpAbrmEXbX", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Saving data via spaced update.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "xYVE7qA3EBwb", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "xYVE7qA3EBwb" - ], - "title": "Loading data", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "PoxUNujeKJ7T", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Loading data.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "OGYpAbrmEXbX", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "OGYpAbrmEXbX" - ], - "title": "SVG rendering", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "SVG rendering.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "Q8hgB8EEen80", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "Q8hgB8EEen80" - ], - "title": "Copy image reference to the clipboard", - "notePosition": 60, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Copy image reference to the cl.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "AwWq8bJRl6XD", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "AdNRgGrYeTCy", - "AwWq8bJRl6XD" - ], - "title": "Export diagram as SVG", - "notePosition": 70, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "OGYpAbrmEXbX", - "isInheritable": false, - "position": 10 - } - ], - "format": "markdown", - "dataFileName": "Export diagram as SVG.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "W0msUwLxm40d", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "W0msUwLxm40d" - ], - "title": "Printing", - "notePosition": 220, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Printing.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "Usiyzn9C4WFv", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "Usiyzn9C4WFv" - ], - "title": "Launchers", - "notePosition": 230, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Launchers.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "k7RavjuXQt8z", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "k7RavjuXQt8z" - ], - "title": "Syntax highlighting", - "notePosition": 240, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Syntax highlighting.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "UzRirf46Xi46", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "wbVIolLKDhe2", - "UzRirf46Xi46" - ], - "title": "Hidden notes", - "notePosition": 250, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Hidden notes.md", - "attachments": [] - } - ] - }, { "isClone": false, "noteId": "re0QTuqiYnVb", diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Copy image reference to the cl.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Copy image reference to the cl.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Copy image reference to the cl.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Copy image reference to the cl.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Export diagram as SVG.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Export diagram as SVG.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Export diagram as SVG.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Export diagram as SVG.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/First steps.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/First steps.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/First steps.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/First steps.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/First steps/mind_map.js b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/First steps/mind_map.js similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/First steps/mind_map.js rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/First steps/mind_map.js diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Loading data.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Loading data.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Loading data.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Loading data.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Note type checklist.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Note type checklist.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Note type checklist.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Note type checklist.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/SVG rendering.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/SVG rendering.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/SVG rendering.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/SVG rendering.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Saving data via spaced update.md b/docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Saving data via spaced update.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Adding a new note type/Saving data via spaced update.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Adding a new note type/Saving data via spaced update.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Backlinks.md b/docs/Developer Guide/Developer Guide/Development and architecture/Backlinks.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Backlinks.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Backlinks.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Branch prefixes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Branch prefixes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Branch prefixes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Branch prefixes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Build information.md b/docs/Developer Guide/Developer Guide/Development and architecture/Build information.md similarity index 80% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Build information.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Build information.md index bdc3399fe..475d902f5 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Build information.md +++ b/docs/Developer Guide/Developer Guide/Development and architecture/Build information.md @@ -1,4 +1,4 @@ # Build information * Provides context about when the build was made and the corresponding Git revision. * The information is displayed to the client when going in the about dialog. -* The build information is hard-coded in `src/services/build.ts`. This file is generated automatically via `npm run update-build-info` which itself is run automatically whenever making a build in the CI, or a [local delivery](../Build%20deliveries%20locally.md). \ No newline at end of file +* The build information is hard-coded in `src/services/build.ts`. This file is generated automatically via `npm run update-build-info` which itself is run automatically whenever making a build in the CI, or a [local delivery](../Old%20documentation/Build%20deliveries%20locally.md). \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/attachments.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/attachments.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/attachments.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/attachments.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/attributes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/attributes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/attributes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/attributes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/blobs.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/blobs.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/blobs.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/blobs.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/branches.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/branches.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/branches.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/branches.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/entity_changes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/entity_changes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/entity_changes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/entity_changes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/etapi_tokens.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/etapi_tokens.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/etapi_tokens.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/etapi_tokens.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/notes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/notes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/notes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/options.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/options.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/options.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/options.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/recent_notes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/recent_notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/recent_notes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/recent_notes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/revisions.md b/docs/Developer Guide/Developer Guide/Development and architecture/Database/revisions.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Database/revisions.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Database/revisions.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Deleted notes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Deleted notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Deleted notes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Deleted notes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Demo document.md b/docs/Developer Guide/Developer Guide/Development and architecture/Demo document.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Demo document.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Demo document.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Docker.md b/docs/Developer Guide/Developer Guide/Development and architecture/Docker.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Docker.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Docker.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Hidden notes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Hidden notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Hidden notes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Hidden notes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons.md b/docs/Developer Guide/Developer Guide/Development and architecture/Icons.md similarity index 61% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons.md index 4641a82d1..68d57f474 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons.md +++ b/docs/Developer Guide/Developer Guide/Development and architecture/Icons.md @@ -17,7 +17,7 @@ These are stored in `images`: ## App icons -
NameResolutionDescription
ios/apple-touch-icon.png180x180Used as apple-touch-icon, but only in login.ejs and set_password.ejs for some reason.
mac/icon.icns512x512Provided as --icon to electron-packager for mac-arm64 and mac-x64 builds.
png/128x128.png128x128Used in linux-x64 build, to provide an icon.png.
png/256x256-dev.png256x256Used by the Electron window icon, if in dev mode.
png/256x256.pngUsed by the Electron window icon, if not in dev mode.
win/icon.ico
  • ICO 16x16
  • ICO 32x32
  • ICO 48x48
  • ICO 64x64
  • ICO 128x128
  • PNG 256x256
  • Used by the win-x64 build.
  • Used by Squirrel Windows installer for: setup icon, app icon, control panel icon
  • Used as the favicon.
win/setup-banner.gif640x480Used by the Squirrel Windows installer during the installation process. Has only one frame.
+
NameResolutionDescription
ios/apple-touch-icon.png180x180Used as apple-touch-icon, but only in login.ejs and set_password.ejs for some reason.
mac/icon.icns512x512Provided as --icon to electron-packager for mac-arm64 and mac-x64 builds.
png/128x128.png128x128Used in linux-x64 build, to provide an icon.png.
png/256x256-dev.png256x256Used by the Electron window icon, if in dev mode.
png/256x256.pngUsed by the Electron window icon, if not in dev mode.
win/icon.ico
  • ICO 16x16
  • ICO 32x32
  • ICO 48x48
  • ICO 64x64
  • ICO 128x128
  • PNG 256x256
  • Used by the win-x64 build.
  • Used by Squirrel Windows installer for: setup icon, app icon, control panel icon
  • Used as the favicon.
win/setup-banner.gif640x480Used by the Squirrel Windows installer during the installation process. Has only one frame.
## Additional locations where the branding is used diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/1_Icons on Mac_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/1_Icons on Mac_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/1_Icons on Mac_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/1_Icons on Mac_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac.md b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/1_Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/1_Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/1_Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/1_Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/1_Slightly blurry icon on Ma.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/1_Slightly blurry icon on Ma.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/1_Slightly blurry icon on Ma.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/1_Slightly blurry icon on Ma.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/2_Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/2_Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/2_Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/2_Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/2_Slightly blurry icon on Ma.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/2_Slightly blurry icon on Ma.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/2_Slightly blurry icon on Ma.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/2_Slightly blurry icon on Ma.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/3_Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/3_Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/3_Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/3_Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/4_Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/4_Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/4_Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/4_Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/5_Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/5_Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/5_Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/5_Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/6_Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/6_Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/6_Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/6_Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Adaptive icon.md b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Adaptive icon.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Adaptive icon.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Adaptive icon.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Adaptive icon_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Adaptive icon_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Adaptive icon_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Adaptive icon_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Ma.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Ma.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Ma.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Ma.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Mac.md b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Mac.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Mac.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac/Slightly blurry icon on Mac.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac_image.png b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Icons on Mac_image.png rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Icons on Mac_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Removed icons.md b/docs/Developer Guide/Developer Guide/Development and architecture/Icons/Removed icons.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Icons/Removed icons.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Icons/Removed icons.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translat.md b/docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translat.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translat.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translat.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translations/Guidelines.md b/docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translations/Guidelines.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translations/Guidelines.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translations/Guidelines.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translations/Server translations.md b/docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translations/Server translations.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translations/Server translations.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translations/Server translations.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translations/i18n-ally.md b/docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translations/i18n-ally.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Internationalisation Translations/i18n-ally.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Internationalisation Translations/i18n-ally.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Launchers.md b/docs/Developer Guide/Developer Guide/Development and architecture/Launchers.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Launchers.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Launchers.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Live reload.md b/docs/Developer Guide/Developer Guide/Development and architecture/Live reload.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Live reload.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Live reload.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Note types.md b/docs/Developer Guide/Developer Guide/Development and architecture/Note types.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Note types.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Note types.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options.md b/docs/Developer Guide/Developer Guide/Development and architecture/Options.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Options.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Check box option.md b/docs/Developer Guide/Developer Guide/Development and architecture/Options/Check box option.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Check box option.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Options/Check box option.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Creating a new option.md b/docs/Developer Guide/Developer Guide/Development and architecture/Options/Creating a new option.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Creating a new option.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Options/Creating a new option.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Displaying the option in setti.md b/docs/Developer Guide/Developer Guide/Development and architecture/Options/Displaying the option in setti.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Displaying the option in setti.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Options/Displaying the option in setti.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Refresh widget with option cha.md b/docs/Developer Guide/Developer Guide/Development and architecture/Options/Refresh widget with option cha.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Refresh widget with option cha.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Options/Refresh widget with option cha.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Trigger UI refresh.md b/docs/Developer Guide/Developer Guide/Development and architecture/Options/Trigger UI refresh.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Options/Trigger UI refresh.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Options/Trigger UI refresh.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Printing.md b/docs/Developer Guide/Developer Guide/Development and architecture/Printing.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Printing.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Printing.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Protected entities.md b/docs/Developer Guide/Developer Guide/Development and architecture/Protected entities.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Protected entities.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Protected entities.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Revisions.md b/docs/Developer Guide/Developer Guide/Development and architecture/Revisions.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Revisions.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Revisions.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Safe mode.md b/docs/Developer Guide/Developer Guide/Development and architecture/Safe mode.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Safe mode.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Safe mode.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Special notes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Special notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Special notes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Special notes.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Synchronisation/Content hashing.md b/docs/Developer Guide/Developer Guide/Development and architecture/Synchronisation/Content hashing.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Synchronisation/Content hashing.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Synchronisation/Content hashing.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Syntax highlighting.md b/docs/Developer Guide/Developer Guide/Development and architecture/Syntax highlighting.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Syntax highlighting.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Syntax highlighting.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Themes.md b/docs/Developer Guide/Developer Guide/Development and architecture/Themes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Development and architecture/Themes.md rename to docs/Developer Guide/Developer Guide/Development and architecture/Themes.md From e90d4cf86f7236628eabe8fe86352f43e751824b Mon Sep 17 00:00:00 2001 From: Arne Keller Date: Tue, 17 Jun 2025 12:57:05 +0200 Subject: [PATCH 08/37] docs: add section on Nix flake --- docs/Developer Guide/!!!meta.json | 41 +++++++++- .../Building and deployment/Nix flake.md | 76 +++++++++++++++++++ 2 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 docs/Developer Guide/Developer Guide/Building and deployment/Nix flake.md diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index 96654d061..277572b7a 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -1720,6 +1720,45 @@ } ] }, + { + "isClone": false, + "noteId": "VHhyVRYK43gI", + "notePath": [ + "jdjRLhLV3TtI", + "VHhyVRYK43gI" + ], + "title": "Building and deployment", + "notePosition": 230, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Building and deployment", + "children": [ + { + "isClone": false, + "noteId": "Un4wj2Mak2Ky", + "notePath": [ + "jdjRLhLV3TtI", + "VHhyVRYK43gI", + "Un4wj2Mak2Ky" + ], + "title": "Nix flake", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Nix flake.md", + "attachments": [] + } + ] + }, { "isClone": false, "noteId": "ibAPHul7Efvr", @@ -1728,7 +1767,7 @@ "ibAPHul7Efvr" ], "title": "Old documentation", - "notePosition": 230, + "notePosition": 260, "prefix": null, "isExpanded": false, "type": "text", diff --git a/docs/Developer Guide/Developer Guide/Building and deployment/Nix flake.md b/docs/Developer Guide/Developer Guide/Building and deployment/Nix flake.md new file mode 100644 index 000000000..9268eed6e --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Building and deployment/Nix flake.md @@ -0,0 +1,76 @@ +# Nix flake +Since TriliumNext 0.94.1, the desktop and server applications can be built using [Nix](https://nixos.org/). + +## System requirements + +Installation of Nix on Mac or Linux ([download page](https://nixos.org/download/)). About 3-4 gigabytes of additional storage space, for build artifacts. + +## Run directly + +Using [nix run](https://nix.dev/manual/nix/stable/command-ref/new-cli/nix3-run.html), the desktop app can be started as: `nix run github:TriliumNext/Notes/v0.95.0` + +Running the server requires explicitly specifying the desired package: `nix run github:TriliumNext/Notes/v0.95.0#server` + +Instead of a version (`v0.95.0` above), you can also specify a commit hash (or a branch name). This makes it easy to test development builds. + +## Install on NixOS + +Add to your `flake.nix`: + +``` +{ + inputs = { + nixpkgs.url = # ...; + trilium-notes = { + url = "github:TriliumNext/Notes/v0.95.0"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = + { + self, + # ... + trilium-notes, + ... + }: + { + nixosConfigurations = { + "nixos" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + ]; + specialArgs = { + inherit + trilium-notes + ; + }; + }; + }; + }; +} + +``` + +Add to your `configuration.nix`: + +``` +{ + # ... + trilium-notes, + ... +}: + +{ + # ... + + services.trilium-server.package = trilium-notes.packages.x86_64-linux.server; + + environment.systemPackages = [ + trilium-notes.packages.x86_64-linux.desktop + ]; +} +``` + +The flake aims to be compatible with the latest NixOS stable and unstable. \ No newline at end of file From 6668e639d54ab7135a326e8a85f140f50a066cd1 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Tue, 17 Jun 2025 12:57:20 +0200 Subject: [PATCH 09/37] fix(website): proper favicon --- apps/website/static/favicon.png | Bin 1571 -> 40 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 120000 apps/website/static/favicon.png diff --git a/apps/website/static/favicon.png b/apps/website/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH Date: Tue, 17 Jun 2025 17:01:13 +0200 Subject: [PATCH 10/37] website: link to distribution packages --- apps/website/src/lib/download-helper.ts | 23 ++++++++++++++++++- .../src/routes/download/download-card.svelte | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/apps/website/src/lib/download-helper.ts b/apps/website/src/lib/download-helper.ts index 08f473ae3..8f19b7020 100644 --- a/apps/website/src/lib/download-helper.ts +++ b/apps/website/src/lib/download-helper.ts @@ -41,6 +41,14 @@ export const downloadMatrix: DownloadMatrix = { }, zip: { name: "Portable (.zip)" + }, + scoop: { + name: "Scoop", + url: "https://scoop.sh/#/apps?q=triliumnext" + }, + winget: { + name: "Winget", + url: "https://github.com/microsoft/winget-pkgs/tree/master/manifests/t/TriliumNext/Notes/" } } }, @@ -66,6 +74,14 @@ export const downloadMatrix: DownloadMatrix = { }, zip: { name: "Portable (.zip)" + }, + nixpkgs: { + name: "nixpkgs", + url: "https://search.nixos.org/packages?query=trilium-next" + }, + aur: { + name: "AUR", + url: "https://aur.archlinux.org/packages/triliumnext-bin" } } }, @@ -107,6 +123,10 @@ export const downloadMatrix: DownloadMatrix = { name: "ARM (.tar.xz)", url: `https://github.com/TriliumNext/Notes/releases/download/v${version}/TriliumNextNotes-Server-v${version}-linux-arm64.tar.xz` }, + nixos: { + name: "NixOS module", + url: "https://search.nixos.org/options?query=trilium-server" + } } }, pikapod: { @@ -129,7 +149,8 @@ export const downloadMatrix: DownloadMatrix = { export function buildDownloadUrl(app: App, platform: Platform, format: string, architecture: Architecture): string { if (app === "desktop") { - return `https://github.com/TriliumNext/Notes/releases/download/v${version}/TriliumNextNotes-v${version}-${platform}-${architecture}.${format}`; + return downloadMatrix.desktop[platform]?.downloads[format].url ?? + `https://github.com/TriliumNext/Notes/releases/download/v${version}/TriliumNextNotes-v${version}-${platform}-${architecture}.${format}`; } else if (app === "server") { return downloadMatrix.server[platform]?.downloads[format].url ?? "#"; } else { diff --git a/apps/website/src/routes/download/download-card.svelte b/apps/website/src/routes/download/download-card.svelte index c2423505d..6112c6c30 100644 --- a/apps/website/src/routes/download/download-card.svelte +++ b/apps/website/src/routes/download/download-card.svelte @@ -20,7 +20,7 @@ {recommended[1].name} {/if} -
+
{#each Object.entries(platform.downloads).filter((e) => !e[1].recommended) as [format, download]} {download.name} From 3c21d97a8a9c15cd0922e6a866e982f5404bf980 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Tue, 17 Jun 2025 17:01:13 +0200 Subject: [PATCH 11/37] fix(website): page titles --- apps/website/src/routes/+page.svelte | 7 +++++++ apps/website/src/routes/download/+page.svelte | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/apps/website/src/routes/+page.svelte b/apps/website/src/routes/+page.svelte index 47cf49540..fd531b845 100644 --- a/apps/website/src/routes/+page.svelte +++ b/apps/website/src/routes/+page.svelte @@ -2,6 +2,13 @@ import DownloadNow from "./download-now.svelte"; + + Trilium Notes + + +
diff --git a/apps/website/src/routes/download/+page.svelte b/apps/website/src/routes/download/+page.svelte index aea89d905..fe32d651c 100644 --- a/apps/website/src/routes/download/+page.svelte +++ b/apps/website/src/routes/download/+page.svelte @@ -7,6 +7,13 @@ let architecture = getArchitecture(); + + Trilium Notes: Download + + +

Download the desktop application

From d1583ca091b279ff4c20b6fae2ff0a814e6efc94 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Tue, 17 Jun 2025 17:01:13 +0200 Subject: [PATCH 12/37] fix(website): normal link styling --- apps/website/src/app.css | 8 ++++++++ apps/website/src/routes/+layout.svelte | 2 ++ 2 files changed, 10 insertions(+) diff --git a/apps/website/src/app.css b/apps/website/src/app.css index 1c4d2a8bc..e6f251501 100644 --- a/apps/website/src/app.css +++ b/apps/website/src/app.css @@ -1,2 +1,10 @@ @import 'tailwindcss'; @plugin '@tailwindcss/typography'; + +main a { + text-decoration: revert; +} + +a.rounded-full, a.rounded-xl { + text-decoration: none; +} diff --git a/apps/website/src/routes/+layout.svelte b/apps/website/src/routes/+layout.svelte index f8a8cea2e..f6ed20c4b 100644 --- a/apps/website/src/routes/+layout.svelte +++ b/apps/website/src/routes/+layout.svelte @@ -7,7 +7,9 @@
+
{@render children()} +
© 2024-2025 Elian Doran and the team.
© 2017-2024 Adam Zivner. From 2c3cbcb1f9c111df8c4eef3e0887ff74b0aa00ff Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Tue, 17 Jun 2025 17:01:13 +0200 Subject: [PATCH 13/37] website: refactor feature blocks, add more --- apps/website/src/routes/+page.svelte | 92 ++++++++++++-------- apps/website/src/routes/feature-block.svelte | 14 +++ 2 files changed, 71 insertions(+), 35 deletions(-) create mode 100644 apps/website/src/routes/feature-block.svelte diff --git a/apps/website/src/routes/+page.svelte b/apps/website/src/routes/+page.svelte index fd531b845..e8ff0e8b0 100644 --- a/apps/website/src/routes/+page.svelte +++ b/apps/website/src/routes/+page.svelte @@ -1,5 +1,6 @@ @@ -47,41 +48,65 @@

Beyond Text: Smarter Note Types

- -
- Canvas Note Screenshot -
-

Canvas Notes

-

Draw and arrange elements freely using an Excalidraw-powered canvas — ideal for diagrams, sketches, and visual planning.

-
-
+ - -
- Mermaid Diagram Screenshot -
-

Mermaid Diagrams

-

Render flowcharts, Gantt charts, and sequence diagrams with Mermaid markdown syntax directly in your notes.

-
-
+ - -
- Geo Map Screenshot -
-

Geo Maps

-

Plot locations and GPX tracks to visualize geography-linked notes and movement patterns on interactive maps.

-
-
+ - -
- Mind Map Screenshot -
-

Mind Maps

-

Organize ideas visually using a drag-and-drop mind map editor powered by Mind Elixir.

-
-
+ +
+ +

Technical Features

+ +
+ + + + + + +
@@ -116,7 +141,6 @@

Security & Sync

  • Direct OpenID and TOTP integration for secure login.
  • -
  • Synchronization with self-hosted and third-party servers.
  • Strong note encryption with per-note granularity.
  • Sharing notes publicly on the internet.
@@ -127,10 +151,8 @@

Advanced & Customization

  • Relation maps and link maps to visualize notes.
  • -
  • Scripting support and REST API for automation.
  • Touch-optimized mobile frontend and dark/user themes.
  • Customizable UI with sidebar buttons and user widgets.
  • -
  • Metrics with Grafana dashboard integration.
  • Scales efficiently beyond 100,000 notes.
diff --git a/apps/website/src/routes/feature-block.svelte b/apps/website/src/routes/feature-block.svelte new file mode 100644 index 000000000..0a48212a4 --- /dev/null +++ b/apps/website/src/routes/feature-block.svelte @@ -0,0 +1,14 @@ + + +
+ {imgAlt} +
+

{title}

+

{text}

+
+
\ No newline at end of file From f9ecfd1ad0fc1ee3319f89e8dc416b0ce6b117d8 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Tue, 17 Jun 2025 17:01:13 +0200 Subject: [PATCH 14/37] feat(website): dark mode --- apps/website/src/app.html | 2 +- apps/website/src/routes/+layout.svelte | 8 ++++++-- apps/website/src/routes/+page.svelte | 15 ++++++++------- apps/website/src/routes/download/+page.svelte | 12 ++++++------ .../src/routes/download/download-card.svelte | 4 ++-- apps/website/src/routes/feature-block.svelte | 4 ++-- apps/website/src/routes/header.svelte | 2 +- 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/apps/website/src/app.html b/apps/website/src/app.html index 16ef9cc59..7539873b8 100644 --- a/apps/website/src/app.html +++ b/apps/website/src/app.html @@ -7,6 +7,6 @@ %sveltekit.head% -
%sveltekit.body%
+ %sveltekit.body% diff --git a/apps/website/src/routes/+layout.svelte b/apps/website/src/routes/+layout.svelte index f6ed20c4b..18fe9f546 100644 --- a/apps/website/src/routes/+layout.svelte +++ b/apps/website/src/routes/+layout.svelte @@ -5,12 +5,16 @@ let { children } = $props(); + +
{@render children()}
- + + \ No newline at end of file diff --git a/apps/website/src/routes/+page.svelte b/apps/website/src/routes/+page.svelte index e8ff0e8b0..f1669fed1 100644 --- a/apps/website/src/routes/+page.svelte +++ b/apps/website/src/routes/+page.svelte @@ -10,7 +10,7 @@ --> -
+
@@ -23,10 +23,11 @@
-

Organize Your Thoughts.
Build Your Knowledge.

-

+

Organize Your Thoughts.
Build Your Knowledge.

+

Trilium Notes helps you build and organize complex personal knowledge bases effortlessly. Its unique tree structure, rich editing tools, and powerful search features make managing your information intuitive and flexible. +

@@ -113,7 +114,7 @@

Feature Highlights

-
+

Organization & Navigation

@@ -160,13 +161,13 @@
-
+

Ready to get started with Trilium Notes?

-

Build your personal knowledge base with powerful features and full privacy.

+

Build your personal knowledge base with powerful features and full privacy.

diff --git a/apps/website/src/routes/download/+page.svelte b/apps/website/src/routes/download/+page.svelte index fe32d651c..44ae25f7a 100644 --- a/apps/website/src/routes/download/+page.svelte +++ b/apps/website/src/routes/download/+page.svelte @@ -14,13 +14,13 @@ --> -
+
-

Download the desktop application

+

Download the desktop application

- Architecture: + Architecture:
{#each architectures as arch}
+ +
diff --git a/apps/website/static/technical-features/grafana-metrics.png b/apps/website/static/technical-features/grafana-metrics.png new file mode 120000 index 000000000..1dd11db67 --- /dev/null +++ b/apps/website/static/technical-features/grafana-metrics.png @@ -0,0 +1 @@ +../../../../docs/User Guide/User Guide/Advanced Usage/1_Metrics_image.png \ No newline at end of file From af8a9051507391231d566fab5545e8de41b6826a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 13:34:17 +0300 Subject: [PATCH 16/37] feat(text-snippets): basic integration --- .../widgets/type_widgets/ckeditor/config.ts | 6 +++++- .../widgets/type_widgets/ckeditor/snippets.ts | 19 +++++++++++++++++++ .../src/widgets/type_widgets/editable_text.ts | 2 +- packages/ckeditor5/src/index.ts | 1 + packages/ckeditor5/src/plugins.ts | 5 +++-- 5 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 apps/client/src/widgets/type_widgets/ckeditor/snippets.ts diff --git a/apps/client/src/widgets/type_widgets/ckeditor/config.ts b/apps/client/src/widgets/type_widgets/ckeditor/config.ts index 39b3261b3..0cf6b88ce 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/config.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/config.ts @@ -7,13 +7,14 @@ import { ensureMimeTypesForHighlighting, isSyntaxHighlightEnabled } from "../../ import utils from "../../../services/utils.js"; import emojiDefinitionsUrl from "@triliumnext/ckeditor5/emoji_definitions/en.json?url"; import { copyTextWithToast } from "../../../services/clipboard_ext.js"; +import getTemplates from "./snippets.js"; const TEXT_FORMATTING_GROUP = { label: "Text formatting", icon: "text" }; -export function buildConfig(): EditorConfig { +export async function buildConfig(): Promise { return { image: { styles: { @@ -126,6 +127,9 @@ export function buildConfig(): EditorConfig { dropdownLimit: Number.MAX_SAFE_INTEGER, extraCommands: buildExtraCommands() }, + template: { + definitions: await getTemplates() + }, // This value must be kept in sync with the language defined in webpack.config.js. language: "en" }; diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts new file mode 100644 index 000000000..31be5ae24 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -0,0 +1,19 @@ +import search from "../../../services/search"; +import type { TemplateDefinition } from "@triliumnext/ckeditor5"; + +/** + * Generates the list of snippets based on the user's notes to be passed down to the CKEditor configuration. + * + * @returns the list of templates. + */ +export default async function getTemplates() { + const definitions: TemplateDefinition[] = []; + const snippets = await search.searchForNotes("#textSnippet"); + for (const snippet of snippets) { + definitions.push({ + title: snippet.title, + data: await snippet.getContent() ?? "" + }) + } + return definitions; +} diff --git a/apps/client/src/widgets/type_widgets/editable_text.ts b/apps/client/src/widgets/type_widgets/editable_text.ts index 329e59824..7a48e81ef 100644 --- a/apps/client/src/widgets/type_widgets/editable_text.ts +++ b/apps/client/src/widgets/type_widgets/editable_text.ts @@ -193,7 +193,7 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { const finalConfig = { ...editorConfig, - ...buildConfig(), + ...(await buildConfig()), ...buildToolbarConfig(isClassicEditor), htmlSupport: { allow: JSON.parse(options.get("allowedHtmlTags")), diff --git a/packages/ckeditor5/src/index.ts b/packages/ckeditor5/src/index.ts index 0ddd55d60..4144754a5 100644 --- a/packages/ckeditor5/src/index.ts +++ b/packages/ckeditor5/src/index.ts @@ -4,6 +4,7 @@ import { COMMON_PLUGINS, CORE_PLUGINS, POPUP_EDITOR_PLUGINS } from "./plugins"; import { BalloonEditor, DecoupledEditor, FindAndReplaceEditing, FindCommand } from "ckeditor5"; export { EditorWatchdog } from "ckeditor5"; export type { EditorConfig, MentionFeed, MentionFeedObjectItem, Node, Position, Element, WatchdogConfig } from "ckeditor5"; +export type { TemplateDefinition } from "ckeditor5-premium-features"; export { default as buildExtraCommands } from "./extra_slash_commands.js"; // Import with sideffects to ensure that type augmentations are present. diff --git a/packages/ckeditor5/src/plugins.ts b/packages/ckeditor5/src/plugins.ts index 391932c5e..1911c9e64 100644 --- a/packages/ckeditor5/src/plugins.ts +++ b/packages/ckeditor5/src/plugins.ts @@ -1,5 +1,5 @@ import { Autoformat, AutoLink, BlockQuote, BlockToolbar, Bold, CKFinderUploadAdapter, Clipboard, Code, CodeBlock, Enter, FindAndReplace, Font, FontBackgroundColor, FontColor, GeneralHtmlSupport, Heading, HeadingButtonsUI, HorizontalLine, Image, ImageCaption, ImageInline, ImageResize, ImageStyle, ImageToolbar, ImageUpload, Alignment, Indent, IndentBlock, Italic, Link, List, ListProperties, Mention, PageBreak, Paragraph, ParagraphButtonUI, PasteFromOffice, PictureEditing, RemoveFormat, SelectAll, ShiftEnter, SpecialCharacters, SpecialCharactersEssentials, Strikethrough, Style, Subscript, Superscript, Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableSelection, TableToolbar, TextPartLanguage, TextTransformation, TodoList, Typing, Underline, Undo, Bookmark, Emoji } from "ckeditor5"; -import { SlashCommand } from "ckeditor5-premium-features"; +import { SlashCommand, Template } from "ckeditor5-premium-features"; import type { Plugin } from "ckeditor5"; import CutToNotePlugin from "./plugins/cuttonote.js"; import UploadimagePlugin from "./plugins/uploadimage.js"; @@ -82,7 +82,8 @@ export const CORE_PLUGINS: typeof Plugin[] = [ * Plugins that require a premium CKEditor license key to work. */ export const PREMIUM_PLUGINS: typeof Plugin[] = [ - SlashCommand + SlashCommand, + Template ]; /** From 502638bae78eef94a228cf6096c6084953b3b23a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 13:39:17 +0300 Subject: [PATCH 17/37] feat(text-snippets): add toolbar entry --- apps/client/src/widgets/type_widgets/ckeditor/config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/config.ts b/apps/client/src/widgets/type_widgets/ckeditor/config.ts index 0cf6b88ce..03bd5fc07 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/config.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/config.ts @@ -210,6 +210,7 @@ export function buildClassicToolbar(multilineToolbar: boolean) { "outdent", "indent", "|", + "insertTemplate", "markdownImport", "cuttonote", "findAndReplace" @@ -266,6 +267,7 @@ export function buildFloatingToolbar() { "outdent", "indent", "|", + "insertTemplate", "imageUpload", "markdownImport", "specialCharacters", From 17ede00fb2e3ef24a9dc754ac30efd88e388f5b1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 13:56:29 +0300 Subject: [PATCH 18/37] feat(text-snippets): reload editors when templates change --- .../src/widgets/type_widgets/editable_text.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/editable_text.ts b/apps/client/src/widgets/type_widgets/editable_text.ts index 7a48e81ef..aa7902776 100644 --- a/apps/client/src/widgets/type_widgets/editable_text.ts +++ b/apps/client/src/widgets/type_widgets/editable_text.ts @@ -326,7 +326,7 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { const data = blob?.content || ""; const newContentLanguage = this.note?.getLabelValue("language"); if (this.contentLanguage !== newContentLanguage) { - await this.reinitialize(data); + await this.reinitializeWithData(data); } else { this.watchdog.editor?.setData(data); } @@ -562,7 +562,7 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { this.refreshIncludedNote(this.$editor, noteId); } - async reinitialize(data: string) { + async reinitializeWithData(data: string) { if (!this.watchdog) { return; } @@ -572,9 +572,23 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { this.watchdog.editor?.setData(data); } - async onLanguageChanged() { + async reinitialize() { const data = this.watchdog.editor?.getData(); - await this.reinitialize(data ?? ""); + await this.reinitializeWithData(data ?? ""); + } + + async onLanguageChanged() { + await this.reinitialize(); + } + + async entitiesReloadedEvent(e: EventData<"entitiesReloaded">) { + await super.entitiesReloadedEvent(e); + + if (e.loadResults.getAttributeRows().find((attr) => + attr.type === "label" && + attr.name === "textSnippet")) { + await this.reinitialize(); + } } buildTouchBarCommand(data: CommandListenerData<"buildTouchBar">) { From 421e12588241da0d80e496a29a8d06f998e70c2d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 16:36:05 +0300 Subject: [PATCH 19/37] feat(text-snippets): handle content changes --- .../widgets/type_widgets/ckeditor/snippets.ts | 43 +++++++++++++++++-- .../src/widgets/type_widgets/editable_text.ts | 5 +-- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index 31be5ae24..9072194a5 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -1,19 +1,56 @@ -import search from "../../../services/search"; +import froca from "../../../services/froca.js"; +import type LoadResults from "../../../services/load_results.js"; +import search from "../../../services/search.js"; import type { TemplateDefinition } from "@triliumnext/ckeditor5"; +let templateCache: Record = {}; + /** * Generates the list of snippets based on the user's notes to be passed down to the CKEditor configuration. * * @returns the list of templates. */ export default async function getTemplates() { - const definitions: TemplateDefinition[] = []; + // Build the definitions and populate the cache. const snippets = await search.searchForNotes("#textSnippet"); + const definitions: TemplateDefinition[] = []; for (const snippet of snippets) { + templateCache[snippet.noteId] = await (snippet.getContent()) ?? ""; + definitions.push({ title: snippet.title, - data: await snippet.getContent() ?? "" + data: () => templateCache[snippet.noteId] }) } return definitions; } + +async function handleUpdate(affectedNoteIds: string[]) { + const updatedNoteIds = new Set(affectedNoteIds); + const templateNoteIds = new Set(Object.keys(templateCache)); + const affectedTemplateNoteIds = templateNoteIds.intersection(updatedNoteIds); + + console.log("Got ", affectedTemplateNoteIds); + + await froca.getNotes(affectedNoteIds); + + for (const affectedTemplateNoteId of affectedTemplateNoteIds) { + const template = await froca.getNote(affectedTemplateNoteId); + if (!template) { + console.warn("Unable to obtain template with ID ", affectedTemplateNoteId); + continue; + } + + templateCache[affectedTemplateNoteId] = await template.getContent() ?? ""; + } +} + +export function updateTemplateCache(loadResults: LoadResults): boolean { + const affectedNoteIds = loadResults.getNoteIds(); + if (affectedNoteIds.length > 0) { + handleUpdate(affectedNoteIds); + } + + + return false; +} diff --git a/apps/client/src/widgets/type_widgets/editable_text.ts b/apps/client/src/widgets/type_widgets/editable_text.ts index aa7902776..824b5c320 100644 --- a/apps/client/src/widgets/type_widgets/editable_text.ts +++ b/apps/client/src/widgets/type_widgets/editable_text.ts @@ -18,6 +18,7 @@ import { getMermaidConfig } from "../../services/mermaid.js"; import { PopupEditor, ClassicEditor, EditorWatchdog, type CKTextEditor, type MentionFeed, type WatchdogConfig } from "@triliumnext/ckeditor5"; import "@triliumnext/ckeditor5/index.css"; import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons"; +import { updateTemplateCache } from "./ckeditor/snippets.js"; const mentionSetup: MentionFeed[] = [ { @@ -584,9 +585,7 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { async entitiesReloadedEvent(e: EventData<"entitiesReloaded">) { await super.entitiesReloadedEvent(e); - if (e.loadResults.getAttributeRows().find((attr) => - attr.type === "label" && - attr.name === "textSnippet")) { + if (updateTemplateCache(e.loadResults)) { await this.reinitialize(); } } From 9f82e0a6d6e6ea3e375fd03a0d38082847806553 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 16:48:30 +0300 Subject: [PATCH 20/37] refactor(text-snippets): use a map instead of an object --- .../src/widgets/type_widgets/ckeditor/snippets.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index 9072194a5..a24aefaf8 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -3,7 +3,7 @@ import type LoadResults from "../../../services/load_results.js"; import search from "../../../services/search.js"; import type { TemplateDefinition } from "@triliumnext/ckeditor5"; -let templateCache: Record = {}; +let templateCache: Map = new Map(); /** * Generates the list of snippets based on the user's notes to be passed down to the CKEditor configuration. @@ -15,11 +15,11 @@ export default async function getTemplates() { const snippets = await search.searchForNotes("#textSnippet"); const definitions: TemplateDefinition[] = []; for (const snippet of snippets) { - templateCache[snippet.noteId] = await (snippet.getContent()) ?? ""; + templateCache.set(snippet.noteId, await snippet.getContent()); definitions.push({ title: snippet.title, - data: () => templateCache[snippet.noteId] + data: () => templateCache.get(snippet.noteId) ?? "" }) } return definitions; @@ -27,7 +27,7 @@ export default async function getTemplates() { async function handleUpdate(affectedNoteIds: string[]) { const updatedNoteIds = new Set(affectedNoteIds); - const templateNoteIds = new Set(Object.keys(templateCache)); + const templateNoteIds = new Set(templateCache.keys()); const affectedTemplateNoteIds = templateNoteIds.intersection(updatedNoteIds); console.log("Got ", affectedTemplateNoteIds); @@ -41,7 +41,7 @@ async function handleUpdate(affectedNoteIds: string[]) { continue; } - templateCache[affectedTemplateNoteId] = await template.getContent() ?? ""; + templateCache.set(affectedTemplateNoteId, await template.getContent()); } } From fb1a74a96d42a5f5cc7a58e2af0849bed12471c9 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 16:51:27 +0300 Subject: [PATCH 21/37] feat(text-snippets): debounce updates to avoid duplication --- apps/client/src/widgets/type_widgets/ckeditor/snippets.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index a24aefaf8..72a769015 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -1,9 +1,11 @@ +import debounce from "debounce"; import froca from "../../../services/froca.js"; import type LoadResults from "../../../services/load_results.js"; import search from "../../../services/search.js"; import type { TemplateDefinition } from "@triliumnext/ckeditor5"; let templateCache: Map = new Map(); +const debouncedHandleUpdate = debounce(handleUpdate, 1000); /** * Generates the list of snippets based on the user's notes to be passed down to the CKEditor configuration. @@ -48,7 +50,7 @@ async function handleUpdate(affectedNoteIds: string[]) { export function updateTemplateCache(loadResults: LoadResults): boolean { const affectedNoteIds = loadResults.getNoteIds(); if (affectedNoteIds.length > 0) { - handleUpdate(affectedNoteIds); + debouncedHandleUpdate(affectedNoteIds); } From 97799bfaccdc6e0deb6d9e7472fb6feee7699bc8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 17:03:23 +0300 Subject: [PATCH 22/37] feat(text-snippets): handle renames by refreshing the editor --- apps/client/src/components/app_context.ts | 1 + .../widgets/type_widgets/ckeditor/snippets.ts | 38 +++++++++++++++---- .../src/widgets/type_widgets/editable_text.ts | 4 ++ 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index 3c7873e8b..0cf5058ed 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -281,6 +281,7 @@ export type CommandMappings = { buildIcon(name: string): NativeImage; }; refreshTouchBar: CommandData; + reloadTextEditor: CommandData; }; type EventMappings = { diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index 72a769015..f2f747004 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -3,9 +3,15 @@ import froca from "../../../services/froca.js"; import type LoadResults from "../../../services/load_results.js"; import search from "../../../services/search.js"; import type { TemplateDefinition } from "@triliumnext/ckeditor5"; +import appContext from "../../../components/app_context.js"; -let templateCache: Map = new Map(); -const debouncedHandleUpdate = debounce(handleUpdate, 1000); +interface TemplateData { + title: string; + content: string | undefined; +} + +let templateCache: Map = new Map(); +const debouncedHandleContentUpdate = debounce(handleContentUpdate, 1000); /** * Generates the list of snippets based on the user's notes to be passed down to the CKEditor configuration. @@ -17,17 +23,20 @@ export default async function getTemplates() { const snippets = await search.searchForNotes("#textSnippet"); const definitions: TemplateDefinition[] = []; for (const snippet of snippets) { - templateCache.set(snippet.noteId, await snippet.getContent()); + templateCache.set(snippet.noteId, { + title: snippet.title, + content: await snippet.getContent() + }); definitions.push({ title: snippet.title, - data: () => templateCache.get(snippet.noteId) ?? "" + data: () => templateCache.get(snippet.noteId)?.content ?? "" }) } return definitions; } -async function handleUpdate(affectedNoteIds: string[]) { +async function handleContentUpdate(affectedNoteIds: string[]) { const updatedNoteIds = new Set(affectedNoteIds); const templateNoteIds = new Set(templateCache.keys()); const affectedTemplateNoteIds = templateNoteIds.intersection(updatedNoteIds); @@ -36,6 +45,7 @@ async function handleUpdate(affectedNoteIds: string[]) { await froca.getNotes(affectedNoteIds); + let fullReloadNeeded = false; for (const affectedTemplateNoteId of affectedTemplateNoteIds) { const template = await froca.getNote(affectedTemplateNoteId); if (!template) { @@ -43,14 +53,28 @@ async function handleUpdate(affectedNoteIds: string[]) { continue; } - templateCache.set(affectedTemplateNoteId, await template.getContent()); + const newTitle = template.title; + if (templateCache.get(affectedTemplateNoteId)?.title !== newTitle) { + fullReloadNeeded = true; + break; + } + + templateCache.set(affectedTemplateNoteId, { + title: template.title, + content: await template.getContent() + }); + } + + if (fullReloadNeeded) { + console.warn("Full text editor reload needed"); + appContext.triggerCommand("reloadTextEditor"); } } export function updateTemplateCache(loadResults: LoadResults): boolean { const affectedNoteIds = loadResults.getNoteIds(); if (affectedNoteIds.length > 0) { - debouncedHandleUpdate(affectedNoteIds); + debouncedHandleContentUpdate(affectedNoteIds); } diff --git a/apps/client/src/widgets/type_widgets/editable_text.ts b/apps/client/src/widgets/type_widgets/editable_text.ts index 824b5c320..28094f2a2 100644 --- a/apps/client/src/widgets/type_widgets/editable_text.ts +++ b/apps/client/src/widgets/type_widgets/editable_text.ts @@ -578,6 +578,10 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget { await this.reinitializeWithData(data ?? ""); } + async reloadTextEditorEvent() { + await this.reinitialize(); + } + async onLanguageChanged() { await this.reinitialize(); } From 3e40a35c1948649125c2e85a37138ada229fa12e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 17:13:11 +0300 Subject: [PATCH 23/37] feat(text-snippets): reload when a new template is added --- .../src/widgets/type_widgets/ckeditor/snippets.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index f2f747004..2aac02c75 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -36,6 +36,11 @@ export default async function getTemplates() { return definitions; } +function handleFullReload() { + console.warn("Full text editor reload needed"); + appContext.triggerCommand("reloadTextEditor"); +} + async function handleContentUpdate(affectedNoteIds: string[]) { const updatedNoteIds = new Set(affectedNoteIds); const templateNoteIds = new Set(templateCache.keys()); @@ -66,8 +71,7 @@ async function handleContentUpdate(affectedNoteIds: string[]) { } if (fullReloadNeeded) { - console.warn("Full text editor reload needed"); - appContext.triggerCommand("reloadTextEditor"); + handleFullReload(); } } @@ -77,6 +81,11 @@ export function updateTemplateCache(loadResults: LoadResults): boolean { debouncedHandleContentUpdate(affectedNoteIds); } + if (loadResults.getAttributeRows().find((attr) => + attr.type === "label" && + attr.name === "textSnippet")) { + handleFullReload(); + } return false; } From 4f9bd970afd525fde9a71e216ca4d5e7b9d96180 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 17:19:50 +0300 Subject: [PATCH 24/37] feat(text-snippets): better reaction to removing templates --- .../widgets/type_widgets/ckeditor/snippets.ts | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index 2aac02c75..2c0870c60 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -46,28 +46,31 @@ async function handleContentUpdate(affectedNoteIds: string[]) { const templateNoteIds = new Set(templateCache.keys()); const affectedTemplateNoteIds = templateNoteIds.intersection(updatedNoteIds); - console.log("Got ", affectedTemplateNoteIds); - await froca.getNotes(affectedNoteIds); let fullReloadNeeded = false; for (const affectedTemplateNoteId of affectedTemplateNoteIds) { - const template = await froca.getNote(affectedTemplateNoteId); - if (!template) { - console.warn("Unable to obtain template with ID ", affectedTemplateNoteId); - continue; - } + try { + const template = await froca.getNote(affectedTemplateNoteId); + if (!template) { + console.warn("Unable to obtain template with ID ", affectedTemplateNoteId); + continue; + } - const newTitle = template.title; - if (templateCache.get(affectedTemplateNoteId)?.title !== newTitle) { + const newTitle = template.title; + if (templateCache.get(affectedTemplateNoteId)?.title !== newTitle) { + fullReloadNeeded = true; + break; + } + + templateCache.set(affectedTemplateNoteId, { + title: template.title, + content: await template.getContent() + }); + } catch (e) { + // If a note was not found while updating the cache, it means we need to do a full reload. fullReloadNeeded = true; - break; } - - templateCache.set(affectedTemplateNoteId, { - title: template.title, - content: await template.getContent() - }); } if (fullReloadNeeded) { @@ -77,14 +80,15 @@ async function handleContentUpdate(affectedNoteIds: string[]) { export function updateTemplateCache(loadResults: LoadResults): boolean { const affectedNoteIds = loadResults.getNoteIds(); - if (affectedNoteIds.length > 0) { - debouncedHandleContentUpdate(affectedNoteIds); - } + // React to creation or deletion of text snippets. if (loadResults.getAttributeRows().find((attr) => attr.type === "label" && attr.name === "textSnippet")) { handleFullReload(); + } else if (affectedNoteIds.length > 0) { + // Update content and titles if one of the template notes were updated. + debouncedHandleContentUpdate(affectedNoteIds); } return false; From 59e0857bb5b40e48cc27744a73a582f80cb390a9 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 17:32:28 +0300 Subject: [PATCH 25/37] feat(text-snippets): add default icon for templates --- apps/client/src/types-assets.d.ts | 5 +++++ apps/client/src/widgets/type_widgets/ckeditor/snippets.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/client/src/types-assets.d.ts b/apps/client/src/types-assets.d.ts index 010ec6b44..e80532517 100644 --- a/apps/client/src/types-assets.d.ts +++ b/apps/client/src/types-assets.d.ts @@ -8,4 +8,9 @@ declare module "*?url" { export default path; } +declare module "*?raw" { + var content: string; + export default content; +} + declare module "boxicons/css/boxicons.min.css" { } diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index 2c0870c60..74cf2b0fd 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -4,6 +4,7 @@ import type LoadResults from "../../../services/load_results.js"; import search from "../../../services/search.js"; import type { TemplateDefinition } from "@triliumnext/ckeditor5"; import appContext from "../../../components/app_context.js"; +import TemplateIcon from "@ckeditor/ckeditor5-icons/theme/icons/template.svg?raw"; interface TemplateData { title: string; @@ -30,7 +31,8 @@ export default async function getTemplates() { definitions.push({ title: snippet.title, - data: () => templateCache.get(snippet.noteId)?.content ?? "" + data: () => templateCache.get(snippet.noteId)?.content ?? "", + icon: TemplateIcon }) } return definitions; From 7e399cc10c31808406fc5f2563e5340581a39447 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 17:41:12 +0300 Subject: [PATCH 26/37] feat(text-snippets): support description --- .../widgets/type_widgets/ckeditor/snippets.ts | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts index 74cf2b0fd..b2d99cfd6 100644 --- a/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts +++ b/apps/client/src/widgets/type_widgets/ckeditor/snippets.ts @@ -5,10 +5,12 @@ import search from "../../../services/search.js"; import type { TemplateDefinition } from "@triliumnext/ckeditor5"; import appContext from "../../../components/app_context.js"; import TemplateIcon from "@ckeditor/ckeditor5-icons/theme/icons/template.svg?raw"; +import type FNote from "../../../entities/fnote.js"; interface TemplateData { title: string; - content: string | undefined; + description?: string; + content?: string; } let templateCache: Map = new Map(); @@ -24,20 +26,29 @@ export default async function getTemplates() { const snippets = await search.searchForNotes("#textSnippet"); const definitions: TemplateDefinition[] = []; for (const snippet of snippets) { - templateCache.set(snippet.noteId, { - title: snippet.title, - content: await snippet.getContent() - }); + const { description } = await invalidateCacheFor(snippet); definitions.push({ title: snippet.title, data: () => templateCache.get(snippet.noteId)?.content ?? "", - icon: TemplateIcon - }) + icon: TemplateIcon, + description + }); } return definitions; } +async function invalidateCacheFor(snippet: FNote) { + const description = snippet.getLabelValue("textSnippetDescription"); + const data: TemplateData = { + title: snippet.title, + description: description ?? undefined, + content: await snippet.getContent() + }; + templateCache.set(snippet.noteId, data); + return data; +} + function handleFullReload() { console.warn("Full text editor reload needed"); appContext.triggerCommand("reloadTextEditor"); @@ -65,10 +76,7 @@ async function handleContentUpdate(affectedNoteIds: string[]) { break; } - templateCache.set(affectedTemplateNoteId, { - title: template.title, - content: await template.getContent() - }); + await invalidateCacheFor(template); } catch (e) { // If a note was not found while updating the cache, it means we need to do a full reload. fullReloadNeeded = true; @@ -86,7 +94,7 @@ export function updateTemplateCache(loadResults: LoadResults): boolean { // React to creation or deletion of text snippets. if (loadResults.getAttributeRows().find((attr) => attr.type === "label" && - attr.name === "textSnippet")) { + (attr.name === "textSnippet" || attr.name === "textSnippetDescription"))) { handleFullReload(); } else if (affectedNoteIds.length > 0) { // Update content and titles if one of the template notes were updated. From fa112956933b44e4f401862e8cc618c2233bf035 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 18:36:20 +0300 Subject: [PATCH 27/37] feat(templates): add support for built-in templates --- apps/client/src/services/note_types.ts | 30 +++++++++++++++++++ apps/server/src/services/hidden_subtree.ts | 4 ++- .../src/services/hidden_subtree_templates.ts | 28 +++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 apps/server/src/services/hidden_subtree_templates.ts diff --git a/apps/client/src/services/note_types.ts b/apps/client/src/services/note_types.ts index 4de0bd8bf..b8d057869 100644 --- a/apps/client/src/services/note_types.ts +++ b/apps/client/src/services/note_types.ts @@ -4,6 +4,8 @@ import { t } from "./i18n.js"; import type { MenuItem } from "../menus/context_menu.js"; import type { TreeCommandNames } from "../menus/tree_context_menu.js"; +const SEPARATOR = { title: "----" }; + async function getNoteTypeItems(command?: TreeCommandNames) { const items: MenuItem[] = [ { title: t("note_types.text"), command, type: "text", uiIcon: "bx bx-note" }, @@ -18,6 +20,7 @@ async function getNoteTypeItems(command?: TreeCommandNames) { { title: t("note_types.web-view"), command, type: "webView", uiIcon: "bx bx-globe-alt" }, { title: t("note_types.mind-map"), command, type: "mindMap", uiIcon: "bx bx-sitemap" }, { title: t("note_types.geo-map"), command, type: "geoMap", uiIcon: "bx bx-map-alt" }, + ...await getBuiltInTemplates(command) ]; const templateNoteIds = await server.get("search-templates"); @@ -40,6 +43,33 @@ async function getNoteTypeItems(command?: TreeCommandNames) { return items; } +async function getBuiltInTemplates(command?: TreeCommandNames) { + const templatesRoot = await froca.getNote("_templates"); + if (!templatesRoot) { + console.warn("Unable to find template root."); + return []; + } + + const childNotes = await templatesRoot.getChildNotes(); + if (childNotes.length === 0) { + return []; + } + + const items: MenuItem[] = [ + SEPARATOR + ]; + for (const templateNote of childNotes) { + items.push({ + title: templateNote.title, + uiIcon: templateNote.getIcon(), + command: command, + type: templateNote.type, + templateNoteId: templateNote.noteId + }); + } + return items; +} + export default { getNoteTypeItems }; diff --git a/apps/server/src/services/hidden_subtree.ts b/apps/server/src/services/hidden_subtree.ts index 02c7b90f0..6ba0d965b 100644 --- a/apps/server/src/services/hidden_subtree.ts +++ b/apps/server/src/services/hidden_subtree.ts @@ -8,6 +8,7 @@ import migrationService from "./migration.js"; import { t } from "i18next"; import { cleanUpHelp, getHelpHiddenSubtreeData } from "./in_app_help.js"; import buildLaunchBarConfig from "./hidden_subtree_launcherbar.js"; +import buildHiddenSubtreeTemplates from "./hidden_subtree_templates.js"; const LBTPL_ROOT = "_lbTplRoot"; const LBTPL_BASE = "_lbTplBase"; @@ -257,7 +258,8 @@ function buildHiddenSubtreeDefinition(helpSubtree: HiddenSubtreeItem[]): HiddenS icon: "bx-help-circle", children: helpSubtree, isExpanded: true - } + }, + buildHiddenSubtreeTemplates() ] }; } diff --git a/apps/server/src/services/hidden_subtree_templates.ts b/apps/server/src/services/hidden_subtree_templates.ts new file mode 100644 index 000000000..8e4a628a4 --- /dev/null +++ b/apps/server/src/services/hidden_subtree_templates.ts @@ -0,0 +1,28 @@ +import { HiddenSubtreeItem } from "@triliumnext/commons"; + +export default function buildHiddenSubtreeTemplates() { + const templates: HiddenSubtreeItem = { + id: "_templates", + title: "Built-in templates", + type: "book", + children: [ + { + id: "_template_text_snippet", + type: "text", + title: "Text Snippet", + attributes: [ + { + name: "template", + type: "label" + }, + { + name: "textSnippet", + type: "label" + } + ] + } + ] + }; + + return templates; +} From 9687a9d8ff3e57456d000f2831fb854390e034e4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 18:39:37 +0300 Subject: [PATCH 28/37] refactor(note_types): separate user templates into own method --- apps/client/src/services/froca.ts | 4 +++ apps/client/src/services/note_types.ts | 34 +++++++++++++++----------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/apps/client/src/services/froca.ts b/apps/client/src/services/froca.ts index 131cec06f..6bbc3a50d 100644 --- a/apps/client/src/services/froca.ts +++ b/apps/client/src/services/froca.ts @@ -245,6 +245,10 @@ class FrocaImpl implements Froca { } async getNotes(noteIds: string[] | JQuery, silentNotFoundError = false): Promise { + if (noteIds.length === 0) { + return []; + } + noteIds = Array.from(new Set(noteIds)); // make unique const missingNoteIds = noteIds.filter((noteId) => !this.notes[noteId]); diff --git a/apps/client/src/services/note_types.ts b/apps/client/src/services/note_types.ts index b8d057869..e9905063c 100644 --- a/apps/client/src/services/note_types.ts +++ b/apps/client/src/services/note_types.ts @@ -20,26 +20,32 @@ async function getNoteTypeItems(command?: TreeCommandNames) { { title: t("note_types.web-view"), command, type: "webView", uiIcon: "bx bx-globe-alt" }, { title: t("note_types.mind-map"), command, type: "mindMap", uiIcon: "bx bx-sitemap" }, { title: t("note_types.geo-map"), command, type: "geoMap", uiIcon: "bx bx-map-alt" }, - ...await getBuiltInTemplates(command) + ...await getBuiltInTemplates(command), + ...await getUserTemplates(command) ]; + return items; +} + +async function getUserTemplates(command?: TreeCommandNames) { const templateNoteIds = await server.get("search-templates"); const templateNotes = await froca.getNotes(templateNoteIds); - - if (templateNotes.length > 0) { - items.push({ title: "----" }); - - for (const templateNote of templateNotes) { - items.push({ - title: templateNote.title, - uiIcon: templateNote.getIcon(), - command: command, - type: templateNote.type, - templateNoteId: templateNote.noteId - }); - } + if (templateNotes.length === 0) { + return []; } + const items: MenuItem[] = [ + SEPARATOR + ]; + for (const templateNote of templateNotes) { + items.push({ + title: templateNote.title, + uiIcon: templateNote.getIcon(), + command: command, + type: templateNote.type, + templateNoteId: templateNote.noteId + }); + } return items; } From 47eaee8b70480830c7f230b24ab17bbfdea88659 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 18:45:06 +0300 Subject: [PATCH 29/37] feat(builtin_templates): add description field for text snippets --- apps/server/src/services/hidden_subtree_templates.ts | 5 +++++ packages/commons/src/lib/hidden_subtree.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/hidden_subtree_templates.ts b/apps/server/src/services/hidden_subtree_templates.ts index 8e4a628a4..c9e36c2b8 100644 --- a/apps/server/src/services/hidden_subtree_templates.ts +++ b/apps/server/src/services/hidden_subtree_templates.ts @@ -18,6 +18,11 @@ export default function buildHiddenSubtreeTemplates() { { name: "textSnippet", type: "label" + }, + { + name: "label:textSnippetDescription", + type: "label", + value: "promoted,alias=Description,single,text" } ] } diff --git a/packages/commons/src/lib/hidden_subtree.ts b/packages/commons/src/lib/hidden_subtree.ts index 54f386668..9ceaf8a17 100644 --- a/packages/commons/src/lib/hidden_subtree.ts +++ b/packages/commons/src/lib/hidden_subtree.ts @@ -12,7 +12,7 @@ enum Command { } export interface HiddenSubtreeAttribute { - type: AttributeType; + type: "label" | "relation"; name: string; isInheritable?: boolean; value?: string; From dcccb5ad30c8054659852a152c4a8c96a57c3109 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 19:07:05 +0300 Subject: [PATCH 30/37] feat(builtin_templates): add icon for text snippets --- apps/server/src/services/hidden_subtree_templates.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/server/src/services/hidden_subtree_templates.ts b/apps/server/src/services/hidden_subtree_templates.ts index c9e36c2b8..e4c5c62ae 100644 --- a/apps/server/src/services/hidden_subtree_templates.ts +++ b/apps/server/src/services/hidden_subtree_templates.ts @@ -10,6 +10,7 @@ export default function buildHiddenSubtreeTemplates() { id: "_template_text_snippet", type: "text", title: "Text Snippet", + icon: "bx bx-align-left", attributes: [ { name: "template", From 374309a40c0376050441bd4e2a384176cad4edb7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 19:16:32 +0300 Subject: [PATCH 31/37] fix(templates): description displayed on separate lines --- apps/client/src/stylesheets/style.css | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 38514e8ad..9b83c37fe 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -1280,16 +1280,19 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu { padding: 0.5em 1em !important; } -.ck.ck-slash-command-button__text-part { +.ck.ck-slash-command-button__text-part, +.ck.ck-template-form__text-part { margin-left: 0.5em; line-height: 1.2em !important; } -.ck.ck-slash-command-button__text-part > span { +.ck.ck-slash-command-button__text-part > span, +.ck.ck-template-form__text-part > span { line-height: inherit !important; } -.ck.ck-slash-command-button__text-part .ck.ck-slash-command-button__description { +.ck.ck-slash-command-button__text-part .ck.ck-slash-command-button__description, +.ck.ck-template-form__text-part .ck-template-form__description { display: block; opacity: 0.8; } From bde3f0a55ce3facd0321e3e137d23daba7983df0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 19:58:22 +0300 Subject: [PATCH 32/37] fix(nx): revert infinite watching causing severe issues with the daemon See https://github.com/TriliumNext/Notes/pull/2285#issuecomment-2981118813 --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitignore b/.gitignore index 61b28bfa3..d7694258d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,5 @@ # See https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files for more about ignoring files. -# Workaround for Nx bug: parent .gitignore files with '*' can cause -# `nx show projects` to return nothing by ignoring subprojects. -# See: https://github.com/nrwl/nx/issues/27368 -# Unignore everything to ensure Nx detects all projects -!* - # compiled output dist tmp From 40086434ec44714dc99821ede88710f778a848e0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 20:32:10 +0300 Subject: [PATCH 33/37] refactor(subtree): duplicate bx in icon name --- apps/server/src/services/hidden_subtree_templates.ts | 2 +- packages/commons/src/lib/hidden_subtree.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/hidden_subtree_templates.ts b/apps/server/src/services/hidden_subtree_templates.ts index e4c5c62ae..877da99c5 100644 --- a/apps/server/src/services/hidden_subtree_templates.ts +++ b/apps/server/src/services/hidden_subtree_templates.ts @@ -10,7 +10,7 @@ export default function buildHiddenSubtreeTemplates() { id: "_template_text_snippet", type: "text", title: "Text Snippet", - icon: "bx bx-align-left", + icon: "bx-align-left", attributes: [ { name: "template", diff --git a/packages/commons/src/lib/hidden_subtree.ts b/packages/commons/src/lib/hidden_subtree.ts index 9ceaf8a17..af860aba8 100644 --- a/packages/commons/src/lib/hidden_subtree.ts +++ b/packages/commons/src/lib/hidden_subtree.ts @@ -23,6 +23,9 @@ export interface HiddenSubtreeItem { id: string; title: string; type: LauncherNoteType; + /** + * The icon to use for this item, in the format "bx-icon-name" (e.g., `bx-file-blank`), *without* the leading `bx `. + */ icon?: string; attributes?: HiddenSubtreeAttribute[]; children?: HiddenSubtreeItem[]; From 45a446d0f6081b229027d4e86c94e8c14bb7bcc3 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 20:54:46 +0300 Subject: [PATCH 34/37] chore(text): set up production key --- apps/client/.env.production | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/client/.env.production b/apps/client/.env.production index dc6392a2f..af979f2a0 100644 --- a/apps/client/.env.production +++ b/apps/client/.env.production @@ -1 +1,6 @@ -VITE_CKEDITOR_ENABLE_INSPECTOR=false \ No newline at end of file +VITE_CKEDITOR_ENABLE_INSPECTOR=false + +# The development license key for premium CKEditor features. +# Note: This key must only be used for the Trilium Notes project. +# Expires on: 2025-09-13 +VITE_CKEDITOR_KEY=eyJhbGciOiJFUzI1NiJ9.eyJleHAiOjE3NTc3MjE1OTksImp0aSI6ImFiN2E0NjZmLWJlZGMtNDNiYy1iMzU4LTk0NGQ0YWJhY2I3ZiIsImRpc3RyaWJ1dGlvbkNoYW5uZWwiOlsic2giLCJkcnVwYWwiXSwid2hpdGVMYWJlbCI6dHJ1ZSwiZmVhdHVyZXMiOlsiRFJVUCIsIkNNVCIsIkRPIiwiRlAiLCJTQyIsIlRPQyIsIlRQTCIsIlBPRSIsIkNDIiwiTUYiLCJTRUUiLCJFQ0giLCJFSVMiXSwidmMiOiI1MzlkOWY5YyJ9.2rvKPql4hmukyXhEtWPZ8MLxKvzPIwzCdykO653g7IxRRZy2QJpeRszElZx9DakKYZKXekVRAwQKgHxwkgbE_w \ No newline at end of file From 2c87721953615eba4083d2e842f65e94fbfbc546 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 17 Jun 2025 21:01:01 +0300 Subject: [PATCH 35/37] docs(guide): premium features --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../User Guide/Advanced Usage/Sharing.html | 52 ++- .../Serving directly the content o.html | 1 + .../Navigation/Search.html | 2 + .../User Guide/Note Types/Text.html | 22 +- .../Note Types/Text/Premium features.html | 17 + .../1_Text Snippets_image.png | Bin 0 -> 377 bytes .../Text/Premium features/Slash Commands.html | 35 ++ .../Premium features/Slash Commands_image.png | Bin 0 -> 39179 bytes .../Text/Premium features/Text Snippets.html | 56 +++ .../Premium features/Text Snippets_image.png | Bin 0 -> 6396 bytes docs/Release Notes/!!!meta.json | 2 +- docs/User Guide/!!!meta.json | 432 ++++++++++++++---- .../User Guide/Advanced Usage/Sharing.md | 2 +- .../Navigation/Search.md | 2 +- docs/User Guide/User Guide/Note Types/Text.md | 2 +- .../Note Types/Text/Premium features.md | 12 + .../1_Text Snippets_image.png | Bin 0 -> 377 bytes .../Text/Premium features/Slash Commands.md | 22 + .../Premium features/Slash Commands_image.png | Bin 0 -> 39179 bytes .../Text/Premium features/Text Snippets.md | 38 ++ .../Premium features/Text Snippets_image.png | Bin 0 -> 6396 bytes 22 files changed, 574 insertions(+), 125 deletions(-) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features.html create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/1_Text Snippets_image.png create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Slash Commands.html create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Slash Commands_image.png create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Text Snippets.html create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Text Snippets_image.png create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features.md create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/1_Text Snippets_image.png create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Slash Commands.md create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Slash Commands_image.png create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Text Snippets.md create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Text Snippets_image.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json index 3b0208612..cb3b52886 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"TLS Configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Export as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF"},{"name":"iconClass","value":"bx bxs-file-pdf","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List/Calendar View"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to Note"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"book","attributes":[{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_GTwFsgaA0lCt","title":"Book","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Book"},{"name":"iconClass","value":"bx bx-book","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/etapi/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/api/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_LMAv4Uy3Wk6J","title":"AI","type":"book","attributes":[{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_GBBMSlVSOIGP","title":"Introduction","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Introduction"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WkM7gsEUyCXs","title":"AI Provider Information","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/OpenAI"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/Anthropic"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Frontend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/classes/Frontend_Script_API.FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Backend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]}] \ No newline at end of file +[{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"TLS Configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Export as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF"},{"name":"iconClass","value":"bx bxs-file-pdf","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List/Calendar View"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to Note"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"book","attributes":[{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_GTwFsgaA0lCt","title":"Book","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Book"},{"name":"iconClass","value":"bx bx-book","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/etapi/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/api/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_LMAv4Uy3Wk6J","title":"AI","type":"book","attributes":[{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_GBBMSlVSOIGP","title":"Introduction","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Introduction"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WkM7gsEUyCXs","title":"AI Provider Information","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/OpenAI"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/Anthropic"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Frontend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/classes/Frontend_Script_API.FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Backend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html index 29e5cac33..3b34f2147 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html @@ -6,7 +6,8 @@ class="image"> -

Features, interaction and limitations

+ +

Features, interaction and limitations