From 2cd69cc57a653938ec271dfbece041df8797b4cb Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 12 Apr 2025 01:38:51 +0300 Subject: [PATCH] chore(docs): remove old documentation --- bin/docs/.env.example | 3 - bin/docs/.gitignore | 2 - bin/docs/assets/v0.63.6/app-dist/share.js | 27 - .../libraries/ckeditor/ckeditor-content.css | 554 ---- .../v0.63.6/libraries/normalize.min.css | 148 - bin/docs/assets/v0.63.6/stylesheets/share.css | 165 -- bin/docs/index.template.html | 10 - bin/docs/prepare.sh | 43 - bin/docs/preview.sh | 8 - docs/!!!meta.json | 2631 ----------------- docs/1l1f6WZbaBEZ.html | 831 ------ docs/1pOWnHdGAuWR.html | 866 ------ docs/3eTu21fjtZkj.html | 842 ------ docs/3jc1nUXyteo0.html | 833 ------ docs/4FXLAtcPhZFo.html | 838 ------ docs/4yYHqKbLovVX.html | 857 ------ docs/6x42mhlfLo0o.html | 833 ------ docs/8jWguCtuKsAt.html | 855 ------ docs/B8hxg4e66cVL.html | 907 ------ docs/BhE2WFknKKHG.html | 833 ------ docs/C09Dou56ffMe.html | 833 ------ docs/FJ4VR6G2M6VD.html | 831 ------ docs/FSZoX3cJlJE7.html | 833 ------ docs/GMta9hBHsXHQ.html | 833 ------ docs/IuxV242YGaN5.html | 831 ------ docs/KRC2O84LekPz.html | 833 ------ docs/KbwD5mDpD4CV.html | 833 ------ docs/MUGBo4n67kBI.html | 835 ------ docs/PHqgH8FCfcod.html | 833 ------ docs/QSkfVssHIngA.html | 831 ------ docs/QXCi6Y1SYulw.html | 881 ------ docs/QYMncZf5Bu3D.html | 833 ------ docs/U5RtMeGPeZ29.html | 842 ------ docs/UDBwK5Fhr2CT.html | 833 ------ docs/UTB518X6X9Uh.html | 837 ------ docs/VS22Hq5PBFNf.html | 847 ------ docs/VbDoDdiHEemi.html | 857 ------ docs/Vy1PbjSkUast.html | 833 ------ docs/WKn3hLGmKmiH.html | 852 ------ docs/X4N03xLYEWnN.html | 838 ------ docs/XxqZW6JjkW2g.html | 833 ------ docs/Z9N9OKBXXLFW.html | 833 ------ docs/ZlxZh8NH5frM.html | 862 ------ .../attachments/27Z989bSFWAc/image/image.png | Bin 16206 -> 0 bytes .../attachments/XEUUvzBxh89z/image/image.png | Bin 4026 -> 0 bytes docs/assets/v0.63.6/app-dist/share.js | 23 - .../libraries/ckeditor/ckeditor-content.css | 551 ---- .../v0.63.6/libraries/normalize.min.css | 2 - docs/assets/v0.63.6/stylesheets/share.css | 165 -- docs/biDJ9KgbWLgt.html | 833 ------ docs/btM6L9JtG301.html | 833 ------ docs/bzQfhyzDo3Xz.html | 833 ------ docs/cemIoFLfEGPO.html | 831 ------ docs/d3dnvVOhur16.html | 833 ------ docs/favicon.ico | Bin 113456 -> 0 bytes docs/hkrBX8KE1HQl.html | 860 ------ docs/icQBu8R1ij57.html | 834 ------ docs/inGKXCChkVYX.html | 833 ------ docs/index.html | 10 - docs/jvdjFBOCCrOa.html | 833 ------ docs/kAfgZERKtVhU.html | 833 ------ docs/mPGbEmYGitWe.html | 833 ------ docs/rU1hxvgqlA9x.html | 842 ------ docs/s5gsYTbPQr6c.html | 864 ------ docs/wCxCJB3hhojs.html | 833 ------ docs/wxCwZ1P2SGCx.html | 833 ------ docs/xtBYDVZPb0gr.html | 842 ------ docs/y2ido6E6tZ0V.html | 833 ------ docs/zCDxk5VFdsqg.html | 887 ------ docs/zpR91YHYs6lL.html | 833 ------ 70 files changed, 48100 deletions(-) delete mode 100644 bin/docs/.env.example delete mode 100644 bin/docs/.gitignore delete mode 100644 bin/docs/assets/v0.63.6/app-dist/share.js delete mode 100644 bin/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css delete mode 100644 bin/docs/assets/v0.63.6/libraries/normalize.min.css delete mode 100644 bin/docs/assets/v0.63.6/stylesheets/share.css delete mode 100644 bin/docs/index.template.html delete mode 100755 bin/docs/prepare.sh delete mode 100755 bin/docs/preview.sh delete mode 100644 docs/!!!meta.json delete mode 100644 docs/1l1f6WZbaBEZ.html delete mode 100644 docs/1pOWnHdGAuWR.html delete mode 100644 docs/3eTu21fjtZkj.html delete mode 100644 docs/3jc1nUXyteo0.html delete mode 100644 docs/4FXLAtcPhZFo.html delete mode 100644 docs/4yYHqKbLovVX.html delete mode 100644 docs/6x42mhlfLo0o.html delete mode 100644 docs/8jWguCtuKsAt.html delete mode 100644 docs/B8hxg4e66cVL.html delete mode 100644 docs/BhE2WFknKKHG.html delete mode 100644 docs/C09Dou56ffMe.html delete mode 100644 docs/FJ4VR6G2M6VD.html delete mode 100644 docs/FSZoX3cJlJE7.html delete mode 100644 docs/GMta9hBHsXHQ.html delete mode 100644 docs/IuxV242YGaN5.html delete mode 100644 docs/KRC2O84LekPz.html delete mode 100644 docs/KbwD5mDpD4CV.html delete mode 100644 docs/MUGBo4n67kBI.html delete mode 100644 docs/PHqgH8FCfcod.html delete mode 100644 docs/QSkfVssHIngA.html delete mode 100644 docs/QXCi6Y1SYulw.html delete mode 100644 docs/QYMncZf5Bu3D.html delete mode 100644 docs/U5RtMeGPeZ29.html delete mode 100644 docs/UDBwK5Fhr2CT.html delete mode 100644 docs/UTB518X6X9Uh.html delete mode 100644 docs/VS22Hq5PBFNf.html delete mode 100644 docs/VbDoDdiHEemi.html delete mode 100644 docs/Vy1PbjSkUast.html delete mode 100644 docs/WKn3hLGmKmiH.html delete mode 100644 docs/X4N03xLYEWnN.html delete mode 100644 docs/XxqZW6JjkW2g.html delete mode 100644 docs/Z9N9OKBXXLFW.html delete mode 100644 docs/ZlxZh8NH5frM.html delete mode 100644 docs/api/attachments/27Z989bSFWAc/image/image.png delete mode 100644 docs/api/attachments/XEUUvzBxh89z/image/image.png delete mode 100644 docs/assets/v0.63.6/app-dist/share.js delete mode 100644 docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css delete mode 100644 docs/assets/v0.63.6/libraries/normalize.min.css delete mode 100644 docs/assets/v0.63.6/stylesheets/share.css delete mode 100644 docs/biDJ9KgbWLgt.html delete mode 100644 docs/btM6L9JtG301.html delete mode 100644 docs/bzQfhyzDo3Xz.html delete mode 100644 docs/cemIoFLfEGPO.html delete mode 100644 docs/d3dnvVOhur16.html delete mode 100644 docs/favicon.ico delete mode 100644 docs/hkrBX8KE1HQl.html delete mode 100644 docs/icQBu8R1ij57.html delete mode 100644 docs/inGKXCChkVYX.html delete mode 100644 docs/index.html delete mode 100644 docs/jvdjFBOCCrOa.html delete mode 100644 docs/kAfgZERKtVhU.html delete mode 100644 docs/mPGbEmYGitWe.html delete mode 100644 docs/rU1hxvgqlA9x.html delete mode 100644 docs/s5gsYTbPQr6c.html delete mode 100644 docs/wCxCJB3hhojs.html delete mode 100644 docs/wxCwZ1P2SGCx.html delete mode 100644 docs/xtBYDVZPb0gr.html delete mode 100644 docs/y2ido6E6tZ0V.html delete mode 100644 docs/zCDxk5VFdsqg.html delete mode 100644 docs/zpR91YHYs6lL.html diff --git a/bin/docs/.env.example b/bin/docs/.env.example deleted file mode 100644 index 03006fb86..000000000 --- a/bin/docs/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -SHARE_PROTOCOL=http -SHARE_HOST=notes.johnsmith.me -ROOT_NOTE_ID=4yYHqKbLovVX \ No newline at end of file diff --git a/bin/docs/.gitignore b/bin/docs/.gitignore deleted file mode 100644 index 5ad213baa..000000000 --- a/bin/docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -output -.env \ No newline at end of file diff --git a/bin/docs/assets/v0.63.6/app-dist/share.js b/bin/docs/assets/v0.63.6/app-dist/share.js deleted file mode 100644 index 3c3282497..000000000 --- a/bin/docs/assets/v0.63.6/app-dist/share.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Fetch note with given ID from backend - * - * @param noteId of the given note to be fetched. If false, fetches current note. - */ -async function fetchNote(noteId = null) { - if (!noteId) { - noteId = document.body.getAttribute("data-note-id"); - } - - const resp = await fetch(`api/notes/${noteId}`); - - return await resp.json(); -} - -document.addEventListener( - "DOMContentLoaded", - () => { - const toggleMenuButton = document.getElementById("toggleMenuButton"); - const layout = document.getElementById("layout"); - - if (toggleMenuButton && layout) { - toggleMenuButton.addEventListener("click", () => layout.classList.toggle("showMenu")); - } - }, - false -); diff --git a/bin/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css b/bin/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css deleted file mode 100644 index 41d0ab466..000000000 --- a/bin/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css +++ /dev/null @@ -1,554 +0,0 @@ -/* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */ - -.printed-content .ck-widget__selection-handle, -.printed-content .ck-widget__type-around { - /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */ - display: none; -} - -/* - * CKEditor 5 (v41.0.0) content styles. - * Generated on Fri, 26 Jan 2024 10:23:49 GMT. - * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html - */ - -:root { - --ck-color-image-caption-background: hsl(0, 0%, 97%); - --ck-color-image-caption-text: hsl(0, 0%, 20%); - --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); - --ck-color-mention-text: hsl(341, 100%, 30%); - --ck-color-selector-caption-background: hsl(0, 0%, 97%); - --ck-color-selector-caption-text: hsl(0, 0%, 20%); - --ck-highlight-marker-blue: hsl(201, 97%, 72%); - --ck-highlight-marker-green: hsl(120, 93%, 68%); - --ck-highlight-marker-pink: hsl(345, 96%, 73%); - --ck-highlight-marker-yellow: hsl(60, 97%, 73%); - --ck-highlight-pen-green: hsl(112, 100%, 27%); - --ck-highlight-pen-red: hsl(0, 85%, 49%); - --ck-image-style-spacing: 1.5em; - --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); - --ck-todo-list-checkmark-size: 16px; -} - -/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ -.ck-content .table .ck-table-resized { - table-layout: fixed; -} -/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ -.ck-content .table table { - overflow: hidden; -} -/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ -.ck-content .table td, -.ck-content .table th { - overflow-wrap: break-word; - position: relative; -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table { - margin: 0.9em auto; - display: table; -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table table { - border-collapse: collapse; - border-spacing: 0; - width: 100%; - height: 100%; - border: 1px double hsl(0, 0%, 70%); -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table table td, -.ck-content .table table th { - min-width: 2em; - padding: 0.4em; - border: 1px solid hsl(0, 0%, 75%); -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table table th { - font-weight: bold; - background: hsla(0, 0%, 0%, 5%); -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content[dir="rtl"] .table th { - text-align: right; -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content[dir="ltr"] .table th { - text-align: left; -} -/* @ckeditor/ckeditor5-table/theme/tablecaption.css */ -.ck-content .table > figcaption { - display: table-caption; - caption-side: top; - word-break: break-word; - text-align: center; - color: var(--ck-color-selector-caption-text); - background-color: var(--ck-color-selector-caption-background); - padding: 0.6em; - font-size: 0.75em; - outline-offset: -1px; -} -/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break { - position: relative; - clear: both; - padding: 5px 0; - display: flex; - align-items: center; - justify-content: center; -} -/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break::after { - content: ""; - position: absolute; - border-bottom: 2px dashed hsl(0, 0%, 77%); - width: 100%; -} -/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break__label { - position: relative; - z-index: 1; - padding: 0.3em 0.6em; - display: block; - text-transform: uppercase; - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; - font-size: 0.75em; - font-weight: bold; - color: hsl(0, 0%, 20%); - background: hsl(0, 0%, 100%); - box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ -.ck-content .media { - clear: both; - margin: 0.9em 0; - display: block; - min-width: 15em; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list { - list-style: none; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li { - position: relative; - margin-bottom: 5px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li .todo-list { - margin-top: 5px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input { - -webkit-appearance: none; - display: inline-block; - position: relative; - width: var(--ck-todo-list-checkmark-size); - height: var(--ck-todo-list-checkmark-size); - vertical-align: middle; - border: 0; - left: -25px; - margin-right: -15px; - right: 0; - margin-left: 0; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content[dir="rtl"] .todo-list .todo-list__label > input { - left: 0; - margin-right: 0; - right: -25px; - margin-left: -15px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::before { - display: block; - position: absolute; - box-sizing: border-box; - content: ""; - width: 100%; - height: 100%; - border: 1px solid hsl(0, 0%, 20%); - border-radius: 2px; - transition: 250ms ease-in-out box-shadow; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::after { - display: block; - position: absolute; - box-sizing: content-box; - pointer-events: none; - content: ""; - left: calc(var(--ck-todo-list-checkmark-size) / 3); - top: calc(var(--ck-todo-list-checkmark-size) / 5.3); - width: calc(var(--ck-todo-list-checkmark-size) / 5.3); - height: calc(var(--ck-todo-list-checkmark-size) / 2.6); - border-style: solid; - border-color: transparent; - border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0; - transform: rotate(45deg); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::before { - background: hsl(126, 64%, 41%); - border-color: hsl(126, 64%, 41%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::after { - border-color: hsl(0, 0%, 100%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label .todo-list__label__description { - vertical-align: middle; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type="checkbox"] { - position: absolute; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > input, -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input { - cursor: pointer; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > input:hover::before, -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input:hover::before { - box-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input { - -webkit-appearance: none; - display: inline-block; - position: relative; - width: var(--ck-todo-list-checkmark-size); - height: var(--ck-todo-list-checkmark-size); - vertical-align: middle; - border: 0; - left: -25px; - margin-right: -15px; - right: 0; - margin-left: 0; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content[dir="rtl"] .todo-list .todo-list__label > span[contenteditable="false"] > input { - left: 0; - margin-right: 0; - right: -25px; - margin-left: -15px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input::before { - display: block; - position: absolute; - box-sizing: border-box; - content: ""; - width: 100%; - height: 100%; - border: 1px solid hsl(0, 0%, 20%); - border-radius: 2px; - transition: 250ms ease-in-out box-shadow; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input::after { - display: block; - position: absolute; - box-sizing: content-box; - pointer-events: none; - content: ""; - left: calc(var(--ck-todo-list-checkmark-size) / 3); - top: calc(var(--ck-todo-list-checkmark-size) / 5.3); - width: calc(var(--ck-todo-list-checkmark-size) / 5.3); - height: calc(var(--ck-todo-list-checkmark-size) / 2.6); - border-style: solid; - border-color: transparent; - border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0; - transform: rotate(45deg); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input[checked]::before { - background: hsl(126, 64%, 41%); - border-color: hsl(126, 64%, 41%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable="false"] > input[checked]::after { - border-color: hsl(0, 0%, 100%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type="checkbox"] { - position: absolute; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol { - list-style-type: decimal; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol { - list-style-type: lower-latin; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol ol { - list-style-type: lower-roman; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol ol ol { - list-style-type: upper-latin; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol ol ol ol { - list-style-type: upper-roman; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul { - list-style-type: disc; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul ul { - list-style-type: circle; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul ul ul { - list-style-type: square; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul ul ul ul { - list-style-type: square; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image { - display: table; - clear: both; - text-align: center; - margin: 0.9em auto; - min-width: 50px; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image img { - display: block; - margin: 0 auto; - max-width: 100%; - min-width: 100%; - height: auto; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image-inline { - /* - * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; - * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. - * This strange behavior does not happen with inline-flex. - */ - display: inline-flex; - max-width: 100%; - align-items: flex-start; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture { - display: flex; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture, -.ck-content .image-inline img { - flex-grow: 1; - flex-shrink: 1; - max-width: 100%; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content img.image_resized { - height: auto; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized { - max-width: 100%; - display: block; - box-sizing: border-box; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized img { - width: 100%; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized > figcaption { - display: block; -} -/* @ckeditor/ckeditor5-image/theme/imagecaption.css */ -.ck-content .image > figcaption { - display: table-caption; - caption-side: bottom; - word-break: break-word; - color: var(--ck-color-image-caption-text); - background-color: var(--ck-color-image-caption-background); - padding: 0.6em; - font-size: 0.75em; - outline-offset: -1px; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left, -.ck-content .image-style-block-align-right { - max-width: calc(100% - var(--ck-image-style-spacing)); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left, -.ck-content .image-style-align-right { - clear: none; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-side { - float: right; - margin-left: var(--ck-image-style-spacing); - max-width: 50%; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left { - float: left; - margin-right: var(--ck-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-center { - margin-left: auto; - margin-right: auto; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-right { - float: right; - margin-left: var(--ck-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-right { - margin-right: 0; - margin-left: auto; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left { - margin-left: 0; - margin-right: auto; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content p + .image-style-align-left, -.ck-content p + .image-style-align-right, -.ck-content p + .image-style-side { - margin-top: 0; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left, -.ck-content .image-inline.image-style-align-right { - margin-top: var(--ck-inline-image-style-spacing); - margin-bottom: var(--ck-inline-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left { - margin-right: var(--ck-inline-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-right { - margin-left: var(--ck-inline-image-style-spacing); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-yellow { - background-color: var(--ck-highlight-marker-yellow); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-green { - background-color: var(--ck-highlight-marker-green); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-pink { - background-color: var(--ck-highlight-marker-pink); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-blue { - background-color: var(--ck-highlight-marker-blue); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-red { - color: var(--ck-highlight-pen-red); - background-color: transparent; -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-green { - color: var(--ck-highlight-pen-green); - background-color: transparent; -} -/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ -.ck-content blockquote { - overflow: hidden; - padding-right: 1.5em; - padding-left: 1.5em; - margin-left: 0; - margin-right: 0; - font-style: italic; - border-left: solid 5px hsl(0, 0%, 80%); -} -/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ -.ck-content[dir="rtl"] blockquote { - border-left: 0; - border-right: solid 5px hsl(0, 0%, 80%); -} -/* @ckeditor/ckeditor5-basic-styles/theme/code.css */ -.ck-content code { - background-color: hsla(0, 0%, 78%, 0.3); - padding: 0.15em; - border-radius: 2px; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-tiny { - font-size: 0.7em; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-small { - font-size: 0.85em; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-big { - font-size: 1.4em; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-huge { - font-size: 1.8em; -} -/* @ckeditor/ckeditor5-mention/theme/mention.css */ -.ck-content .mention { - background: var(--ck-color-mention-background); - color: var(--ck-color-mention-text); -} -/* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */ -.ck-content hr { - margin: 15px 0; - height: 4px; - background: hsl(0, 0%, 87%); - border: 0; -} -/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre { - padding: 1em; - color: hsl(0, 0%, 20.8%); - background: hsla(0, 0%, 78%, 0.3); - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - text-align: left; - direction: ltr; - tab-size: 4; - white-space: pre-wrap; - font-style: normal; - min-width: 200px; -} -/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre code { - background: unset; - padding: 0; - border-radius: 0; -} -@media print { - /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break { - padding: 0; - } - /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break::after { - display: none; - } -} diff --git a/bin/docs/assets/v0.63.6/libraries/normalize.min.css b/bin/docs/assets/v0.63.6/libraries/normalize.min.css deleted file mode 100644 index 3d24d023d..000000000 --- a/bin/docs/assets/v0.63.6/libraries/normalize.min.css +++ /dev/null @@ -1,148 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ -html { - line-height: 1.15; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -main { - display: block; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} -pre { - font-family: monospace, monospace; - font-size: 1em; -} -a { - background-color: transparent; -} -abbr[title] { - border-bottom: none; - text-decoration: underline; - text-decoration: underline dotted; -} -b, -strong { - font-weight: bolder; -} -code, -kbd, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -0.25em; -} -sup { - top: -0.5em; -} -img { - border-style: none; -} -button, -input, -optgroup, -select, -textarea { - font-family: inherit; - font-size: 100%; - line-height: 1.15; - margin: 0; -} -button, -input { - overflow: visible; -} -button, -select { - text-transform: none; -} -[type="button"], -[type="reset"], -[type="submit"], -button { - -webkit-appearance: button; -} -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner, -button::-moz-focus-inner { - border-style: none; - padding: 0; -} -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring, -button:-moz-focusring { - outline: 1px dotted ButtonText; -} -fieldset { - padding: 0.35em 0.75em 0.625em; -} -legend { - box-sizing: border-box; - color: inherit; - display: table; - max-width: 100%; - padding: 0; - white-space: normal; -} -progress { - vertical-align: baseline; -} -textarea { - overflow: auto; -} -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; - padding: 0; -} -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} -[type="search"] { - -webkit-appearance: textfield; - outline-offset: -2px; -} -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -::-webkit-file-upload-button { - -webkit-appearance: button; - font: inherit; -} -details { - display: block; -} -summary { - display: list-item; -} -template { - display: none; -} -[hidden] { - display: none; -} -/*# sourceMappingURL=normalize.min.css.map */ diff --git a/bin/docs/assets/v0.63.6/stylesheets/share.css b/bin/docs/assets/v0.63.6/stylesheets/share.css deleted file mode 100644 index 457898d8f..000000000 --- a/bin/docs/assets/v0.63.6/stylesheets/share.css +++ /dev/null @@ -1,165 +0,0 @@ -body { - font-family: "Lucida Grande", "Lucida Sans Unicode", arial, sans-serif; - line-height: 1.5; -} - -#layout { - max-width: 1200px; - margin: 0 auto; - display: flex; - flex-direction: row-reverse; -} - -#menu { - padding: 25px; - flex-basis: 0; - flex-grow: 1; - overflow: auto; -} - -#menu p { - margin: 0; -} - -#menu > p { - font-weight: bold; - font-size: 110%; -} - -#menu ul { - padding-left: 20px; -} - -#main { - flex-basis: 0; - flex-grow: 3; - overflow: auto; - padding: 10px 20px 20px 20px; -} - -#parentLink { - float: right; - margin-top: 20px; -} - -#title { - margin: 0; - padding-top: 10px; -} - -img { - max-width: 100%; -} - -pre { - white-space: pre-wrap; - word-wrap: anywhere; -} - -iframe.pdf-view { - width: 100%; - height: 800px; -} - -#toggleMenuButton { - display: none; - position: fixed; - top: 8px; - left: 5px; - width: 1.4em; - border-radius: 5px; - border: 1px solid #aaa; - font-size: 2rem; - z-index: 10; - height: auto; - color: black; - cursor: pointer; -} - -#childLinks.grid ul { - list-style-type: none; - display: flex; - flex-wrap: wrap; - padding: 0; -} - -#childLinks.grid ul li { - width: 180px; - height: 140px; - padding: 10px; -} - -#childLinks.grid ul li a { - display: flex; - flex-direction: column; - height: 100%; - width: 100%; - border: 1px solid #ddd; - border-radius: 5px; - justify-content: center; - align-content: center; - text-align: center; - font-size: large; -} - -#childLinks.grid ul li a:hover { - background: #eee; -} - -#childLinks.list ul { - list-style-type: none; - display: inline-flex; - flex-wrap: wrap; - padding: 0; - margin-top: 5px; -} - -#childLinks.list ul li { - margin-right: 20px; -} - -#noteClippedFrom { - padding: 10px 0 10px 0; - margin: 20px 0 20px 0; - color: #666; - border: 1px solid #ddd; - border-left: 0; - border-right: 0; -} - -#toggleMenuButton::after { - position: relative; - top: -2px; - left: 1px; -} - -@media (max-width: 48em) { - #layout.showMenu #menu { - display: block; - margin-top: 40px; - } - - #toggleMenuButton { - display: block; - } - - #layout.showMenu #main { - display: none; - } - - #title { - padding-left: 60px; - } - - #layout.showMenu #toggleMenuButton::after { - content: "«"; - } - - #toggleMenuButton::after { - content: "»"; - } - - #menu { - display: none; - } -} diff --git a/bin/docs/index.template.html b/bin/docs/index.template.html deleted file mode 100644 index b2580cb88..000000000 --- a/bin/docs/index.template.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/bin/docs/prepare.sh b/bin/docs/prepare.sh deleted file mode 100755 index 35e761b6d..000000000 --- a/bin/docs/prepare.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -script_dir=$(realpath $(dirname $0)) - -cd "$script_dir" - -env_file="$script_dir/.env" - -if [ ! -f "$env_file" ]; then - echo "Missing .env file, cannot proceed." - exit 1 -fi - -output_dir="$script_dir/../../docs" -mkdir -p "$output_dir" -rm -f "$output_dir"/* -rm -rf "$output_dir"/{assets,share} - -source "$env_file" - -# Download everything in output/notes.example.com/share/... -share_url="$SHARE_PROTOCOL://$SHARE_HOST/share/$ROOT_NOTE_ID" -wget -rpEk -e robots=off "$share_url" -P "$output_dir" -if [ $? -ne 0 ]; then - echo -e \\nDownloading failed, make sure you are using the real wget package and not the busybox one. - exit 1 -fi - -# Get rid of the domain in the output folder -mv "$output_dir/$SHARE_HOST"/* "$output_dir/" -rmdir "$output_dir/$SHARE_HOST" - -# Create home page with redirect -index_dest_path="$output_dir/index.html" -cp index.template.html "$index_dest_path" -sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path" - -# Rewrite links to get rid of the share folder -sed -i "s/ - - - - - - - - - - - - - - - - - - - - - - Branch prefixes - - -
-
- - - - -

Branch prefixes

- - - - - - -

This note has no content.

- -
- - - - - - -
- - diff --git a/docs/1pOWnHdGAuWR.html b/docs/1pOWnHdGAuWR.html deleted file mode 100644 index 43efb41f2..000000000 --- a/docs/1pOWnHdGAuWR.html +++ /dev/null @@ -1,866 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Widgets - - -
-
- - - - -

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 = `<div id="my-widget"><button>Click Me!</button></div>`;
-
-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:

-
- - - - - -
- - - - - - -
- - diff --git a/docs/3eTu21fjtZkj.html b/docs/3eTu21fjtZkj.html deleted file mode 100644 index b71857435..000000000 --- a/docs/3eTu21fjtZkj.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Scripting - - -
-
- - - - -

Scripting

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/3jc1nUXyteo0.html b/docs/3jc1nUXyteo0.html deleted file mode 100644 index 39ee0ed82..000000000 --- a/docs/3jc1nUXyteo0.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Themes - - -
-
- - - - -

Themes

- - - - -
-

Server-side

  • There are two themes embedded in the application:
    • light, located in src\public\stylesheets\theme-light.css
    • dark, located in src\public\stylesheets\theme-dark.css
  • The default theme is set only once, when the database is created and is managed by options_init#initNotSyncedOptions.
    • On Electron, the choice between light and dark is done based on the OS preference.
    • Otherwise, the theme is always dark.
  • The theme is served via src\routes\index.ts, in the getThemeCssUrl method.

Client-side

  • The two predefined themes are hard-coded in the client in src\public\app\widgets\type_widgets\options\appearance\theme.js.
  • The user-defined themes are obtained via a call to the server: options/user-themes.
  • The theme retrieval is done via a request
-
- - - -
- - - - - - -
- - diff --git a/docs/4FXLAtcPhZFo.html b/docs/4FXLAtcPhZFo.html deleted file mode 100644 index e32f4377c..000000000 --- a/docs/4FXLAtcPhZFo.html +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - CSS - - -
-
- - - - -

CSS

- - - - -
-

In doRender():

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

Reference: https://trilium.rocks/X7pxYpiu0lgU 

-
- - - -
- - - - - - -
- - diff --git a/docs/4yYHqKbLovVX.html b/docs/4yYHqKbLovVX.html deleted file mode 100644 index fca1bfba9..000000000 --- a/docs/4yYHqKbLovVX.html +++ /dev/null @@ -1,857 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Developer's Guide - - -
-
- - -

Developer's Guide

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/6x42mhlfLo0o.html b/docs/6x42mhlfLo0o.html deleted file mode 100644 index 3149fba73..000000000 --- a/docs/6x42mhlfLo0o.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - blobs - - -
-
- - - - -

blobs

- - - - -
-
Column NameData TypeNullityDefault valueDescription
blobIdTextNon-null The unique ID of the blob (e.g. XXbfAJXqWrYnSXcelLFA).
contentTextNullablenull

The content of the blob, can be either:

  • text (for plain text notes or HTML notes).
  • binary (for images and other types of attachments)
dateModifiedTextNon-null Localized modification date (e.g. 2023-11-08 18:43:44.204+0200)
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
-
- - - -
- - - - - - -
- - diff --git a/docs/8jWguCtuKsAt.html b/docs/8jWguCtuKsAt.html deleted file mode 100644 index 6d845c16e..000000000 --- a/docs/8jWguCtuKsAt.html +++ /dev/null @@ -1,855 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Right pane widget - - -
-
- - - - -

Right pane widget

- - - - -
-
  • doRender must not be overridden, instead doRenderBody() has to be overridden.
  • parentWidget() must be set to “rightPane”.
  • widgetTitle() getter can optionally be overriden, otherwise the widget will be displayed as “Untitled widget”.
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.

-
- - - -
- - - - - - -
- - diff --git a/docs/B8hxg4e66cVL.html b/docs/B8hxg4e66cVL.html deleted file mode 100644 index 2d2e330df..000000000 --- a/docs/B8hxg4e66cVL.html +++ /dev/null @@ -1,907 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Development and architecture - - -
-
- - - - -

Development and architecture

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/BhE2WFknKKHG.html b/docs/BhE2WFknKKHG.html deleted file mode 100644 index f34dcf1f8..000000000 --- a/docs/BhE2WFknKKHG.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Main - - -
-
- - - - -

Main

- - - - -
-

The main workflow of the CI:

  • Builds the Docker image and publishes in the GitHub Docker registry.
  • Builds using a portion of the delivery script artifacts for the following platforms:
    • Windows x86_64 as .zip file
    • Windows x86_64 installer (using Squirrel)
    • macOS x86_64 and aarch64.
    • Linux x86_64
    • Linux server x86_64.

The main workflow of the CI runs on develop branches as well as any branch that starts with feature/update_.

Downloading the artifacts from the main branch

Simply go to the develop branch on GitHub and look at the commit bar:

Press the green checkmark (or red cross if something went bad). Then look at the list of jobs and their status:

Then look for any of the entires that starts with “Main” and press the “Details” link next to it. It doesn't really matter which platform you'll choose as the artifacts are available on the same page.

 

-
- - - -
- - - - - - -
- - diff --git a/docs/C09Dou56ffMe.html b/docs/C09Dou56ffMe.html deleted file mode 100644 index fa3c94613..000000000 --- a/docs/C09Dou56ffMe.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Having a simpler packaging system - - -
-
- - - - -

Having a simpler packaging system

- - - - -
-

The current build scripts are a bit complicated and maintaining them is not easy.

Electron Forge seems more mature and has a boatload of features, including Flatpak, snaps, Windows installers & more.

Have a look also at the Plugins section since there are quite a few interesting things there as well.

Afterwards consider running a new round of Reducing binary size, especially taking into consideration removing of the unnecessary locales.

-
- - - -
- - - - - - -
- - diff --git a/docs/FJ4VR6G2M6VD.html b/docs/FJ4VR6G2M6VD.html deleted file mode 100644 index 9d7ac0869..000000000 --- a/docs/FJ4VR6G2M6VD.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Special notes - - -
-
- - - - -

Special notes

- - - - - - -

This note has no content.

- -
- - - - - - -
- - diff --git a/docs/FSZoX3cJlJE7.html b/docs/FSZoX3cJlJE7.html deleted file mode 100644 index 45b704d1e..000000000 --- a/docs/FSZoX3cJlJE7.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - options - - -
-
- - - - -

options

- - - - -
-
Column NameData TypeNullityDefault valueDescription
nameTextNon-null The name of option (e.g. maxContentWidth)
valueTextNon-null The value of the option.
isSyncedIntegerNon-null00 if the option is not synchronized and thus can differ between clients, 1 if the option is synchronized.
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
-
- - - -
- - - - - - -
- - diff --git a/docs/GMta9hBHsXHQ.html b/docs/GMta9hBHsXHQ.html deleted file mode 100644 index f1cee5cd8..000000000 --- a/docs/GMta9hBHsXHQ.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Node.js, Electron and `better-sqlite3` - - -
-
- - - - -

Node.js, Electron and `better-sqlite3`

- - - - -
-

better-sqlite3 requires a native module in order to work. In order to ease the installation process, prebuilt binaries are provided by the library developers.

Trilium Next started with version 8.4.0 for better-sqlite3

better-sqlite3 versionSQLite versionNode.js prebuildsElectron.js prebuilds
8.4.0<3.43.0v20???
8.5.0v20v25
8.5.1 v26
8.5.2v20 (macOS + arm64)
8.6.03.43.0 
8.7.03.43.1 
9.0.03.43.2 v27
9.1.03.44.0 
9.1.1macOS + Alpine
9.2.03.44.2 
9.2.1 / 9.2.2 v28
9.3.03.45.0 
9.4.03.45.1 
9.4.1Windows arm, arm64
9.4.2 <v29
9.4.3 <v29
9.4.4 v29
9.4.5Better prebuilds
9.5.03.45.2 
9.6.03.45.3 v30
10.0.0v22
10.1.03.46.0 
11.0.0>21
11.1.0 (prerelease)  v31
11.1.1  
11.1.2  
-
- - - -
- - - - - - -
- - diff --git a/docs/IuxV242YGaN5.html b/docs/IuxV242YGaN5.html deleted file mode 100644 index c9c418a23..000000000 --- a/docs/IuxV242YGaN5.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Deleted notes - - -
-
- - - - -

Deleted notes

- - - - - - -

This note has no content.

- -
- - - - - - -
- - diff --git a/docs/KRC2O84LekPz.html b/docs/KRC2O84LekPz.html deleted file mode 100644 index 56a2ea347..000000000 --- a/docs/KRC2O84LekPz.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - i18n-ally - - -
-
- - - - -

i18n-ally

- - - - -
-

i18n-ally is a VS Code extension that aids in internationalization.

It is currently integrated in the project and offers features such as:

  • Highlight, autocomplete translations.
  • Display translations inline.
  • Extract messages into translation.

Extracting messages into translation

  1. Open any .js file and select an untranslated string inside a template (TPL).
  2. Press Ctrl+P and look for “i18n Ally: Extract text into i18n messages”
  3. Select the first template.
  4. Select the path of translation, taking into consideration the Guidelines (e.g. jump_to_note.search-for-note-by-its-name).
-
- - - -
- - - - - - -
- - diff --git a/docs/KbwD5mDpD4CV.html b/docs/KbwD5mDpD4CV.html deleted file mode 100644 index 58b06cdea..000000000 --- a/docs/KbwD5mDpD4CV.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Protected entities - - -
-
- - - - -

Protected entities

- - - - -
-

The following entities can be made protected, via their isProtected flag:

-
- - - -
- - - - - - -
- - diff --git a/docs/MUGBo4n67kBI.html b/docs/MUGBo4n67kBI.html deleted file mode 100644 index 54ce1b705..000000000 --- a/docs/MUGBo4n67kBI.html +++ /dev/null @@ -1,835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Environment setup - - -
-
- - - - -

Environment setup

- - - - -
-

To set up the repository:

git clone https://github.com/TriliumNext/trilium-ckeditor5.git
-cd trilium-ckeditor5.git
-yarn install

To trigger the build run:

yarn build
-
- - - -
- - - - - - -
- - diff --git a/docs/PHqgH8FCfcod.html b/docs/PHqgH8FCfcod.html deleted file mode 100644 index e7bd1f015..000000000 --- a/docs/PHqgH8FCfcod.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Documentation - - -
-
- - - - -

Documentation

- - - - -
-

Development notes are published on triliumnext.github.io/Notes by the CI using GitHub Pages.

The GitHub Pages deployment works by taking the files from the Notes repository, in the docs directory.

How it works

There is a script that uses wget to download all the files from a share, that means:

  1. You must have a local instance of Trilium Notes server.
  2. You must have the documentation imported, up to date and shared.

Note that currently the documentation source file is not distributed (the note export), until a way is found to automate this process. Contact eliandoran should you require to obtain a copy of the documentation.

Setting up .env file

Go to bin/docs and copy .env.example to .env and edit it:

  1. Change the SHARE_PROTOCOL to either http or https depending on your setup.
  2. Change SHARE_HOST to match the domain name or the URL to the host (without the protocol or any slashes).

Generally ROOT_NOTE_ID should not be changed since the note ID must match if the files were imported correctly.

Triggering a build

Run:

./bin/docs/prepare.sh

This will attempt to download all the notes from the share URL and put them in docs, rewritten for GitHub Pages.

Commit the results and follow the normal development process to push them.

-
- - - -
- - - - - - -
- - diff --git a/docs/QSkfVssHIngA.html b/docs/QSkfVssHIngA.html deleted file mode 100644 index a0b3a9fbd..000000000 --- a/docs/QSkfVssHIngA.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Revisions - - -
-
- - - - -

Revisions

- - - - - - -

This note has no content.

- -
- - - - - - -
- - diff --git a/docs/QXCi6Y1SYulw.html b/docs/QXCi6Y1SYulw.html deleted file mode 100644 index 1f760cea8..000000000 --- a/docs/QXCi6Y1SYulw.html +++ /dev/null @@ -1,881 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Adding a new client library - - -
-
- - - - -

Adding a new client library

- - - - -
-

In the past some libraries have been copy-pasted (and adapted if needed) to the repository. However, new libraries must be obtained exclusively through npm.

The first step is to install the desired library. As an example we are going to install i18next:

npm i i18next

Step 1. Understanding the structure of the import

After installing the dependency, it's important to know how it's structured. You can do this by looking at the directory structure of the newly imported dependency:

$ tree node_modules/i18next
-node_modules/i18next
-├── dist
-│   ├── cjs
-│   │   └── i18next.js
-│   ├── esm
-│   │   ├── i18next.bundled.js
-│   │   ├── i18next.js
-│   │   └── package.json
-│   └── umd
-│       ├── i18next.js
-│       └── i18next.min.js
-├── i18next.js
-├── i18next.min.js
-├── index.d.mts
-├── index.d.ts
-├── index.js
-├── index.v4.d.ts
-├── LICENSE
-├── package.json
-├── README.md
-└── typescript
-    ├── helpers.d.ts
-    ├── options.d.ts
-    ├── t.d.ts
-    └── t.v4.d.ts

Generally you should be looking for a .min.js file. Note that the esm and cjs variants generally don't work, we are looking for the classic, no module dependency.

Step 2. Exposing the library from the server

The library must be delivered by the server and this is done via src/routes/assets.ts. In the register function, add a new entry near the bottom of the function:

app.use(`/${assetPath}/node_modules/i18next/`, persistentCacheStatic(path.join(srcRoot, "..", 'node_modules/i18next/')));

Step 3. Adding it to the library loader

The library loader is a client module which is in charge of downloading the library from the server and importing it. The loader is located in src/public/app/services/library_loader.js.

To add a new library, start by creating a constant for it, with the value pointing to the minified JS identified at the first step:

const I18NEXT = {
-    js: [
-        "node_modules/i18next/i18next.min.js"
-    ]
-};

Then add it to the export default section:

 export default {
-     requireCss,
-     requireLibrary,
-     CKEDITOR,
-     CODE_MIRROR,
-     ESLINT,
-     RELATION_MAP,
-     PRINT_THIS,
-     CALENDAR_WIDGET,
-     KATEX,
-     WHEEL_ZOOM,
-     FORCE_GRAPH,
-     MERMAID,
-     EXCALIDRAW,
--    MARKJS
-+    MARKJS,
-+    I18NEXT
- }

Step 4. Using the library

To import the library, simply use the following mechanism:

import library_loader from "./library_loader.js";
-
-await library_loader.requireLibrary(library_loader.I18NEXT);

Make sure to replace I18NEXT with the library that was created at the previous steps.

Note that because we are not using a module management mechanism such as ES Modules or Common.js modules, the requireLibrary method does not actually return anything. 

To benefit from the library, it must export on its own an object in window.

In the case of i18next, it sets window.i18next and that can be used directly:

i18next.init({});

Step 5. Adding Electron support

For Electron, the node_modules are copied as a separate step by bin/copy-dist.ts.

Scroll all the way down to the nodeModulesFolder and append an entry for the newly added libraries.

-
- - - -
- - - - - - -
- - diff --git a/docs/QYMncZf5Bu3D.html b/docs/QYMncZf5Bu3D.html deleted file mode 100644 index d57d258a3..000000000 --- a/docs/QYMncZf5Bu3D.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - revisions - - -
-
- - - - -

revisions

- - - - -
-
Column NameData TypeNullityDefault valueDescription
revisionIdTextTextNon-null Unique ID of the revision (e.g. 0GjgUqnEudI8).
noteIdTextNon-null ID of the note this revision belongs to.
typeTextNon-null""The type of note (i.e. text, file, code, relationMap, mermaid, canvas).
mimeTextNon-null""The MIME type of the note (e.g. text/html).
titleTextNon-null The title of the note, as defined by the user.
isProtectedIntegerNon-null01 if the entity is protected, 0 otherwise.
blobIdTextNullablenullThe corresponding ID from blobs. Although it can theoretically be NULL, haven't found any such note yet.
utcDateLastEditedTextNon-null Not sure how it differs from modification date.
utcDateCreatedTextNon-null Creation date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
dateLastEditedTextNon-null Not sure how it differs from modification date.
dateCreatedTextNon-null Localized creatino date (e.g. 2023-08-12 15:10:04.045+0300)
-
- - - -
- - - - - - -
- - diff --git a/docs/U5RtMeGPeZ29.html b/docs/U5RtMeGPeZ29.html deleted file mode 100644 index b38b57fc0..000000000 --- a/docs/U5RtMeGPeZ29.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Synchronisation - - -
-
- - - - -

Synchronisation

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/UDBwK5Fhr2CT.html b/docs/UDBwK5Fhr2CT.html deleted file mode 100644 index a5ec6ac73..000000000 --- a/docs/UDBwK5Fhr2CT.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Safe mode - - -
-
- - - - -

Safe mode

- - - - -
-

Safe mode is triggered by setting the TRILIUM_SAFE_MODE to a truthy value, usually 1.

In each artifact there is a trilium-safe-mode.sh (or .bat) script to enable it.

What it does:

  • Disables customWidget launcher types in app/widgets/containers/launcher.js.
  • Disables the running of mobileStartup or frontendStartup scripts.
  • Displays the root note instead of the previously saved session.
  • Disables the running of backendStartup, hourly, daily scripts and checks for the hidden subtree.
-
- - - -
- - - - - - -
- - diff --git a/docs/UTB518X6X9Uh.html b/docs/UTB518X6X9Uh.html deleted file mode 100644 index bfd2e0c96..000000000 --- a/docs/UTB518X6X9Uh.html +++ /dev/null @@ -1,837 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Build deliveries locally - - -
-
- - - - -

Build deliveries locally

- - - - -
-

In the project root:

PlatformArchitectureApplicationBuild command
macOSx86_64Desktop / Electron app./bin/build-mac-x64.sh
ARM 64Desktop / Electron app./bin/build-mac-arm64.sh
Linuxx86_64Desktop / Electron app./bin/build-linux-x64.sh
Server./bin/build-server.sh
Windowsx86_64Desktop / Electron app./bin/build-win-x64.sh

Under NixOS the following nix-shell is needed:

nix-shell -p jq

For Linux builds:

nix-shell -p jq fakeroot dpkg

The resulting build will be in the dist directory under the project root.

Testing the Linux builds under NixOS

Desktop clientServer
$ NIXPKGS_ALLOW_UNFREE=1 nix-shell -p steam-run
-[nix-shell] cd dist/trilium-linux-x64
-[nix-shell] steam-run ./trilium
$ NIXPKGS_ALLOW_UNFREE=1 nix-shell -p steam-run
-[nix-shell] cd dist/trilium-linux-x64-server
-[nix-shell] steam-run ./trilium.sh
-
- - - -
- - - - - - -
- - diff --git a/docs/VS22Hq5PBFNf.html b/docs/VS22Hq5PBFNf.html deleted file mode 100644 index fdea454f9..000000000 --- a/docs/VS22Hq5PBFNf.html +++ /dev/null @@ -1,847 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Dependency Management - - -
-
- - - - -

Dependency Management

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/VbDoDdiHEemi.html b/docs/VbDoDdiHEemi.html deleted file mode 100644 index d9925814a..000000000 --- a/docs/VbDoDdiHEemi.html +++ /dev/null @@ -1,857 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Note types - - -
-
- - - - -

Note types

- - - - -
-

The note type is defined by the type column in notes.

Possible types:

Note Typetype valueCorresponding MIME typeContent of the note's blobRelevant attributes
Texttext The HTML of the note. 
Relation Map relationMapapplication/json

A JSON describing the note:

{
-    "notes": [
-        {
-            "noteId": "gFQDL11KEm9G",
-            "x": 142,
-            "y": 405
-        },
-        {
-            "noteId": "8GcjEKyrrCgl",
-            "x": 100.10406374385552,
-            "y": 757.0364424520196
-        }
-    ],
-    "transform": {
-        "scale": 0.3,
-        "x": 480.29766098682165,
-        "y": 116.83892021963081
-    }
-}
None
Render Noterendertext/html or blank.An empty blob.~renderNote pointing to the HTML note to render.
Canvascanvasapplication/json
{
-	"appState": {},
-	"elemenets": {},
-	"files": {},
-	"type": "excalidraw",
-	"version": 2
-}
None
Mermaid Diagrammermaidtext/mermaid or text/plainThe plain text content of the Mermaid diagram.None
Bookbooktext/html or blank.An empty blob.
  • #viewType which can be either grid or list.
  • #expanded

both options are shown to the user via the “Book Properties” ribbon widget.

Web ViewwebViewblankAn empty blob.#webViewSrc pointing to an URL to render.
CodecodeDepends on the language (e.g. text/plain, text/x-markdown, text/x-c++src).The plain text content. 
-
- - - -
- - - - - - -
- - diff --git a/docs/Vy1PbjSkUast.html b/docs/Vy1PbjSkUast.html deleted file mode 100644 index dd01eb54b..000000000 --- a/docs/Vy1PbjSkUast.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - branches - - -
-
- - - - -

branches

- - - - -
-
Column NameData TypeNullityDefault valueDescription
branchIdTextNon-null The ID of the branch, in the form of a_b where a is the parentNoteId and b is the noteId.
noteIdTextNon-null The ID of the note.
parentNoteIdTextNon-null The ID of the parent note the note belongs to.
notePositionIntegerNon-null The position of the branch within the same level of hierarchy, the value is usually a multiple of 10.
prefixTextNullable The branch prefix if any, or NULL otherwise.
isExpandedIntegerNon-null0Whether the branch should appear expanded (its children shown) to the user.
isDeletedIntegerNon-null01 if the entity is deleted, 0 otherwise.
deleteIdTextNullablenull 
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
-
- - - -
- - - - - - -
- - diff --git a/docs/WKn3hLGmKmiH.html b/docs/WKn3hLGmKmiH.html deleted file mode 100644 index 28b902c09..000000000 --- a/docs/WKn3hLGmKmiH.html +++ /dev/null @@ -1,852 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - CKEditor - - -
-
- - - - -

CKEditor

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/X4N03xLYEWnN.html b/docs/X4N03xLYEWnN.html deleted file mode 100644 index b8e844cba..000000000 --- a/docs/X4N03xLYEWnN.html +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - bettersqlite binaries - - -
-
- - - - -

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 server:start work out of the box. Trying to run npm run electron:start 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 electron:switch 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

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 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 electron:start (or run any Electron delivery), case in which the ELECTRON_VERSION variable needs to be changed.
  • npm run server:start (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.

-
- - - -
- - - - - - -
- - diff --git a/docs/XxqZW6JjkW2g.html b/docs/XxqZW6JjkW2g.html deleted file mode 100644 index 25b34176c..000000000 --- a/docs/XxqZW6JjkW2g.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Live reload - - -
-
- - - - -

Live reload

- - - - -
-

Server live reload

If running the server using npm run server:start, the server will watch for changes in src/public and trigger a frontend reload if that occurs.

Electron live reload

Similarly, npm run electron:start supports live refresh  as well.

However, a core difference is that Electron watches dist/src/public instead of src/public since Electron runs on its own copy of the files.

To ameliorate that, a separate watch script has been implemented which automatically copies files from src/public to dist/src/public whenever a change is detected. To run it:

npm run 

Technical details

  • This mechanism is managed at server level by watching for changes inservices/ws.ts.
-
- - - -
- - - - - - -
- - diff --git a/docs/Z9N9OKBXXLFW.html b/docs/Z9N9OKBXXLFW.html deleted file mode 100644 index 5e0d2fc76..000000000 --- a/docs/Z9N9OKBXXLFW.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Guidelines - - -
-
- - - - -

Guidelines

- - - - -
-
  • Use hierarchy whenever appropriate, try to group the messages by:
    • Modals (e.g. about.foo, jump_to_note.foo)
  • Don't duplicate messages that are very widely used.
    • One such example is aria-label="Close" which should go to a single message such as modal.close instead of being duplicated in every modal.
  • On the other hand, don't overly generalise messages. A close message that is used whenever the “Close” word is encountered is not a good approach since it can potentially cause issues due to lack of context.
  • Use variable interpolation whenever appropriate.
    • If you see multiple messages joined together only to apply add a variable such as a user-inputted value, try to join those messages together into a single message containing a variable.
    • So instead of “Number of updates: “ + numUpdates + “.” use $(t("number_updates", { numUpdates })) where the message translation would appear as Number of updates: {{numUpdates}}.
-
- - - -
- - - - - - -
- - diff --git a/docs/ZlxZh8NH5frM.html b/docs/ZlxZh8NH5frM.html deleted file mode 100644 index d3233c4d6..000000000 --- a/docs/ZlxZh8NH5frM.html +++ /dev/null @@ -1,862 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Building and deployment - - -
-
- - - - -

Building and deployment

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/api/attachments/27Z989bSFWAc/image/image.png b/docs/api/attachments/27Z989bSFWAc/image/image.png deleted file mode 100644 index b483c3eb11baf8e5a92f96f957d920d4979567f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16206 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 XK917nDaU*%81Pz7`DKZWNznfT=7uxL diff --git a/docs/api/attachments/XEUUvzBxh89z/image/image.png b/docs/api/attachments/XEUUvzBxh89z/image/image.png deleted file mode 100644 index a149bd18b7bc4a97b54a7e86905a2c6916fe6640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4026 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 QXAcOVt)Z`8riu#x9|jNGQUCw| diff --git a/docs/assets/v0.63.6/app-dist/share.js b/docs/assets/v0.63.6/app-dist/share.js deleted file mode 100644 index 03ad92515..000000000 --- a/docs/assets/v0.63.6/app-dist/share.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Fetch note with given ID from backend - * - * @param noteId of the given note to be fetched. If false, fetches current note. - */ -async function fetchNote(noteId = null) { - if (!noteId) { - noteId = document.body.getAttribute("data-note-id"); - } - - const resp = await fetch(`api/notes/${noteId}`); - - return await resp.json(); -} - -document.addEventListener('DOMContentLoaded', () => { - const toggleMenuButton = document.getElementById('toggleMenuButton'); - const layout = document.getElementById('layout'); - - if (toggleMenuButton && layout) { - toggleMenuButton.addEventListener('click', () => layout.classList.toggle('showMenu')); - } -}, false); diff --git a/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css b/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css deleted file mode 100644 index 47274e5f4..000000000 --- a/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css +++ /dev/null @@ -1,551 +0,0 @@ -/* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */ - -.printed-content .ck-widget__selection-handle, .printed-content .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */ - display: none; -} - -/* - * CKEditor 5 (v41.0.0) content styles. - * Generated on Fri, 26 Jan 2024 10:23:49 GMT. - * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html - */ - -:root { - --ck-color-image-caption-background: hsl(0, 0%, 97%); - --ck-color-image-caption-text: hsl(0, 0%, 20%); - --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); - --ck-color-mention-text: hsl(341, 100%, 30%); - --ck-color-selector-caption-background: hsl(0, 0%, 97%); - --ck-color-selector-caption-text: hsl(0, 0%, 20%); - --ck-highlight-marker-blue: hsl(201, 97%, 72%); - --ck-highlight-marker-green: hsl(120, 93%, 68%); - --ck-highlight-marker-pink: hsl(345, 96%, 73%); - --ck-highlight-marker-yellow: hsl(60, 97%, 73%); - --ck-highlight-pen-green: hsl(112, 100%, 27%); - --ck-highlight-pen-red: hsl(0, 85%, 49%); - --ck-image-style-spacing: 1.5em; - --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); - --ck-todo-list-checkmark-size: 16px; -} - -/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ -.ck-content .table .ck-table-resized { - table-layout: fixed; -} -/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ -.ck-content .table table { - overflow: hidden; -} -/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ -.ck-content .table td, -.ck-content .table th { - overflow-wrap: break-word; - position: relative; -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table { - margin: 0.9em auto; - display: table; -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table table { - border-collapse: collapse; - border-spacing: 0; - width: 100%; - height: 100%; - border: 1px double hsl(0, 0%, 70%); -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table table td, -.ck-content .table table th { - min-width: 2em; - padding: .4em; - border: 1px solid hsl(0, 0%, 75%); -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content .table table th { - font-weight: bold; - background: hsla(0, 0%, 0%, 5%); -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content[dir="rtl"] .table th { - text-align: right; -} -/* @ckeditor/ckeditor5-table/theme/table.css */ -.ck-content[dir="ltr"] .table th { - text-align: left; -} -/* @ckeditor/ckeditor5-table/theme/tablecaption.css */ -.ck-content .table > figcaption { - display: table-caption; - caption-side: top; - word-break: break-word; - text-align: center; - color: var(--ck-color-selector-caption-text); - background-color: var(--ck-color-selector-caption-background); - padding: .6em; - font-size: .75em; - outline-offset: -1px; -} -/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break { - position: relative; - clear: both; - padding: 5px 0; - display: flex; - align-items: center; - justify-content: center; -} -/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break::after { - content: ''; - position: absolute; - border-bottom: 2px dashed hsl(0, 0%, 77%); - width: 100%; -} -/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break__label { - position: relative; - z-index: 1; - padding: .3em .6em; - display: block; - text-transform: uppercase; - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; - font-size: 0.75em; - font-weight: bold; - color: hsl(0, 0%, 20%); - background: hsl(0, 0%, 100%); - box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ -.ck-content .media { - clear: both; - margin: 0.9em 0; - display: block; - min-width: 15em; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list { - list-style: none; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li { - position: relative; - margin-bottom: 5px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li .todo-list { - margin-top: 5px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input { - -webkit-appearance: none; - display: inline-block; - position: relative; - width: var(--ck-todo-list-checkmark-size); - height: var(--ck-todo-list-checkmark-size); - vertical-align: middle; - border: 0; - left: -25px; - margin-right: -15px; - right: 0; - margin-left: 0; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content[dir=rtl] .todo-list .todo-list__label > input { - left: 0; - margin-right: 0; - right: -25px; - margin-left: -15px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::before { - display: block; - position: absolute; - box-sizing: border-box; - content: ''; - width: 100%; - height: 100%; - border: 1px solid hsl(0, 0%, 20%); - border-radius: 2px; - transition: 250ms ease-in-out box-shadow; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::after { - display: block; - position: absolute; - box-sizing: content-box; - pointer-events: none; - content: ''; - left: calc( var(--ck-todo-list-checkmark-size) / 3 ); - top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); - width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); - height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); - border-style: solid; - border-color: transparent; - border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; - transform: rotate(45deg); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::before { - background: hsl(126, 64%, 41%); - border-color: hsl(126, 64%, 41%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::after { - border-color: hsl(0, 0%, 100%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label .todo-list__label__description { - vertical-align: middle; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] { - position: absolute; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > input, -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input { - cursor: pointer; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > input:hover::before, .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input:hover::before { - box-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input { - -webkit-appearance: none; - display: inline-block; - position: relative; - width: var(--ck-todo-list-checkmark-size); - height: var(--ck-todo-list-checkmark-size); - vertical-align: middle; - border: 0; - left: -25px; - margin-right: -15px; - right: 0; - margin-left: 0; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content[dir=rtl] .todo-list .todo-list__label > span[contenteditable=false] > input { - left: 0; - margin-right: 0; - right: -25px; - margin-left: -15px; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::before { - display: block; - position: absolute; - box-sizing: border-box; - content: ''; - width: 100%; - height: 100%; - border: 1px solid hsl(0, 0%, 20%); - border-radius: 2px; - transition: 250ms ease-in-out box-shadow; -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::after { - display: block; - position: absolute; - box-sizing: content-box; - pointer-events: none; - content: ''; - left: calc( var(--ck-todo-list-checkmark-size) / 3 ); - top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); - width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); - height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); - border-style: solid; - border-color: transparent; - border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; - transform: rotate(45deg); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::before { - background: hsl(126, 64%, 41%); - border-color: hsl(126, 64%, 41%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::after { - border-color: hsl(0, 0%, 100%); -} -/* @ckeditor/ckeditor5-list/theme/todolist.css */ -.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] { - position: absolute; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol { - list-style-type: decimal; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol { - list-style-type: lower-latin; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol ol { - list-style-type: lower-roman; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol ol ol { - list-style-type: upper-latin; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ol ol ol ol ol { - list-style-type: upper-roman; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul { - list-style-type: disc; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul ul { - list-style-type: circle; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul ul ul { - list-style-type: square; -} -/* @ckeditor/ckeditor5-list/theme/list.css */ -.ck-content ul ul ul ul { - list-style-type: square; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image { - display: table; - clear: both; - text-align: center; - margin: 0.9em auto; - min-width: 50px; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image img { - display: block; - margin: 0 auto; - max-width: 100%; - min-width: 100%; - height: auto; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image-inline { - /* - * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; - * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. - * This strange behavior does not happen with inline-flex. - */ - display: inline-flex; - max-width: 100%; - align-items: flex-start; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture { - display: flex; -} -/* @ckeditor/ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture, -.ck-content .image-inline img { - flex-grow: 1; - flex-shrink: 1; - max-width: 100%; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content img.image_resized { - height: auto; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized { - max-width: 100%; - display: block; - box-sizing: border-box; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized img { - width: 100%; -} -/* @ckeditor/ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized > figcaption { - display: block; -} -/* @ckeditor/ckeditor5-image/theme/imagecaption.css */ -.ck-content .image > figcaption { - display: table-caption; - caption-side: bottom; - word-break: break-word; - color: var(--ck-color-image-caption-text); - background-color: var(--ck-color-image-caption-background); - padding: .6em; - font-size: .75em; - outline-offset: -1px; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left, -.ck-content .image-style-block-align-right { - max-width: calc(100% - var(--ck-image-style-spacing)); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left, -.ck-content .image-style-align-right { - clear: none; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-side { - float: right; - margin-left: var(--ck-image-style-spacing); - max-width: 50%; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left { - float: left; - margin-right: var(--ck-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-center { - margin-left: auto; - margin-right: auto; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-right { - float: right; - margin-left: var(--ck-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-right { - margin-right: 0; - margin-left: auto; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left { - margin-left: 0; - margin-right: auto; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content p + .image-style-align-left, -.ck-content p + .image-style-align-right, -.ck-content p + .image-style-side { - margin-top: 0; -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left, -.ck-content .image-inline.image-style-align-right { - margin-top: var(--ck-inline-image-style-spacing); - margin-bottom: var(--ck-inline-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left { - margin-right: var(--ck-inline-image-style-spacing); -} -/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-right { - margin-left: var(--ck-inline-image-style-spacing); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-yellow { - background-color: var(--ck-highlight-marker-yellow); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-green { - background-color: var(--ck-highlight-marker-green); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-pink { - background-color: var(--ck-highlight-marker-pink); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-blue { - background-color: var(--ck-highlight-marker-blue); -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-red { - color: var(--ck-highlight-pen-red); - background-color: transparent; -} -/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-green { - color: var(--ck-highlight-pen-green); - background-color: transparent; -} -/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ -.ck-content blockquote { - overflow: hidden; - padding-right: 1.5em; - padding-left: 1.5em; - margin-left: 0; - margin-right: 0; - font-style: italic; - border-left: solid 5px hsl(0, 0%, 80%); -} -/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ -.ck-content[dir="rtl"] blockquote { - border-left: 0; - border-right: solid 5px hsl(0, 0%, 80%); -} -/* @ckeditor/ckeditor5-basic-styles/theme/code.css */ -.ck-content code { - background-color: hsla(0, 0%, 78%, 0.3); - padding: .15em; - border-radius: 2px; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-tiny { - font-size: .7em; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-small { - font-size: .85em; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-big { - font-size: 1.4em; -} -/* @ckeditor/ckeditor5-font/theme/fontsize.css */ -.ck-content .text-huge { - font-size: 1.8em; -} -/* @ckeditor/ckeditor5-mention/theme/mention.css */ -.ck-content .mention { - background: var(--ck-color-mention-background); - color: var(--ck-color-mention-text); -} -/* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */ -.ck-content hr { - margin: 15px 0; - height: 4px; - background: hsl(0, 0%, 87%); - border: 0; -} -/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre { - padding: 1em; - color: hsl(0, 0%, 20.8%); - background: hsla(0, 0%, 78%, 0.3); - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - text-align: left; - direction: ltr; - tab-size: 4; - white-space: pre-wrap; - font-style: normal; - min-width: 200px; -} -/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre code { - background: unset; - padding: 0; - border-radius: 0; -} -@media print { - /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break { - padding: 0; - } - /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break::after { - display: none; - } -} diff --git a/docs/assets/v0.63.6/libraries/normalize.min.css b/docs/assets/v0.63.6/libraries/normalize.min.css deleted file mode 100644 index 87aa24dc5..000000000 --- a/docs/assets/v0.63.6/libraries/normalize.min.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} -/*# sourceMappingURL=normalize.min.css.map */ \ No newline at end of file diff --git a/docs/assets/v0.63.6/stylesheets/share.css b/docs/assets/v0.63.6/stylesheets/share.css deleted file mode 100644 index 718f8594c..000000000 --- a/docs/assets/v0.63.6/stylesheets/share.css +++ /dev/null @@ -1,165 +0,0 @@ -body { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; - line-height: 1.5; -} - -#layout { - max-width: 1200px; - margin: 0 auto; - display: flex; - flex-direction: row-reverse; -} - -#menu { - padding: 25px; - flex-basis: 0; - flex-grow: 1; - overflow: auto; -} - -#menu p { - margin: 0; -} - -#menu > p { - font-weight: bold; - font-size: 110%; -} - -#menu ul { - padding-left: 20px; -} - -#main { - flex-basis: 0; - flex-grow: 3; - overflow: auto; - padding: 10px 20px 20px 20px; -} - -#parentLink { - float: right; - margin-top: 20px; -} - -#title { - margin: 0; - padding-top: 10px; -} - -img { - max-width: 100%; -} - -pre { - white-space: pre-wrap; - word-wrap: anywhere; -} - -iframe.pdf-view { - width: 100%; - height: 800px; -} - -#toggleMenuButton { - display: none; - position: fixed; - top: 8px; - left: 5px; - width: 1.4em; - border-radius: 5px; - border: 1px solid #aaa; - font-size: 2rem; - z-index: 10; - height: auto; - color: black; - cursor: pointer; -} - -#childLinks.grid ul { - list-style-type: none; - display: flex; - flex-wrap: wrap; - padding: 0; -} - -#childLinks.grid ul li { - width: 180px; - height: 140px; - padding: 10px; -} - -#childLinks.grid ul li a { - display: flex; - flex-direction: column; - height: 100%; - width: 100%; - border: 1px solid #ddd; - border-radius: 5px; - justify-content: center; - align-content: center; - text-align: center; - font-size: large; -} - -#childLinks.grid ul li a:hover { - background: #eee; -} - -#childLinks.list ul { - list-style-type: none; - display: inline-flex; - flex-wrap: wrap; - padding: 0; - margin-top: 5px; -} - -#childLinks.list ul li { - margin-right: 20px; -} - -#noteClippedFrom { - padding: 10px 0 10px 0; - margin: 20px 0 20px 0; - color: #666; - border: 1px solid #ddd; - border-left: 0; - border-right: 0; -} - -#toggleMenuButton::after { - position: relative; - top: -2px; - left: 1px; -} - -@media (max-width: 48em) { - #layout.showMenu #menu { - display: block; - margin-top: 40px; - } - - #toggleMenuButton { - display: block; - } - - #layout.showMenu #main { - display: none; - } - - #title { - padding-left: 60px; - } - - #layout.showMenu #toggleMenuButton::after { - content: "«"; - } - - #toggleMenuButton::after { - content: "»"; - } - - #menu { - display: none; - } -} diff --git a/docs/biDJ9KgbWLgt.html b/docs/biDJ9KgbWLgt.html deleted file mode 100644 index cf6e6e58b..000000000 --- a/docs/biDJ9KgbWLgt.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Releasing a version - - -
-
- - - - -

Releasing a version

- - - - -
-

On NixOS:

nix-shell -p dpkg fakeroot jq nodejs_20

Then simply run from project root:

./bin/release.sh 1.2.3

where 1.2.3 is the desired release version.

If a version ends with -beta, it will automatically be marked as pre-release in GitHub.

This will automatically generate a release in GitHub if everything goes according to plan.

Note that the Windows installer is not automatically uploaded yet, it has to be taken from the main workflow of the CI from the develop branch.

Make sure to check test the artifacts of the release.

-
- - - -
- - - - - - -
- - diff --git a/docs/btM6L9JtG301.html b/docs/btM6L9JtG301.html deleted file mode 100644 index f8a6b4701..000000000 --- a/docs/btM6L9JtG301.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Running a development build - - -
-
- - - - -

Running a development build

- - - - -
-

Run server

Run with default settings:

npm run server:start

Run with custom port:

TRILIUM_PORT=8082 npm run server:start

Run Electron

Rebuild better-sqlite3 dependency:

npm run electron:switch

Then run Electron:

npm run electron:start

To run Electron using the same data directory as the production version:

npm run electron:start-no-dir

When done, switch back the better-sqlite3 dependency:

npm run server:switch
-
- - - -
- - - - - - -
- - diff --git a/docs/bzQfhyzDo3Xz.html b/docs/bzQfhyzDo3Xz.html deleted file mode 100644 index 8312fae02..000000000 --- a/docs/bzQfhyzDo3Xz.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - recent_notes - - -
-
- - - - -

recent_notes

- - - - -
-
Column NameData TypeNullityDefault valueDescription
noteIdTextNon-null Unique ID of the note (e.g. yRRTLlqTbGoZ).
notePathTextNon-null The path (IDs) to the note from root to the note itself, separated by slashes.
utcDateCreatedTextNon-null Creation date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
-
- - - -
- - - - - - -
- - diff --git a/docs/cemIoFLfEGPO.html b/docs/cemIoFLfEGPO.html deleted file mode 100644 index 5e065bb86..000000000 --- a/docs/cemIoFLfEGPO.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Backlinks - - -
-
- - - - -

Backlinks

- - - - - - -

This note has no content.

- -
- - - - - - -
- - diff --git a/docs/d3dnvVOhur16.html b/docs/d3dnvVOhur16.html deleted file mode 100644 index b4c7f4352..000000000 --- a/docs/d3dnvVOhur16.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Content hashing - - -
-
- - - - -

Content hashing

- - - - -
-

Entity hashing is done in content_hash#getEntityHashes.

  • It works by looking at the entity_changes table and going through each of the entity names/types:
    • blobs
    • attributes
    • revisions
    • attachments
    • notes
    • branches
    • etapi_tokens
    • options
  • For some reason note_reordering entities are ignored specifically.
  • All the rows in entity_changes are then ordered alphabetically, based on their entityId.
  • Every entity row is then grouped by entityName and then by sector. The sector is defined as the first character of the id.
  • The hash is altered to add the isErased value as well since the hash of deleted entries is not updated.
  • For each sector, the hash is calculated using utils.hash, using SHA1 encoded as Base64.
-
- - - -
- - - - - - -
- - diff --git a/docs/favicon.ico b/docs/favicon.ico deleted file mode 100644 index 46b97e62f959eb1d6f7e9a11293f6b4fb7837109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113456 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 a!z{Wh$r7QO9N^t7z~08$`h_Jn;eP - - - - - - - - - - - - - - - - - - - - - - Internationalisation / Translations - - -
-
- - - - -

Internationalisation / Translations

- - - - -
-

During the initial development of Trilium Notes, internationalisation was not considered as it was meant to be an English-only product.

As the application and the user base grows, it makes sense to be able to reach out as many people as possible by providing translations in their native language.

The library used is i18next.

What has been implemented so far

Where are the translations?

The translations are formatted as JSON files and they are located in src/public/translations. For every supported locale, there is a subdirectory in which there is a translation.json file (e.g. src/public/translations/en/translation.json).

Message keys

One important aspect is the fact that we are using a key-based approach. This means that each message is identified by an ID rather than a natural-language message (such as the default approach in gettext).

The key-based approach allows a hierarchical structure. For example, a key of about.title would be added in translation.json as follows:

{
-	"about": {
-		"title": "About TriliumNext Notes"
-	}
-} 

Follow the Guidelines when creating a new message.

Adding a new locale

To add a new locale, go to src/public/translations with your favorite text editor and copy the en directory.

Rename the copy to the ISO code (e.g. fr, ro) of the language being translated.

Translations with a country-language combination, using their corresponding ISO code (e.g. fr_FR, fr_BE), has not been tested yet.

Changing the language

Since the internationalisation process is in its early stages, there is no user-facing way to switch the language.

To change the language manually, edit src/public/app/services/i18n.js and look for the line containing lng: "en". Replace en with the desired language code (from the ones available in src/public/translations).

Client-side translations

Component-level translations

Most of the client translations are present in the various widgets and layouts.

Translation support has to be added manually for every file.

The first step is to add the translation import with a relative import. For example, if we are in the src/public/app/widgets/dialogs directory, the import would look as follows:

import { t } from "../../services/i18n.js";

Afterwards, simply replace the hard-coded message with:

${t("msgid")}

where msgid is the key of the message being translated.

Variables

In the translation, enclose the variables with {{ and }}:

{
-    "key": "{{what}} is {{how}}"
-}

Then pass the arguments when reading the translation:

t('key', { what: 'i18next', how: 'great' })

Template-level translations

Templates are .ejs files present in src/views, these are used to prepare the root layout for desktop, mobile applications as well as setup (onboarding) and the shared notes view.

Due to using a different approach, it is not possible yet to translate those files.

Server-side translations

Currently the server-side messages are not translatable. They will be added as a separate step.

-
- - - - - -
- - - - - - -
- - diff --git a/docs/icQBu8R1ij57.html b/docs/icQBu8R1ij57.html deleted file mode 100644 index 1bc5b8f8c..000000000 --- a/docs/icQBu8R1ij57.html +++ /dev/null @@ -1,834 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Building & updating - - -
-
- - - - -

Building & updating

- - - - -
-
cd packages/ckeditor5-build-balloon-block
-yarn build

This will trigger a change in the build directory.

Then go to packages/ckeditor5-build-balloon-block/build and copy ckeditor.js and ckeditor.js.map to libraries/ckeditor in the Notes repository.

Commit the change on both sides.

Then run the server and check type CKEDITOR_VERSION in the browser/Electron console to ensure that the correct version is used. Do a basic sanity check as well.

-
- - - -
- - - - - - -
- - diff --git a/docs/inGKXCChkVYX.html b/docs/inGKXCChkVYX.html deleted file mode 100644 index 359b8ffa2..000000000 --- a/docs/inGKXCChkVYX.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - entity_changes - - -
-
- - - - -

entity_changes

- - - - -
-
Column NameData TypeNullityDefault valueDescription
idIntegerNullable A sequential numeric index of the entity change.
entityNameTextNullable The type of entity being changed (attributes, branches, note_reordering, etc.)
entityIdTextNullable The ID of the entity being changed.
hashTextNullable TODO: Describe how the hash is calculated
isErasedIntegerNullable TODO: What does this do?
changeIdTextNullable TODO: What does this do?
componentIdTextNullable TODO: What does this do?
instanceIdTextNullable TODO: What does this do?
isSyncedIntegerNullable TODO: What does this do?
utcDateChangedTextNullable Date of the entity change in UTC format (e.g. 2023-11-08 16:43:44.204Z)
-
- - - -
- - - - - - -
- - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index bca34c937..000000000 --- a/docs/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/docs/jvdjFBOCCrOa.html b/docs/jvdjFBOCCrOa.html deleted file mode 100644 index 8605df464..000000000 --- a/docs/jvdjFBOCCrOa.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Testing compatibility - - -
-
- - - - -

Testing compatibility

- - - - -
-
better-sqlite3 versionSQLite versionCompatibility
8.4.0<3.43.0Compatible, same version.
8.6.03.43.0 
8.7.03.43.1 
9.0.03.43.2 
9.1.0 + 9.1.13.44.0 
9.2.0 + 9.2.1 + 9.2.23.44.2 
9.3.03.45.0 
9.4.0, 9.4.1, 9.4.2, 9.4.3, 9.4.4, 9.4.53.45.1 
9.5.03.45.2 
9.6.0 / 10.0.03.45.3 
10.1.0 / 11.0.0 / 11.1.1 / 11.1.23.46.0 
-
- - - -
- - - - - - -
- - diff --git a/docs/kAfgZERKtVhU.html b/docs/kAfgZERKtVhU.html deleted file mode 100644 index 8d3a0ce21..000000000 --- a/docs/kAfgZERKtVhU.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - notes - - -
-
- - - - -

notes

- - - - -
-
Column NameData TypeNullityDefault valueDescription
noteIdTextNon-null The unique ID of the note (e.g. 2LJrKqIhr0Pe).
titleTextNon-null"note"The title of the note, as defined by the user.
isProtectedIntegerNon-null01 if the entity is protected, 0 otherwise.
typeTextNon-null"text"The type of note (i.e. text, file, code, relationMap, mermaid, canvas).
mimeTextNon-null"text/html"The MIME type of the note (e.g. text/html).. Note that it can be an empty string in some circumstances, but not null.
isDeletedIntegerNullable01 if the entity is deleted, 0 otherwise.
deleteIdTextNon-nullnull 
dateCreatedTextNon-null Localized creation date (e.g. 2023-11-08 18:43:44.204+0200)
dateModifiedTextNon-null Localized modification date (e.g. 2023-11-08 18:43:44.204+0200)
utcDateCreatedTextNon-null Creation date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
blobIdTextNullablenullThe corresponding ID from blobs. Although it can theoretically be NULL, haven't found any such note yet.
-
- - - -
- - - - - - -
- - diff --git a/docs/mPGbEmYGitWe.html b/docs/mPGbEmYGitWe.html deleted file mode 100644 index 017d198b7..000000000 --- a/docs/mPGbEmYGitWe.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Build information - - -
-
- - - - -

Build information

- - - - -
-
  • Provides context about when the build was made and the corresponding Git revision.
  • The information is displayed to the client when going in the about dialog.
  • The build information is hard-coded in src/services/build.ts. This file is generated automatically via npm run chore:update-build-info which itself is run automatically whenever making a build in the CI, or a local delivery.
-
- - - -
- - - - - - -
- - diff --git a/docs/rU1hxvgqlA9x.html b/docs/rU1hxvgqlA9x.html deleted file mode 100644 index 82d9956c8..000000000 --- a/docs/rU1hxvgqlA9x.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - CI - - -
-
- - - - -

CI

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/s5gsYTbPQr6c.html b/docs/s5gsYTbPQr6c.html deleted file mode 100644 index 2d1df9452..000000000 --- a/docs/s5gsYTbPQr6c.html +++ /dev/null @@ -1,864 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Updating dependencies - - -
-
- - - - -

Updating dependencies

- - - - -
-

 

DependencyThings to check for a basic sanity check
better-sqlite3See bettersqlite binaries.
jsdom
  • Note map
  • Clipper
  • Note similarity
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.
-
- - - - - -
- - - - - - -
- - diff --git a/docs/wCxCJB3hhojs.html b/docs/wCxCJB3hhojs.html deleted file mode 100644 index 8e8531d17..000000000 --- a/docs/wCxCJB3hhojs.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - attachments - - -
-
- - - - -

attachments

- - - - -
-
Column NameData TypeNullityDefault valueDescription
attachmentIdTextNon-null Unique ID (e.g. qhC1vzU4nwSE)
ownerIdTextNon-null The unique ID of a row in notes.
roleTextNon-null The role of the attachment: image for images that are attached to a note.
mimeTextNon-null The MIME type of the attachment (e.g. image/png)
titleTextNon-null The title of the attachment.
isProtectedIntegerNon-null01 if the entity is protected, 0 otherwise.
positionIntegerNon-null0Not sure where the position is relevant for attachments (saw it with values of 10 and 0).
blobIdTextNullablenullThe corresponding blobId from the blobs table.
dateModifiedTextNon-null Localized modification date (e.g. 2023-11-08 18:43:44.204+0200)
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
utcDateScheduledForErasureTextNullablenull 
isDeletedIntegerNon-null 1 if the entity is deleted, 0 otherwise.
deleteIdTextNullablenull 
-
- - - -
- - - - - - -
- - diff --git a/docs/wxCwZ1P2SGCx.html b/docs/wxCwZ1P2SGCx.html deleted file mode 100644 index 46c9ff17e..000000000 --- a/docs/wxCwZ1P2SGCx.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - attributes - - -
-
- - - - -

attributes

- - - - -
-
Column NameData TypeNullityDefault valueDescription
attributeIdTextNon-null Unique Id of the attribute (e.g. qhC1vzU4nwSE), can also have a special unique ID for Special notes (e.g. _lbToday_liconClass).
noteIdTextNon-null The ID of the note this atttribute belongs to
typeTextNon-null The type of attribute (label or relation).
nameTextNon-null The name/key of the attribute.
valueTextNon-null""
  • For label attributes, a free-form value of the attribute.
  • For relation attributes, the ID of the note the relation is pointing to.
positionIntegerNon-null0The position of the attribute compared to the other attributes. Some predefined attributes such as originalFileName have a value of 1000.
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
isDeletedIntegerNon-null 1 if the entity is deleted, 0 otherwise.
deleteIdTextNullablenull 
isInheritableIntegerNullable0 
-
- - - -
- - - - - - -
- - diff --git a/docs/xtBYDVZPb0gr.html b/docs/xtBYDVZPb0gr.html deleted file mode 100644 index 15a4e47c4..000000000 --- a/docs/xtBYDVZPb0gr.html +++ /dev/null @@ -1,842 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Project maintenance - - -
-
- - - - -

Project maintenance

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/y2ido6E6tZ0V.html b/docs/y2ido6E6tZ0V.html deleted file mode 100644 index bb5a06a85..000000000 --- a/docs/y2ido6E6tZ0V.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - etapi_tokens - - -
-
- - - - -

etapi_tokens

- - - - -
-
Column NameData TypeNullityDefault valueDescription
etapiTokenIdTextNon-null A unique ID of the token (e.g. aHmLr5BywvfJ).
nameTextNon-null The name of the token, as is set by the user.
tokenHashTextNon-null The token itself.
utcDateCreatedTextNon-null Creation date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
isDeletedIntegerNon-null01 if the entity is deleted, 0 otherwise.
-
- - - -
- - - - - - -
- - diff --git a/docs/zCDxk5VFdsqg.html b/docs/zCDxk5VFdsqg.html deleted file mode 100644 index 07830f63a..000000000 --- a/docs/zCDxk5VFdsqg.html +++ /dev/null @@ -1,887 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Database - - -
-
- - - - -

Database

- - - - - - - - -
- - - - - - -
- - diff --git a/docs/zpR91YHYs6lL.html b/docs/zpR91YHYs6lL.html deleted file mode 100644 index b151a390f..000000000 --- a/docs/zpR91YHYs6lL.html +++ /dev/null @@ -1,833 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - Differences from upstream - - -
-
- - - - -

Differences from upstream

- - - - -
-
  • Embeds isaul32/ckeditor5-math, which is a third-party plugin for adding math support. CKEditor itself also has a math plugin 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
-
- - - -
- - - - - - -
- -