From 312c85ae30a00f8370a9ce61bc22b0e6840fa737 Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sat, 27 Jul 2024 23:28:14 +0300
Subject: [PATCH] docs: Update documentation
---
bin/docs/assets/v0.63.6/app-dist/share.js | 23 +
.../libraries/ckeditor/ckeditor-content.css | 551 ++++++++++++++++++
.../v0.63.6/libraries/normalize.min.css | 2 +
bin/docs/assets/v0.63.6/stylesheets/share.css | 165 ++++++
docs/3jc1nUXyteo0.html | 457 +++++++++++++++
docs/4yYHqKbLovVX.html | 391 ++++++++++++-
docs/B8hxg4e66cVL.html | 486 +++++++++++++++
docs/BhE2WFknKKHG.html | 457 +++++++++++++++
docs/C09Dou56ffMe.html | 457 +++++++++++++++
docs/GMta9hBHsXHQ.html | 457 +++++++++++++++
docs/KRC2O84LekPz.html | 457 +++++++++++++++
docs/PHqgH8FCfcod.html | 455 +++++++++++++++
docs/QXCi6Y1SYulw.html | 370 +++++++++++-
docs/U5RtMeGPeZ29.html | 466 +++++++++++++++
docs/UTB518X6X9Uh.html | 461 +++++++++++++++
docs/VS22Hq5PBFNf.html | 373 +++++++++++-
docs/X4N03xLYEWnN.html | 462 +++++++++++++++
docs/XxqZW6JjkW2g.html | 457 +++++++++++++++
docs/Z9N9OKBXXLFW.html | 457 +++++++++++++++
docs/ZlxZh8NH5frM.html | 486 +++++++++++++++
.../attachments/27Z989bSFWAc/image/image.png | Bin 0 -> 62104 bytes
.../attachments/XEUUvzBxh89z/image/image.png | Bin 0 -> 8646 bytes
docs/biDJ9KgbWLgt.html | 457 +++++++++++++++
docs/btM6L9JtG301.html | 457 +++++++++++++++
docs/d3dnvVOhur16.html | 457 +++++++++++++++
docs/hkrBX8KE1HQl.html | 396 ++++++++++++-
docs/jvdjFBOCCrOa.html | 457 +++++++++++++++
docs/mPGbEmYGitWe.html | 457 +++++++++++++++
docs/oXLcQUniOWvl.html | 466 +++++++++++++++
docs/rU1hxvgqlA9x.html | 466 +++++++++++++++
docs/s5gsYTbPQr6c.html | 483 +++++++++++++++
docs/xtBYDVZPb0gr.html | 466 +++++++++++++++
32 files changed, 12386 insertions(+), 66 deletions(-)
create mode 100644 bin/docs/assets/v0.63.6/app-dist/share.js
create mode 100644 bin/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css
create mode 100644 bin/docs/assets/v0.63.6/libraries/normalize.min.css
create mode 100644 bin/docs/assets/v0.63.6/stylesheets/share.css
create mode 100644 docs/3jc1nUXyteo0.html
create mode 100644 docs/B8hxg4e66cVL.html
create mode 100644 docs/BhE2WFknKKHG.html
create mode 100644 docs/C09Dou56ffMe.html
create mode 100644 docs/GMta9hBHsXHQ.html
create mode 100644 docs/KRC2O84LekPz.html
create mode 100644 docs/PHqgH8FCfcod.html
create mode 100644 docs/U5RtMeGPeZ29.html
create mode 100644 docs/UTB518X6X9Uh.html
create mode 100644 docs/X4N03xLYEWnN.html
create mode 100644 docs/XxqZW6JjkW2g.html
create mode 100644 docs/Z9N9OKBXXLFW.html
create mode 100644 docs/ZlxZh8NH5frM.html
create mode 100644 docs/api/attachments/27Z989bSFWAc/image/image.png
create mode 100644 docs/api/attachments/XEUUvzBxh89z/image/image.png
create mode 100644 docs/biDJ9KgbWLgt.html
create mode 100644 docs/btM6L9JtG301.html
create mode 100644 docs/d3dnvVOhur16.html
create mode 100644 docs/jvdjFBOCCrOa.html
create mode 100644 docs/mPGbEmYGitWe.html
create mode 100644 docs/oXLcQUniOWvl.html
create mode 100644 docs/rU1hxvgqlA9x.html
create mode 100644 docs/s5gsYTbPQr6c.html
create mode 100644 docs/xtBYDVZPb0gr.html
diff --git a/bin/docs/assets/v0.63.6/app-dist/share.js b/bin/docs/assets/v0.63.6/app-dist/share.js
new file mode 100644
index 000000000..03ad92515
--- /dev/null
+++ b/bin/docs/assets/v0.63.6/app-dist/share.js
@@ -0,0 +1,23 @@
+/**
+ * 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
new file mode 100644
index 000000000..47274e5f4
--- /dev/null
+++ b/bin/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css
@@ -0,0 +1,551 @@
+/* !!!!!! 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/bin/docs/assets/v0.63.6/libraries/normalize.min.css b/bin/docs/assets/v0.63.6/libraries/normalize.min.css
new file mode 100644
index 000000000..87aa24dc5
--- /dev/null
+++ b/bin/docs/assets/v0.63.6/libraries/normalize.min.css
@@ -0,0 +1,2 @@
+/*! 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/bin/docs/assets/v0.63.6/stylesheets/share.css b/bin/docs/assets/v0.63.6/stylesheets/share.css
new file mode 100644
index 000000000..718f8594c
--- /dev/null
+++ b/bin/docs/assets/v0.63.6/stylesheets/share.css
@@ -0,0 +1,165 @@
+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/3jc1nUXyteo0.html b/docs/3jc1nUXyteo0.html
new file mode 100644
index 000000000..09753b687
--- /dev/null
+++ b/docs/3jc1nUXyteo0.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Themes
+
+
+
+
+
+
+ parent: Development and architecture
+
+
+
+
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/4yYHqKbLovVX.html b/docs/4yYHqKbLovVX.html
index f2fb532a9..e75e6d9fd 100644
--- a/docs/4yYHqKbLovVX.html
+++ b/docs/4yYHqKbLovVX.html
@@ -40,13 +40,28 @@
@@ -76,20 +91,6 @@
- Internationalisation
-
-
-
-
-
-
-
-
-
-
-
-
-
Dependency Management
@@ -109,6 +110,360 @@
+
+
+
+
+
+
+
+
+ Having a simpler packaging system
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Building and deployment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Project maintenance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Development and architecture
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Environment Setup
+
+
+
+
+
diff --git a/docs/B8hxg4e66cVL.html b/docs/B8hxg4e66cVL.html
new file mode 100644
index 000000000..a87867176
--- /dev/null
+++ b/docs/B8hxg4e66cVL.html
@@ -0,0 +1,486 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Development and architecture
+
+
+
+
+
+
+ parent: Developer's Guide
+
+
+
+
Development and architecture
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/BhE2WFknKKHG.html b/docs/BhE2WFknKKHG.html
new file mode 100644
index 000000000..951da8d88
--- /dev/null
+++ b/docs/BhE2WFknKKHG.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Main
+
+
+
+
+
+
+ parent: CI
+
+
+
+
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
new file mode 100644
index 000000000..84c85f1a6
--- /dev/null
+++ b/docs/C09Dou56ffMe.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Having a simpler packaging system
+
+
+
+
+
+
+ parent: Dependency Management
+
+
+
+
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/GMta9hBHsXHQ.html b/docs/GMta9hBHsXHQ.html
new file mode 100644
index 000000000..ecae78fd1
--- /dev/null
+++ b/docs/GMta9hBHsXHQ.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Node.js, Electron and `better-sqlite3`
+
+
+
+
+
+
+ parent: Updating dependencies
+
+
+
+
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 version Node.js prebuilds Electron.js prebuilds 8.4.0 <3.43.0 v20 ??? 8.5.0 v20 v25 8.5.1 v26 8.5.2 v20 (macOS + arm64) 8.6.0 3.43.0 8.7.0 3.43.1 9.0.0 3.43.2 v27 9.1.0 3.44.0 9.1.1 macOS + Alpine 9.2.0 3.44.2 9.2.1 / 9.2.2 v28 9.3.0 3.45.0 9.4.0 3.45.1 9.4.1 Windows arm, arm64 9.4.2 <v29 9.4.3 <v29 9.4.4 v29 9.4.5 Better prebuilds 9.5.0 3.45.2 9.6.0 3.45.3 v30 10.0.0 v22 10.1.0 3.46.0 11.0.0 >21 11.1.0 (prerelease) v31 11.1.1 11.1.2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/KRC2O84LekPz.html b/docs/KRC2O84LekPz.html
new file mode 100644
index 000000000..464a8a1b0
--- /dev/null
+++ b/docs/KRC2O84LekPz.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ i18n-ally
+
+
+
+
+
+
+ parent: Environment Setup
+
+
+
+
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 Open any .js file and select an untranslated string inside a template (TPL
). Press Ctrl+P and look for “i18n Ally: Extract text into i18n messages” Select the first template. 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/PHqgH8FCfcod.html b/docs/PHqgH8FCfcod.html
new file mode 100644
index 000000000..a837b4355
--- /dev/null
+++ b/docs/PHqgH8FCfcod.html
@@ -0,0 +1,455 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Documentation
+
+
+
+
+
+
+ parent: Building and deployment
+
+
+
+
Documentation
+
+
+
+
+
+
+
This note has no content.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/QXCi6Y1SYulw.html b/docs/QXCi6Y1SYulw.html
index 3e5f58f87..34d8f0bd2 100644
--- a/docs/QXCi6Y1SYulw.html
+++ b/docs/QXCi6Y1SYulw.html
@@ -86,7 +86,7 @@ node_modules/i18next
+ 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({});
+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.
@@ -115,20 +115,6 @@ await library_loader.requireLibrary(library_loader.I18NEXT);Make
- Internationalisation
-
-
-
-
-
-
-
-
-
-
-
-
-
Dependency Management
@@ -148,6 +134,360 @@ await library_loader.requireLibrary(library_loader.I18NEXT);Make
+
+
+
+
+
+
+
+
+ Having a simpler packaging system
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Building and deployment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Project maintenance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Development and architecture
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Environment Setup
+
+
+
+
+
diff --git a/docs/U5RtMeGPeZ29.html b/docs/U5RtMeGPeZ29.html
new file mode 100644
index 000000000..41c0da655
--- /dev/null
+++ b/docs/U5RtMeGPeZ29.html
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Synchronisation
+
+
+
+
+
diff --git a/docs/UTB518X6X9Uh.html b/docs/UTB518X6X9Uh.html
new file mode 100644
index 000000000..2b59c0dd3
--- /dev/null
+++ b/docs/UTB518X6X9Uh.html
@@ -0,0 +1,461 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Build deliveries locally
+
+
+
+
+
+
+ parent: Building and deployment
+
+
+
+
Build deliveries locally
+
+
+
+
+
+
In the project root:
Platform Architecture Application Build command macOS x86_64 Desktop / Electron app ./bin/build-mac-x64.sh
ARM 64 Desktop / Electron app ./bin/build-mac-arm64.sh
Linux x86_64 Desktop / Electron app ./bin/build-linux-x64.sh
Server ./bin/build-server.sh
Windows x86_64 Desktop / 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 client Server $ 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
index 126d58524..0095e0ab9 100644
--- a/docs/VS22Hq5PBFNf.html
+++ b/docs/VS22Hq5PBFNf.html
@@ -49,6 +49,11 @@
class="type-text">Adding a new client library
+
+ Having a simpler packaging system
+
+
@@ -76,20 +81,6 @@
- Internationalisation
-
-
-
-
-
-
-
-
-
-
-
-
-
Dependency Management
@@ -109,6 +100,360 @@
+
+
+
+
+
+
+
+
+ Having a simpler packaging system
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Building and deployment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Project maintenance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Development and architecture
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Environment Setup
+
+
+
+
+
diff --git a/docs/X4N03xLYEWnN.html b/docs/X4N03xLYEWnN.html
new file mode 100644
index 000000000..9aa2a6e0b
--- /dev/null
+++ b/docs/X4N03xLYEWnN.html
@@ -0,0 +1,462 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bettersqlite binaries
+
+
+
+
+
+
+ parent: Updating dependencies
+
+
+
+
bettersqlite binaries
+
+
+
+
+
+
The native node bindings better-sqlite3
has native Node bindings. With updates of better-sqlite3
, but also of Electron and Node.js versions, these bindings need to be updated.
Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js.
During development, npm install
tries to build or reuse prebuilt natives for the current Node.js version. This makes npm run start-server
work out of the box. Trying to run npm run start-electron
with these versions generally causes an error such as this:
Uncaught Exception:
+Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node'
+was compiled against a different Node.js version using
+NODE_MODULE_VERSION 108. This version of Node.js requires
+NODE_MODULE_VERSION 116. Please try re-compiling or re-installing
+the module (for instance, using `npm rebuild` or `npm install`).
How the natives are handled Locally, this can be fixed by rebuilding the binaries, which is what npm run switch-electron
does, which uses electron-rebuild
under the hood.
When the deliveries are built (see Build deliveries locally ), it is not feasible to rebuild the dependencies since we are building for multiple platforms. Luckily, better-sqlite3
provides these prebuilt binaries from us, available as artifacts on their GitHub releases page .
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 start-electron
(or run any Electron delivery ), case in which the ELECTRON_VERSION
variable needs to be changed.npm run start-server
(or run the Linux server delivery), case in which the NODE_VERSION
variable needs to be changed.Check which files got changed after running the update script and for each platform that got changed, test it locally via Build deliveries locally or via the CI.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/XxqZW6JjkW2g.html b/docs/XxqZW6JjkW2g.html
new file mode 100644
index 000000000..bffc19454
--- /dev/null
+++ b/docs/XxqZW6JjkW2g.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Live reload
+
+
+
+
+
+
+ parent: Development and architecture
+
+
+
+
Live reload
+
+
+
+
+
+
Server live reload If running the server using npm run start-server
, the server will watch for changes in src/public
and trigger a frontend reload if that occurs.
Electron live reload Similarly, npm run start-electron
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
new file mode 100644
index 000000000..d16eeb443
--- /dev/null
+++ b/docs/Z9N9OKBXXLFW.html
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Guidelines
+
+
+
+
+
+
+ parent: Internationalisation / Translations
+
+
+
+
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
new file mode 100644
index 000000000..b56c73abd
--- /dev/null
+++ b/docs/ZlxZh8NH5frM.html
@@ -0,0 +1,486 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Building and deployment
+
+
+
+
+
+
+ parent: Developer's Guide
+
+
+
+
Building and deployment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/api/attachments/27Z989bSFWAc/image/image.png b/docs/api/attachments/27Z989bSFWAc/image/image.png
new file mode 100644
index 0000000000000000000000000000000000000000..5eacee569ab1e56c986309d5f640e96989c94464
GIT binary patch
literal 62104
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 )^Jbl1GmE>nY=mW%Yj}Zr0)2Cx
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