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 25388c0b2..c9517ba7b 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_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"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-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","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-server","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 using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","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-user","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_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","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-paperclip","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-up-arrow-alt","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-hdd","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_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","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_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","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":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","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"}]}]},{"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...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"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_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","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":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"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"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","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-window-open","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-window-open","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"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","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_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_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"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_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","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-bug-alt","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-low-vision","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-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","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-error","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-refresh","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 bxs-color","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-news","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-book-open","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 bxs-file-css","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-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","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 bxs-component","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-line-chart","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-globe","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 bxs-file-plus","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-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"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-edit-alt","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 bxs-edit","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-cog","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-windows","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-lock","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 bx-pyramid","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-sitemap","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-pen","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-map-alt","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 bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"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_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/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/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","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-info-circle","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","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 bxs-widget","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-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"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-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","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-server","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 using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","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-user","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_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","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-paperclip","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-up-arrow-alt","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-hdd","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_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","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_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","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":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","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"}]}]},{"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...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"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_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","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":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"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"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","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-window-open","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-window-open","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"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","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_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_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"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_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","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-bug-alt","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-low-vision","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-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","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-error","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-refresh","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 bxs-color","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-news","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-book-open","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 bxs-file-css","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-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","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 bxs-component","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-line-chart","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-globe","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 bxs-file-plus","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-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"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-edit-alt","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 bxs-edit","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-cog","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-windows","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-lock","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 bx-pyramid","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-sitemap","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-pen","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-map-alt","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 bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"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_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/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/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","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-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/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/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/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/Frontend Basics/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/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"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/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","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-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"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/Nightly release.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Nightly release.html new file mode 100644 index 000000000..d3cdc2008 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Nightly release.html @@ -0,0 +1,35 @@ +

Nightly releases are versions built every day, containing the latest improvements + and bugfixes, directly from the main development branch. These versions + are generally useful in preparation for a release, to ensure that there + are no significant bugs that need to be addressed first, or they can be + used to confirm whether a particular bug is fixed or feature is well implemented.

+

Regarding the stability

+

Despite being on a development branch, generally the main branch is pretty + stable since PRs are tested before they are merged. If you notice any issues, + feel free to report them either via a ticket or via the Matrix.

+

Downloading the nightly release manually

+

Go to github.com/TriliumNext/Trilium/releases/tag/nightly and + look for the artifacts starting with TriliumNotes-main. Choose + the appropriate one for your platform (e.g. windows-x64.zip).

+

Depending on your use case, you can either test the portable version or + even use the installer.

+ + +

Automatically download and install the latest nightly

+

This is pretty useful if you are a beta tester that wants to periodically + update their version:

+

On Ubuntu:

#!/usr/bin/env bash
+
+name=TriliumNotes-linux-x64-nightly.deb
+rm -f $name*
+wget https://github.com/TriliumNext/Trilium/releases/download/nightly/$name
+sudo apt-get install ./$name
+rm $name
\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Events.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Events.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html new file mode 100644 index 000000000..7820ccfe2 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html @@ -0,0 +1,7 @@ +

Older versions of Trilium Notes allowed the use of Common.js module imports + inside backend scripts, such as:

const isBetween = require('dayjs/plugin/isBetween')
+api.dayjs.extend(isBetween)
+

For newer versions, Node.js imports are not officially supported anymore, + since we've added a bundler which makes it more difficult to reuse dependencies.

+

Theoretically it's still possible to use imports by manually setting up + a node_modules in the server directory via npm or pnpm.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html new file mode 100644 index 000000000..249da3ad3 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html @@ -0,0 +1,9 @@ +

In doRender():

this.cssBlock(`#my-widget {
+	position: absolute;
+    bottom: 40px;
+    left: 60px;
+    z-index: 1;
+}`)
+
+

Reference: https://trilium.rocks/X7pxYpiu0lgU +

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html new file mode 100644 index 000000000..7b571b628 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html @@ -0,0 +1,30 @@ +
const template = `<div>Hi</div>`;
+
+class ToDoListWidget extends api.RightPanelWidget {
+    
+    get widgetTitle() {
+        return "Title goes here";
+    }
+        
+    get parentWidget() { return "right-pane" }
+    
+    doRenderBody() {
+        this.$body.empty().append($(template));
+    }   
+    
+    async refreshWithNote(note) {
+        this.toggleInt(false);                
+        this.triggerCommand("reEvaluateRightPaneVisibility");
+        this.toggleInt(true);
+        this.triggerCommand("reEvaluateRightPaneVisibility");
+    }
+}
+
+module.exports = new ToDoListWidget();
+

The implementation is in src/public/app/widgets/right_panel_widget.js.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html similarity index 71% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html index 273dbaae6..57a0a834b 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html @@ -16,11 +16,11 @@ module.exports = new MyWidget();

To implement this widget:

    -
  1. Create a new JS Frontend note in Trilium and paste in the code +
  2. Create a new JS Frontend note in Trilium and paste in the code above.
  3. -
  4. Assign the #widget attribute to +
  5. Assign the #widget attribute to the note.
  6. -
  7. Restart Trilium or reload the window.
  8. +
  9. Restart Trilium or reload the window.

To verify that the widget is working, open the developer tools (Cmd + Shift + I) and run document.querySelector("#my-widget"). If the element @@ -87,5 +87,18 @@ module.exports = new MyWidget(); } module.exports = new MyWidget(); -

Reload the application one last time. When you click the button, a "Hello - World!" message should appear, confirming that your widget is fully functional.

\ No newline at end of file +

parentWidget() can be given the following values:

+ +

Reload the application + one last time. When you click the button, a "Hello World!" message should + appear, confirming that your widget is fully functional.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.html diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index e3c2d4362..e75df02a9 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -120,80 +120,75 @@ ], "format": "markdown", "dataFileName": "Project Structure.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "zdQzavvHDl1k", + "notePath": [ + "jdjRLhLV3TtI", + "zdQzavvHDl1k" + ], + "title": "Documentation", + "notePosition": 280, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "documentation", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-book-open", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "T2W7WCZrYZBU", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Documentation.md", "attachments": [], - "dirFileName": "Project Structure", + "dirFileName": "Documentation", "children": [ { "isClone": false, - "noteId": "Jg7clqogFOyD", + "noteId": "LjqM0VUL1CrU", "notePath": [ "jdjRLhLV3TtI", - "cxfTSHIUQtt2", - "Jg7clqogFOyD" + "zdQzavvHDl1k", + "LjqM0VUL1CrU" ], - "title": "CKEditor", + "title": "Documentation references in the application", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "BRhQZHgwaGyw", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-package", - "isInheritable": false, - "position": 10 - }, { "type": "label", "name": "shareAlias", - "value": "ckeditor", + "value": "doc-references", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "CKEditor.md", - "attachments": [], - "dirFileName": "CKEditor", - "children": [ - { - "isClone": false, - "noteId": "BRhQZHgwaGyw", - "notePath": [ - "jdjRLhLV3TtI", - "cxfTSHIUQtt2", - "Jg7clqogFOyD", - "BRhQZHgwaGyw" - ], - "title": "Plugin migration guide", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "plugin-migration", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Plugin migration guide.md", - "attachments": [] - } - ] + "dataFileName": "Documentation references in th.md", + "attachments": [] } ] }, @@ -205,7 +200,7 @@ "a0mkxxB4Uvbf" ], "title": "Building", - "notePosition": 280, + "notePosition": 290, "prefix": null, "isExpanded": false, "type": "text", @@ -400,40 +395,6 @@ "dataFileName": "Build deliveries locally.md", "attachments": [] }, - { - "isClone": false, - "noteId": "zdQzavvHDl1k", - "notePath": [ - "jdjRLhLV3TtI", - "a0mkxxB4Uvbf", - "zdQzavvHDl1k" - ], - "title": "Documentation", - "notePosition": 60, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "documentation", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-book-open", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Documentation.md", - "attachments": [] - }, { "isClone": false, "noteId": "4nwtTJyjNDKd", @@ -470,6 +431,250 @@ } ] }, + { + "isClone": false, + "noteId": "qalhAaJoQ7AN", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN" + ], + "title": "Dependencies", + "notePosition": 310, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-component", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "attachments": [], + "dirFileName": "Dependencies", + "children": [ + { + "isClone": false, + "noteId": "fa6hAJ9Ith3A", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "fa6hAJ9Ith3A" + ], + "title": "Per-dependency checks", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Xfi1ScuBTKJf", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "updating-deps", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Per-dependency checks.md", + "attachments": [], + "dirFileName": "Per-dependency checks", + "children": [ + { + "isClone": false, + "noteId": "Xfi1ScuBTKJf", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "fa6hAJ9Ith3A", + "Xfi1ScuBTKJf" + ], + "title": "bettersqlite binaries", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "bettersqlite-binaries", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "bettersqlite binaries.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "Jg7clqogFOyD", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD" + ], + "title": "CKEditor", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "BRhQZHgwaGyw", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-package", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "ckeditor", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "CKEditor.md", + "attachments": [], + "dirFileName": "CKEditor", + "children": [ + { + "isClone": false, + "noteId": "BRhQZHgwaGyw", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD", + "BRhQZHgwaGyw" + ], + "title": "Plugin migration guide", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "plugin-migration", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Plugin migration guide.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "5gBYmUqiupBl", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD", + "5gBYmUqiupBl" + ], + "title": "Differences from upstream", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "lY19SLxUMj3J", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "fullContentWidth", + "value": "", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "differences-from-upstream", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Differences from upstream.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "lY19SLxUMj3J", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD", + "lY19SLxUMj3J" + ], + "title": "ckeditor5-math", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "ckeditor5-math", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "ckeditor5-math.md", + "attachments": [ + { + "attachmentId": "UlSZYhYX8Kfj", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "ckeditor5-math_image.png" + } + ] + } + ] + } + ] + }, { "isClone": false, "noteId": "yeqU0zo0ZQ83", @@ -478,7 +683,7 @@ "yeqU0zo0ZQ83" ], "title": "Architecture", - "notePosition": 300, + "notePosition": 320, "prefix": null, "isExpanded": false, "type": "text", @@ -1234,7 +1439,7 @@ "UzRirf46Xi46" ], "title": "Hidden notes", - "notePosition": 70, + "notePosition": 80, "prefix": null, "isExpanded": false, "type": "text", @@ -1268,7 +1473,7 @@ "m2W35hwSDUeh" ], "title": "Icons", - "notePosition": 80, + "notePosition": 90, "prefix": null, "isExpanded": false, "type": "text", @@ -1309,7 +1514,7 @@ "TLXJwBDo8Rdv" ], "title": "Internationalisation / Translations", - "notePosition": 90, + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -1444,7 +1649,7 @@ "Usiyzn9C4WFv" ], "title": "Launchers", - "notePosition": 100, + "notePosition": 110, "prefix": null, "isExpanded": false, "type": "text", @@ -1471,7 +1676,7 @@ "qjQNyaYXSNWu" ], "title": "Note Revisions", - "notePosition": 110, + "notePosition": 120, "prefix": null, "isExpanded": false, "type": "text", @@ -1505,7 +1710,7 @@ "7RBJMqVz2EsJ" ], "title": "Note Types", - "notePosition": 120, + "notePosition": 130, "prefix": null, "isExpanded": false, "type": "text", @@ -1839,7 +2044,7 @@ "6dC7ha5vjqqS" ], "title": "Options", - "notePosition": 130, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -1904,7 +2109,7 @@ "W0msUwLxm40d" ], "title": "Printing and exporting to PDF", - "notePosition": 140, + "notePosition": 150, "prefix": null, "isExpanded": false, "type": "text", @@ -1945,7 +2150,7 @@ "UvXpeSqfYc6d" ], "title": "Protected entities", - "notePosition": 150, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -2000,7 +2205,7 @@ "vphziLmQeQHY" ], "title": "Share", - "notePosition": 160, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -2034,7 +2239,7 @@ "n9wYW9nUTynV" ], "title": "Synchronisation", - "notePosition": 170, + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", @@ -2098,7 +2303,7 @@ "k7RavjuXQt8z" ], "title": "Syntax highlighting", - "notePosition": 180, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -2132,7 +2337,7 @@ "7BCukQTCm7fv" ], "title": "Themes", - "notePosition": 190, + "notePosition": 200, "prefix": null, "isExpanded": false, "type": "text", @@ -2167,7 +2372,7 @@ "YjerxU7Aii8X" ], "title": "Troubleshooting", - "notePosition": 340, + "notePosition": 360, "prefix": null, "isExpanded": false, "type": "text", @@ -2218,18 +2423,45 @@ "format": "markdown", "dataFileName": "better-sqlite3 was compiled ag.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "QUb0fRhbpT8E", + "notePath": [ + "jdjRLhLV3TtI", + "YjerxU7Aii8X", + "QUb0fRhbpT8E" + ], + "title": "Error [TransformError]: The package \"@esbuild/linux-x64\" could not be found, and is needed by esbuild.", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "esbuild-error", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Error [TransformError] The pac.md", + "attachments": [] } ] }, { "isClone": false, - "noteId": "ibAPHul7Efvr", + "noteId": "dtKC3FmoWOrv", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr" + "dtKC3FmoWOrv" ], - "title": "Old documentation", - "notePosition": 350, + "title": "Testing", + "notePosition": 380, "prefix": null, "isExpanded": false, "type": "text", @@ -2238,25 +2470,40 @@ { "type": "label", "name": "shareAlias", - "value": "old-documentation", + "value": "testing", "isInheritable": false, "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-eyedropper", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "w6gMvKh0UAVT", + "isInheritable": false, + "position": 40 } ], "format": "markdown", + "dataFileName": "Testing.md", "attachments": [], - "dirFileName": "Old documentation", + "dirFileName": "Testing", "children": [ { "isClone": false, - "noteId": "6BWwXzPCph4G", + "noteId": "C5MUQczZ5R9N", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "6BWwXzPCph4G" + "dtKC3FmoWOrv", + "C5MUQczZ5R9N" ], - "title": "Project maintenance", - "notePosition": 60, + "title": "Integration testing", + "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", @@ -2265,101 +2512,25 @@ { "type": "label", "name": "shareAlias", - "value": "project-maintenance", + "value": "integration", "isInheritable": false, "position": 20 } ], "format": "markdown", - "attachments": [], - "dirFileName": "Project maintenance", - "children": [ - { - "isClone": false, - "noteId": "fa6hAJ9Ith3A", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "6BWwXzPCph4G", - "fa6hAJ9Ith3A" - ], - "title": "Updating dependencies", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "Xfi1ScuBTKJf", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "updating-deps", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Updating dependencies.md", - "attachments": [], - "dirFileName": "Updating dependencies", - "children": [ - { - "isClone": false, - "noteId": "Xfi1ScuBTKJf", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "6BWwXzPCph4G", - "fa6hAJ9Ith3A", - "Xfi1ScuBTKJf" - ], - "title": "bettersqlite binaries", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "PXzm2t3sCdsP", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "bettersqlite-binaries", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "bettersqlite binaries.md", - "attachments": [] - } - ] - } - ] + "dataFileName": "Integration testing.md", + "attachments": [] }, { "isClone": false, - "noteId": "re0QTuqiYnVb", + "noteId": "bIfKwfCnqpeI", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb" + "dtKC3FmoWOrv", + "bIfKwfCnqpeI" ], - "title": "Scripting", - "notePosition": 80, + "title": "Test database", + "notePosition": 20, "prefix": null, "isExpanded": false, "type": "text", @@ -2368,144 +2539,25 @@ { "type": "label", "name": "shareAlias", - "value": "scripting", + "value": "test-database", "isInheritable": false, "position": 20 } ], "format": "markdown", - "attachments": [], - "dirFileName": "Scripting", - "children": [ - { - "isClone": false, - "noteId": "gz6zq5rlHqMa", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "gz6zq5rlHqMa" - ], - "title": "Widgets", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "widgets", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Widgets.md", - "attachments": [], - "dirFileName": "Widgets", - "children": [ - { - "isClone": false, - "noteId": "M8IppdwVHSjG", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "gz6zq5rlHqMa", - "M8IppdwVHSjG" - ], - "title": "Right pane widget", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "right-pane-widget", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Right pane widget.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VqGQnnPGnqAU", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "gz6zq5rlHqMa", - "VqGQnnPGnqAU" - ], - "title": "CSS", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "css", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "CSS.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "fZ2IGYFXjkEy", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "fZ2IGYFXjkEy" - ], - "title": "Server-side imports", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "server-imports", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Server-side imports.md", - "attachments": [] - } - ] + "dataFileName": "Test database.md", + "attachments": [] }, { "isClone": false, - "noteId": "Sow7ThJozkzJ", + "noteId": "w6gMvKh0UAVT", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "Sow7ThJozkzJ" + "dtKC3FmoWOrv", + "w6gMvKh0UAVT" ], - "title": "Documentation", - "notePosition": 90, + "title": "End-to-end tests", + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", @@ -2514,718 +2566,14 @@ { "type": "label", "name": "shareAlias", - "value": "documentation", + "value": "running-tests", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "Documentation.md", - "attachments": [ - { - "attachmentId": "2bUrJyt2yfsd", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Documentation_image.png" - } - ], - "dirFileName": "Documentation", - "children": [ - { - "isClone": false, - "noteId": "LjqM0VUL1CrU", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "Sow7ThJozkzJ", - "LjqM0VUL1CrU" - ], - "title": "Documentation references in the application", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "doc-references", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Documentation references in th.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "dtKC3FmoWOrv", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv" - ], - "title": "Testing", - "notePosition": 100, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "testing", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Testing.md", - "attachments": [], - "dirFileName": "Testing", - "children": [ - { - "isClone": false, - "noteId": "C5MUQczZ5R9N", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N" - ], - "title": "Integration testing", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "integration", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Integration testing", - "children": [ - { - "isClone": false, - "noteId": "pH4RsxqifVpK", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N", - "pH4RsxqifVpK" - ], - "title": "Setting up authentication", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "auth", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Setting up authentication.md", - "attachments": [ - { - "attachmentId": "aWFXFuXNon7J", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Setting up authentication_.png" - }, - { - "attachmentId": "JRbtB4byzewo", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "1_Setting up authentication_.png" - } - ] - }, - { - "isClone": false, - "noteId": "bIfKwfCnqpeI", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N", - "bIfKwfCnqpeI" - ], - "title": "Test database", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "test-database", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Test database.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "w6gMvKh0UAVT", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N", - "w6gMvKh0UAVT" - ], - "title": "Running tests", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "running-tests", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Running tests.md", - "attachments": [] - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "dHfw0XZE515z", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z" - ], - "title": "Sub-projects", - "notePosition": 110, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "subprojects", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Sub-projects", - "children": [ - { - "isClone": false, - "noteId": "JkTy2zz8Zbyq", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq" - ], - "title": "CKEditor", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "ckeditor", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "CKEditor", - "children": [ - { - "isClone": false, - "noteId": "5yWZVlKPjLCC", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "5yWZVlKPjLCC" - ], - "title": "Environment setup", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "CaInsmrlZhR6", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "environment-setup", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Environment setup.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "CaInsmrlZhR6", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "CaInsmrlZhR6" - ], - "title": "Building the editor", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "5yWZVlKPjLCC", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "building-the-editor", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Building the editor.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "5gBYmUqiupBl", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "5gBYmUqiupBl" - ], - "title": "Differences from upstream", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "lY19SLxUMj3J", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "fullContentWidth", - "value": "", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "differences-from-upstream", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Differences from upstream.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "Q9FyKVERd1Lb", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "Q9FyKVERd1Lb" - ], - "title": "Updating to a newer version of CKEditor", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "5yWZVlKPjLCC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "CaInsmrlZhR6", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "yAFSS6awVbaZ", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "updating", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "Updating to a newer version of.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "yAFSS6awVbaZ", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "yAFSS6awVbaZ" - ], - "title": "Versions and external plugins", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "lY19SLxUMj3J", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "external-plugin-and-versions", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Versions and external plugins.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "lY19SLxUMj3J", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "lY19SLxUMj3J" - ], - "title": "ckeditor5-math", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "JkTy2zz8Zbyq", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UMN2ABrBU5D7", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "CaInsmrlZhR6", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "ckeditor5-math", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "ckeditor5-math.md", - "attachments": [ - { - "attachmentId": "UlSZYhYX8Kfj", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "ckeditor5-math_image.png" - } - ], - "dirFileName": "ckeditor5-math", - "children": [ - { - "isClone": false, - "noteId": "vpbbBaypScLb", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "lY19SLxUMj3J", - "vpbbBaypScLb" - ], - "title": "Updating with upstream", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "UMN2ABrBU5D7", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "updating-upstream", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Updating with upstream.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "UMN2ABrBU5D7", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "lY19SLxUMj3J", - "UMN2ABrBU5D7" - ], - "title": "Release management & continuous integration", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "release-management", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Release management & continuou.md", - "attachments": [] - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "QRLbiDXNxoWN", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "QRLbiDXNxoWN" - ], - "title": "Troubleshooting", - "notePosition": 120, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "troubleshooting", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Troubleshooting", - "children": [ - { - "isClone": false, - "noteId": "QUb0fRhbpT8E", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "QRLbiDXNxoWN", - "QUb0fRhbpT8E" - ], - "title": "Error [TransformError]: The package \"@esbuild/linux-x64\" could not be found, and is needed by esbuild.", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "esbuild-error", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Error [TransformError] The pac.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "x6lgrdztQwVB", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "x6lgrdztQwVB" - ], - "title": "Installation", - "notePosition": 130, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "installation", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Installation", - "children": [ - { - "isClone": false, - "noteId": "bOjeTrUViwLw", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "x6lgrdztQwVB", - "bOjeTrUViwLw" - ], - "title": "Download latest nightly and install it", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "download-nightly", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Download latest nightly and in.md", - "attachments": [] - } - ] + "dataFileName": "End-to-end tests.md", + "attachments": [] } ] } diff --git a/docs/Developer Guide/Developer Guide/Building/Documentation.md b/docs/Developer Guide/Developer Guide/Building/Documentation.md deleted file mode 100644 index 6ce33eeaf..000000000 --- a/docs/Developer Guide/Developer Guide/Building/Documentation.md +++ /dev/null @@ -1,24 +0,0 @@ -# Documentation -## Editing the documentation - -To edit the documentation run `pnpm edit-docs:edit-docs`. This will spin up a custom Trilium desktop instance which automatically imports the documentation into memory. Any changes will update in the background the files which can then be committed. - -## Automation - -The documentation is built via `apps/build-docs`: - -1. The output directory is cleared. -2. The User Guide and the Developer Guide are built. - 1. The documentation from the repo is archived and imported into an in-memory instance. - 2. The documentation is exported using the shared theme. -3. The API docs (internal and ETAPI) are statically rendered via Redocly. -4. The script API is generated via `typedoc` - -The `deploy-docs` workflow triggers the documentation build and uploads it to CloudFlare Pages. - -## Building locally - -In the Git root: - -* Run `pnpm docs:build`. The built documentation will be available in `site` at Git root. -* To also run a webserver to test it, run `pnpm docs:preview` (this will not build the documentation) and navigate to `localhost:9000`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md b/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md index 8e62e8f36..19e3427ec 100644 --- a/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md +++ b/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md @@ -8,7 +8,7 @@ Releases are usually made directly from the `main` branch. The process is as follows: -1. Edit the Documentation to add a corresponding entry in the _Release notes_ section. +1. Edit the Documentation to add a corresponding entry in the _Release notes_ section. 2. In the root `package.json`, set `version` to the new version to be released. 3. Run `chore:update-version` to automatically update the version of the rest of the `package.json` files. 4. Run `pnpm i` to update the package lock as well. diff --git a/docs/Developer Guide/Developer Guide/Project Structure/CKEditor.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Project Structure/CKEditor.md rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Differences from upstream.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Differences from upstream.md similarity index 81% rename from docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Differences from upstream.md rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Differences from upstream.md index a5230d8f7..d8e2db46b 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Differences from upstream.md +++ b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Differences from upstream.md @@ -1,5 +1,5 @@ # Differences from upstream -* Embeds [`~~isaul32/ckeditor5-math~~`](https://github.com/isaul32/ckeditor5-math)  ckeditor5-math, which is a third-party plugin for adding math support. CKEditor itself also has a [math plugin](https://ckeditor.com/docs/ckeditor5/latest/features/math-equations.html) with MathType and ChemType but it's premium-only. +* Embeds [`~~isaul32/ckeditor5-math~~`](https://github.com/isaul32/ckeditor5-math)  ckeditor5-math, which is a third-party plugin for adding math support. CKEditor itself also has a [math plugin](https://ckeditor.com/docs/ckeditor5/latest/features/math-equations.html) with MathType and ChemType but it's premium-only. * Zadam left a TODO in `findandreplaceUI`: `// FIXME: keyboard shortcut doesn't work:` [`https://github.com/ckeditor/ckeditor5/issues/10645`](https://github.com/ckeditor/ckeditor5/issues/10645) * `packages\ckeditor5-build-balloon-block\src\mention_customization.js` introduces note insertion via `@` character. diff --git a/docs/Developer Guide/Developer Guide/Project Structure/CKEditor/Plugin migration guide.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Plugin migration guide.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Project Structure/CKEditor/Plugin migration guide.md rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Plugin migration guide.md diff --git a/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md new file mode 100644 index 000000000..e47a59f12 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md @@ -0,0 +1,16 @@ +# ckeditor5-math +
ckeditor5-math in action.
+ +A fork of [isaul32/ckeditor5-math](https://github.com/isaul32/ckeditor5-math), which is the CKEditor5 plugin which adds the math functionality. We keep our own version to be able to use it on the latest version of CKEditor, alongside some custom improvements. + +## Development environment + +* Tested on Node.js 20. +* The package manager is yarn 1 (v1.22.22 is known to be working fine for it at the time of writing). + +Important commands: + +* To check if the code has any formatting issues: `yarn lint` +* To start a live preview: `yarn start` +* To run the tests: `yarn test` + * Note that this requires Chromium, on NixOS this can be achieved by running a `nix-shell -p chromium`, and running `CHROME_BIN=$(which chromium) yarn test` inside it. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math_image.png b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math_image.png rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies.md b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks.md similarity index 96% rename from docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies.md rename to docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks.md index fb27cb6bf..309042ffc 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies.md +++ b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks.md @@ -1,2 +1,2 @@ -# Updating dependencies -
DependencyName in library_loaderThings to check for a basic sanity check Protected by unit tests
better-sqlite3 See bettersqlite binaries.  
jsdom 
  • Note map
  • Clipper
  • Note similarity
Protected by typings, should catch any potential changes in API.Yes
async-mutex 
  • Sync
  
axios 
  • Can't be directly tested, as it's exposed only via the backend script API.
  
sax 
  • EverNote imports
  
  • ws
  • debounce
 
  • Check any action is reported from server to client (e.g. delete a note).
  
ejs 
  • Onboarding / first setup
  
dayjs 
  • Day notes
  
semver 
  • Application should start.
  
https-proxy-agent ???  
sax 
  • EverNote import
  
ini 
  • Affects config, generally if the application starts then it should be OK.
  
jsplumbRELATION_MAP
  • Relation map note type
  
jquery.mark.es6MARKJS
  • In search, when highlighting the text that matched.
  • In search in HTML, which might not actually be used since it seems to have been replaced by CKEditor's own find & replace dialog.
  
knockout.js 
  • Used in rendering the login and main layout of the application.
  
normalize.min.css 
  • Used in shared notes.
  
wheel-zoom.min.jsWHEEL_ZOOM
  • When opening a image that is in attachment.
  • When opening a stand-alone image note.
  • When zooming in a mermaid chart.
  
fancytree 
  • The note tree should be fully functional.
  
bootstrap 
  • Check mostly the on-boarding pages, when there is no database.
  
electron-debug 
  • Run electron using npm run start-electron and check that the debug hotkeys are still working (Ctrl+Shift+I on Windows/Linux, Cmd+Alt+I for dev tools, Cmd/Ctrl+R for reload).
  
electron-dl    
eslint    
marked 
  • Importing a markdown note.
 Yes
force-graph 
  • Note map
  
\ No newline at end of file +# Per-dependency checks +
DependencyName in library_loaderThings to check for a basic sanity check Protected by unit tests
better-sqlite3 See bettersqlite binaries.  
jsdom 
  • Note map
  • Clipper
  • Note similarity
Protected by typings, should catch any potential changes in API.Yes
async-mutex 
  • Sync
  
axios 
  • Can't be directly tested, as it's exposed only via the backend script API.
  
sax 
  • EverNote imports
  
  • ws
  • debounce
 
  • Check any action is reported from server to client (e.g. delete a note).
  
ejs 
  • Onboarding / first setup
  
dayjs 
  • Day notes
  
semver 
  • Application should start.
  
https-proxy-agent ???  
sax 
  • EverNote import
  
ini 
  • Affects config, generally if the application starts then it should be OK.
  
jsplumbRELATION_MAP
  • Relation map note type
  
jquery.mark.es6MARKJS
  • In search, when highlighting the text that matched.
  • In search in HTML, which might not actually be used since it seems to have been replaced by CKEditor's own find & replace dialog.
  
knockout.js 
  • Used in rendering the login and main layout of the application.
  
normalize.min.css 
  • Used in shared notes.
  
wheel-zoom.min.jsWHEEL_ZOOM
  • When opening a image that is in attachment.
  • When opening a stand-alone image note.
  • When zooming in a mermaid chart.
  
fancytree 
  • The note tree should be fully functional.
  
bootstrap 
  • Check mostly the on-boarding pages, when there is no database.
  
electron-debug 
  • Run electron using npm run start-electron and check that the debug hotkeys are still working (Ctrl+Shift+I on Windows/Linux, Cmd+Alt+I for dev tools, Cmd/Ctrl+R for reload).
  
electron-dl    
eslint    
marked 
  • Importing a markdown note.
 Yes
force-graph 
  • Note map
  
\ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md new file mode 100644 index 000000000..5a473b5e5 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md @@ -0,0 +1,25 @@ +# bettersqlite binaries +### The native node bindings + +`better-sqlite3` has native Node bindings. With updates of `better-sqlite3`, but also of Electron and Node.js versions, these bindings need to be updated. + +Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js. + +During development, `pnpm install` tries to build or reuse prebuilt natives for the current Node.js version. This makes `npm run start-server` work out of the box. Trying to run `npm run start-electron` with these versions generally causes an error such as this: + +``` +Uncaught Exception: +Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node' +was compiled against a different Node.js version using +NODE_MODULE_VERSION 108. This version of Node.js requires +NODE_MODULE_VERSION 116. Please try re-compiling or re-installing +the module (for instance, using `npm rebuild` or `npm install`). +``` + +### How the natives are handled + +To avoid issues between the `server` and the `desktop`, the `desktop` build gets its own copy of the `bettersqlite3` dependency in its `node_module`. This copy is then rebuilt automatically to match the Electron version. + +This process of rebuilding is handled by `scripts/electron-rebuild.mts` which runs automatically after `pnpm install` (via `postinstall`). + +If needed, the script can be run manually again via `pnpm postinstall`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md similarity index 66% rename from docs/Developer Guide/Developer Guide/Old documentation/Documentation.md rename to docs/Developer Guide/Developer Guide/Documentation.md index 987582cac..4874aaa1d 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,29 +1,32 @@ # Documentation -
- -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. * _Release Notes_, this contains the change log for each released or soon-to-be-released version. The release notes are used automatically by the CI when releasing a version. * The _Script API_, which is an automatically generated documentation for the front-end and back-end APIs for scripts. -## Editing documentation +## Location of the documentation + +All documentation is stored in the [Trilium](https://github.com/TriliumNext/Trilium) repository: + +* `docs/Developer Guide` contains Markdown documentation that can be modified either externally (using a Markdown editor, or internally using Trilium). +* `docs/Release Notes` is also stored in Markdown format and can be freely edited. +* `docs/Script API` contains auto-generated files and thus must not be modified. +* `docs/User Guide` contains also Markdown-only documentation but must generally not be edited externally. + * The reason is that the `pnpm edit-docs:edit-docs` feature will not only import/export this documentation, but also generate the corresponding HTML documentation and meta structure in `src/public/app/doc_notes/en/User Guide`. + * It's theoretically possible to edit the Markdown files externally and then run `docs:edit` and trigger a change in order to build the documentation, but that would not be a very productive workflow. + +## Editing the documentation There are two ways to modify documentation: * Using a special mode of Trilium. * By manually editing the files. -### Using `docs:edit` +### Using the `edit-docs` app -To edit the documentation using Trilium, set up a working development environment and run the following commands: - -* On most operating systems, `npm run electron:switch` followed by `npm run docs:edit` -* On NixOS, `npm run docs:edit-nix`. - -> [!NOTE] -> `npm run docs:edit` acts very similar to `npm run electron:start` in the sense that you cannot both be editing documentation and starting a server. Using both `npm run electron:start` and `docs:edit` is possible, since they are using the same Electron instance. +To edit the documentation using Trilium, set up a working development environment via Environment Setup and run the following command: `pnpm edit-docs:edit-docs`. How it works: @@ -50,24 +53,30 @@ Important aspects to consider: * The Trilium import/export mechanism is not perfect, so if you make some modifications to the documentation using `docs:edit`, at the next import/export/import cycle some whitespace might get thrown in. It's generally safe to commit the changes as-is. * Since we are importing Markdown, editing HTML and then exporting the HTML back to Markdown there might be some edge cases where the formatting is not properly preserved. Try to identify such cases and report them in order to get them fixed (this will benefit also the users). -## Location of the documentation +## Automation -All documentation is stored in the [Notes](https://github.com/TriliumNext/Trilium) repository: +The documentation is built via `apps/build-docs`: -* `docs/Developer Guide` contains Markdown documentation that can be modified either externally (using a Markdown editor, or internally using Trilium). -* `docs/Release Notes` is also stored in Markdown format and can be freely edited. -* `docs/Script API` contains auto-generated files and thus must not be modified. -* `docs/User Guide` contains also Markdown-only documentation but must generally not be edited externally. - * The reason is that the `docs:edit` feature will not only import/export this documentation, but also generate the corresponding HTML documentation and meta structure in `src/public/app/doc_notes/en/User Guide`. - * It's theoretically possible to edit the Markdown files externally and then run `docs:edit` and trigger a change in order to build the documentation, but that would not be a very productive workflow. +1. The output directory is cleared. +2. The User Guide and the Developer Guide are built. + 1. The documentation from the repo is archived and imported into an in-memory instance. + 2. The documentation is exported using the shared theme. +3. The API docs (internal and ETAPI) are statically rendered via Redocly. +4. The script API is generated via `typedoc` + +The `deploy-docs` workflow triggers the documentation build and uploads it to CloudFlare Pages. ## Updating the Script API As mentioned previously, the Script API is not manually editable since it is auto-generated using TypeDoc. -To update the API documentation, simply run `npm run docs:build`. Compare the changes (if any) and commit them. +To update the API documentation, simply run `pnpm docs:build`. Compare the changes (if any) and commit them. -Note that in order to simulate the environment a script would have, some fake source files (in the sense that they are only used for documentation) are being used as entrypoints for the documentation: +Note that in order to simulate the environment a script would have, some fake source files (in the sense that they are only used for documentation) are being used as entrypoints for the documentation. Look for `backend_script_entrypoint` and `frontend_script_entrypoint` in `apps/build-docs/src`. -* For back-end scripts, the script is located in `src/services/backend_script_entrypoint.ts`. -* For front-end scripts, the script is located in `src/public/app/services/frontend_script_entrypoint.ts`. \ No newline at end of file +## Building locally + +In the Git root: + +* Run `pnpm docs:build`. The built documentation will be available in `site` at Git root. +* To also run a webserver to test it, run `pnpm docs:preview` (this will not build the documentation) and navigate to `localhost:9000`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Documentation/Documentation references in th.md b/docs/Developer Guide/Developer Guide/Documentation/Documentation references in th.md similarity index 69% rename from docs/Developer Guide/Developer Guide/Old documentation/Documentation/Documentation references in th.md rename to docs/Developer Guide/Developer Guide/Documentation/Documentation references in th.md index 1c9a9fea9..79c1bd80e 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Documentation/Documentation references in th.md +++ b/docs/Developer Guide/Developer Guide/Documentation/Documentation references in th.md @@ -13,6 +13,8 @@ https://triliumnext.github.io/Docs/Wiki/ There is a pattern of “?” buttons throughout the application which make use of the `data-help-page` attribute. Whenever these buttons are pressed, the user is redirected to the corresponding wiki page by prepending the wiki root URL to the `data-help-page` attribute. +### Deprecated `help-page` attribute + Since the current wiki has a different structure than the original, for example to link to [https://github.com/TriliumNext/Docs/blob/main/Wiki/tree-concepts.md](https://github.com/TriliumNext/Docs/blob/main/Wiki/tree-concepts.md) the `data-help-page` attribute must be set to `tree-concepts.md`. For links to headings, simply add the heading after the `.md`: `tree-concepts.md#prefix` @@ -20,4 +22,12 @@ For links to headings, simply add the heading after the `.md`: `tree-concepts.md You can identify those by looking for: * `.attr("data-help-page"` -* `data-help-page="` \ No newline at end of file +* `data-help-page="` + +### More modern `data-in-app-help` attribute + +Instead of opening in a web browser, this opens the help directly in the application in a split view. This is handled via the `data-in-app-help` attribute, where the value is the note ID of the help page without the `_help_` prefix. + +### React + +Use the `HelpButton` component in the same fashion as the `data-in-app-help` attribute. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Documentation_image.png b/docs/Developer Guide/Developer Guide/Old documentation/Documentation_image.png deleted file mode 100644 index 542bb7858..000000000 Binary files a/docs/Developer Guide/Developer Guide/Old documentation/Documentation_image.png and /dev/null differ diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md b/docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md deleted file mode 100644 index 0d5f2a2e4..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md +++ /dev/null @@ -1,12 +0,0 @@ -# Download latest nightly and install it -On Ubuntu: - -``` -#!/usr/bin/env bash - -name=TriliumNotes-linux-x64-nightly.deb -rm -f $name* -wget https://github.com/TriliumNext/Trilium/releases/download/nightly/$name -sudo apt-get install ./$name -rm $name -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md b/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md deleted file mode 100644 index 5538646ca..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md +++ /dev/null @@ -1,41 +0,0 @@ -# bettersqlite binaries -### The native node bindings - -`better-sqlite3` has native Node bindings. With updates of `better-sqlite3`, but also of Electron and Node.js versions, these bindings need to be updated. - -Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js. - -During development, `npm install` tries to build or reuse prebuilt natives for the current Node.js version. This makes `npm run start-server` work out of the box. Trying to run `npm run start-electron` with these versions generally causes an error such as this: - -``` -Uncaught Exception: -Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node' -was compiled against a different Node.js version using -NODE_MODULE_VERSION 108. This version of Node.js requires -NODE_MODULE_VERSION 116. Please try re-compiling or re-installing -the module (for instance, using `npm rebuild` or `npm install`). -``` - -### How the natives are handled - -Locally, this can be fixed by rebuilding the binaries, which is what `npm run switch-electron` does, which uses `electron-rebuild` under the hood. - -When the deliveries are built (see Build deliveries locally), it is not feasible to rebuild the dependencies since we are building for multiple platforms. Luckily, `better-sqlite3` provides these prebuilt binaries from us, available as artifacts on [their GitHub releases page](https://github.com/WiseLibs/better-sqlite3/releases/).  - -The build script manages the natives for `better-sqlite3` by keeping a copy of the `.node` file for every platform in `bin/better-sqlite3`. - -Whenever the version of `better-sqlite3` changes, the `.node` files must also be renewed based on their releases page. To simplify this process, a script was created in `bin/better-sqlite3/update.sh`. - -## How to update the natives - -The update script needs to know the version of Electron or Node.js for which to download the prebuilt binaries. - -If you get errors during download, check on the [releases page](https://github.com/WiseLibs/better-sqlite3/releases/) to ensure that this particular combination of Electron/Node actually exists for the given release. - -To determine the `NODE_MODULE_VERSION` that is required, look for `This version of Node.js requires` -`NODE_MODULE_VERSION` in the error when starting Trilium via: - -* `npm run start-electron` (or run any Electron [delivery](../../../Building/Build%20deliveries%20locally.md)), case in which the `ELECTRON_VERSION` variable needs to be changed. -* `npm run start-server` (or run the Linux server delivery), case in which the `NODE_VERSION` variable needs to be changed. - -Check which files got changed after running the update script and for each platform that got changed, test it locally via Build deliveries locally or via the CI. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md b/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md deleted file mode 100644 index c19366cee..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md +++ /dev/null @@ -1,16 +0,0 @@ -# Server-side imports -Trilium Notes allowed the use of Common.js module imports inside backend scripts, such as: - -``` -const isBetween = require('dayjs/plugin/isBetween') -api.dayjs.extend(isBetween) -``` - -For TriliumNext, the backend has been switched to use ESM which has a slightly more complicated syntax. Instead of `require` we now have `import` but which is asynchronous so it will require an `await`: - -``` -const isBetween = (await import("dayjs/plugin/isBetween")).default; -api.dayjs.extend(isBetween); -``` - -Note that `.default` is also usually needed to obtain the same behaviour as a CJS import. When in doubt, use `console.log` to see the output of the value returned by `await import`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md b/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md deleted file mode 100644 index 57de0ad15..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md +++ /dev/null @@ -1,33 +0,0 @@ -# Widgets -To create a basic widget, simply create a code note with type “JS frontend”. Add the `#widget` label in order for it to be loaded at startup. - -``` -const template = `
`; - -class MyWidget extends api.BasicWidget { - get position() { return 1; } - get parentWidget() { return "left-pane" } - - doRender() { - this.$widget = $(template); - return this.$widget; - } -} - -module.exports = new MyWidget(); -``` - -`parentWidget()` can be given the following values: - -* `left-pane` - This renders the widget on the left side of the screen where the note tree lives. -* `center-pane` - This renders the widget in the center of the layout in the same location that notes and splits appear. -* `note-detail-pane` - This renders the widget _with_ the note in the center pane. This means it can appear multiple times with splits. -* `right-pane` - This renders the widget to the right of any opened notes. - -* * * - -Reference: - -* [https://trilium.rocks/X7pxYpiu0lgU](https://trilium.rocks/X7pxYpiu0lgU) -* [https://github.com/zadam/trilium/wiki/Widget-Basics](https://github.com/zadam/trilium/wiki/Widget-Basics) -* [https://github.com/zadam/trilium/wiki/Frontend-Basics](https://github.com/zadam/trilium/wiki/Frontend-Basics) \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md deleted file mode 100644 index 940617026..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md +++ /dev/null @@ -1,21 +0,0 @@ -# Building the editor -First, make sure Environment setup is set up. - -## Trigger the build - -``` -cd packages/ckeditor5-build-trilium -yarn build -``` - -This will trigger a change in the `build` directory. - -## Copy the build artifact to the main repo - -Go to `packages/ckeditor5-build-balloon-trilium/build` and copy `ckeditor.js` and `ckeditor.js.map` to `libraries/ckeditor` in the `Notes` repository. - -An example shell command to copy it: - -``` -cp build/ckeditor.* ~/Projects/TriliumNext/Notes/libraries/ckeditor/ -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md deleted file mode 100644 index 76819a12b..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md +++ /dev/null @@ -1,26 +0,0 @@ -# Environment setup -## Clone the repository - -To set up the repository: - -``` -git clone https://github.com/TriliumNext/trilium-ckeditor5.git -``` - -## Install dependencies - -First, install root dependencies: - -``` -cd trilium-ckeditor5 -yarn install -``` - -Secondly, install the Trilium build dependencies: - -``` -cd packages/ckeditor5-build-trilium -yarn install -``` - -To trigger the build, see Building the editor. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md deleted file mode 100644 index 6e7808f67..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md +++ /dev/null @@ -1,65 +0,0 @@ -# Updating to a newer version of CKEditor -## Before updating - -Make sure that all the plugins are compatible with this version:  Versions and external plugins. If not, they will need to be updated to the same version as the one you are updating, by altering their `package.json`. - -If the plugin is external to the Trilium organisation, it needs to be forked first. - -## Environment setup - -The first step is to add the CKEditor source as a remote. This only needs to be done once. - -``` -git remote add upstream ssh://git@github.com/ckeditor/ckeditor5.git -git fetch upstream -``` - -## Update steps - -Due to how the repository is structured, updates to the CKEditor are a bit difficult. - -1. `git fetch upstream` -2. Pick a version and merge with it: `git merge -X theirs v99.2.0` -3. When there are complicated conflicts, sometimes it's easier to take everything from the target version instead, for a given path: `git checkout v99.2.0 -- "packages/ckeditor5-list/**"`. -4. Go in `packages/ckeditor5-build-trilium/package.json` and run `node sync-version.js` to update the `package.json` with the new versions. Review and commit the change. -5. Follow again the dependency setup in Environment setup, as they have changed. -6. [Run the build](Building%20the%20editor.md) and check that it works. - -## Final steps - -1. Start the TriliumNext server -2. If updated to a newer version of CKEditor, check type `CKEDITOR_VERSION` in the browser/Electron console to ensure that the correct version is used. -3. Do a basic sanity check as well. -4. Commit and push the change on both sides (in the `trilium-ckeditor5` repo and in the `Notes` repo). - -## Troubleshooting client side errors - -These errors might show up when testing the Trilium app: - -``` -ReferenceError: CKEditor is not defined -``` - -Usually this is a side effect of another error, check the logs carefully to see if there is any other related error (perhaps a `CKEditorError`). - -* * * - -``` -Uncaught error: Message: CKEditorError: ckeditor-duplicated-modules -``` - -Most likely cause is one of the external plugins is incompatible with this version. - -For example, to disable the Math plugin, go to `packages/ckeditor5-build-trilium/src/config.ts` and modify: - -```diff --import Math from '@triliumnext/ckeditor5-math/src/math'; --import AutoformatMath from '@triliumnext/ckeditor5-math/src/autoformatmath'; - -export const COMMON_PLUGINS = [ -- Math, -- AutoformatMath, -] -``` - -In this case, make sure to align the version of all the external plugins with the one you are updating to, usually by forking the external plugin and updating its versions. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md deleted file mode 100644 index 2fe124c31..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md +++ /dev/null @@ -1,8 +0,0 @@ -# Versions and external plugins -## External plugins - -| | | | -| --- | --- | --- | -| trilium-ckeditor5 | 43.2.0 | | -| `ckeditor5-math` | | See ckeditor5-math. | -| | | | \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md deleted file mode 100644 index 91b6b265f..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md +++ /dev/null @@ -1,29 +0,0 @@ -# ckeditor5-math -
ckeditor5-math in action.
- -A fork of [isaul32/ckeditor5-math](https://github.com/isaul32/ckeditor5-math), which is the CKEditor5 plugin which adds the math functionality. The fork was created to handle #297: Insert Math appears to be broken. - -## Development environment - -* Tested on Node.js 20. -* The package manager is yarn 1 (v1.22.22 is known to be working fine for it at the time of writing). - -Important commands: - -* To check if the code has any formatting issues: `yarn lint` -* To start a live preview: `yarn start` -* To run the tests: `yarn test` - * Note that this requires Chromium, on NixOS this can be achieved by running a `nix-shell -p chromium`, and running `CHROME_BIN=$(which chromium) yarn test` inside it. - -## 📦 Packages - -The built artifact of the plugin is released by the CI and available on the [GitHub NPM registry](https://github.com/TriliumNext/ckeditor5-math/pkgs/npm/ckeditor5-math). - -Note that due to limitations on GitHub's registry, it is not possible to install this package without setting up a personal access token (even though the package itself is public). See [missing note] for more information. - -## ⬆️ Integrating with CKEditor - -1. Release a new version: Release management & continuous integration -2. In `trilium-ckeditor5`, go to `packages/ckeditor5-build-trilium/package.json` in the CKEditor repository and change the dependency of `@triliumnext/ckeditor5-math` to the newly released version. -3. Run `yarn install`. -4. Proceed with Building the editor to integrate everything into TriliumNext and then commit the change. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md deleted file mode 100644 index 1511f4bfc..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md +++ /dev/null @@ -1,16 +0,0 @@ -# Release management & continuous integration -To automate the release process, a GitHub workflow has been added which builds the package and releases it over to GitHub NPM registry. - -The workflow publishes a release whenever a tag with the correct format is pushed. - -The steps are as follows: - -1. Ensure that the source code is clean and ready for a release. -2. Go to `package.json` and bump the `version` field. -3. Commit the changes. -4. Tag the commit with `v1.2.3`, with the correct version number. -5. Push the changes. - -Then follow the CI and it should indicate success. Afterwards, check the [package](https://github.com/TriliumNext/ckeditor5-math/pkgs/npm/ckeditor5-math)section to ensure that the package is in the “Recent Versions” section. - -If the changes could benefit upstream, consider opening a pull request with the changes there as well. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md deleted file mode 100644 index b69003358..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md +++ /dev/null @@ -1,21 +0,0 @@ -# Updating with upstream -If there was a change in the upstream repository ([isaul32/ckeditor5-math](https://github.com/isaul32/ckeditor5-math)), it can be integrated as follows: - -1. Add the upstream as remote (`git remote add upstream ssh://git@github.com/isaul32/ckeditor5-math.git`). -2. Fetch the changes: `git fetch upstream` -3. Merge with a tag: `git merge v43.1.2` -4. Solve the conflict in `package.json` by: - 1. Taking the same version as the upcoming one and appending `-hotfix1`. - 2. Keeping the `@triliumnext/ckeditor5-math` name. -5. Install dependencies: `yarn install` -6. Check that the build works via `yarn prepublishOnly`. -7. Commit the changes, push them. -8. Release a version with Release management & continuous integration. - -## CI job not triggered after pushing all the upstream tags - -If the CI job was not triggered, you might have accidentally pushed a lot of tags using `git push --tags`. Manually delete the tag and push it again: - -```diff -git push -d origin v43.1.2-hotfix1 && git push --tags -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/1_Setting up authentication_.png b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/1_Setting up authentication_.png deleted file mode 100644 index 020472c6d..000000000 Binary files a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/1_Setting up authentication_.png and /dev/null differ diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md deleted file mode 100644 index 3ab98a39c..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md +++ /dev/null @@ -1,38 +0,0 @@ -# Running tests -## First-time run - -Before starting Playwright, it has to be installed locally via: - -``` -npx playwright install -``` - -## Starting the integration test server - -There are two types of integration test servers: - -* `npm run integration-mem-db` will run a server with dev mode disabled. - * This is usually what the end user will see when accessing a server instance. - * It will not test the Electron/desktop side of the application. - * Changes to the public scripts will not take effect until running `npm run webpack`. -* `npm run integration-mem-db-dev` will run a server with dev mode enabled. - * This is usually what a dev sees when running `npm run start-server`. - * The difference with the production one is that the assets are loaded directly from files and as such it does not require `npm run webpack` to see changes. - -Either options will open up a server on [localhost:8082](http://localhost:8082) that can be accessed either manually via the browser or via Playwright. - -When asked for a password, the password is `demo1234`. - -## Starting the interactive test runner - -After starting the integration test server, to run the Playwright UI, run in the terminal: - -``` -npx playwright test --ui -``` - -It is also possible to run the interactive code generator instead: - -``` -npx playwright codegen -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md deleted file mode 100644 index 4df7880fe..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md +++ /dev/null @@ -1,12 +0,0 @@ -# Setting up authentication -There is a setup test that stores the authentication token so that it can be reused throughout all the tests. - -If tests fail due to being stuck on login, then it must be run. - -To run it manually press “all” near the “Status:” text on top-left of the window - -
- -Then check “setup” and look for `auth.setup.ts` and press its corresponding Run button: - -
\ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication_.png b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication_.png deleted file mode 100644 index 4b260dfbc..000000000 Binary files a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication_.png and /dev/null differ diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing.md b/docs/Developer Guide/Developer Guide/Testing.md similarity index 77% rename from docs/Developer Guide/Developer Guide/Old documentation/Testing.md rename to docs/Developer Guide/Developer Guide/Testing.md index 95efd9919..a1f8a1983 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Testing.md +++ b/docs/Developer Guide/Developer Guide/Testing.md @@ -17,17 +17,14 @@ Note that some integration tests rely on an in-memory database in order to funct ### REST API testing for the server -Some original work was done by Zadam in `/test-etapi`, using `.http` files. - -New effort using `vitest` and `supertest` to initialize the Express server and run assertions without having to make actual requests to the server. +API tests are handled via `vitest` and `supertest` to initialize the Express server and run assertions without having to make actual requests to the server. An important aspect is that we have access to the Express `app` which allows for interesting assertions such as checking the state of the server, registering debug middleware and so on. -One example is `src/share/routes.spec.ts`. +One example is `src/share/routes.spec.ts`, or for the ETAPI in `apps/server/spec/etapi`. These integration tests are run alongside unit tests. ## End-to-end testing -* This tests both the client and the server, by running the server and then using Playwright to query the state of the page. -* These can be found in `/e2e`. \ No newline at end of file +See e2e tests. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md b/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md new file mode 100644 index 000000000..387940158 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md @@ -0,0 +1,31 @@ +# End-to-end tests +* This tests both the client and the server, by running the server and then using Playwright to query the state of the page. +* These can be found in `apps/server-e2e` and `apps/desktop/e2e`. + +## First-time run + +Before starting Playwright, it has to be installed locally via: + +``` +pnpm playwright install +``` + +## Starting the integration test server + +Simply run `pnpm e2e` in one of the e2e projects. + +The integration server doesn't have authentication enabled to avoid login issues. + +## Starting the interactive test runner + +After starting the integration test server, to run the Playwright UI, run in the terminal: + +``` +pnpm playwright test --ui +``` + +It is also possible to run the interactive code generator instead: + +``` +pnpm playwright codegen +``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Testing/Integration testing.md b/docs/Developer Guide/Developer Guide/Testing/Integration testing.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Test database.md b/docs/Developer Guide/Developer Guide/Testing/Test database.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Test database.md rename to docs/Developer Guide/Developer Guide/Testing/Test database.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Troubleshooting/Error [TransformError] The pac.md b/docs/Developer Guide/Developer Guide/Troubleshooting/Error [TransformError] The pac.md similarity index 99% rename from docs/Developer Guide/Developer Guide/Old documentation/Troubleshooting/Error [TransformError] The pac.md rename to docs/Developer Guide/Developer Guide/Troubleshooting/Error [TransformError] The pac.md index 8a93a52be..82a5d93a8 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Troubleshooting/Error [TransformError] The pac.md +++ b/docs/Developer Guide/Developer Guide/Troubleshooting/Error [TransformError] The pac.md @@ -36,5 +36,5 @@ The solution is to remove `node_modules` and reinstall all dependencies: ``` rm -r node_modules -npm install +pnpm install ``` \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 24e168341..a38998354 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14081,6 +14081,33 @@ "format": "markdown", "dataFileName": "Safe mode.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "HAIOFBoYIIdO", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "HAIOFBoYIIdO" + ], + "title": "Nightly release", + "notePosition": 260, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-moon", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Nightly release.md", + "attachments": [] } ] }, @@ -14617,152 +14644,238 @@ { "type": "label", "name": "iconClass", - "value": "bx bx-info-circle", + "value": "bx bx-window", "isInheritable": false, "position": 40 } ], "format": "markdown", "dataFileName": "Frontend Basics.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "es8OU2GuguFU", - "notePath": [ - "pOsGYCXsbNQG", - "CdNpE2pqjmI6", - "es8OU2GuguFU" - ], - "title": "Examples", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "examples", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-code-alt", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", "attachments": [], - "dirFileName": "Examples", + "dirFileName": "Frontend Basics", "children": [ { "isClone": false, - "noteId": "TjLYAo3JMO8X", + "noteId": "MgibgPcfeuGz", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "es8OU2GuguFU", - "TjLYAo3JMO8X" + "yIhgI5H7A2Sm", + "MgibgPcfeuGz" ], - "title": "\"New Task\" launcher button", + "title": "Custom Widgets", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", - "mime": "text/html", + "mime": "text/markdown", "attributes": [ { - "type": "relation", - "name": "internalLink", - "value": "xYjQUYhpbUEW", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "xYmIYSP6wE3F", + "type": "label", + "name": "shareAlias", + "value": "custom-widget", "isInheritable": false, "position": 20 }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "m1lbrzyKDaRB", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "yIhgI5H7A2Sm", - "isInheritable": false, - "position": 70 - }, { "type": "label", "name": "iconClass", - "value": "bx bx-task", + "value": "bx bxs-widget", "isInheritable": false, - "position": 80 - }, - { - "type": "label", - "name": "shareAlias", - "value": "new-task-button", - "isInheritable": false, - "position": 90 + "position": 30 } ], "format": "markdown", - "dataFileName": "New Task launcher button.md", - "attachments": [ + "dataFileName": "Custom Widgets.md", + "attachments": [], + "dirFileName": "Custom Widgets", + "children": [ { - "attachmentId": "9C2JA6tdtRpN", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "New Task launcher button_i.png" + "isClone": false, + "noteId": "YNxAqkI5Kg1M", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "YNxAqkI5Kg1M" + ], + "title": "Word count widget", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "word-count", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Word count widget.md", + "attachments": [ + { + "attachmentId": "JhM9NWfebzPi", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Word count widget_image.png" + } + ] + }, + { + "isClone": false, + "noteId": "SynTBQiBsdYJ", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "SynTBQiBsdYJ" + ], + "title": "Widget Basics", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BFs8mudNFgCS", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "widget-basics", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Widget Basics.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "M8IppdwVHSjG", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "M8IppdwVHSjG" + ], + "title": "Right pane widget", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "right-pane-widget", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Right pane widget.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VqGQnnPGnqAU", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "VqGQnnPGnqAU" + ], + "title": "CSS", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "css", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "CSS.md", + "attachments": [] } ] }, { "isClone": false, - "noteId": "7kZPMD0uFwkH", + "noteId": "es8OU2GuguFU", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "es8OU2GuguFU", - "7kZPMD0uFwkH" + "yIhgI5H7A2Sm", + "es8OU2GuguFU" ], - "title": "Downloading responses from Google Forms", + "title": "Examples", "notePosition": 20, "prefix": null, "isExpanded": false, @@ -14772,49 +14885,182 @@ { "type": "label", "name": "shareAlias", - "value": "responses-from-google-forms", + "value": "examples", "isInheritable": false, "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Downloading responses from Goo.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "DL92EjAaXT26", - "notePath": [ - "pOsGYCXsbNQG", - "CdNpE2pqjmI6", - "es8OU2GuguFU", - "DL92EjAaXT26" - ], - "title": "Using promoted attributes to configure scripts", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ + }, { "type": "label", - "name": "shareAlias", - "value": "promoted-attributes-config", + "name": "iconClass", + "value": "bx bx-code-alt", "isInheritable": false, - "position": 20 + "position": 30 } ], "format": "markdown", - "dataFileName": "Using promoted attributes to c.md", - "attachments": [ + "attachments": [], + "dirFileName": "Examples", + "children": [ { - "attachmentId": "7P3jzVEa1mk7", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Using promoted attributes .png" + "isClone": false, + "noteId": "TjLYAo3JMO8X", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "es8OU2GuguFU", + "TjLYAo3JMO8X" + ], + "title": "\"New Task\" launcher button", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "xYjQUYhpbUEW", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m1lbrzyKDaRB", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yIhgI5H7A2Sm", + "isInheritable": false, + "position": 70 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-task", + "isInheritable": false, + "position": 80 + }, + { + "type": "label", + "name": "shareAlias", + "value": "new-task-button", + "isInheritable": false, + "position": 90 + } + ], + "format": "markdown", + "dataFileName": "New Task launcher button.md", + "attachments": [ + { + "attachmentId": "9C2JA6tdtRpN", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "New Task launcher button_i.png" + } + ] + }, + { + "isClone": false, + "noteId": "7kZPMD0uFwkH", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "es8OU2GuguFU", + "7kZPMD0uFwkH" + ], + "title": "Downloading responses from Google Forms", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "responses-from-google-forms", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Downloading responses from Goo.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "DL92EjAaXT26", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "es8OU2GuguFU", + "DL92EjAaXT26" + ], + "title": "Using promoted attributes to configure scripts", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "promoted-attributes-config", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Using promoted attributes to c.md", + "attachments": [ + { + "attachmentId": "7P3jzVEa1mk7", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Using promoted attributes .png" + } + ] } ] } @@ -14822,162 +15068,76 @@ }, { "isClone": false, - "noteId": "GPERMystNGTB", + "noteId": "SPirpZypehBG", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "GPERMystNGTB" + "SPirpZypehBG" ], - "title": "Events", - "notePosition": 70, + "title": "Backend scripts", + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", - "mime": "text/markdown", + "mime": "text/html", "attributes": [ { - "type": "relation", - "name": "internalLink", - "value": "CdNpE2pqjmI6", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "c5xB8m4g2IY6", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", + "type": "label", + "name": "shareAlias", + "value": "backend-basics", "isInheritable": false, "position": 30 }, - { - "type": "label", - "name": "shareAlias", - "value": "events", - "isInheritable": false, - "position": 10 - }, { "type": "label", "name": "iconClass", - "value": "bx bx-rss", + "value": "bx bx-server", "isInheritable": false, - "position": 20 + "position": 40 } ], "format": "markdown", - "dataFileName": "Events.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "MgibgPcfeuGz", - "notePath": [ - "pOsGYCXsbNQG", - "CdNpE2pqjmI6", - "MgibgPcfeuGz" - ], - "title": "Custom Widgets", - "notePosition": 80, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "custom-widget", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bxs-widget", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Custom Widgets.md", "attachments": [], - "dirFileName": "Custom Widgets", + "dirFileName": "Backend scripts", "children": [ { "isClone": false, - "noteId": "YNxAqkI5Kg1M", + "noteId": "fZ2IGYFXjkEy", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "MgibgPcfeuGz", - "YNxAqkI5Kg1M" + "SPirpZypehBG", + "fZ2IGYFXjkEy" ], - "title": "Word count widget", + "title": "Server-side imports", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "6tZeKvSHEUiB", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 30 - }, { "type": "label", "name": "shareAlias", - "value": "word-count", + "value": "server-imports", "isInheritable": false, - "position": 40 + "position": 20 } ], "format": "markdown", - "dataFileName": "Word count widget.md", - "attachments": [ - { - "attachmentId": "JhM9NWfebzPi", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Word count widget_image.png" - } - ] + "dataFileName": "Server-side imports.md", + "attachments": [] }, { "isClone": false, - "noteId": "SynTBQiBsdYJ", + "noteId": "GPERMystNGTB", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "MgibgPcfeuGz", - "SynTBQiBsdYJ" + "SPirpZypehBG", + "GPERMystNGTB" ], - "title": "Widget Basics", + "title": "Events", "notePosition": 20, "prefix": null, "isExpanded": false, @@ -14987,34 +15147,41 @@ { "type": "relation", "name": "internalLink", - "value": "zEY4DaJG4YT5", + "value": "CdNpE2pqjmI6", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BFs8mudNFgCS", + "value": "c5xB8m4g2IY6", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "GLks18SNjxmC", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 30 }, { "type": "label", "name": "shareAlias", - "value": "widget-basics", + "value": "events", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rss", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "Widget Basics.md", + "dataFileName": "Events.md", "attachments": [] } ] @@ -15028,7 +15195,7 @@ "GLks18SNjxmC" ], "title": "Script API", - "notePosition": 90, + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -15191,7 +15358,7 @@ "vElnKeDNPSVl" ], "title": "Logging", - "notePosition": 100, + "notePosition": 110, "prefix": null, "isExpanded": false, "type": "text", diff --git a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md index 20cf37c5e..13a4a5d94 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md +++ b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md @@ -15,7 +15,7 @@ New tasks are created in the TODO note which has `~child:template` [relation](.. ### Attributes -Task template defines several [promoted attributes](../Attributes/Promoted%20Attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](../../Scripting/Events.md) handler which is run on attribute change. This [script](../../Scripting.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. +Task template defines several [promoted attributes](../Attributes/Promoted%20Attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](../../Scripting/Backend%20scripts/Events.md) handler which is run on attribute change. This [script](../../Scripting.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. ### New task button diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md index 1a90f31cb..cb68dab93 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md @@ -39,4 +39,4 @@ This is a list of labels that Trilium natively supports. > [!TIP] > Some labels presented here end with a `*`. That means that there are multiple labels with the same prefix, consult the specific page linked in the description of that label for more information. -
LabelDescription
disableVersioningDisables automatic creation of Note Revisions for a particular note. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting.
versioningLimitLimits the maximum number of Note Revisions for a particular note, overriding the global settings.
calendarRootMarks the note which should be used as root for Day Notes. Only one should be marked as such.
archivedHides notes from default search results and dialogs. Archived notes can optionally be hidden in the Note Tree.
excludeFromExportExcludes this note and its children when exporting.
run, runOnInstance, runAtHourSee Events.
disableInclusionScripts with this label won't be included into parent script execution.
sorted

Keeps child notes sorted by title alphabetically.

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

sortDirection

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

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

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

Examples:

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

See Default Note Title for more info.

templateThis note will appear in the selection of available template when creating new note. See Templates for more information.
tocControls the display of the Table of contents for a given note. #toc or #toc=show to always display the table of contents, #toc=false to always hide it.
colordefines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f
Note: this color may be automatically adjusted when displayed to ensure sufficient contrast with the background.
keyboardShortcutDefines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.
keepCurrentHoistingOpening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.
executeButtonTitle of the button which will execute the current code note
executeDescriptionLonger description of the current code note displayed together with the execute button
excludeFromNoteMapNotes with this label will be hidden from the Note Map.
newNotesOnTopNew notes will be created at the top of the parent note, not on the bottom.
hideHighlightWidgetHides the Highlights list widget
hideChildrenOverviewHides the Note List for that particular note.
printLandscapeWhen exporting to PDF, changes the orientation of the page to landscape instead of portrait.
printPageSizeWhen exporting to PDF, changes the size of the page. Supported values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
geolocationIndicates the latitude and longitude of a note, to be displayed in a Geo Map.
calendar:*Defines specific options for the Calendar View.
viewTypeSets the view of child notes (e.g. grid or list). See Note List for more information.
\ No newline at end of file +
LabelDescription
disableVersioningDisables automatic creation of Note Revisions for a particular note. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting.
versioningLimitLimits the maximum number of Note Revisions for a particular note, overriding the global settings.
calendarRootMarks the note which should be used as root for Day Notes. Only one should be marked as such.
archivedHides notes from default search results and dialogs. Archived notes can optionally be hidden in the Note Tree.
excludeFromExportExcludes this note and its children when exporting.
run, runOnInstance, runAtHourSee Events.
disableInclusionScripts with this label won't be included into parent script execution.
sorted

Keeps child notes sorted by title alphabetically.

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

sortDirection

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

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

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

Examples:

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

See Default Note Title for more info.

templateThis note will appear in the selection of available template when creating new note. See Templates for more information.
tocControls the display of the Table of contents for a given note. #toc or #toc=show to always display the table of contents, #toc=false to always hide it.
colordefines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f
Note: this color may be automatically adjusted when displayed to ensure sufficient contrast with the background.
keyboardShortcutDefines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.
keepCurrentHoistingOpening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.
executeButtonTitle of the button which will execute the current code note
executeDescriptionLonger description of the current code note displayed together with the execute button
excludeFromNoteMapNotes with this label will be hidden from the Note Map.
newNotesOnTopNew notes will be created at the top of the parent note, not on the bottom.
hideHighlightWidgetHides the Highlights list widget
hideChildrenOverviewHides the Note List for that particular note.
printLandscapeWhen exporting to PDF, changes the orientation of the page to landscape instead of portrait.
printPageSizeWhen exporting to PDF, changes the size of the page. Supported values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
geolocationIndicates the latitude and longitude of a note, to be displayed in a Geo Map.
calendar:*Defines specific options for the Calendar View.
viewTypeSets the view of child notes (e.g. grid or list). See Note List for more information.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md index 454e7d007..6e1e9aa1f 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md @@ -43,7 +43,7 @@ These relations are supported and used internally by Trilium. | Label | Description | | --- | --- | -| `runOn*` | See Events | +| `runOn*` | See Events | | `template` | note's attributes will be inherited even without a parent-child relationship, note's content and subtree will be added to instance notes if empty. See documentation for details. | | `inherit` | note's attributes will be inherited even without a parent-child relationship. See Templates for a similar concept. See Attribute Inheritance in the documentation. | | `renderNote` | notes of type Render Note will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered | diff --git a/docs/User Guide/User Guide/Advanced Usage/Nightly release.md b/docs/User Guide/User Guide/Advanced Usage/Nightly release.md new file mode 100644 index 000000000..c9c2aac09 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Nightly release.md @@ -0,0 +1,34 @@ +# Nightly release +Nightly releases are versions built every day, containing the latest improvements and bugfixes, directly from the main development branch. These versions are generally useful in preparation for a release, to ensure that there are no significant bugs that need to be addressed first, or they can be used to confirm whether a particular bug is fixed or feature is well implemented. + +## Regarding the stability + +Despite being on a development branch, generally the main branch is pretty stable since PRs are tested before they are merged. If you notice any issues, feel free to report them either via a ticket or via the Matrix. + +## Downloading the nightly release manually + +Go to [github.com/TriliumNext/Trilium/releases/tag/nightly](https://github.com/TriliumNext/Trilium/releases/tag/nightly) and look for the artifacts starting with `TriliumNotes-main`. Choose the appropriate one for your platform (e.g. `windows-x64.zip`). + +Depending on your use case, you can either test the portable version or even use the installer. + +> [!NOTE] +> If you choose the installable version (e.g. the .exe on Windows), it will replace your stable installation. + +> [!IMPORTANT] +> By default, the nightly uses the same database as the production version. Generally you could easily downgrade if needed. However, if there are changes to the database or sync version, it will not be possible to downgrade without having to restore from a backup. + +## Automatically download and install the latest nightly + +This is pretty useful if you are a beta tester that wants to periodically update their version: + +On Ubuntu: + +``` +#!/usr/bin/env bash + +name=TriliumNotes-linux-x64-nightly.deb +rm -f $name* +wget https://github.com/TriliumNext/Trilium/releases/download/nightly/$name +sudo apt-get install ./$name +rm $name +``` \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md index 795e02602..d0ba7aecf 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md @@ -56,7 +56,7 @@ Right click either the _Available launchers_ or _Visible launchers_ sections and 2. Optionally, set a `keyboardShortcut` to trigger the launcher. 3. **Custom Widget** - Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Scripting/Custom%20Widgets/Widget%20Basics.md) for more information. + Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Scripting/Frontend%20Basics/Custom%20Widgets/Widget%20Basics.md) for more information. 4. **Spacers** Launchers that create some distance between other launchers for better visual distinction. diff --git a/docs/User Guide/User Guide/Scripting.md b/docs/User Guide/User Guide/Scripting.md index f5724f8a3..54a08c16b 100644 --- a/docs/User Guide/User Guide/Scripting.md +++ b/docs/User Guide/User Guide/Scripting.md @@ -12,7 +12,7 @@ So we have frontend and backend, each with their own set of responsibilities, bu ## Use cases -* "New Task" launcher button +* "New Task" launcher button ## Action handler @@ -34,7 +34,7 @@ You can see more scripting with explanation in Events. +See Events. ## Script API diff --git a/docs/User Guide/User Guide/Scripting/Events.md b/docs/User Guide/User Guide/Scripting/Backend scripts/Events.md similarity index 78% rename from docs/User Guide/User Guide/Scripting/Events.md rename to docs/User Guide/User Guide/Scripting/Backend scripts/Events.md index 6dbeeeba6..227acd5f1 100644 --- a/docs/User Guide/User Guide/Scripting/Events.md +++ b/docs/User Guide/User Guide/Scripting/Backend scripts/Events.md @@ -1,15 +1,15 @@ # Events -[Script](../Scripting.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. +[Script](../../Scripting.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. ## Global events Global events are attached to the script note via label. Simply create e.g. "run" label with some of these values and script note will be executed once the event occurs. -
LabelDescription
run

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

  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • backendStartup - when Trilium backend starts up
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour, on the back-end.
  • daily - run once a day, on the back-end
runOnInstanceSpecifies that the script should only run on a particular Trilium instance.
runAtHourOn which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.
+
LabelDescription
run

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

  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • backendStartup - when Trilium backend starts up
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour, on the back-end.
  • daily - run once a day, on the back-end
runOnInstanceSpecifies that the script should only run on a particular Trilium instance.
runAtHourOn which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.
## Entity events -Other events are bound to some entity, these are defined as [relations](../Advanced%20Usage/Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). +Other events are bound to some entity, these are defined as [relations](../../Advanced%20Usage/Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). | Relation | Description | | --- | --- | diff --git a/docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md b/docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md new file mode 100644 index 000000000..ddc795aa0 --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md @@ -0,0 +1,11 @@ +# Server-side imports +Older versions of Trilium Notes allowed the use of Common.js module imports inside backend scripts, such as: + +``` +const isBetween = require('dayjs/plugin/isBetween') +api.dayjs.extend(isBetween) +``` + +For newer versions, Node.js imports are **not officially supported anymore**, since we've added a bundler which makes it more difficult to reuse dependencies. + +Theoretically it's still possible to use imports by manually setting up a `node_modules` in the server directory via `npm` or `pnpm`. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md b/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md deleted file mode 100644 index 85e834b8b..000000000 --- a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md +++ /dev/null @@ -1,47 +0,0 @@ -# "New Task" launcher button -In this example we are going to extend the functionality of Task Manager showcase (which comes by default with Trilium) by adding a button in the Launch Bar  (![](New%20Task%20launcher%20button_i.png)) to create a new task automatically and open it. - -## Creating the note - -1. First, create a new Code note type with the _JS frontend_ language. -2. Define the `#run=frontendStartup` label in Attributes. - -## Content of the script - -Copy-paste the following script: - -```javascript -api.addButtonToToolbar({ - title: "New task", - icon: "task", - shortcut: "alt+n", - action: async () => { - const taskNoteId = await api.runOnBackend(() => { - const todoRootNote = api.getNoteWithLabel("taskTodoRoot"); - const resp = api.createTextNote(todoRootNote.noteId, "New task", "") - return resp.note.noteId; - }); - - await api.waitUntilSynced(); - await api.activateNewNote(taskNoteId); - } -}); -``` - -## Testing the functionality - -Since we set the script to be run on start-up, all we need to do is to [refresh the application](../../Troubleshooting/Refreshing%20the%20application.md). - -## Understanding how the script works - -
api.addButtonToToolbar({
-	title: "New task",
-    icon: "task",
-    shortcut: "alt+n",
-    action: async () => {
-    	// [...]
-    }
-});

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

  • A title
  • A corresponding boxicons icon (without the bx- prefix).
  • Optionally, a keyboard shortcut to assign to it.
  • The action, which will be executed when the button is pressed.
const taskNoteId = await api.runOnBackend(() => {
-    // Shown below.           
-    return resp.note.noteId;
-});
  • This portion of code is actually executed on the server (backend) and not on the client (i.e. browser).
    • The reason is that the creating notes is the responsibility of the server.
  • Here we can also see that it is possible to return results from the server execution and read them in the client (taskNoteId).
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
  • Here we identify a note with the label #taskTodoRoot. This is how the Task Manager showcase knows where to place all the different tasks.
  • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
const resp = api.createTextNote(todoRootNote.noteId, "New task", "")
  • We create a new child note within the to-do root note (first argument) with the title “New task" (second argument) and no content by default (third argument).
await api.waitUntilSynced();
  • Back on the client, since we created a new note on the server, we now need to wait for the change to be reflected in the client.
await api.activateNewNote(taskNoteId);
  • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Frontend Basics.md b/docs/User Guide/User Guide/Scripting/Frontend Basics.md index 2557deed7..13c47823d 100644 --- a/docs/User Guide/User Guide/Scripting/Frontend Basics.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics.md @@ -54,4 +54,4 @@ Conversely to scripts, widgets do have some specific requirements in order to wo ### Tutorial -For more information on building widgets, take a look at [Widget Basics](Custom%20Widgets/Widget%20Basics.md). \ No newline at end of file +For more information on building widgets, take a look at [Widget Basics](Frontend%20Basics/Custom%20Widgets/Widget%20Basics.md). \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.md similarity index 100% rename from docs/User Guide/User Guide/Scripting/Custom Widgets.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/CSS.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/CSS.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/Right pane widget.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/Right pane widget.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.md diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.md similarity index 75% rename from docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.md index b6e2a95ca..474cba983 100644 --- a/docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.md @@ -22,10 +22,10 @@ module.exports = new MyWidget(); To implement this widget: 1. Create a new `JS Frontend` note in Trilium and paste in the code above. -2. Assign the `#widget` [attribute](../../Advanced%20Usage/Attributes.md) to the [note](../../Basic%20Concepts%20and%20Features/Notes.md). +2. Assign the `#widget` [attribute](../../../Advanced%20Usage/Attributes.md) to the [note](../../../Basic%20Concepts%20and%20Features/Notes.md). 3. Restart Trilium or reload the window. -To verify that the widget is working, open the developer tools (`Cmd` + `Shift` + `I`) and run `document.querySelector("#my-widget")`. If the element is found, the widget is functioning correctly. If `undefined` is returned, double-check that the [note](../../Basic%20Concepts%20and%20Features/Notes.md) has the `#widget` [attribute](../../Advanced%20Usage/Attributes.md). +To verify that the widget is working, open the developer tools (`Cmd` + `Shift` + `I`) and run `document.querySelector("#my-widget")`. If the element is found, the widget is functioning correctly. If `undefined` is returned, double-check that the [note](../../../Basic%20Concepts%20and%20Features/Notes.md) has the `#widget` [attribute](../../../Advanced%20Usage/Attributes.md). ### Step 2: Adding an UI Element @@ -85,7 +85,7 @@ After reloading Trilium, the button should now appear at the bottom left of the ### Step 4: Adding User Interaction -Let’s make the button interactive by showing a message when it’s clicked. We'll use the `api.showMessage` method from the [Script API](../Script%20API.md). +Let’s make the button interactive by showing a message when it’s clicked. We'll use the `api.showMessage` method from the [Script API](../../Script%20API.md). ``` class MyWidget extends api.BasicWidget { @@ -108,4 +108,11 @@ class MyWidget extends api.BasicWidget { module.exports = new MyWidget(); ``` -Reload the application one last time. When you click the button, a "Hello World!" message should appear, confirming that your widget is fully functional. \ No newline at end of file +`parentWidget()` can be given the following values: + +* `left-pane` - This renders the widget on the left side of the screen where the note tree lives. +* `center-pane` - This renders the widget in the center of the layout in the same location that notes and splits appear. +* `note-detail-pane` - This renders the widget _with_ the note in the center pane. This means it can appear multiple times with splits. +* `right-pane` - This renders the widget to the right of any opened notes. + +[Reload](../../../Troubleshooting/Refreshing%20the%20application.md) the application one last time. When you click the button, a "Hello World!" message should appear, confirming that your widget is fully functional. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.md similarity index 88% rename from docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.md index ad8c1c351..8b6be5684 100644 --- a/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.md @@ -1,8 +1,8 @@ # Word count widget > [!TIP] -> This widget is also present in new installations in the Demo Notes. +> This widget is also present in new installations in the Demo Notes. -Create a Code note of type JS frontend and **give it a** `#widget` **label**. +Create a Code note of type JS frontend and **give it a** `#widget` **label**. ``` /* @@ -82,7 +82,7 @@ class WordCountWidget extends api.NoteContextAwareWidget { module.exports = new WordCountWidget(); ``` -After you make changes it is necessary to [restart Trilium](../../Troubleshooting/Refreshing%20the%20application.md) so that the layout can be rebuilt. +After you make changes it is necessary to [restart Trilium](../../../Troubleshooting/Refreshing%20the%20application.md) so that the layout can be rebuilt. At the bottom of the note you can see the resulting widget: diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png similarity index 100% rename from docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png diff --git a/docs/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.md similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.md diff --git a/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md new file mode 100644 index 000000000..6740c047f --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md @@ -0,0 +1,47 @@ +# "New Task" launcher button +In this example we are going to extend the functionality of Task Manager showcase (which comes by default with Trilium) by adding a button in the Launch Bar  (![](New%20Task%20launcher%20button_i.png)) to create a new task automatically and open it. + +## Creating the note + +1. First, create a new Code note type with the _JS frontend_ language. +2. Define the `#run=frontendStartup` label in Attributes. + +## Content of the script + +Copy-paste the following script: + +```javascript +api.addButtonToToolbar({ + title: "New task", + icon: "task", + shortcut: "alt+n", + action: async () => { + const taskNoteId = await api.runOnBackend(() => { + const todoRootNote = api.getNoteWithLabel("taskTodoRoot"); + const resp = api.createTextNote(todoRootNote.noteId, "New task", "") + return resp.note.noteId; + }); + + await api.waitUntilSynced(); + await api.activateNewNote(taskNoteId); + } +}); +``` + +## Testing the functionality + +Since we set the script to be run on start-up, all we need to do is to [refresh the application](../../../Troubleshooting/Refreshing%20the%20application.md). + +## Understanding how the script works + +
api.addButtonToToolbar({
+	title: "New task",
+    icon: "task",
+    shortcut: "alt+n",
+    action: async () => {
+    	// [...]
+    }
+});

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

  • A title
  • A corresponding boxicons icon (without the bx- prefix).
  • Optionally, a keyboard shortcut to assign to it.
  • The action, which will be executed when the button is pressed.
const taskNoteId = await api.runOnBackend(() => {
+    // Shown below.           
+    return resp.note.noteId;
+});
  • This portion of code is actually executed on the server (backend) and not on the client (i.e. browser).
    • The reason is that the creating notes is the responsibility of the server.
  • Here we can also see that it is possible to return results from the server execution and read them in the client (taskNoteId).
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
  • Here we identify a note with the label #taskTodoRoot. This is how the Task Manager showcase knows where to place all the different tasks.
  • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
const resp = api.createTextNote(todoRootNote.noteId, "New task", "")
  • We create a new child note within the to-do root note (first argument) with the title “New task" (second argument) and no content by default (third argument).
await api.waitUntilSynced();
  • Back on the client, since we created a new note on the server, we now need to wait for the change to be reflected in the client.
await api.activateNewNote(taskNoteId);
  • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png diff --git a/docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png diff --git a/docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.md similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.md diff --git a/docs/User Guide/User Guide/Troubleshooting.md b/docs/User Guide/User Guide/Troubleshooting.md index f439d1185..7ef4d2716 100644 --- a/docs/User Guide/User Guide/Troubleshooting.md +++ b/docs/User Guide/User Guide/Troubleshooting.md @@ -21,7 +21,7 @@ TRILIUM_START_NOTE_ID=root ./trilium ## Broken Script Prevents Application Startup -If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Scripting/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: +If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Scripting/Frontend%20Basics/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: ``` TRILIUM_SAFE_MODE=true ./trilium