From 2bb79c4209435e3046fd83e056e09fc4634ee1b2 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Sat, 8 Feb 2025 11:55:16 +0100 Subject: [PATCH 01/77] feat: "friendly number handling" for note erasure timeouts --- .../options/other/note_erasure_timeout.ts | 88 +++++++++++++++++-- src/routes/api/options.ts | 1 + src/services/options_init.ts | 1 + src/services/options_interface.ts | 1 + 4 files changed, 82 insertions(+), 9 deletions(-) diff --git a/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts b/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts index 876cf36d3..6b187a825 100644 --- a/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts +++ b/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts @@ -11,26 +11,62 @@ const TPL = `

${t("note_erasure_timeout.note_erasure_description")}

- - + +
+ + + +

${t("note_erasure_timeout.manual_erasing_description")}

- + `; export default class NoteErasureTimeoutOptions extends OptionsWidget { - private $eraseEntitiesAfterTimeInSeconds!: JQuery; - private $eraseDeletedNotesButton!: JQuery; + private $eraseEntitiesAfterTime!: JQuery; + private $eraseEntitiesAfterTimeScale!: JQuery; + private $eraseDeletedNotesButton!: JQuery; + private eraseEntitiesAfterTimeInSeconds!: string | number; doRender() { this.$widget = $(TPL); - this.$eraseEntitiesAfterTimeInSeconds = this.$widget.find(".erase-entities-after-time-in-seconds"); - this.$eraseEntitiesAfterTimeInSeconds.on("change", () => this.updateOption("eraseEntitiesAfterTimeInSeconds", this.$eraseEntitiesAfterTimeInSeconds.val())); + this.$eraseEntitiesAfterTime = this.$widget.find("#erase-entities-after-time"); + this.$eraseEntitiesAfterTimeScale = this.$widget.find("#erase-entities-after-time-scale"); - this.$eraseDeletedNotesButton = this.$widget.find(".erase-deleted-notes-now-button"); + this.$eraseEntitiesAfterTime.on("change", () => { + const time = this.$eraseEntitiesAfterTime.val(); + const timeScale = this.$eraseEntitiesAfterTimeScale.val(); + + if (!this.handleTimeValidation() || typeof timeScale !== "string" || !time) return; + + this.eraseEntitiesAfterTimeInSeconds = this.convertTime(time, timeScale).toOption(); + this.updateOption("eraseEntitiesAfterTimeInSeconds", this.eraseEntitiesAfterTimeInSeconds); + + }); + + this.$eraseEntitiesAfterTimeScale.on("change", () => { + + const timeScale = this.$eraseEntitiesAfterTimeScale.val(); + + if (!this.handleTimeValidation() || typeof timeScale !== "string") return; + + //calculate the new displayed value + const displayedTime = this.convertTime(this.eraseEntitiesAfterTimeInSeconds, timeScale).toDisplay(); + + this.updateOption("eraseEntitiesAfterTimeScale", timeScale); + this.$eraseEntitiesAfterTime.val(displayedTime).trigger("change"); + + }); + + this.$eraseDeletedNotesButton = this.$widget.find("#erase-deleted-notes-now-button"); this.$eraseDeletedNotesButton.on("click", () => { server.post("notes/erase-deleted-notes-now").then(() => { toastService.showMessage(t("note_erasure_timeout.deleted_notes_erased")); @@ -39,6 +75,40 @@ export default class NoteErasureTimeoutOptions extends OptionsWidget { } async optionsLoaded(options: OptionMap) { - this.$eraseEntitiesAfterTimeInSeconds.val(options.eraseEntitiesAfterTimeInSeconds); + this.eraseEntitiesAfterTimeInSeconds = options.eraseEntitiesAfterTimeInSeconds; + + const displayedTime = this.convertTime(options.eraseEntitiesAfterTimeInSeconds, options.eraseEntitiesAfterTimeScale).toDisplay(); + this.$eraseEntitiesAfterTime.val(displayedTime); + this.$eraseEntitiesAfterTimeScale.val(options.eraseEntitiesAfterTimeScale); } + + + convertTime(time: string | number, timeScale: string | number) { + + const value = typeof time === "number" ? time : parseInt(time); + if (Number.isNaN(value)) { + throw new Error(`Time needs to be a valid integer, but received: ${time}`); + } + + const operand = typeof timeScale === "number" ? timeScale : parseInt(timeScale); + if (Number.isNaN(operand) || operand < 1) { + throw new Error(`TimeScale needs to be a valid integer >= 1, but received: ${timeScale}`); + } + + return { + toOption: () => Math.ceil(value * operand), + toDisplay: () => Math.ceil(value / operand), + } + + } + + handleTimeValidation() { + if (this.$eraseEntitiesAfterTime.is(":invalid")) { + // TriliumNextTODO: i18n + toastService.showMessage("The entered time value is not a valid number."); + return false + } + return true; + } + } diff --git a/src/routes/api/options.ts b/src/routes/api/options.ts index 257344cab..14cb7ec42 100644 --- a/src/routes/api/options.ts +++ b/src/routes/api/options.ts @@ -12,6 +12,7 @@ import type { OptionNames } from "../../services/options_interface.js"; // options allowed to be updated directly in the Options dialog const ALLOWED_OPTIONS = new Set([ "eraseEntitiesAfterTimeInSeconds", + "eraseEntitiesAfterTimeScale", "protectedSessionTimeout", "revisionSnapshotTimeInterval", "revisionSnapshotNumberLimit", diff --git a/src/services/options_init.ts b/src/services/options_init.ts index dedd1a896..bb962835d 100644 --- a/src/services/options_init.ts +++ b/src/services/options_init.ts @@ -105,6 +105,7 @@ const defaultOptions: DefaultOption[] = [ { name: "rightPaneVisible", value: "true", isSynced: false }, { name: "nativeTitleBarVisible", value: "false", isSynced: false }, { name: "eraseEntitiesAfterTimeInSeconds", value: "604800", isSynced: true }, // default is 7 days + { name: "eraseEntitiesAfterTimeScale", value: "86400", isSynced: true }, // default 86400 seconds = Day { name: "hideArchivedNotes_main", value: "false", isSynced: false }, { name: "debugModeEnabled", value: "false", isSynced: false }, { name: "headingStyle", value: "underline", isSynced: true }, diff --git a/src/services/options_interface.ts b/src/services/options_interface.ts index 2632b7b2e..f3a92383b 100644 --- a/src/services/options_interface.ts +++ b/src/services/options_interface.ts @@ -61,6 +61,7 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions Date: Tue, 11 Feb 2025 08:43:18 +0100 Subject: [PATCH 02/77] chore: add i18n TODO (it does not make sense yet, to expose these as i18n, as I will be refactoring this whole thing into a standalone widget) --- .../widgets/type_widgets/options/other/note_erasure_timeout.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts b/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts index 6b187a825..5daffee33 100644 --- a/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts +++ b/src/public/app/widgets/type_widgets/options/other/note_erasure_timeout.ts @@ -14,7 +14,7 @@ const TPL = `
- + diff --git a/src/public/translations/cn/translation.json b/src/public/translations/cn/translation.json index 1d844f21d..3525f7a27 100644 --- a/src/public/translations/cn/translation.json +++ b/src/public/translations/cn/translation.json @@ -1134,7 +1134,7 @@ "note_erasure_timeout": { "note_erasure_timeout_title": "笔记清理超时", "note_erasure_description": "被删除的笔记(以及属性、历史版本等)最初仅被标记为“删除”,可以从“最近修改”对话框中恢复它们。经过一段时间后,已删除的笔记会被“清理”,这意味着它们的内容将无法恢复。此设置允许您配置从删除到清除笔记之间的时间长度。", - "erase_notes_after_x_seconds": "在笔记删除 X 秒后清理", + "erase_notes_after": "Erase notes after", "manual_erasing_description": "您还可以手动触发清理(不考虑上述定义的超时):", "erase_deleted_notes_now": "立即清理已删除的笔记", "deleted_notes_erased": "已删除的笔记已被清理。" diff --git a/src/public/translations/de/translation.json b/src/public/translations/de/translation.json index b0c9a91c6..9d318b7c2 100644 --- a/src/public/translations/de/translation.json +++ b/src/public/translations/de/translation.json @@ -1102,7 +1102,7 @@ "note_erasure_timeout": { "note_erasure_timeout_title": "Beachte das Zeitlimit für die Löschung", "note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.", - "erase_notes_after_x_seconds": "Notizen nach X Sekunden löschen", + "erase_notes_after": "Notizen löschen nach", "manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):", "erase_deleted_notes_now": "Jetzt gelöschte Notizen löschen", "deleted_notes_erased": "Gelöschte Notizen wurden gelöscht." diff --git a/src/public/translations/en/translation.json b/src/public/translations/en/translation.json index 36fdccb4d..c3529c19a 100644 --- a/src/public/translations/en/translation.json +++ b/src/public/translations/en/translation.json @@ -1158,7 +1158,7 @@ "note_erasure_timeout": { "note_erasure_timeout_title": "Note Erasure Timeout", "note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.", - "erase_notes_after_x_seconds": "Erase notes after X seconds", + "erase_notes_after": "Erase notes after", "manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):", "erase_deleted_notes_now": "Erase deleted notes now", "deleted_notes_erased": "Deleted notes have been erased." diff --git a/src/public/translations/es/translation.json b/src/public/translations/es/translation.json index 8499975a8..c789d3c2e 100644 --- a/src/public/translations/es/translation.json +++ b/src/public/translations/es/translation.json @@ -1153,7 +1153,7 @@ "note_erasure_timeout": { "note_erasure_timeout_title": "Tiempo de espera de borrado de notas", "note_erasure_description": "Las notas eliminadas (y los atributos, las revisiones ...) en principio solo están marcadas como eliminadas y es posible recuperarlas del diálogo de Notas recientes. Después de un período de tiempo, las notas eliminadas son \" borradas\", lo que significa que su contenido ya no es recuperable. Esta configuración le permite configurar la longitud del período entre eliminar y borrar la nota.", - "erase_notes_after_x_seconds": "Borrar notas después de X segundos", + "erase_notes_after": "Borrar notas después de", "manual_erasing_description": "También puede activar el borrado manualmente (sin considerar el tiempo de espera definido anteriormente):", "erase_deleted_notes_now": "Borrar notas eliminadas ahora", "deleted_notes_erased": "Las notas eliminadas han sido borradas." diff --git a/src/public/translations/fr/translation.json b/src/public/translations/fr/translation.json index 7a680560d..9e13ba005 100644 --- a/src/public/translations/fr/translation.json +++ b/src/public/translations/fr/translation.json @@ -1103,7 +1103,7 @@ "note_erasure_timeout": { "note_erasure_timeout_title": "Délai d'effacement des notes", "note_erasure_description": "Les notes supprimées (et les attributs, versions...) sont seulement marquées comme supprimées et il est possible de les récupérer à partir de la boîte de dialogue Notes récentes. Après un certain temps, les notes supprimées sont « effacées », ce qui signifie que leur contenu n'est plus récupérable. Ce paramètre vous permet de configurer la durée entre la suppression et l'effacement de la note.", - "erase_notes_after_x_seconds": "Effacer les notes après X secondes", + "erase_notes_after": "Effacer les notes après", "manual_erasing_description": "Vous pouvez également déclencher l'effacement manuellement (sans tenir compte de la durée définie ci-dessus) :", "erase_deleted_notes_now": "Effacer les notes supprimées maintenant", "deleted_notes_erased": "Les notes supprimées ont été effacées." diff --git a/src/public/translations/ro/translation.json b/src/public/translations/ro/translation.json index 9f4c1ade9..151dbaba1 100644 --- a/src/public/translations/ro/translation.json +++ b/src/public/translations/ro/translation.json @@ -830,7 +830,7 @@ "note_erasure_timeout": { "deleted_notes_erased": "Notițele șterse au fost eliminate permanent.", "erase_deleted_notes_now": "Elimină notițele șterse acum", - "erase_notes_after_x_seconds": "Elimină notițele șterse după X secunde", + "erase_notes_after": "Elimină notițele șterse după", "manual_erasing_description": "Se poate rula o eliminare manuală (fără a lua în considerare timpul definit mai sus):", "note_erasure_description": "Notițele șterse (precum și atributele, reviziile) sunt prima oară doar marcate drept șterse și este posibil să fie recuperate din ecranul Notițe recente. După o perioadă de timp, notițele șterse vor fi „eliminate”, caz în care conținutul lor nu se poate recupera. Această setare permite configurarea duratei de timp dintre ștergerea și eliminarea notițelor.", "note_erasure_timeout_title": "Timpul de eliminare automată a notițelor șterse" diff --git a/src/public/translations/tw/translation.json b/src/public/translations/tw/translation.json index e80761cb2..463ec858f 100644 --- a/src/public/translations/tw/translation.json +++ b/src/public/translations/tw/translation.json @@ -1112,7 +1112,7 @@ "note_erasure_timeout": { "note_erasure_timeout_title": "筆記清理超時", "note_erasure_description": "被刪除的筆記(以及屬性、歷史版本等)最初僅被標記為「刪除」,可以從「最近修改」對話框中恢復它們。經過一段時間後,已刪除的筆記會被「清理」,這意味著它們的內容將無法恢復。此設定允許您設定從刪除到清除筆記之間的時間長度。", - "erase_notes_after_x_seconds": "在筆記刪除 X 秒後清理", + "erase_notes_after": "Erase notes after", "manual_erasing_description": "您還可以手動觸發清理(不考慮上述定義的超時):", "erase_deleted_notes_now": "立即清理已刪除的筆記", "deleted_notes_erased": "已刪除的筆記已被清理。" From 75afdbe093b89702fba20f16e1bbb5c30bd26b86 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 12 Feb 2025 21:56:58 +0200 Subject: [PATCH 04/77] chore(client/ts): port editable_code --- .../{editable_code.js => editable_code.ts} | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) rename src/public/app/widgets/type_widgets/{editable_code.js => editable_code.ts} (82%) diff --git a/src/public/app/widgets/type_widgets/editable_code.js b/src/public/app/widgets/type_widgets/editable_code.ts similarity index 82% rename from src/public/app/widgets/type_widgets/editable_code.js rename to src/public/app/widgets/type_widgets/editable_code.ts index 78a266a57..389eb7ae3 100644 --- a/src/public/app/widgets/type_widgets/editable_code.js +++ b/src/public/app/widgets/type_widgets/editable_code.ts @@ -1,3 +1,5 @@ +import type { EventData } from "../../components/app_context.js"; +import type FNote from "../../entities/fnote.js"; import { t } from "../../services/i18n.js"; import keyboardActionService from "../../services/keyboard_actions.js"; import options from "../../services/options.js"; @@ -10,7 +12,7 @@ const TPL = ` position: relative; height: 100%; } - + .note-detail-code-editor { min-height: 50px; height: 100%; @@ -21,6 +23,9 @@ const TPL = `
`; export default class EditableCodeTypeWidget extends AbstractCodeTypeWidget { + + private $editor!: JQuery; + static getType() { return "editableCode"; } @@ -50,11 +55,11 @@ export default class EditableCodeTypeWidget extends AbstractCodeTypeWidget { this.codeEditor.on("change", () => this.spacedUpdate.scheduleUpdate()); } - async doRefresh(note) { - const blob = await this.note.getBlob(); + async doRefresh(note: FNote) { + const blob = await this.note?.getBlob(); await this.spacedUpdate.allowUpdateWithoutChange(() => { - this._update(note, blob.content); + this._update(note, blob?.content); }); this.show(); @@ -66,7 +71,7 @@ export default class EditableCodeTypeWidget extends AbstractCodeTypeWidget { }; } - async executeWithCodeEditorEvent({ resolve, ntxId }) { + async executeWithCodeEditorEvent({ resolve, ntxId }: EventData<"executeWithCodeEditor">) { if (!this.isNoteContext(ntxId)) { return; } From 69a6739d1fa65034879ec204e27a27bdc8982ddf Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 12 Feb 2025 22:47:03 +0200 Subject: [PATCH 05/77] fix(client): markdown code block not working (closes #1164) --- libraries/codemirror/hcl.js | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/codemirror/hcl.js b/libraries/codemirror/hcl.js index cb4243889..04c0ea749 100644 --- a/libraries/codemirror/hcl.js +++ b/libraries/codemirror/hcl.js @@ -198,6 +198,7 @@ ext: [ "hcl " ], mime: "text/x-hcl", mode: "hcl", + name: "Terraform (HCL)" }); }); From e7f5d1d280c5dc42887479fc973c8f9ccdb9a036 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 12 Feb 2025 22:49:47 +0200 Subject: [PATCH 06/77] fix(client/ts): load only needed CodeMirror plugins --- src/public/app/services/library_loader.ts | 2 +- src/public/app/services/mime_types.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/public/app/services/library_loader.ts b/src/public/app/services/library_loader.ts index 0cb836f39..063757a59 100644 --- a/src/public/app/services/library_loader.ts +++ b/src/public/app/services/library_loader.ts @@ -32,7 +32,7 @@ const CODE_MIRROR: Library = { const mimeTypes = mimeTypesService.getMimeTypes(); for (const mimeType of mimeTypes) { - if (mimeType.codeMirrorSource) { + if (mimeType.enabled && mimeType.codeMirrorSource) { scriptsToLoad.push(mimeType.codeMirrorSource); } } diff --git a/src/public/app/services/mime_types.ts b/src/public/app/services/mime_types.ts index 26bf129ff..8becf7c5e 100644 --- a/src/public/app/services/mime_types.ts +++ b/src/public/app/services/mime_types.ts @@ -2,6 +2,9 @@ import { MIME_TYPE_AUTO, MIME_TYPES_DICT, normalizeMimeTypeForCKEditor, type Mim import options from "./options.js"; interface MimeType extends MimeTypeDefinition { + /** + * True if this mime type was enabled by the user in the "Available MIME types in the dropdown" option in the Code Notes settings. + */ enabled: boolean; } From 010783102a3945796f45407453935ec86bdc43fc Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Wed, 12 Feb 2025 23:09:20 +0100 Subject: [PATCH 07/77] build: fix missing copying of etapi.openapi.yaml into dist folder fixes build via electron-forge --- bin/copy-dist.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/copy-dist.ts b/bin/copy-dist.ts index 6ffc2cf98..85013e992 100644 --- a/bin/copy-dist.ts +++ b/bin/copy-dist.ts @@ -29,7 +29,7 @@ const copy = async () => { fs.copySync(path.join("build", srcFile), destFile, { recursive: true }); } - const filesToCopy = ["config-sample.ini", "tsconfig.webpack.json"]; + const filesToCopy = ["config-sample.ini", "tsconfig.webpack.json", "./src/etapi/etapi.openapi.yaml"]; for (const file of filesToCopy) { log(`Copying ${file}`); await fs.copy(file, path.join(DEST_DIR, file)); From 53576f5578295f8a81c4406e2732033d5b0d37a6 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Mon, 10 Feb 2025 19:50:30 +0100 Subject: [PATCH 08/77] feat(config): add Session.cookieMaxAge allows users to control how long their session will be live, before it expires and they are forced to login again defaults to 1 day ("24 * 60 * 60 * 1000") as previously set in sessionParser --- config-sample.ini | 1 + src/services/config.ts | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/config-sample.ini b/config-sample.ini index 939eaa7a5..49222b1fa 100644 --- a/config-sample.ini +++ b/config-sample.ini @@ -36,6 +36,7 @@ trustedReverseProxy=false # e.g. if you have https://your-domain.com/triliumNext/instanceA and https://your-domain.com/triliumNext/instanceB # you would want to set the cookiePath value to "/triliumNext/instanceA" for your first and "/triliumNext/instanceB" for your second instance cookiePath=/ +cookieMaxAge= [Sync] #syncServerHost= diff --git a/src/services/config.ts b/src/services/config.ts index b529d4792..28b598b53 100644 --- a/src/services/config.ts +++ b/src/services/config.ts @@ -34,6 +34,7 @@ export interface TriliumConfig { }; Session: { cookiePath: string; + cookieMaxAge: number; } Sync: { syncServerHost: string; @@ -81,7 +82,10 @@ const config: TriliumConfig = { Session: { cookiePath: - process.env.TRILIUM_SESSION_COOKIEPATH || iniConfig?.Session?.cookiePath || "/" + process.env.TRILIUM_SESSION_COOKIEPATH || iniConfig?.Session?.cookiePath || "/", + + cookieMaxAge: + process.env.TRILIUM_SESSION_COOKIEMAXAGE || iniConfig?.Session?.cookieMaxAge || "24 * 60 * 60 * 1000" // 24 hours in Milliseconds }, Sync: { From 4e23b5193d271c415bfade19e9eeed73c6cb8e12 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Mon, 10 Feb 2025 19:51:05 +0100 Subject: [PATCH 09/77] feat(session_parser): use Session.cookieMaxAge from config --- src/routes/session_parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/session_parser.ts b/src/routes/session_parser.ts index eaaf0ebe9..d82e8be3d 100644 --- a/src/routes/session_parser.ts +++ b/src/routes/session_parser.ts @@ -12,7 +12,7 @@ const sessionParser = session({ cookie: { path: config.Session.cookiePath, httpOnly: true, - maxAge: 24 * 60 * 60 * 1000 // in milliseconds + maxAge: config.Session.cookieMaxAge }, name: "trilium.sid", store: new FileStore({ From 04827c0ce19105cdb98b764651b161b62b26db04 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Mon, 10 Feb 2025 19:59:40 +0100 Subject: [PATCH 10/77] fix(session_parser): FileStore ttl should be ideally the same as session cookies maxAge this avoids having "unused" dead session on the filesystem --- src/routes/session_parser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/session_parser.ts b/src/routes/session_parser.ts index d82e8be3d..22323ce58 100644 --- a/src/routes/session_parser.ts +++ b/src/routes/session_parser.ts @@ -16,7 +16,7 @@ const sessionParser = session({ }, name: "trilium.sid", store: new FileStore({ - ttl: 30 * 24 * 3600, + ttl: config.Session.cookieMaxAge / 1000, // needs value in seconds path: `${dataDir.TRILIUM_DATA_DIR}/sessions` }) }); From 2a740781cb42f9c087a3151a9fbf7e7791ea2b8b Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 08:39:02 +0100 Subject: [PATCH 11/77] feat(session_parser): use seconds for setting maxAge and update default value to 21 days 21 days was used in the login route previously, when "remember me" was set --- src/routes/session_parser.ts | 4 ++-- src/services/config.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/session_parser.ts b/src/routes/session_parser.ts index 22323ce58..503cfff75 100644 --- a/src/routes/session_parser.ts +++ b/src/routes/session_parser.ts @@ -12,11 +12,11 @@ const sessionParser = session({ cookie: { path: config.Session.cookiePath, httpOnly: true, - maxAge: config.Session.cookieMaxAge + maxAge: config.Session.cookieMaxAge * 1000 // needs value in milliseconds }, name: "trilium.sid", store: new FileStore({ - ttl: config.Session.cookieMaxAge / 1000, // needs value in seconds + ttl: config.Session.cookieMaxAge, path: `${dataDir.TRILIUM_DATA_DIR}/sessions` }) }); diff --git a/src/services/config.ts b/src/services/config.ts index 28b598b53..b17ed954b 100644 --- a/src/services/config.ts +++ b/src/services/config.ts @@ -85,7 +85,7 @@ const config: TriliumConfig = { process.env.TRILIUM_SESSION_COOKIEPATH || iniConfig?.Session?.cookiePath || "/", cookieMaxAge: - process.env.TRILIUM_SESSION_COOKIEMAXAGE || iniConfig?.Session?.cookieMaxAge || "24 * 60 * 60 * 1000" // 24 hours in Milliseconds + process.env.TRILIUM_SESSION_COOKIEMAXAGE || iniConfig?.Session?.cookieMaxAge || 21 * 24 * 60 * 60 // 21 Days in Seconds }, Sync: { From 38215c46aec5ac3561b1efa05a2b242a6b39f464 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 09:04:34 +0100 Subject: [PATCH 12/77] feat(login): make use of default maxAge by sessionParser cookie will use the default value set in sessionParser middleware, which is controlled by config.Session.cookieMaxAge if rememberMe is not set -> the value is unset and the cookie becomes a non-persistent cookie, which the browser delete after the current session (e.g. when you close the browser) --- src/routes/login.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/routes/login.ts b/src/routes/login.ts index 21ebaf280..9bac3db74 100644 --- a/src/routes/login.ts +++ b/src/routes/login.ts @@ -70,9 +70,12 @@ function login(req: Request, res: Response) { } req.session.regenerate(() => { - const sessionMaxAge = 21 * 24 * 3600000 // 3 weeks in Milliseconds + if (!rememberMe) { + // unset default maxAge set by sessionParser + // Cookie becomes non-persistent and expires after current browser session (e.g. when browser is closed) + req.session.cookie.maxAge = undefined; + } - req.session.cookie.maxAge = (rememberMe) ? sessionMaxAge : undefined; req.session.loggedIn = true; res.redirect("."); From 201663d9ecbde7587c68f6d6661ca2315ebe0ec6 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 09:07:25 +0100 Subject: [PATCH 13/77] chore(prettier): fix prettier issues --- src/routes/login.ts | 1 - src/routes/session_parser.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/login.ts b/src/routes/login.ts index 9bac3db74..68b98e893 100644 --- a/src/routes/login.ts +++ b/src/routes/login.ts @@ -80,7 +80,6 @@ function login(req: Request, res: Response) { res.redirect("."); }); - } function verifyPassword(guessedPassword: string) { diff --git a/src/routes/session_parser.ts b/src/routes/session_parser.ts index 503cfff75..89df0e037 100644 --- a/src/routes/session_parser.ts +++ b/src/routes/session_parser.ts @@ -12,7 +12,7 @@ const sessionParser = session({ cookie: { path: config.Session.cookiePath, httpOnly: true, - maxAge: config.Session.cookieMaxAge * 1000 // needs value in milliseconds + maxAge: config.Session.cookieMaxAge * 1000 // needs value in milliseconds }, name: "trilium.sid", store: new FileStore({ From cab0a5e41f3bad5a864092d3a056f2346466437d Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 09:25:24 +0100 Subject: [PATCH 14/77] feat(config): improve Session descriptions --- config-sample.ini | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/config-sample.ini b/config-sample.ini index 49222b1fa..baa026730 100644 --- a/config-sample.ini +++ b/config-sample.ini @@ -30,13 +30,18 @@ trustedReverseProxy=false [Session] -# Use this setting to constrain the current instance's "Path" value for the set cookies +# Use this setting to set a custom value for the "Path" Attribute value of the session cookie. # This can be useful, when you have several instances running on the same domain, under different paths (e.g. by using a reverse proxy). -# It prevents your instances from overwriting each others' cookies. -# e.g. if you have https://your-domain.com/triliumNext/instanceA and https://your-domain.com/triliumNext/instanceB +# It prevents your instances from overwriting each others' cookies, allowing you to stay logged in multiple instances simultanteously. +# E.g. if you have instances running under https://your-domain.com/triliumNext/instanceA and https://your-domain.com/triliumNext/instanceB # you would want to set the cookiePath value to "/triliumNext/instanceA" for your first and "/triliumNext/instanceB" for your second instance cookiePath=/ -cookieMaxAge= + +# Use this setting to set a custom value for the "Max-Age" Attribute of the session cookie. +# This controls how long your session will be valid, before it expires and you need to log in again, when you use the "Remember Me" option. +# Value needs to be entered in Seconds. +# Default value is 1814400 Seconds, which is 21 Days. +cookieMaxAge=1814400 [Sync] #syncServerHost= From b692c00b8de0aef5380858570e8366c6773b9697 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 09:46:49 +0100 Subject: [PATCH 15/77] feat(config): improve typesafety by definitely returning a number previously it was either a number like string (in case env or config.ini was used) or a number (the fallback value) we now parseInt the value -> if any value is NaN (e.g. because it was incorrectly set) it will try with the next, before it uses the fallback value the strange looking `parseInt(String(process.env.TRILIUM_SESSION_COOKIEMAXAGE))` is required to make TypeScript happy, other variants of trying to get the value into a string were not good enough for typescript :-) The `String(process.env.TRILIUM_SESSION_COOKIEMAXAGE)` will now either return a number like value or 'undefined' (as string), which parseInt parses into NaN, which is falsy. --- src/services/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/config.ts b/src/services/config.ts index b17ed954b..b10015aa7 100644 --- a/src/services/config.ts +++ b/src/services/config.ts @@ -85,7 +85,7 @@ const config: TriliumConfig = { process.env.TRILIUM_SESSION_COOKIEPATH || iniConfig?.Session?.cookiePath || "/", cookieMaxAge: - process.env.TRILIUM_SESSION_COOKIEMAXAGE || iniConfig?.Session?.cookieMaxAge || 21 * 24 * 60 * 60 // 21 Days in Seconds + parseInt(String(process.env.TRILIUM_SESSION_COOKIEMAXAGE)) || parseInt(iniConfig?.Session?.cookieMaxAge) || 21 * 24 * 60 * 60 // 21 Days in Seconds }, Sync: { From 4ed71f30f24da854ec00307548e87187c33288ec Mon Sep 17 00:00:00 2001 From: hasecilu Date: Thu, 13 Feb 2025 09:39:04 -0600 Subject: [PATCH 16/77] chore(i18n): update Spanish translation --- src/public/translations/es/translation.json | 29 +++++++++++++++++---- translations/es/server.json | 25 ++++++++++++++++-- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/public/translations/es/translation.json b/src/public/translations/es/translation.json index 8499975a8..657216a9d 100644 --- a/src/public/translations/es/translation.json +++ b/src/public/translations/es/translation.json @@ -109,7 +109,8 @@ "choose_export_type": "Por favor, elija primero el tipo de exportación", "export_status": "Estado de exportación", "export_in_progress": "Exportación en curso: {{progressCount}}", - "export_finished_successfully": "La exportación finalizó exitosamente." + "export_finished_successfully": "La exportación finalizó exitosamente.", + "format_pdf": "PDF - para propósitos de impresión o compartición." }, "help": { "fullDocumentation": "Ayuda (la documentación completa está disponible online)", @@ -437,7 +438,9 @@ "share_favicon": "La nota de favicon se configurará en la página compartida. Por lo general, se desea configurarlo para que comparta la raíz y lo haga heredable. La nota de Favicon también debe estar en el subárbol compartido. Considere usar 'share_hidden_from_tree'.", "is_owned_by_note": "es propiedad de una nota", "other_notes_with_name": "Otras notas con nombre de {{attributeType}} \"{{attributeName}}\"", - "and_more": "... y {{count}} más." + "and_more": "... y {{count}} más.", + "print_landscape": "Al exportar a PDF, cambia la orientación de la página a paisaje en lugar de retrato.", + "print_page_size": "Al exportar a PDF, cambia el tamaño de la página. Valores soportados: A0, A1, A2, A3, A4, A5, A6, Legal, Carta, Tabloide, Ledger." }, "attribute_editor": { "help_text_body1": "Para agregar una etiqueta, simplemente escriba, por ejemplo. #rock o si desea agregar también valor, p.e. #año = 2020", @@ -638,7 +641,8 @@ "show_hidden_subtree": "Mostrar subárbol oculto", "show_help": "Mostrar ayuda", "about": "Acerca de TriliumNext Notes", - "logout": "Cerrar sesión" + "logout": "Cerrar sesión", + "show-cheatsheet": "Mostrar hoja de trucos" }, "sync_status": { "unknown": "

El estado de sincronización será conocido una vez que el siguiente intento de sincronización comience.

Dé clic para activar la sincronización ahora

", @@ -672,7 +676,8 @@ "save_revision": "Guardar revisión", "convert_into_attachment_failed": "La conversión de nota '{{title}}' falló.", "convert_into_attachment_successful": "La nota '{{title}}' ha sido convertida a un archivo adjunto.", - "convert_into_attachment_prompt": "¿Está seguro que desea convertir la nota '{{title}}' en un archivo adjunto de la nota padre?" + "convert_into_attachment_prompt": "¿Está seguro que desea convertir la nota '{{title}}' en un archivo adjunto de la nota padre?", + "print_pdf": "Exportar como PDF..." }, "onclick_button": { "no_click_handler": "El widget de botón '{{componentId}}' no tiene un controlador de clics definido" @@ -1409,7 +1414,9 @@ "launcher": "Lanzador", "doc": "Doc", "widget": "Widget", - "confirm-change": "No es recomendado cambiar el tipo de nota cuando el contenido de la nota no está vacío. ¿Desea continuar de cualquier manera?" + "confirm-change": "No es recomendado cambiar el tipo de nota cuando el contenido de la nota no está vacío. ¿Desea continuar de cualquier manera?", + "geo-map": "Mapa Geo", + "beta-feature": "Beta" }, "protect_note": { "toggle-on": "Proteger la nota", @@ -1629,5 +1636,17 @@ }, "note_tooltip": { "note-has-been-deleted": "La nota ha sido eliminada." + }, + "geo-map": { + "create-child-note-title": "Crear una nueva subnota y agregarla al mapa", + "create-child-note-instruction": "Dé clic en el mapa para crear una nueva nota en esa ubicación o presione Escape para cancelar.", + "unable-to-load-map": "No se puede cargar el mapa." + }, + "geo-map-context": { + "open-location": "Abrir ubicación", + "remove-from-map": "Eliminar del mapa" + }, + "help-button": { + "title": "Abrir la página de ayuda relevante" } } diff --git a/translations/es/server.json b/translations/es/server.json index 3bf1a0aef..655c2aba2 100644 --- a/translations/es/server.json +++ b/translations/es/server.json @@ -90,7 +90,9 @@ "force-save-revision": "Forzar la creación/guardado de una nueva revisión de nota de la nota activa", "show-help": "Muestra ayuda/hoja de referencia integrada", "toggle-book-properties": "Alternar propiedades del libro", - "toggle-classic-editor-toolbar": "Alternar la pestaña de formato por el editor con barra de herramientas fija" + "toggle-classic-editor-toolbar": "Alternar la pestaña de formato por el editor con barra de herramientas fija", + "export-as-pdf": "Exporta la nota actual como un PDF", + "show-cheatsheet": "Muestra un modal con operaciones de teclado comunes" }, "login": { "title": "Iniciar sesión", @@ -240,7 +242,8 @@ "sync-title": "Sincronizar", "other": "Otros", "advanced-title": "Avanzado", - "visible-launchers-title": "Lanzadores visibles" + "visible-launchers-title": "Lanzadores visibles", + "user-guide": "Guía de Usuario" }, "notes": { "new-note": "Nueva nota", @@ -250,5 +253,23 @@ "backend_log": { "log-does-not-exist": "El archivo de registro del backend '{{fileName}}' no existe (aún).", "reading-log-failed": "Leer el archivo de registro del backend '{{fileName}}' falló." + }, + "content_renderer": { + "note-cannot-be-displayed": "Este tipo de nota no puede ser mostrado." + }, + "pdf": { + "export_filter": "Documento PDF (*.pdf)", + "unable-to-export-message": "La nota actual no pudo ser exportada como PDF.", + "unable-to-export-title": "No es posible exportar como PDF", + "unable-to-save-message": "No se pudo escribir en el archivo seleccionado. Intente de nuevo o seleccione otro destino." + }, + "tray": { + "tooltip": "TriliumNext Notes", + "close": "Cerrar Trilium", + "recents": "Notas recientes", + "bookmarks": "Marcadores", + "today": "Abrir nota del diario de hoy", + "new-note": "Nueva nota", + "show-windows": "Mostrar ventanas" } } From be4b74e791727c1e70bd244406e263a714d29119 Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Thu, 13 Feb 2025 17:02:03 +0100 Subject: [PATCH 17/77] Automated OpenAPI spec generation --- bin/generate-openapi.js | 51 +++++++++ package-lock.json | 227 +++++++++++++++++++++++++++++++++++++ package.json | 2 + src/routes/api/app_info.ts | 45 ++++++++ src/routes/api/login.ts | 62 ++++++++++ src/routes/api/setup.ts | 28 +++++ 6 files changed, 415 insertions(+) create mode 100644 bin/generate-openapi.js diff --git a/bin/generate-openapi.js b/bin/generate-openapi.js new file mode 100644 index 000000000..ae6818482 --- /dev/null +++ b/bin/generate-openapi.js @@ -0,0 +1,51 @@ +import swaggerJsdoc from 'swagger-jsdoc'; + +/* + * Usage: npm run generate-openapi | tail -n1 > x.json + * + * Inspect generated file by opening it in https://editor-next.swagger.io/ + * + */ + +const options = { + definition: { + openapi: '3.1.1', + info: { + title: 'Trilium Notes - Sync server API', + version: '0.96.6', + description: "This is the internal sync server API used by Trilium Notes / TriliumNext Notes.\n\n_If you're looking for the officially supported External Trilium API, see [here](https://triliumnext.github.io/Docs/Wiki/etapi.html)._\n\nThis page does not yet list all routes. For a full list, see the [route controller](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/routes.ts).", + contact: { + name: "TriliumNext issue tracker", + url: "https://github.com/TriliumNext/Notes/issues", + }, + license: { + name: "GNU Free Documentation License 1.3 (or later)", + url: "https://www.gnu.org/licenses/fdl-1.3", + }, + }, + }, + apis: ['./src/routes/api/*.ts', './bin/generate-openapi.js'], +}; + +const openapiSpecification = swaggerJsdoc(options); + +console.log(JSON.stringify(openapiSpecification)); + +/** + * @swagger + * components: + * schemas: + * UtcDateTime: + * type: string + * example: "2025-02-13T07:42:47.698Z" + * securitySchemes: + * user-password: + * type: apiKey + * name: trilium-cred + * in: header + * description: "Username and password, formatted as `user:password`" + * session: + * type: apiKey + * in: cookie + * name: trilium.sid + */ diff --git a/package-lock.json b/package-lock.json index d633ccfe2..5fdf64248 100644 --- a/package-lock.json +++ b/package-lock.json @@ -165,6 +165,7 @@ "prettier": "3.5.0", "rcedit": "4.0.1", "rimraf": "6.0.1", + "swagger-jsdoc": "6.2.8", "tslib": "2.8.1", "tsx": "4.19.2", "typedoc": "0.27.7", @@ -222,6 +223,54 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz", + "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@apidevtools/openapi-schemas": "^2.0.4", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "z-schema": "^5.0.1" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, "node_modules/@asamuzakjp/css-color": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz", @@ -2715,6 +2764,13 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true, + "license": "MIT" + }, "node_modules/@jsdoc/salty": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.9.tgz", @@ -6021,6 +6077,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/caniuse-lite": { "version": "1.0.30001689", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", @@ -7799,6 +7862,19 @@ "p-limit": "^3.1.0 " } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -8992,6 +9068,16 @@ "@types/estree": "^1.0.0" } }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -11962,6 +12048,21 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -13101,6 +13202,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -16088,6 +16197,82 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-jsdoc": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-6.2.8.tgz", + "integrity": "sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "6.2.0", + "doctrine": "3.0.0", + "glob": "7.1.6", + "lodash.mergewith": "^4.6.2", + "swagger-parser": "^10.0.3", + "yaml": "2.0.0-1" + }, + "bin": { + "swagger-jsdoc": "bin/swagger-jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/swagger-jsdoc/node_modules/commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-jsdoc/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/swagger-jsdoc/node_modules/yaml": { + "version": "2.0.0-1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz", + "integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-parser": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", + "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@apidevtools/swagger-parser": "10.0.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/swagger-ui-dist": { "version": "5.18.3", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.3.tgz", @@ -17187,6 +17372,16 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", @@ -18629,6 +18824,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/zip-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", diff --git a/package.json b/package.json index 2555c4ed3..9829a639f 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", + "generate-openapi": "node bin/generate-openapi.js", "ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", "prettier-check": "prettier . --check", "prettier-fix": "prettier . --write" @@ -211,6 +212,7 @@ "prettier": "3.5.0", "rcedit": "4.0.1", "rimraf": "6.0.1", + "swagger-jsdoc": "6.2.8", "tslib": "2.8.1", "tsx": "4.19.2", "typedoc": "0.27.7", diff --git a/src/routes/api/app_info.ts b/src/routes/api/app_info.ts index 87501e804..560a52d1f 100644 --- a/src/routes/api/app_info.ts +++ b/src/routes/api/app_info.ts @@ -2,6 +2,51 @@ import appInfo from "../../services/app_info.js"; +/** + * @swagger + * /api/app-info: + * get: + * summary: Get installation info + * operationId: app-info + * externalDocs: + * description: Server implementation + * url: https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/app_info.ts + * responses: + * '200': + * content: + * application/json: + * schema: + * type: object + * properties: + * appVersion: + * type: string + * example: "0.91.6" + * dbVersion: + * type: integer + * example: 228 + * nodeVersion: + * type: string + * description: "value of process.version" + * syncVersion: + * type: integer + * example: 34 + * buildDate: + * type: string + * example: "2024-09-07T18:36:34Z" + * buildRevision: + * type: string + * example: "7c0d6930fa8f20d269dcfbcbc8f636a25f6bb9a7" + * dataDirectory: + * type: string + * example: "/var/lib/trilium" + * clipperProtocolVersion: + * type: string + * example: "1.0" + * utcDateTime: + * $ref: '#/components/schemas/UtcDateTime' + * security: + * - session: [] + */ function getAppInfo() { return appInfo; } diff --git a/src/routes/api/login.ts b/src/routes/api/login.ts index 3a6d43e99..1f190aec2 100644 --- a/src/routes/api/login.ts +++ b/src/routes/api/login.ts @@ -14,6 +14,68 @@ import ws from "../../services/ws.js"; import etapiTokenService from "../../services/etapi_tokens.js"; import type { Request } from "express"; +/** + * @swagger + * /api/login/sync: + * post: + * tags: + * - auth + * summary: Log in using documentSecret + * description: The `hash` parameter is computed using a HMAC of the `documentSecret` and `timestamp`. + * operationId: login-sync + * externalDocs: + * description: HMAC calculation + * url: https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/utils.ts#L62-L66 + * requestBody: + * content: + * application/json: + * schema: + * type: object + * properties: + * timestamp: + * $ref: '#/components/schemas/UtcDateTime' + * hash: + * type: string + * syncVersion: + * type: integer + * example: 34 + * responses: + * '200': + * description: Successful operation + * content: + * application/json: + * schema: + * type: object + * properties: + * syncVersion: + * type: integer + * example: 34 + * options: + * type: object + * properties: + * documentSecret: + * type: string + * '400': + * description: Sync version / document secret mismatch + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Non-matching sync versions, local is version ${server syncVersion}, remote is ${requested syncVersion}. It is recommended to run same version of Trilium on both sides of sync" + * '401': + * description: Timestamp mismatch + * content: + * application/json: + * schema: + * type: object + * properties: + * message: + * type: string + * example: "Auth request time is out of sync, please check that both client and server have correct time. The difference between clocks has to be smaller than 5 minutes" + */ function loginSync(req: Request) { if (!sqlInit.schemaExists()) { return [500, { message: "DB schema does not exist, can't sync." }]; diff --git a/src/routes/api/setup.ts b/src/routes/api/setup.ts index e4e5a6729..718bc37a7 100644 --- a/src/routes/api/setup.ts +++ b/src/routes/api/setup.ts @@ -45,6 +45,34 @@ function saveSyncSeed(req: Request) { sqlInit.createDatabaseForSync(options); } +/** + * @swagger + * /api/setup/sync-seed: + * get: + * tags: + * - auth + * summary: Sync documentSecret value + * description: First step to logging in. + * operationId: setup-sync-seed + * responses: + * '200': + * description: Successful operation + * content: + * application/json: + * schema: + * type: object + * properties: + * syncVersion: + * type: integer + * example: 34 + * options: + * type: object + * properties: + * documentSecret: + * type: string + * security: + * - user-password: [] + */ function getSyncSeed() { log.info("Serving sync seed."); From 8f6376e53775db5da6ac2a40c1da505bfa0b927d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 13 Feb 2025 20:25:13 +0200 Subject: [PATCH 18/77] chore(client/ts): port revisions --- .../dialogs/{revisions.js => revisions.ts} | 100 +++++++++++++++--- 1 file changed, 84 insertions(+), 16 deletions(-) rename src/public/app/widgets/dialogs/{revisions.js => revisions.ts} (78%) diff --git a/src/public/app/widgets/dialogs/revisions.js b/src/public/app/widgets/dialogs/revisions.ts similarity index 78% rename from src/public/app/widgets/dialogs/revisions.js rename to src/public/app/widgets/dialogs/revisions.ts index a476da4a8..94c1979ec 100644 --- a/src/public/app/widgets/dialogs/revisions.js +++ b/src/public/app/widgets/dialogs/revisions.ts @@ -9,6 +9,8 @@ import protectedSessionHolder from "../../services/protected_session_holder.js"; import BasicWidget from "../basic_widget.js"; import dialogService from "../../services/dialog.js"; import options from "../../services/options.js"; +import type FNote from "../../entities/fnote.js"; +import type { NoteType } from "../../entities/fnote.js"; const TPL = ` `; +interface RevisionItem { + noteId: string; + revisionId: string; + dateLastEdited: string; + contentLength: number; + type: NoteType; + title: string; + isProtected: boolean; + mime: string; +} + +interface FullRevision { + content: string; + mime: string; +} + export default class RevisionsDialog extends BasicWidget { + + private revisionItems: RevisionItem[]; + private note: FNote | null; + private revisionId: string | null; + + //@ts-ignore + private modal: bootstrap.Modal; + //@ts-ignore + private listDropdown: bootstrap.Dropdown; + + private $list!: JQuery; + private $listDropdown!: JQuery; + private $content!: JQuery; + private $title!: JQuery; + private $titleButtons!: JQuery; + private $eraseAllRevisionsButton!: JQuery; + private $maximumRevisions!: JQuery; + private $snapshotInterval!: JQuery; + private $revisionSettingsButton!: JQuery; + constructor() { super(); @@ -87,10 +125,12 @@ export default class RevisionsDialog extends BasicWidget { doRender() { this.$widget = $(TPL); + //@ts-ignore this.modal = bootstrap.Modal.getOrCreateInstance(this.$widget); this.$list = this.$widget.find(".revision-list"); this.$listDropdown = this.$widget.find(".revision-list-dropdown"); + //@ts-ignore this.listDropdown = bootstrap.Dropdown.getOrCreateInstance(this.$listDropdown); this.$content = this.$widget.find(".revision-content"); this.$title = this.$widget.find(".revision-title"); @@ -110,7 +150,9 @@ export default class RevisionsDialog extends BasicWidget { "keydown", (e) => { // Close the revision dialog when revision element is focused and ESC is pressed - if (e.key === "Escape" || e.target.classList.contains(["dropdown-item", "active"])) { + // TODO: Is this corret? + // @ts-ignore + if (e.key === "Escape" || ((e.target as HTMLElement)?.classList?.contains(["dropdown-item", "active"]))) { this.modal.hide(); } }, @@ -122,6 +164,10 @@ export default class RevisionsDialog extends BasicWidget { }); this.$eraseAllRevisionsButton.on("click", async () => { + if (!this.note) { + return; + } + const text = t("revisions.confirm_delete_all"); if (await dialogService.confirm(text)) { @@ -147,18 +193,22 @@ export default class RevisionsDialog extends BasicWidget { } async showRevisionsEvent({ noteId = appContext.tabManager.getActiveContextNoteId() }) { + if (!noteId) { + return; + } + utils.openDialog(this.$widget); await this.loadRevisions(noteId); } - async loadRevisions(noteId) { + async loadRevisions(noteId: string) { this.$list.empty(); this.$content.empty(); this.$titleButtons.empty(); this.note = appContext.tabManager.getActiveContextNote(); - this.revisionItems = await server.get(`notes/${noteId}/revisions`); + this.revisionItems = await server.get(`notes/${noteId}/revisions`); for (const item of this.revisionItems) { this.$list.append( @@ -184,9 +234,9 @@ export default class RevisionsDialog extends BasicWidget { // Show the footer of the revisions dialog this.$snapshotInterval.text(t("revisions.snapshot_interval", { seconds: options.getInt("revisionSnapshotTimeInterval") })); - let revisionsNumberLimit = parseInt(this.note.getLabelValue("versioningLimit") ?? ""); + let revisionsNumberLimit: number | string = parseInt(this.note?.getLabelValue("versioningLimit") ?? ""); if (!Number.isInteger(revisionsNumberLimit)) { - revisionsNumberLimit = parseInt(options.getInt("revisionSnapshotNumberLimit")); + revisionsNumberLimit = options.getInt("revisionSnapshotNumberLimit") ?? 0; } if (revisionsNumberLimit === -1) { revisionsNumberLimit = "∞"; @@ -198,6 +248,9 @@ export default class RevisionsDialog extends BasicWidget { const revisionId = this.$list.find(".active").attr("data-revision-id"); const revisionItem = this.revisionItems.find((r) => r.revisionId === revisionId); + if (!revisionItem) { + return; + } this.$title.html(revisionItem.title); @@ -206,7 +259,7 @@ export default class RevisionsDialog extends BasicWidget { await this.renderContent(revisionItem); } - renderContentButtons(revisionItem) { + renderContentButtons(revisionItem: RevisionItem) { this.$titleButtons.empty(); const $restoreRevisionButton = $(``); @@ -252,10 +305,10 @@ export default class RevisionsDialog extends BasicWidget { } } - async renderContent(revisionItem) { + async renderContent(revisionItem: RevisionItem) { this.$content.empty(); - const fullRevision = await server.get(`revisions/${revisionItem.revisionId}`); + const fullRevision = await server.get(`revisions/${revisionItem.revisionId}`); if (revisionItem.type === "text") { this.$content.html(fullRevision.content); @@ -266,11 +319,15 @@ export default class RevisionsDialog extends BasicWidget { renderMathInElement(this.$content[0], { trust: true }); } } else if (revisionItem.type === "code") { - this.$content.html($("
").text(fullRevision.content));
+            this.$content.html($("
")
+                .text(fullRevision.content).html());
         } else if (revisionItem.type === "image") {
             if (fullRevision.mime === "image/svg+xml") {
                 let encodedSVG = encodeURIComponent(fullRevision.content); //Base64 of other format images may be embedded in svg
-                this.$content.html($("").attr("src", `data:${fullRevision.mime};utf8,${encodedSVG}`).css("max-width", "100%").css("max-height", "100%"));
+                this.$content.html($("")
+                    .attr("src", `data:${fullRevision.mime};utf8,${encodedSVG}`)
+                    .css("max-width", "100%")
+                    .css("max-height", "100%").html());
             } else {
                 this.$content.html(
                     $("")
@@ -278,13 +335,16 @@ export default class RevisionsDialog extends BasicWidget {
                         // as a URL to be used in a note. Instead, if they copy and paste it into a note, it will be uploaded as a new note
                         .attr("src", `data:${fullRevision.mime};base64,${fullRevision.content}`)
                         .css("max-width", "100%")
-                        .css("max-height", "100%")
+                        .css("max-height", "100%").html()
                 );
             }
         } else if (revisionItem.type === "file") {
             const $table = $("")
-                .append($("").append($("").append($("")
+                    .append(
+                        $("").append($("
@@ -42,7 +42,7 @@
               
@@ -51,7 +51,7 @@
               
@@ -72,15 +72,15 @@
         

Refresh the application (Ctrl+Shift+R is a good way to do so) and go to settings. You should see the newly created theme:

- +

Afterwards the application will refresh itself with the new theme:

- +

Do note that the theme will be based off of the legacy theme. To override that and base the theme on the new TriliumNext theme, see: Theme base (legacy vs. next) + href="Customize%20the%20Next%20theme.html">Theme base (legacy vs. next)

Step 5. Making changes

Simply go back to the note and change according to needs. To apply the diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/3_Creating a custom theme_im.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Creating a custom theme_im.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/3_Creating a custom theme_im.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Creating a custom theme_im.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Theme base (legacy vs. next).html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Customize the Next theme.html similarity index 78% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Theme base (legacy vs. next).html rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Customize the Next theme.html index d392deed4..cd0a47f0b 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Theme base (legacy vs. next).html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Customize the Next theme.html @@ -5,20 +5,20 @@ - Theme base (legacy vs. next) + Customize the Next theme

-

Theme base (legacy vs. next)

+

Customize the Next theme

By default, any custom theme will be based on the legacy light theme. - To change the TriliumNext theme instead, add the #appThemeBase=next attribute + To use the TriliumNext theme instead, add the #appThemeBase=next attribute onto the existing theme. The appTheme attribute must also be present.

- +

When appThemeBase is set to next it will use the “TriliumNext (auto)” theme. Any other value is ignored and will use the diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/1_Theme base (legacy vs. nex.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Customize the Next theme_i.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/1_Theme base (legacy vs. nex.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Customize the Next theme_i.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Reference.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Reference.html similarity index 93% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Reference.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Reference.html index 13af6494e..e858513c1 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Reference.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Reference.html @@ -122,6 +122,11 @@ body.electron:not(.native-titlebar) { height: 3px; background-color: var(--workspace-tab-background-color); } +

Custom fonts

+

Currently the only way to include a custom font is to use Custom resource providers. + Basically import a font into Trilium and assign it #customResourceProvider=fonts/myfont.ttf and + then import the font in CSS via /custom/fonts/myfont.ttf.

diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Working with notes/2_Exporting as PDF_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Features/1_Export as PDF_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Working with notes/2_Exporting as PDF_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Features/1_Export as PDF_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Features/1_Zen mode_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Features/1_Zen mode_image.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a3e812421f1ef2c6b2fadd76e71301dba8bc1e GIT binary patch literal 8584 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 wg@R*AMLUmnr~PY+e@w&s*8to25(9 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 literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Features/3_Zen mode_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Features/3_Zen mode_image.png new file mode 100644 index 0000000000000000000000000000000000000000..530d76afb9211de27de97d04f006ee9d156cdb91 GIT binary patch literal 25929 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 T33~AOlWPbyJ=HoDyU70ojvMj= literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Features/4_Zen mode_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Features/4_Zen mode_image.png new file mode 100644 index 0000000000000000000000000000000000000000..d2698b7158c2ee8ec4c20336795f70f73a4c2b25 GIT binary patch literal 127552 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

3L_4*Q)fr+HT%4~j62(2yG{#D@H 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%0AE4jYJ=?M1t9Y<)!0=2 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

N6plq9d0r*CJRvs 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 - Exporting as PDF + Export as PDF

-

Exporting as PDF

+

Export as PDF

-
- +
+ +
Screenshot of the note contextual menu indicating the “Export as PDF” + option.

On the desktop application of Trilium it is possible to export a note as PDF. On the server or PWA (mobile), the option is not available due to technical constraints and it will be hidden.

To print a note, select the - button to the right of the note and select Export as PDF.

Afterwards you will be prompted to select where to save the PDF file. - Upon confirmation, the resulting PDF will be opened automatically.

+ Upon confirmation, the resulting PDF will be opened automatically using + the default/system application configured for PDFs.

Should you encounter any visual issues in the resulting PDF file (e.g. a table does not fit properly, there is cut off text, etc.) feel free to report the issue. In this case, it's best to offer a sample note (click on the - button, select Export note → This note and all of its descendants → HTML + button, select Export note → This note and all of its descendants → HTML in ZIP archive). Make sure not to accidentally leak any personal information.

Landscape mode

When exporting to PDF, there are no customizable settings such as page diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Working with notes/1_Exporting as PDF_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Features/Export as PDF_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Working with notes/1_Exporting as PDF_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Features/Export as PDF_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode.html b/src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode.html new file mode 100644 index 000000000..9792a7d32 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode.html @@ -0,0 +1,73 @@ + + + + + + + + Zen mode + + + +

+

Zen mode

+ +
+
+ +
Screenshot of Zen Mode activated on a Windows 11 system with native title + bar off and background effects on.
+
+

When Zen Mode is activated (pictured on the side), most of the user interface + of Trilium is hidden away in order to be able to focus on the content, + whether it's for reading or writing.

+
+ +
Screenshot of the Zen Mode option in the global menu.
+
+

Activating & deactivating

+

The Zen Mode can be activated by accessing the global menu and selecting + the “Zen Mode” option:

+

Aside from the global menu, it's also possible to activate this mode by + using a keyboard shortcut which is Alt+Z by default. Look for toggleZenMode in + the shortcut configuration.

+

Once Zen Mode is activated, all the UI elements of the application will + be hidden away, including the global menu. In that case, the Zen Mode can + be deactivated either by pressing the + icon in the top-right corner of the window or by pressing the keyboard + combination again.

+

Do note that, by design, activating or deactivating the Zen Mode applies + only to the current window. Restarting the application will also disable + the Zen Mode.

+

Moving the window around

+

If “Native title bar” is activated, then the operating system's default + title bar can be used to drag the window around. If deactivated, the window + can still be moved by dragging the mouse across the top part of the window + where the note titles are.

+
+ +
Screenshot of two notes side-by-side while Zen Mode is active, on Windows + 11 with background effects off.
+
+

Split windows and tabs

+

Tabs are completely hidden, however it's still possible to use keyboard + shortcuts such as firstTab (Ctrl+1 by default), secondTab (Ctrl+2 + by default). There are also some newer shortcuts such as activateNextTab (Ctrl+Tab) + or activatePreviousTab (Ctrl+Shift+Tab) that allow easy navigation, + however make sure that they are configured properly in the settings.

+

For the split view of notes, there are no keyboard shortcuts at the time + of writing, but it's still possible to have them in Zen Mode by creating + the split while the Zen Mode is off and then reactivating it afterwards.

+

 

+

 

+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode_image.png new file mode 100644 index 0000000000000000000000000000000000000000..675a068aa1ec54b5340ef40b47024f7a60582305 GIT binary patch literal 94050 zcmdqI1y~%~k}lefy9IYbL+}K5O|TH05ZoOaCwQ;~f;AQz4X(kp(cl)`-CctdAi(SF zGkc%C=bV{2_s-n=z4tmFL6+5DwQ8+eB@Z(XD*(KgGV(G2AP@im!v6st<^k^kXecPC zD9C82sHo`ZXc$<8*jSjDSY!l`a0#i%X{f2lDJf||98YK;v(ZyhGVwFBJ>%rz;h}jV zC@R1u!okhM1w=l*fP{#QjD!U5=?iZIAmJku&~ZwlJW@4Aee6WY z6%dn&MlV&-Mx-`+4B|F%4n)TwCLtvwXJCB7#LU9O%f~MuDD?b=w2Z8r{7ZF>*P3s% zv~^6)%q=XftZiIe-QK!;czOlB{}3GVF*GbT?o&K8Au%aAD?2AQFTbGhOJ!AcO)adh zzM;LNv#YzOx9{87_{8MY^vvws>e~9o=GOMk?%v7i+4;rg)sO2NAOP`iaNz&{4bY$P zz<~o1kdP3OP=Db8BDll95b=?a={QjcBvnz3ogO{r3P2;2ipi{KL#O9fJ0>!59>pLA z@vJhO{DSlwqJIrg;Qtn)KLGuK=V1(mIUW&KJNM2%!U!Mov-$fl~Al{1g-}}-&09s6cG68Op(|_JbJ^~AXq#j6fl zw#SzLL<{=^;QP!200Ut7=Z=8;;mQXo@dY zQ}y?bxc|mVpF=qLBfrT14cV_b{*$KP1@P}i{h1$sZ~6;A{sQGUA^yGNKVSJbp8hB7 z{$tedMEU-~#6Oz;5z0Ry>c7DJmpR5B03QG}vzLZv+Yaz;7xF^|c$aSe01$io0Jz%q zYmY{~bW8YoJ^uh$&V@782s3|{6-8Iru_F^7D{3s7z&9E9dX?txn5mL#=I=jamf!Nw zoVAPJuBe)k7++e6Z@>4uYR&59=r|bh8%BdmC_p+|KV-H9t`q;fCF22*h7Vs9A)K}m zw+gNiBJ>Y{ugJubZ)s~_hzMvQ@9^MLo80}e{J*;7e>^dbMbN#6>;u3DgDvntY!LP5 zan$_}LT%*#4P5^Ni*$?MZv4)?2*0b|-jl&KQ498Wh^B8)BS@?ReCOQioTsx0CB{hcbqsy4Vx{~-9! zO=82SKmQ;&4fpzYf^S9sw7!S<_8(k1_8a~?S62SS6(B)A=exs3qV@A!GYmys@*E?; zHI|US_XGu=mS3;X^nG3aDN$hnb!O3S!%O--oygqeUdP}q^9at%1sN+$;_MiPNVCYv zbw@I7B}vpw6n`oSEP2yUb&wa%ku~k*!peFy&wDdaM}QK@078JuAK$RTw6;UdgI~n* z?ew+={Rjj2{-yb^o&Vi$v={&;Kn8;U|L8Zt63gK!x1DOVBL-Ntme{z*alJg10$8g9 zM}v|;ZX0napmZDhV+%~u-e8zuR!c0#6t>XV*{5UZKJ7 zTPs7I-E%1*LFF6_@Yh#Dr!i=WRCA{*;?B#ElpsCxsOoq--iLHgJC>Eq$8^%XVbj~X z5{SMMG#3sTXf`gKu_@=dal5G5V425)o)(8u0M=QQ1?Z!^kaT{-Jv{A(I_4u*x5A)-E-VxA?* zN|5Np9SRT~{EdScuu}tRgnn}ZrQZ281jn&F94Ss(lpUEPoM$h$o&8lqboDho)<$O; zHH_@@-RO(}XJiJrsa|#h%##(TML`u65`q4Lx9LA_67J4^?on^`o0=*=0HVQVcTUP1 ztj`}&=t6D`@pcvR7v|>&H-;1HVAcsVPbi+}iwX{}%14r!9GM+oM3$!TWm4``#?~S% zCQXtS`i}bta1Wv2(o-Tz+{E&g6f9ULYi3=!v{_A647yI)ViKADRAUYFsS3Ihvu{yB zGp)_E<)|o_w|PqFxTkO*@mMOhP%8jOjy+8YBfiIH1oe4o&GC5a_~O)CN3@UK4CWg# zG)brS>p$wctxRNSwVz%%;4H`%ErT^u#dcOTo$IhD?OH{Q4qMkF+%k+!ix08attDM<`+%D*j0VE2P8Isb_~> zh&&Fw;VJs!`Yvya7)riLV?I-nV5LS?l4tW1LN-pA_6l0Gb!Myv(~sBoQ7RCc(JTgc zeh6TYKcDkD+X3blFD-VgdVXi0k#yfEVm4dAhX@5tm%TKCaeiOct-hbaEPbigy=cGY zP}No6hxN+gbltMQ8({zLB!`@&)UtVkSNq!!qqG}XNDVt5zlL|Cw$U5=Fnx?bKOvyK#_gLhza8A{ z2f)gd;k|6O>W=P6^%Y!=^L8tR;A-53D0FV}kuc_3cOe zB%=dr>yxGpTm&q(4$0YpjWC|=gy$+#HVEag93W5NbQZ6qnX&hsh3IcH-0;2AlyK)` z!c##Nb$I~LsQZ2O`}}-i*3QlvekNeoJOE0We}1qs;Z_;rS=7eoWfvMdF%^__!RRHt zwMQjH?yMg@Z=6|yd{?ac%zkXFZKR36ewzUi$3R$<&)QWR1oI@Dr}WzZU~dByq{L?g zuKh3&HiN9~`X2K(Nt=UD5rS|QoPCuMPYD6@i(>uiwS3c;&?^-J^e~Uk@R*U62o(ge z&!%iD(hTv9J@##xGNE!GAs=J}=xdn}SivMOtLnW|^tpyGLrEL^2{DQXykaH#o;*3r z;85WBZ0=-YXHf-<9f{0C4SnTtJ}1M3Am|F_@XmDOOR;2VRc3p2%e{MV-Sc@bQ+gRlORZ%)#jq4m7T^IW;G@^|D_=icf|@=21feo zkc8y0Rocf-D?FWsTd;BRT>{TwSI9nlF}2gr|}w~({!?VaQ3Ee zL-*W%ANb_@g!RBdHKy%~5YS&j^XhB0f0YP1^7R5A^ry%yItzHzUOc?d{*F{!XEiq{9dxQ z<)TYGx&%w%->a|MUoL58|9=Ua-2d>s{vW{j2Ll4fYx`a-4{i`X0E9y7D`#fM9{?K^ zwhsV3^=pig&WeAtU;Zh1d4HHSzYFdErbPY$%0F-rVc@S)i~O_Hc;HsqKSlM+(lGjq zO#k173cv)sNU9&y_v=|${ti3K!2Z)_e1*vam^G6#@iY^7p*G+P--yfvRxH00OROa&7Bl{tUkvSbD_FX`@g0e^FxKaxXKgj;a>`FD=WcStJ8 zxYc_Nao^_brru7SyfnpiLVRV;;y8n`TWyA)n!28gNOEhTQT0jQKJSLP3-+nxw6PW= z+NnKSayMpJPlfn#UBfibI_84Bu?yieey2|XH9bKUaB<$<&>7&Zcw7GSZ1~BXe|cY-o3~b+O8SAHDFgpJTFRhAC)RaJx!jNw>?8yG8}3As8yWJ&^FM`l}@%8lho*PyR*) zxn{}&+CASNAhzhl-HKN+Q~V*QLiA;1&h4>42Ae$CrC{E$%d$}3Ry?iPBzcMPBSO<5 z%fMp&kT*3GBG>S}$WP%1fT6SB4#5bjD%|+}SC5!~(98b=&zOHg3+j}`Hm@7p3UKk8 zmbrHY*5p3`dij2T*_lM+8Ooe#>2;CzH@*5IDv#pN4b=)y48XJ&UTtPuY)yd=>?~xbpIys7<4N z@yk&2x2F+5iud){psohGYt|-j%RrY17g>?pH*nrlKLB1LMPdN9JNfx_I{DGF2aS20 zam99XqU?5n6z^o%7Axwo+%ha6Ne=8S^CA=TTlym5y@KiyhPn`y3z)eD z3+)Mm$;jDwYdV^;9j`Tt{i&NyJMv2a4l1<&)6da=BFF#M_WAo!c`@4Z8DO{jXFJeH z`xp7Bju{-%PPlWlR-KhElw~7U11=u``y(Vw^H$x$AGaGP9C*GK7Vb<@>%CFY*a?g!qVcc6Us0tYpjoPYe8XWmOsaRreiV?mJ}r`4(|Fz7cYPjuaH z+%~;0o$p7&Rnw36)4NrnyYW32ijR2XXn(pvMQQvgC=l%e315QL3wGI+AL6Ec^z;q0 zHM7k7Lv!$eBoZ)!WAuV15>d0>8SK&<0|uYpE=svZ8W`I>x{`qKlei(Jd60=MGGQYA zh@Cw=1eMn|w8ZXlvpGt9DJyr>Zt7O4dqN7Lyxf;=@5CzZwQ+Q17x}- zXM;VJ4RsLOTf*5Vx9OEzY;C=R9GqP7k({2{n-2MoPmVK%DclPIS}Lr)kzpi z%sU!Nc$Ru!Z@GB;B`;&%7?WNHEFfzBYp97=B7ET`7M3VCu(V zA#qFAibc+6-h<>eT(IRYSM_L*ggg(1T{1Kc@%DQu3(V8KH8|L=3d}-H7q14ZGZfGpjo?oh-&N-W_h-rH+m`5?k2By4v z(P(wVD`jR5^C0H+PCR|v!k}X2l3E}dLaTypBmV$E=Rp|-DNyt@dJfiAAaF88W5xG5 zrZNq=n^K`?t(wFy)i@{LL;Fn&ENtcb$|;^hHI-WUhEP1&As!+l#QZ#iGVE%-dOegC zcmq*{8K{vHD}`e}*qY}J|T2TTN1W6vk1p7{F;h^RWv z#189`kPzrDSYJWkV3H-7q|)uc$j*MyhU+i*Ix z(}Nrkndr3R=v#nER<)l%A~X~h+^g6(XFE+awPbv&i$n0 z=eEiT=6nIWzH zQ^77yyTjJj-J5;0QLnXjuSE#EesfmpZpD-SY%Ltpj{8Wr&l1eu{CVSwA8W5x4)0ZQ z2o8k{5`{9-QO~PKG1BcFB7(lW7fY36;qTGk5*eo#8#cTu<&xn}dml9MC>f7y_;STp z^&n%s%$|Umn7K3?|Jq3quoAdB1VoC?ak*$EhQ|Tk$KqBq@wuA}Zk}r1qHiP&EttZ? z70umm*O$USguNAGN}AS8P#Na{XH=$kM%`Am9QoI2lO8cN12$Zy!aqcQ7Q57)`J6Xi zTC7h&tv?KvUl&9s3!sTaV2XSld#2WqW}!G75o5be-+c= zY+v0hHDznnIgAv@=YlW5fg#L{m>RJSNsUOreAKswDa}toU=1bsNKK0tE3-@P((lYY zf_3V(f{C9W$_~X$XsT_fOk1}0wvN|%-n7bhZPx~)M!_|x%UU%)v5k1GxD@YaGR!3v zF8;}#WJglg7$UeWHh~=WmF|RoSJNxHx(d2=G_+_re|peC3`niqz|I%F<9==wW1;A@ z9=w3fc%v{I-FFG%^!%8yQuTcKSCGA+|?n zR2s$~N&5tMV+Khu33Lq?u>B6IxD)LUKMbHhMz#uzros_lQXf)s8RGO8!r${++>H9@ zdMHN4;hku&I=dOs%^Bgkus<#+LOnAG1Y_-s%wcmUIB2#>SJUPhwg?Y?T@xI&z& za83aInF|d=LK#`cbB-EaTjAc4yrn!jv-EdjuQj?4uI}mP{3|r)JDJ&wr`^fjElUdUn6gN_ZP&&$qK$z;Z zYOoh4*XI|D)pWF(Tv+sw7ay+>836^TJOsqD{2#rXQu^Y~nBtAxn4g5*xn$6nP@!L{ zWrpY2rX)@d%!JLI>ev|0j%pb!=_mS}P&MRX9L>G6G*@|-V_9p3iN_xX_9}^;+Mz(+Xll^4a$b+ks)se$POkVHP*4p`kdo37Rno33;ZO+ixx2?y ztfb?CeNO)~QrfQq0^7S1Y2BxDtf_aYRY8uLUVn0 zNrfNn`xLBw;vZ`ZUIVbBm2d}IpVD~2wNn4-YehA|meKs0G;}N%-39Pcq`%DDDrO`+ zNu-MmMXU*qJd#U3&EZOUy?$0Bs){EDUvs|PGX}(Gov?8&w6_>FE9eH#I(W2+6sAxD zgBQ4i0>1%!3}h5Ogf%FKnb(awIPi+{t@W`VQ8R$(J>LtymPR{JI7iI@oy17DWxvEW zP9ECZx>9T!k6q+1Z{YmgALxu_-vN8I0IO*f?>t;vFB1HttXAlflGtBJ@<+DU^0ZrC)jQ;p4dyw?WU;x{lXUqQ^8ltSL~47g*|5<=fIRq%;YPI zv+TP>Q6@}GOAiW_F|lEHuggh%c8r9f#czC|G+-N_EX^ z7Q)grdXORjUBMCpY#Ef^@B@nEd+A1%zdTX=;KqmY$FSMD+s#=G+(JUMK{4iPVrZN% z^tjK(ajM83|5YeUFoW(^&v8t&-1k%$=^o>gAF&IwdWxbYi`B<3>AdBMUggeHXn;-f z-^!rbdBp?;u9}nt7dm;bO$F=f&ePUXMAo$FSq`)ssV1TKWP;qgfFolQylxeBkU0wB zqWyZpy1*I6m7u`RMwWmyK|#@~L4*p`CUuM2smgHM?%1`}k{1YcTc9uKEUl@y4W2_n zlfjSi!OLD6 z{Rv>W`P!2zU#&sQg2grmUnZ!>1R+eaI;yF)91!;&8)8*=U~8kZw_6eV0H`Xn2P3_+ zgFQpLe36#J9c(Xn{hS=3O{}5N_fi)uc6w#?oCmrlS{|~a>ryD-vN{U{UGgTvNG#0zOnmyv71}*rpcWw)Tm2#3~8$ zbeSsr=MuL1cdr4&eQuYeh6g}Yean8fpAcaFFYeFQ3JF5q6y2gl#iJ;ijJcW1+ETrh z!-z7ueEReYyAOPY<|zzON12FE5#WE~zVDwWWg#JAC1^57WJ z;$)vGcepQJeziWj71aNoBlq>U)x?v)XR;#B$ln@xBd2nWx39~^c=H?1Na&~tV@@xI zGel34Q3lanDe^~nb%7u;@M33Wx4f`~Mei_`710IHg|4T)Yd!l~byX7wLQV5JK4Ey8 zq_FNa+#R9)0E(oeM-Pc0$7}4>Jjq?L*1y!(?WlS_+2=yhZ(_Bli*`(Pd=3V^Q z_Q4^c3*))P$G8wR&gx^~QKMI7G{K}hS5wD3$<%QotAxJ(8v>fxP-AkMjJBJzHlzA_ zQ)BkpqQXUCI)(hmXl6kQ73SeJCIt87?OQb_0=i2FhBSFJac^2C)cmW^pG^4AwW}s_ zCV1u#`6%SmCi=b#C(YqK=MXTLz1P4dbEl@9V5nppogF$e;GG;wI}_3sFqF<7mdk?lrFpPp`e@c zNQ|gFWuFu2z)f2R)R*J>^_64ix%Cycmc&TCUHu4DiCN#pRnuLPHK_(^%5ATbgOi-R z8eCaT>8sEzJh5`RHTantJ;mMAnmsndC0#|yFZcQd z_Bf6>E`4kMcHsuc7ehsbJW-bUHpFFsNYe?buz7LuCaufL3PGxglZZ3v0Iu$Y%!Qc+ zYp$2aF_!rh@_cdqn}U?C*UGyRe461>ldjjXmwhFS_3}sZf!1XB>rln@ZL}^eBR_O1 z*=C@N?2Ga5cH0yAUp=rA5)jO_FU6jkuy`%SVJ4@EGZ>)UL*#UK@|Yp9wy1 zbB*eKcD>$<&*PQkefG5Ve3BaK!V0(z433;O1{hI$?q6Ad=%=O{=cw+NkKM?z1vO^X zLRPmG+*&DKFCap=BLLh1t(k~iN3N3-!LZD4bOe1u2CY?j=kf2<&z`z1gqvXnW7YIR$m>q zLxLQ@upT2vTPR3ZPw%dT@;Y$yqX zxu0LNVJka-%gXiEw)Y9d)?>ZS)6_X1#GN=1alWb~bT;NcQp6YZWlvT+_TpgG`xXR) z2-kuRx&)skN1TQp^?;H zGIKjtuO9UMeILyst`1_Ri+W{KoW^+B!4x|AOoKe-7$GtxK#oo~29mfvp@J-U&RXco zZr^1VGT4&*=40$z|C#P1(MAjZdKviZ%S6#+>-#OP)Fkmv5%(TuC>@dJ@S;3xNOU6ub=!Pq>H5A*luK*=k&AiW7`OicR$5- zsd;Vn_-YJaiZE*el-OsZmna5-x_(Y@NInA`W5Ab_#uIZsQ^IJRpJ7#MZWVC1ZWQv` z&NPiLb-SSFiOPWmywgo_05>I0)*9-5sCnbM9!KjGXam?FrNHP@@z|&+Z>{C&mmcQ+w zbe+{YTT^I#x@2hW(%nluw(@N?v=5ogW4%;M<#FOjZrrO$FenMX^eD~aGsr#zUr44<51dr>6i}h$8y4n%@%<*d0x3L5_ zKKEuhkAf-me45;@L-bTgcwFzqbQKje>SCgE7y3cQ^1TSW1|Apc68P35qLYVrcb)cW zw!UdZZY(e4V^XP85-YAKtPm-lA1Cj=dAoOm6HvSGIXS{9!1>3{%WG5YJ@@qKz}8u7 zSJ4+bhT6fk(j>vBL%s){^?uxTq18r~5y66#ClY!->u)B^YAYt}4p$)ZFJkYYZ<0i+ zx3LbwxCX1iJrWByz)b4mxj>I^ZRb0Oxu3KY6H7r>lfge80FlqZ7q|JM0{ar|A8JRQ zzK37GT)HV`u;$I)h}zM_Z^*A8j(icRmPjkES#8dpwO)geTz8H{D0iDjyX@_&VG5~L zsaU>j2U5UF{06n>3N~`hNKRG#=(ksuvZh!Sy@MUX&nN@N3q*G?;}3ocyI^X0R!V82 z+s`Q$JHN;cTZc5A-C1GAyV9WN#ktv)WO(>Wm$%#Cbt8AI7*T!In(L`w^1eCNqTp$g z&ehv9ndm~U+2G_Rvn$=QT1~_cXvCOp+eViAK7m2Xs518RsY`yBF)1-8Lv1$iC}j5K zQQUwlE*kr>4pm|4slkCMMPGGJ``Ao@FHV zbuKTf*0Heqlo-=fM=}4MOVgJPd`JiNofU$j)VNx>hQ5M=g7)XkQ-;7T&5zHJ;*Iu7 z0?|dl+oBZ`L|G&DU0v}5mF?ptXG?m>y{Zj-5`{ei-+nRhWX!)Fr)V{lm%fm@B(>f9 zqdi^lDu4IAj=!da?DJuf^-_T@Vz}o;JSQ)Oa)3wwiGnBEfR{U+|IuIt_jI1X#g@Mv zL|4?JN3Aj8l>*sHlQI2Wo@HdFW2QWXDl7uv`0^B2)*VH9BC{PETT+}qWuK5`Sg7v`ojdJ8-)<}M&3)*M+OCFx z0w@9R6mtak7bUJTIKp(cgO1#g8*3F5xlYO0-)mOc;0)OHDz<>U(Kh@QP}GNgFf_@{ zZ|`tb8YbA&SiPCB9zWwHEj3g4@Vd>6sW6l<^>_$Xuv?l_uYx1Q`NsVtxTB**&D~1= z31$O>WFtfnHO~q&jG{K<}v(&2$BuZfA~G!{AcBRefXU5BVWh*DG=k*CRz?$4q3B#THgF3$ z&faU?Q6Pgu7s3<93*pg-1iXGt3c!KKOx^zHg5QWDiSM`km_^nau~KB#nw`>L{>SO0 z9au7Mshz>*YJrN`j_QFjz5+Dy0I`2Dh6{{&P6&Lj3NlV?L{j1EDHPlCr}>Yl(t2Yr@Q-quRCDSf=OSm(wApjC7SQRv=##>cA2*dl?OFQq4iKc0NeaLuUrU84FA zw+tb;$5jyJI1Cu>W>E>4&~rjPHm;+6b!z5ua#111uf9UyQQo1)5#OT(qnQQH>HL5a zuKcdPa(l@hbsj#U@k`7mxJ~rgL`D>d^z=ai=Y;4+;mNvPhtxOU)yg49TZ8PH zX4;P>`7Y-)Xi_!-)Lsbhs?nntJyK*V>tiVzNA2kaJo9AaUbi%E#Z6W#E}>5O41{jUSBax!8J}@awYTjpWvmoCSIG*c2J73O>LBMLCFD8n8hs zHKS-1SmrstA=cOa?ZMk$xg?0Weo7YEkcg3g{lI1tc1gA#xW!mc$5&yX+HM{n(8JPv z_e`B!C;mdN1YG_3-JB@L(zi8s4m#S}=)_jx<1oGg0OeUg>Ujpf!<&Wi`A(9cMOWHe)m5uIADhsuh< z9vcnKkZw=0Y0!YO1_$SOtn4@`A(oyf`^=;YtSfMXq zv4&jR-&91ZqVsKu?S(&3p9f{yYM$uq-k9g*l8#SJtr?w{Cc;eRf`sNL!@g)H0% z2R@gn`m*pNMKNp$(_);XII`{R3CoXfE&*g4_N^4<&Yq+h?3pEBY`A7AJlMe>1~>bO z!uaA$9J#bpP%%(5p2Tz^$k^R8)K!kVkvZ_R!lvlR4p-B?dP^O1DZgyjZOYP*!##G7 z`ipGB*)$z@p~D42)p>kP=3xSDt!($&!ciIOBWK-m#GLFR($wL3hI$6<%{5)!MLhCU zli#{XeJr=)qDcU$D`}~gVQ;8Pbzmo7^k=T2Q&U&&2$#Zqy24#hwz^*PI7C{UdO!rV zkXc=^>*b-aZuc~259Nl>F6Da{ayIUG;tUirq+tfyWCk3G6Kv zo&kmd5$ntF*n^Qrpts=B+T=lY?J0P0jKXtZejOEw^2=(2Q}1>O2_}-)Qa*L2G1xCh z8o^MQ&4Fk+Q5{Ve2ZMtG5=37n%7q-%nQ&7R(V(;II4{4wh_>-)$h4P5X^Gw*N9cm| zDl?E9`T$U?n))fpke5Q#12v8{Wf+EXZaU)~3a3C;W$DvjaOo>|UurtH5pr7>fuOt2 zGTHBHgG?>$7mA4OaY+GQ<8{UM);FDKIy7 zu7rZ)te)C`H+QQKUQL<}ls{|fZG>=TP@V)G%H`R>pI+L|4boGE94Ul+F)v5x72IGP z44g*}ap*JvXdiug0z|*dxFM}%jmday4wFihA?;XZ?`cxDD~nu*r(oMfD?Qbjgf_+1 z)jm8M*g%3E zCbA=F_*GEF8|4$;!#QhresVS4nLPom zQQ1D5XC{{W>-3k7wG#CMFS|zzzQMB_+8hy15VLO~GxB2TOw?-u=j_WrvJY;k(uxqQ zPuiRVu59?%CS_!#f@&%kJyx8i!o#}!e#r3(-^ofQD8OpL;wmufL`6r{iVvdM_Wmb9 z!!UTrg~QNrIHLy%xYkhD+~9<%zd%Z_7u$xp3UO-p7re}1cQGK#=VRraz{I-cmnV>K zVm?ANGV@;XWx^jyC*=`B{#xQ~Yi&uj)n)@D$pl&;-JgW5qEgAM`EqxWP=&fK6LaL} zE)N67bJF_!qq_=FYum`Mw~<$X)0@4t$6m3k#!za`D3$SCC>pqwV{Av~vG!tUX3Pu< zl0vml24x(K9yO?2;X`2i+TBmXw+?ou!K*wQ?ULfjQMcXQQ!M#ssy{9=gow;eq-<)1 zmXf!Xxw}l+lFGl5u%KW>Z`;J%UAEnf)g2g&^QO$0j%78E6EBS&5(qGmP;9)JjRq;! z>8+ew9FD_1xg7nSQ*$K2=Z$ZnZ5;MU#p(7<#G~Lhg8k7wA`t-G)tBovv)L$3yahbA zjq-fmSKqPP$za)Fd0@v=ta?Du`3ku^QL*7DLlOrsyO=d7T1U_1NlZ9rj%xdSX1?>G4zf zq1l^~J*WW7Jw-&8{;a)pFsubO^;oy}5V<~M0ZJFr{Vli5g!e1!dQVlVOb_~O{c6&ZTwi$yl#%}nNB z7L~nPFU8FTI!~pqo{yKZfgr0%Y=`6%tWTGaKfzy4Fw!odGt<|}3=s6#`pr%3AP)>h z*98G-X|py4^u?Kbnh<3@ceJ|V)Q*o@Z;7M7l@WP$^vg=UamOI0H!Rd=T=9xD%E_sVRUzB|<#i;iWP6TGe z-+mm>+PLU75pt3s;Z+oM6DEe88IUZLQ5H^8$+66cdQu6GfGn|bE_Vhw3Jac#w!vbT z=pF2gA-s-UFB4330~WAwKJQQs+6wzsYR%8vFK={L9CdRCM63lo8bPtEtyzPw4ncHW$`s1G-V zBC~tb3@hgx$v7D8CJbTI{rGG+UtikEi~8tDYcts`9P<;ae_`FKV_h5QR7sH-6Efi= zet9_=HP_T~h^YZD(|wcv)c(lp?5e?OEF8HjPHw`eC2jrHLUOK%=AcCgy`rv(9y*`ep~^I<`-%RM$E5S)0(ygGdRq8Ruzg~OIJ-~M!AJ) zE1l{%IDbJy;ch}2a+bsr$m*znD~e%jeO_2nM*pS~cFU7yhWx(bbA2}{*sfqZJrn+p zn<~s#@B(jFHxN%l2XvUp#W|nJkZC(}p`Ftn3uee=KMApDsQ9YezZrXZ)=!{FDUAOb z=k;q$0#t)yCHWgwfNdlv@cJ|K$d&y?K4OK%8}dPxd5mmxKSgy{QyQ)(4JG zUj>?73B5*pj={rur5V^l5rWgmQ}+Enkjt(_#O)yUrJ|B|5tTf9c0;I1ohqp7CK2bQSy_D4JC`UMHWHd*YvLUliM{!;Q6Ml($>S0EW_jzHs%CKmjv3tR6j7zZD)iLT9m^IW@==GnEmfPbudY4L_)$ss zyZLX=Gu%Nz@=X<^gP$YMnZ?siLoHxjjAZ>pOr($6y4`UNZ4fq@n%Lma3`d z<$3(rX*||*+7~o*O3D;fajBz5^;LdG4bT*Z)Kjhm)!W`5EFIDPsq0AaB1S^mv8S8$ zkoDIS#`PXVP~^aw_Kfm23*>nh(|`yZWorK;HXYRXJgZAT_)d4}zWv#9k)l!d>Lm4c z)TjBuT+J&~jwG_`;CDuouE+iKP-)t)my>gw*#~kuV}< zQlIqMw+%C=ar%7;M!xA+u~aYjZfrlqDtvq#8Yo+hkWwilzjCxYPo)TS;aG0J(q!x_ zt|2ARVnVwj@uREwQ*2`K z#RUY#MLmZ{c@8bQ&s1tp+3ne4`LW`pJuU3%|p%Ujn)G#T6CBWkZx8GG<{< z*|kILy!>7wY~ucq-H3WIZg=?Ir?EubIB=yao{g|@A!$<%gda0qLW~*enQcS<;XSK+ zfll)V38vGda4uS84?wpW=wf(zKaevFVT0y4LZ8Q7t*^*ZC3#P{Zd<{zkT5L3smkda zC1s#XP~_}ZIC8r()}lf4&jx5gmAt3rr3{{~r0%7p4mIf`l{Lrp?BGoZ=gk>cV<&tavQSXPA*jSwr({02`vt5_S($N+3Vym&zN4F zjodoSXKmLKpigA97f&GhJZMAXhYqFYUt8pJs`&Xo?o~dAKFh$YF7jQRc`|{(L^kr@ zPjvp3jn4Ti8$AwQd+;kA9rl-Wbc^W!uV&8@0)ACkaI~zS`u(lK;`~pE!SD);vA}}N ze6R8GmNXk|^tOBtH}mq3ra$FWApXHUvpDHT-LWq}j`2-kwGs;qp%%72Iff5GB5|*U z;uj|*sLXc{;Okf;AoOG)U5S12PfPqw1rQmM1?W8UV(3Frw%m;nqSTaM0vu`mC3{8D zGNgWu{wLWrbz0IbRX*UxfT|~-IBCVjxMBN{2|YHgzd;6u@~Fv!tRHiCOSoa7>qSIB z7F0OT0V;?DRynb9V=pWt{P#!+>dDBc>frPt(kC+;yntxDjjXNHL@Mld^u<9FkNllM z2>y7{U$j30uwuPckhOUg#h7T*6!tZOSL2Oi@>D9Jx0yEFG$x?N4%d-|)iOl7$X zY_JP$gx&MY4AEM zuBKjZT|fj9{2p7YWAwWN{n()$&k4q&-lBdwpBq~Y%fKvyBytq3DSfF+7hUDNt=DJR z92*CHO@gX+Rv4M7rd$pIVhEEwYh+3Mf=jhCcL&kOBVJLRF@33iRdTnnuDs^4CPyK3 z9J#sPfd#)-h;JcaW5O-GXgzu_`*6U$%rKE9Xr3pm z!esdM1Ux*nUg#TB!ojY<<|xy)%1r%}ggt~5HM(d%4B5CrJhX=5PG;1sHvaG^fI%kS z1$FkTUgTIWpPaBGNvVug-5jfx_`VM>ym+$|Ud~1*!EM;7vjMMPtA%Dlz5R!`?t*R0 z!|H~Q)~+E6z*K*6DFo@KKVCYp^H{loWoEi83Cpl&`6@d%T;)}1wlI`X#?Y@DPGa@g zUfExexnVMG1-G;A9+Wc3zhW4m;R5R&Aw}RfBAG!rCCF~x6_w0-Jbl$r*BEG-ZgJaP z1(k+H*}KbSNe%b5*%grWt*8*c5o+deZx}a9Q%KRxa~n>#zW*YbhH>gaPc=LhKsg=8 zet6`goSQoobXOTT<;;F5H6xsTUBSw7>o&~8nQ3?NWW0&hmXg0*(wV{Iz4N?+bMI@2 ziClDuZ#E)*1lD}}=F|%< zlQ)nXU!k>c>;rOhYU)t>pi`J&&#$0DPnWyQy!xYVjwjXlq$vk3+UQvCzXZl^h75>Z z%C%j>GeRxyXJ99MiPM9YZ`+qPvv1iH(T7MjI=C(G4x(~_x#3?aCQC155*L=WdUuMx zPO-WN+ggZsJZ_Bj*m11ymT1c$XZ?}h`G)*etS@A5HW|%lmR&kxn(Ns{WHYFsh0fjyP~v2J3rdIJ0D;TyxFi(%>z5dcGNO`*;4jBI|mu5M__ z*KwY>?(xSiFq;DNCr?B+jBrADfczgs&KwHwa%33qM^pTu@_Hw|!{Q+h@2Y7n%)f^} zox0yXcstgQUENJnRT}TYswCOQDip;oIE=)vBsYxQ-nBhlrfzWGe!6<=TC&}~NntrF z!_P@}+xoL^7!(v?;a?%~qv1yP^s;tb!4AfVTZPTCo8<5Np{tcz>&Pka8E4~2oz_%! z~TY7rEi}DRbvQEgCqn>gLIig#8JY zzH|C2fTuA<0+NAGW-W=Ex`H3nv$*ZgX5-^Eao1UEzRhBdAD(lfne;7~7VI_ypfx+{6BXD1#xC2sI~yqGrJx-i zY*_tl{P=lkH38aziolr$q-%DX^QRMnCt2zB5Pz~O8B-K}in#dV6i+KX0i(a?tH-%$ zv{sbjbd7gFw!vbL8PqH3w5#dmAV{&i+~Ha3Ght;46fQx5jk*H~_yK`OA?Gk9%DW1^ zF7Em|t@!}Z>8*6=qY7Y!rM)vw161tz%jBpju;zE?+)KBp zleA=5Ffl=9KkIN>4v^3)a=)v(D_gyq$fQ(P8+9HSRGT~|9|K-D z_jqMQkQb_1@2|6mN>)n#KfJwlSd{Df zKRPg!l+rbXbPXL+GKiE&D-9yu-H4Q;bO}g|JORn>-z1RNjwc{K6 zcg}S#{^DYIpLd?TpZgOxGO$I4Dw~?^=&5hW?j8L#?J!*Vyr(a9G4HauZu^5Vf2Ne8 z*g6Kr%cOM_1^IG)FcV#~*<($I<#$dgExK1@;QJ93`E9&*4nnnqt|r%f6XhwNvF8j8 z(Ke&EDVe}DEqL#vtByAi`jTr)cA>^`uS!~Vi;{7DNdnTX#_H>S|pi$tjJkVlmr{_l=f>ji;BVTL;EO2avO@N9RfLD< zvS!yWUA+NNGz6A*5n@SpKj;)U04iUSOebfqdylKCH=v55p0GW#d&`)t>c>7qLK^AF zWFz^VaTBI()Pg;H;<3{Waz7V+a;;X|^pcY;%pBLx+=>)uYppeN09Y2vy5k4s9zwyq ze6iur*_B1a7(l8Lr|V^4ZsjstU)hC@Vrbbygwu8h3$SKJR??{SvLIDA$QZ5mUIs$y z(3-;C84*Ne>YJa2rRAeecs=9$>Yjl{AzqjDSLzrpyNC&W1KX1blEMX{fFH#)_e_;= zaC=ndOa<=IU>A7zgEIXcw|MW{>Idf;JCsiJ1ct!h`{znt0qXKff4ydhV&>$Z!r?M_ zIFcXwMs7?lKVwI$E_v^SgLB$kkx)x}tnVbDRM^p{IP3P*cY8)Zr@M%C4Gdb7M$g^h z_6(1WH#H$>Q)bcp%ijcZrpqPEv=lzdfK$q8We4fjsffe|PCC}B|8c)I=ZAmgGrWXzc8}=+B(m06QaIH z#HZ~$2_Yli-Jn->GftLAOml;77Pci!oO+{*!D;BreuP<*go z9YYDd^SOzzjG7)q-`5DSh!$gxep?WM+3)1eCH2HEh38GrwcNK_4;=)0uuVaw zH02)T?}fRbQ>X34SHh6A{F*x|_{9fp%060DBUm%JE2`OC z%$@AQmf}q7Og63Ia(u)xw}iF%&-Y%1o4E+=sY7i5V4RiV1>P zne?Ca*r1IecKGy-rG}gydeucQgfh`+J(3c?>G@o)^t!OS(56!N`!VI3(bpmQ!y#M@ ztHRKA#(-K|(b*~`$MZqvExz%dxdp5)bzeeVlHQpJ!p(knKbxqq*gm<`sxKR_gH%3v z(Pe(l)_FMTEOeSN#sjAj=_ea2vP4Z!12TU1^~1IbX=LXMXtbj!Rmi_4gD*AI~(7TDMvB=>qf z$re-i2!K}_Gs8XbkbZqNT!S0)2Y$?DqQa)SkOIb}rqKE~(CdcyUAya&y<{2s3|A&hbqESwNMkA? z9-zz{Ruuhmgg)^ryc=t+4L_FV*`o23(|fC#9si;#J-|IWeF85D<^CDUOSdH&+l1_O zlqHHPPN&OwYxW%X)z3&7Qt}8Ze;+HUQcLEBcRfb2>4_#k2IPIN8)%y*Xa^g$6R_ei z#$}i%?iKhf7WfZ0GyvN%W8FDO<%vOwgX-N3#|H7R9f`bITqDWJLyJDJgs$%yb1V;+ zx99w(&2aZ9BC4-}f+pEFmXFjWDox4IEJtd@8ty z1-DCVG>~&A>Sb`g#CBZ6LwDAVRs%t(oaB53CW-w;RI_RBm@e3*`G5_V_K8!2Jcy5+dA6_0_o&wwosh;+3 z9SM1&m(BuyR+(@#f{}NuQ*_5jjh0Fqm-BbE9JTh&_ZCWJdZ{!EX@60IEJi<=Wp4Q} zPC1pmZrIvd!h$70OyZv#+^))b_kAF556iSOV zLn9?HZ~nO;eRY*NvJzKkYdw?lv>VM?1#6l+2TrWA+3j(jFGj`N+qn;*bN?fWQV(tiLM|FvJFY=XE?TD zp6_y;4ei*Sm-N`!pzYs>OIIyJH+%B^{JE{iJI}LtFP^!?iZCXm6B@9^l*<^_3BS|Y z6{#y7VX4)50g9xZ8wub9eHEgS-VYP%5rFeDDK~l2>ZP~7h%^b6^k>J5>s&oWw``u` z<=svq4^(m442_~GQvX;oY8b0V>jE>ZN_|c={F>cIRJUtfA)ZeL~RjCDUr*3@yfM_ZXeQ^5fCHM>?bK7{Mo^emlcmsStb!%)*G)=tb)!PT)hOr2X2=W=q;n6Gj_<5B4HKz z@q_cQ8ElnuGS8q;*}CYx(2Erlymy(DwI`$qqs6)24JbU$pvoahcw|hO<8@@_i;z)$ zY?q4Fk4qCY^eBn5Z_$`_e(Gi%oJGAu&m1wLo1TqP@Rlc{E4^LK8~%YV6W2rG1o8FV z3L>rD^L^u@w}bG^lFB10b?J90l62(*5xz8eeKjU^kNM|qO_$DFv!VFK=XEUW37;)q zs^daD5#k}4ZXMm|4fqH$xHd(VE%DNBl`>kiLM(5p8RWfO)C(}+*}w)#$HjKzdItA9 ze4w`o?Wy#@OxFxe)2ik3{|SxS%PT7&iPCxAA8^0G?*>5t08K8YY?y(=1%=j144i~?$GeJr(c zajugfxhkc2@l?H==HjPc6geU*WwmowAxV6{aIWj|YSHm-ImZB2U8 zeVQSasLC4P1T9APuU8C6NsLi&FWMX#EzU0}j?hiWGQU>rV0m`Zn@bIfP@9-lt#9%! zFSK@K7P!qgw+{;&Bzq|9>LbR6Bt^pIQv3g}taAPjwDMm( zg`DB#DIKtwU*VV9g3Oyk358{X|)N#U1(#zal>G$$GJ9kes)$uyU7%C@7Udv5ds0vKovga zdV0#ts^&gs-Y>@=+_c&`7^`Bxdb1X*JMs6)gDsN)!w~n9(u?74MCQ ze5wD@$t2W1Iwia)t(<7qS~R43hFNiUlL@V$g{@5%m{>}6RNd)iN9OD}X{W5b8g?D5kHZvdnalnqM9AHy^fzk;f%g`SgnL|ZK6v}5?Y z$hFt}zL%f@sXO%u)le}@9gBGDRT>bR+c%A=)BZ0je|1d$V>>Ae@Fz^OfG%7&*SD|A zD-%0|E|`PldXyZvMjaqk27`|K0;Zpe&Cey2=;MTNk^-rO#tnM6R5;~R@EYdO;+?V7 ziW$@~z0Yv+rr9RHx254LaS>xpP=2G_t{AYcA9TlIM{h}7MluN8W_t7Or?IJ&dR9{P z=Jd!M;AErk?(KhJ+E5cs;q1Nsv{)zIwG=Lq3bGiv!hLU%Gu_pjJI1SwExpsPF*E9F@})7p+jAhZ$}HY?lASYVWFsk)GL+O`S$G zk+Zz{l>#Qrj_bG~AjeBrs`q!CzJaOxG(J~%0GXGD%Z^BM-~S$a6IL$0X11CZrOKfv z4foJB4}aOwW%}YN)8oOcoO49p zMJvlU5&^QhwnWdj`b`ycV7+$yH1i+NHWgN^iGtSg218@C8Y)k66O=!=jj|T9l)BU| z4%R#%;@F8@0guta`M>PcCg>iKO;L!>_B%GdAqFJ)#t&#CHmlyzEeeJ#K=47f))Zb8 zkIAbW5+i4^@ROtf3^WVi){Z#IL>RV+I~Fp3WA;)I<-M&G%CzQmEx8xT$S1wX5LK8k zBGW|t<3y!+X|&MTc!5UQJI{cFsovdgs$c7&#ltYQrrC<&1$9h+fg!{%g-&Or(b9LG za#Ire8pW=ts0JBJ2?bg#(5_gvc=XZJst%jC2%AQ&+;&kzL)#Nr5z>o?)bS+d`DHp? zisTs14@vngHH=-JWuMaYta1ck9L&dBQL>=7WW3l(ThpwDFEXoX5Kl=vLHv$pBRD%)jSaN`mszTu2c1Txk%rBEy8OgUPGOZh;j zmt40ky9cc5v6-?|U4aE!o!>s;;cvJry0tZNrRDf#b4KW;vj{1+9q+4VLcyL#*@P9k z%EfS>_38|U1`j-%rcYGNF7@a-QUYj9V(3ATh%agc834U!#Jk3O!o9v(6#v5@^L|`P z^bB@L2i1>)p!ns5CF^f{wI((Ukb^0_r5k?lGc7&5UTRWl9pv;& zGJrEP*wNu)Dm1FIjMKa#ObIsi4+UOIy+}`pga9{B8W;!!2DzhuhB&dU zzRe8@*;sV@4FvWz!k&tEuOH_v1GJ6J_3>*xUh!hvK4cqmn)xr%ANEVK|K)q|-j^+v z>JI%fiM&nPVmy&PZ=QW+jp>RjfAlqHRGJk_fFCAMHR$KCiiZbp&NL{w%ni12bjpi* zl4Jrhp&4X*zfe-Y;gT7hfrw@2VD$>1yT=wig)Vd-L8Co;(A_;1V_pQv zE3Ak@k6m4}1LxUt`VN6hZQ1IaM;H(MR<5w_8am~-6@c<7Zym$kAdOmoDVzEBIlj4R zpk+Z5&7z&Ja2BFGC)i9nwf02F5=IjEY$e*KkKuX@r$dp)0UnWd@^x2p)U4>U!_8m; zCnNFKeGiCIhqT~m>Q!nLtsGdz11%Ph+?ipMCpI;>st`uqw0AOA{ugl&!$!;PuspLVWYvB{i*- zquIM%fn~Tu5=~f~EFtz{Kg8df>Tyf1ZVdJ=i9)fhC{#F2xuJ$bS1FQq)yss?mmP0} ze!ePd;m17n>|lRJ(%B&$xnM6gP4lvHCmXvM$i>N&YC) zX1kY{@~W3w+u%andu$LhA#|}pytF+e0VBfTGB&_Y&4I~a5&k~+Wx~dZBK{(Oebj7eH?(^znW@BpH-YV%F%({zl9X?O!2w6?OJi$7~UwS?cW-)JHBZs8p-q zn`N#RSf4z+V`FK!U@N4|7ALRqyL2~FDWBhnUs{`vV`PqHd!7jLmHH0)O7%%?XsgEWKQm04JQ~G8v&Wfs+D@{oRnPc z*jg{zJYV-8Zhb;%##{}D?h$tQMhi=ZMnZ|p@D9TG~sz%SjJXo~4p1+%EcM`^+j)u9SJMc(sbV$_=2|>%5+S4#r z%k3w~JL+`5hCv@jiZXFR&~=!Y7>EVC(G|FaH^1-9oRbqRem}OwLhN$gs=@}|v>>%t zd?LZL^-P&A$EVp}q!g4|#GiD09U6rA=GP_AwiZj45mz%j%zsFE>?&#=`O{Y&E2#oM z$v4$-LCIevjVP4aPDO4UmBo~z7!?ETCp0CRqLdXU zPj3ttmh2NRXrCwxbI|NB9QP)(6@nfpF|UV%O04dmPk3wYUaf6z3aC+e^IE7QW!DqA znhKYC6!%~wC0$;`20P=J^>)^q_0b%KS|QZ@9SrBAV5#cVd-76iwJ{?3R%ZU*M*)_~ z&U?aB2|@ydWFZaQf+sHNZyIQSP+lvtOjewVVV>o3dXh^-qa71*6STm7)c4$d84Yxtn}ak1~vjX|KlB@CgPgpdk# ze*CG+mArOVK-b&z@cNY&$tzWp25DPUI)QTJlT6Z^Y)5sPCBR3^c}8Q`SN{4s@!Hiu zKg4@YEtBtB-&Fbi$bqXaA(l5OPQPE-6DfL)T62T2QjZAp(1lkuBlq}gN5x^3$7)ME z>F%WXC&_S_InA!6lQ%I>fXudyGoYtN;wfOZr6f{J0**Nf~Xp#gNn=y^M%sYj#zxk%=r7XAE98@I@#z4Vm>q5HCSJu`8O zzZ~TNnpyQzg+#%gfEo6UVyeAcYg0Mv{T!g+1&v?XvpbB*U}mEHo61iyCXel6=M&g~ zrjFNV86N2OdzCC%-}CZuFBZw-uI3gHdhCW3V@I1uG%IOVE^e+aa1m9y*7Wl#jN0R# z2ilNUbHMSmOuwdJhmLG#Qt$Cr*CXJ;2d=Ha`Wn%J2khu2C>QNIbgY5iM-=`Y8f^xzGNt)x& z%qj7m@yIm0@X?*cNV`TXr^{=|$5ES8yu@OT6-iD!p4xFQKVxze!XPHWIK3E}RNP(^ zBFjINyj;f(_FRy;N`exf2e1%Bs=5|2n%>>$oDp)9La!){^cRftzpJq0&&Ibd1C}X* z5AI9(t|NlZDY`B$p2pD=hq%Hri`-ZNmfl0ICtRQ%a`niRd@VWeHOe z0k@zr28t!s%Cfv!7GfIjeD%Y?h?=U-F>}DSfY2kqDXp{7INwbeH65w%I_O%Pe2Dp- zpX$Wh;sgtAHLbGUtQ$=4e_L6yn;Nbsj%NA5plSC+|8ocIyL=RrMJ!2HtKv!|p)1aG zRp{Dbw-@^H`Dzkk0wIGh*eJI}FX(1M6zekf(|bJ#<_@*(iXpasFRw^JN!P}ZEzc|$ z`rfL7wb+NXP;wkw)^&^3)42@ig9HVb>HPwKyjue7CPc%%apFd{c(i26z(`keJUbM% zX5d_MyorYB3Z~({cNr><3v$f&_pKG5P4;u4DTu&`tLk%&_S*c=2F|htO@>SF#}MnY zw>Ek^ma)XIqeOWb51zbxgzuc?Q$+zrhJ$vP{;34g=MVpjyH#*dtb&ytzJM$(oP)G< zn2{3%sas<9Vrwe{p$|+MDA+@Dj+u~Eyxa~(&E?oKk@&uv=n{PeFXH`Z{H$6ziS#Ym z`7_@KCj`a2#0-{!L=`6!lqSmdHR>*vPag9(gbhOc;#EK_BT@NFi$JuWW+nB#ST0qU zEFJI)yhqh@58!Du*g#j5o)_cWF|j{cg|R5eWXUA-w(yZtn%0Gxh6+UsQ@)S`-OnaP zQxTG4l$dwYQm!;84$`wC|3TZaOI4YWtkx z!hO%Qhv4xH<0REwFK)T{-DUgr(ycXGow!J{pL?B-uS5C;Za%qJVU zT;8V{T$*(w=5raJ9<0nL=F@6{Nlff0#P zWlcO{Qn{+G?o((yd)YWq-vNx0EeK{<|E(*&pHn`9`Sa2$3>uvxb@UvormTr7LWbz1 zXWljBB80Nj_o!DW@bM_tudMzUcUY+d+yZSEJ9|Y7y;=WpGFC2YE@7G#?P_rCboQq^?SgPs5KN7$w4>K|u-2;U+I?#^Fss)BC5$ zzcj7#m!`!`1bntrWn7W6B!iF&YN5DovqX$?-<9)WJ|+>*0=AFHCuUwt{hN`3R$@#* zM3RR=Y~A>xuFQ`$#r(n%9gadzHsKF6pxT$_MBj{a0@>)w(pdtbjb}_&q}yIEWD+b4 zZ(yA%V~ywXE-fX!O=J=?9cprw2j~zmQ2KT)zaoK>X|#7HN3I@|^UJs%S@6^Y-*6M1 zstGuX|H+)LKB9=m1%r#S$1NJWc$k68?u(5!)OjY=BC(-i&5f+FFm3kGDAxA&~ARR z2Qy6D*KU;w*&n;)Mh?BzMHom_#~7Yu>4QR{^vWR`2^t?%s-v%-A2ukGD$egEf!P3~ zqzi;YbTKGIy{fM19qp1)monq_ECx|3$W>Rb>w$s|I?h60ni<%RD7bTMCDR(scw|N{ z!@Tx=(u%1`A5N?py=Vo*4MsF?qwkrTV{Z?2cqyaK@LnCHs<`4lDugCE^V1N6q!W?@ z5&xi$)OBZ)!a2*vz0g-p^LHZ~Udpm@kz^toe>bh?=q0=`vGSm#PM^5P;Zzo|| zJ$L2nGFPWyZK|#T>|qe+2%69IhjK!%r(3g+U_=CLs?<*B){`i?P?6i@{#RU7BO>dx z{zYg^(0yc%pd${$k2XaqeG z`9|HOI^q`T4NB396@M}Ak#>Z!2tC~U8>4AW0v>S|^ zC0uOP+aiiNY^sDQG8DUrslEWyPK8P38$5nuR25!Vn;@|oO7_$~5>iAdsfq69fW}XP zZ{B%VilS$uTnBda0xZkiyq3ecea2t}l!t@d=1Dp~J2H_BeFYuH49xct7*;n3R_pmS z_6za}F}RV1C{o^s>XmH&&K?ZEev+GKEt4ya#wIsCG=(`#S5cl%muOUGb|R3NmP@tn zoh-roQWq?3oY*3D9U4{8E+79+5bS_E)#6>jM!%W;*3J_{@-VgZY!mGDEy}ZO9&&Mq z=w!4IwW>P!yNo5HW@YN_SrA$(`Z|Te#H6N!k`Pk3&8fwmL4#u*(keI^4ae-frcu6| z0Dgw6uLEvweekwUdzX8BU1kCs_^WI9`tQ}g>*gYl!zCzJV~$%G!{ErZaoJTVW=*rK zLv-(l7n&sxHR{2U zf&PTpn=s7oW>M{9g9Ta0SYN)e7^%QFDH-fwc613lJPAI`vb+bFa*;T>c<*Q_qC45Z zz#&fd`w>5%pYi+jEwus=JTAs8^*j@G3aBi;_Rl;%`M9TnoQ&)*)x|;BGBBe2#8OK^ zS~#Z}cb_(&NYZteuN4q-(3{q9>mp_A`&ifpsd%u!{?6iO**MF}lN*^fOW&spG9(-F ztY5&xZf73#)Aa<__n#VZ?(Q!x*d%E#d^#SQfR$cLH`Pb3BY>cSAzX~^X&AW@e+#fn zM`NkIQD?*}<5F#D2;DmPKC|X6J*~{miK4&Gi;Vdm*g)Dy7$cc(HMzV<@wfH4jniGJ4|l;W03CdCXe29@oS{K4dq>->-Z;|;1&#q|8$n#H z{AeT!V=a(#M`sz~s{)j&P2TkX!jfQ#Lb?h@0?3*n@G(-S8v073ou57ick^N&JooLt z3tAOQd(lTR5U^?7O;uj2C2qb2)F%gv7m#wdpjoPHY&~1`<@tU$;yz+A=EzX6m^`Q7 zRXAw)G0$X@%0p)5k3C=0Ry}2E#7)GoH<`bIYgK{w=Mbheosx^-x-7uTVjyUe0Y$g? zWXsv9yq!Uv{$xrOZu>A2v;o3eXL-a%5bZKawH=P$Rg35@o1)O+YJoar#E$%$yMB9Q z2#FMaLc3T%82&p(~V-KGs*%LN--z4bhJ zgq+N(*iq!R*FsOM%{kA|yc--qo~!Y0FJ>TF zlI?_|guYgfMmRv-Q=)cG1(&Zp7p+c2JqF2o_))V$Xr2IIra4`6f4@cS;HE;rN-_+2|Ie$D9h~$#;;l6UkQQ1l?m|yL zOy$}Y&i^=EO>3f&Gbmo?ko+j^A^FX7?%!c44(9V{UiKeE@==+Ip}K4l!HeSjE1 zH#aQsG*oWdwm-MfO249(wY&&I!ArRC2JP6nSDM0iEgHfxUV7ZF+Y@3-dr^)$ei}0T%g+eR1Jzxne9OjnF}3>6%gnj)TEApiV3+cfGl4&ByfbZt1_xE1VOaWT?7vl4 z8)n7#>2+AS?=Xcf=w9-wdRJBk%G8_7os72ZHN-4kWBuLr?#)cd)}4W zC?^Z=FG<_<&2iKs1Jxc}lOgTxy)uCNy}D0wEduODo+6>zSsCdD`VG|Ec1)EmIY`If zP@`<8Y_Kt@J+mg;xc-8s>rN?$5Qq-?}c)CAOY?a@t9Dl;ze za}0UruUGh)fJ4Rn#4oiwnAKftdBCaL*t?-&Y5hsK9~Vkgy(xSNNB|1xH=%KNET%lS znLfTx<2It80n-gdD&2qlKHrwe>W=xio6{<1$mmw)5QbN%<}RtlnibGcUV1t!%WrsZ ztZ_dVIhPLnDPse0V3!?8#BWERv0#18xk(54n9`lciw zx&K-ZpE>R;6_A-Wi^E}x2AsyQ$HuT6$`gx~0-QgnH3T^-`+u>EcpuM#c|p&BZArB= zkPY1U<#Die-m2TovMM1kj?>%+XZT~9A7@w-ZEKXLFHz5w*?*bXz$4{i&Ce5=s%QBP z6yfOEC!UoO!?0mR8ZJ_Uhn8o1!EY_n?;zEaDEZz5hF?{}GsED&eHkOA>N`nMEZaGg z#ELqw7mgxVBA-!%BX?@$In0?o(l5)sz*)_L@jiR7xocjoeUa~eofbqt5m*h_bn1PV zZMdN6pL&%8@|msGX~MHCn!Cw~^e+RObe>_Vf@kT=(JDnkQxcEGAA^Is4DR|U1LtRIeq!Ii`FahK`KQ6kH4T? zc=O#ZZonAEuaoC*b$jQ5QI@E)vJ$&tC-9|7rN8-jPJe!1?UtM!yJ6Hu-y$jF^(x+; zfxB{lbA3TQSYRL&i$$;TTOTEM0hYMB!26o+{N->VfWEQ+k;jo|NutTlTG=R@zg62u z){B#HMx$>f-7?l)ROlCT(lJt2BHViD7;^f0V)=11@!R6(^3oq1OzWphEfaLd*Jm`J z%sO|QYu^5nn9x2^;yTcQa8Rzr&d*v?UTfD?KYn!{;&8REvi$4ZCVoW1xUsf=CUsXZ z53#F#^^V`il7!__O<3pc&-R{obZO64&Mqqz^L&joSjj8f?ueljgV)!Np4+p7lzD=w zaB42(+-*evV=fZ8^NjjyOH}9ZNkD|9VERpckA%8FYZZcKhk9pfhGdO@8%1n}k`eIq z@xE+ssoyzX_w<`UKW}YXKVpoRch{Ad>DXftVYZbinBM^+hPw_2+J?sJG!y~#%Fv5~ z8Mm9~qI7DKso6UASBQvV& z8!JZ%b?Q$wp<~NWXH>JlWf5bgedt95A4rI-Zynd7fY%l~RJx=rHRH6H{}VCsXX54JES6?jI0n39mrUjx(?0tGRNEe!5UJ>BD;(E zx~m3-U%|o3iN`dge+ef5(}UuHMc^FV|HJjb$>vY42iB&4shRgb#UTIN#{PwK_x0SiJhzwNa(^cqky~n&mB3Mr1klOx;Fv!XR8ZrM$20Fah;Xepb6fX&; zsGxfM$&lN<4RPgk?sT4f{=RUIKdZ)PaMSG3$jy313wk9>L5@X$HP8ORN<*z!*H|Ad zq4-TZfQxR?_rxy!8dM%XH5e8-pRu+`J=WbM{yYt9$20)N`)x%;BWTG&D+_E3WD0FX zl0$iz$xlkt9ycjlu(?ik278+uM`wVjV7 z-{#+@-R4`J0~^WN$?Wh>Rzv#fc0PKg<=PsJfe#N4Yc!>q<|uO{*$cwFgmzN25xXVH zu~Q?o8tV!Nr`Wbcpe|d^34OF+W(Y%OJ#A6_gk@gl!*SF;^w6=!00(-2Wtyb?34q)W zDj!L|NB?$IzC(aPLZIE%?W`Co?xWdDIoC z%{Y}tS)%zQuC9`4BbK<2aJ>yW>!_=dX(2=}6=fX+1RsD#2*t0|JGee0?nj*w$ad4u zQTKj$^{mOy3Emq4ug4UONwcN_ECR$y)}Z*WZUgtky<3(yZ?jNJTaKs5^le0tuFtGc z+}o>w^Nf@hn6kmWsR2I03&Bjl>lB|J+q+wMQC#edCJoOoq9jav0MkE4=-C_w7eBYR zWHdJx;5VqTMdH>{(?nbKG;hnmZ2ODxrgO~$~Pp)F`Ka(*vlGdFR zHrZC0a^QXHP3TalC$e4OnGgqjpeinwa%((k2Xiue1%nZ;pn1!l)@_zb2lU~{5d(ximK#Q4_ zZ&qyJU(j>DviF-%DxdHVxgO4Wv~?8zsd|$y)sl zM5N@E51pxT$w$I3oCtDd+#?fs-l`P30A;rV-S)-RMWWK6s-2p8)ZecVKb|6)`JPo& zwh-ROMg$Qp*@+uxxslZzCaWq@0Sj%Y98K6Tm1$qkGlB*4geVBu?`it zE@~TGvc$un*S`h~>YHgxXee1Tcgj*2qcM0kKbx2k`c0S_q&L11s|h+C*49aqDcl*) z-Pxn!lB^6?uak^bTE|WY%-lAGV+id^R-6dlRkqAIvNW{?(>!$J?Au6O1jo`)_1u3Z zt72&I8wfW-4Qq!)A$vEu&3c-A_l~6Ci)s-X1~*3>bw+L^;D*2JF5vA;^BaiDw$6)= z-gDw~5z1Iq<7fEvK*sg!=T4I=bMPUoB4@OFbq~b_`{}p)n7(Za-uHZ#BGsMz&a8Aa zKJCk+6>uaS;4s+T@bjShe$e4|gj`b{eCo{lfMvpg=$)x%Dh4;ZnK zeEpTIp3s3PPb;X+qD^e6NsJ}wqffHH>p4i-Sf_ma32o{PcU5!s*g^c^Gjc`Nd5o&L z{QRz?ppHb+Gf1GCar0ThdnPIO4*}s<(?hNFajD8ruQ7MvSfrnLl#?Z~M?jL993F%p z1i$?9JW*GnP^Kemt(-1%x|=Sxqfo~ns0ou`8F}?MB>E=Wn(7BV@ml!d_p;Z}qzZRO zW}~e6q%3Re`L`w`?*erg%t=P~RKg|FwF~oYNxTKW_W<6n7PYom22FMZVoyVPob`oQ z@j#;ZL7DgSAD$6dsnpjUVSgNI#c!HQ-nXHPB_5_mAf%e#(}K}`*`Xb4f%2hQt87iv zk`ME2sST@a8ZA>N7ktL(ISTFHl*I+RCDfe&`pJC+OZ~4761COBWHkefXoUCvCuG-3 zLPHuQ1_-pPK-o0 zndNS;OvX=?PR%EeyE3}R6Xc;LqN zWK1z=vg)T|Wy?>1oF-fP4eSx%%P6Le7aRF&eM^$ZPs5~jTjuBq;%-l2GPka>xwVpF zyymth)hS*vRF!`!axINm%vz|ZYl)|&{%2B2;oL$8StPlyf9y$kR`YJjac0-C0_9fh zNa3nOKC19Tp}``Dy^F}4QK|NX%{mw@KT4_7ifO_340Lb81JZv_-FeYl9_TUP= zXXfefu2Pl|M00O+NHCq9Z5A>?E%jvPy8~PM_}u(cmF|`g$q=(*=M1sKRP!^*e)qx6 zpSf6-eiqn3Y z_xTVsIrJ8BJFygUsZPN%0i8MN%H(JoyOBiL?OZ9$JCtEqM^A`vZ{fwY#c2Bb41;vP zjakl=NfLZ9`r&nCGZV&qQR3m)CtB1_Foz}fNHPwYihiA;*11RpzaAx8q7{b!D6hdX z@RqD#$B8u|GsH)CwaF1gKb|lcjUY0f_x8PWx6zhp5S9{FY5eM*M5Vi_xDFz;0W#Ji zC!G{Jcf?0@g)TXUYNfWRampS^^O3Q=&FmhU0&P4>jsg;Efvx!g6y8ocbUYlwnfWe- zxA8P~mhcJFHZ)KtejhBX`bIX>O%~%+oJNK5MDA#^!!CbUz(D_pDN?nbqfywNShfx9 z!bExZ2``8KJ@?Hrfwz;~)D26qVwoHBEQw+6Q|Ojfvl#8OcxS;tm$9+X(HCEt|1ZP$ ze~AFLd(w($Z~uu_*y2>Zbo!_pkpX1poc) z()@4Ep#QW-O-KXT(ax|6IRKV5ef1wUePjP{`!WB+Qtbc3R{!ZL#qpnAL;i#F8}vAP zYLn+rSLQz(^}z-H<;wiGl=FYm#NRG0fq(S<-@<^u{r;a0$v<_@fA#O!Q`G7Ce@bxQ z{T*(4nL=(82&@Un+xJI;ovn;Vq^T_Ls?&m+2IJPd+#ELc#YSOj49*;e4nm%!U9bQ9 zGPVqYK$?N5CcEugrR?UXT#+(qGK?b{t=<9K4U1FY@edP;byC8fvWt(VRjC#RG=rZV zLLJK)a5M=8`?#st+r zSP$BEF;2IN46cNN9E0!I3rKNVvo}yXr?uFAD!5a1b2pW7Zq%wxoIPA59XUZ zmG28aTBpQI4?$uDR+|2I6;J8A%<)L9uO{p?sLJ*aa_cs@Cpn8;DT_gl&<;|lr93qtJFKfW_bTlS62T=s1BK2qsD zp+fIU^=z{#COw|8u0!M_QeNQq%%8HwMZf(LSeZsw3B9X!awC`?qIRA{9QGZr-(C#C zps~96u6zpiSLy=nyu!NK6K4idGD}eTr%K#6_1|I4^c+tpJY{;k$gwlAO$c7y?{^hIp4 zIJ3FQsy6DC8XnS#vSO~3$60aIqo>5hMU4P*Ij@gr5iQhsqBWD7&4Pw`+)V6z_j-@S zkNrH)@^Ipz9+uNtsxfNKf=`JG?OFRmikaBFr1;TxE zt--LTg8&EfH+b6=erm=1rXHQ(W;~2DEyG#5=`elmvu-P*EI%{9$k1@mk4DY`tOSnj zYl^_cDM@dTgjh-QuoDTFw^pl;8STtAzPZzS9=GtZKaPTmQ)A90u7d%nLs*HGwN~OU zvyVIX|IqfG8iI+go-yfxnY znYnXk=KK2#4(G*_d#}CrTJO+rw|$*jR&M_6rE`PZB0M8H)P5ET$s@pZApG${HkWj1 zIp@KGOY)F|t~B6JZ-CSWH5lP1y_n^A(eFUK7MkBU9ufciOk~~;-?@qgS{>xP3&Qaa z3iokz&(l#9Ox=_Xf1@@J58c-;MdpWW;QXcBI@9cAtNTNMGgIo4p7>U|9qv;T780Hz zX}}`cJ&(g?|H!d)E?m~{N}b51fuRl0d<#6ixdD z`_dpMUgUW%Jt!i(K0R>YDL;vkj1(*hnFZmzqM+OKnIea67!~u;F2E+GOrCb#+dAp~ zHZi-;?-5BE$CqhlqTHEqwiK<)^yf!r^rGZz0U2Hn4sa1=l&T(Zk;6w*J+NbO z>qbM`OtBEkrry`JsJpdGlG>*ZPP)= z2FYcX8`%S0LqN~n_F2!>v@Dfc%Cdx1yfp~}8sN{olRb(M24_SZjkVHSW;tz{wS24o z^l5hr>36sE>kp_T88?&>n@R$YJU%`gD4bkW&x<*NBlgG)Ow>e&p!m!PRyQcqVlT6# zWtog|+*oY3rHwe!QYi?C90wY?=61o%j7;Q=3o}p*MP(3n)lDQQz3scYf zz}}q`@6Pq|dhYZpxc=n=x}<}9GlX{snc%^gT!ZQq6?UQQZP`fPc^3_eb){{@g&RA& zA4Y+5`$nKB?u=&5XOZf1tU5&4#Oh}uBJNGGI#?7LZeQ~@%0;sb@xyHk=qUEC*T>7X zK9|p7N|E>v7(_0FFoOD&`ADK1;6eq}J+AoKb-;1G_4|u#;cn{%s<4Khd?d!LptrV8 zd=ppG`vBBTF-5=~5T7I6fPvefA7bZSjggd;06ohf51ZARUC^}BdfTa)-|-evH|7-L zW~#f~BzQFp(tcQcWC^*h=XX8YO~a;mL(yy;*y2qefI%?wx)$;6S4AtMDr;|9fDx%W z#M%``On3e6*Z?QWE6s7HKx{Vi-fhvcdYO}>B7v{L;(0X3&{8dkBT5F=c`OXp>aWW0 zKc}USmHx#x3h>9uf(CXsj(7N-BIq~nUCP#OSPIPOUzmB~**aSSD~*MaNaEY`4eRG- zRj?9@=k#RWTh3fr!$#WZf}<>vp`$=x%(A{-Ip=*kCE%`Pp5fySq8 z?Cj#^z41bH=ViCMYOt{$l=C%!uC;L=0s;xyJ1E`5I@#OW!PLIP)wt=se2=x{JYvE6 z7eTa5d^Q)4qaBdFApSm%LSHLuv8lSdlv6FKEhb!E&MQkIOT(T=U^)iyWx3PO-8|o( zAGjhox)^-o=xgr+x$-M@eDCRdNGK3kfLIdcazfWgV)` z-F{o|txE{)J1&ecPk~~s9lwku6X0XS>)BSV4x8R4-1bOh3k;G%>}?`o7$u2tf^w`q z_z86M`NM)Om06yE&CIuV7!@>X|7ir6BN#wHRM7xhF&{i zMPFgGHD3H8^vwf)t|ePTw!mWg%9))r_PGD4^j7GX%PhHks*D;_UypesjbVF_bx9r$ zPFt8GWNG9G5(Ah3^+~}K(18%LEb%v{2~`i9(&eRahoK>*9a6Tlj0;c(#YDL)b)7}o zk-b4gL#nYShZJfP3|wV&3&AQbW!fdQp9B*_$2GrCeJaKsj{=@Ck!a{wHdlLZ^n7PaN8B!K{XS)lH2%tt3(7!I zc9eAN-S*_2SsD!*5wc{D}$%?}2iS?8PkBnm)OJ?S?q{ZVt3_Z8F6+Jri9dS=X zrknc-z5K7m9SoGue9H{WOlrh(gpzMqd_EeB~$_v|DhsW;Vqn z7+tfxQkyrJRtxnMUd~-WjBo?qkL94A2Y;FkMUfU*Tby$Sx?c>`J4nMuMBRuyHwej| zWD%Y$(c!FWyRMQfGBWC+MtqqeI)b!urwoJt{3N~mV~MpVS5%^vae#(-%CaQHJFZ>S zJvLTGkR-6BLPhjg@mpkt(A%J7N}$4GR-J)>4=u&QFWI(Q(1ulsAZZ|dlmVj2eA;@C z*7vq-es$m1?yc_J3qJ$5DrD(ZGEu+}&~YXOZR_as0_3&B37V}H$eVm6WM>loI;GEy zJdL!9o%DlqKcK8d$en@RDzB~3k})ZJUV1DSXGJ_OTar(I&`-c9p-wOvxk zGMSSLQazIizwVg~U`vuo8cum($w^vS&TnThm)2fZ#*M6Nf@MRuUE`oP;{+?;2qS@C z4Q8YnQ=!(_XQv7rJ;`$Ap2myQPVYLlIc(pHUgOJ>khMo!)VzuFZln&s=R4ZeSmj&7 ziDQTK+P*3G2^H}Z2(?`sOlION6HvbAY<5j(zKx}0+8Kg}Ulk=r0DGl5u!-u7O^p<&j1M$!HOdU8H62Cr`(-w(tJovdb3$vtc)av!^>%BX309is*gkts>w^l+UQgWC^dcFo$P0Yt8d;*% zTPH~zhQPktB>y!36nH7uoc%JgGJBipb>fn@O_3kRPHVm`jdOp#efgHs0Ss(H0F5`4 zkfXYn0fRD=Zx0<{8*2I@2?-$JH#(cf>A906CjQR8f9X?BA@9_otN7eoLlbvy!$2oS zSRK{N8`&VJw?LY!Rq{+y9Paan7qqa)aPB*TzO}S4?4&fB-U7B1n{#NwOS#=sPF0YX zk^ZV|@1SJbV800QJ9iL*=h3E8)N-xB!9K&+^Gb0J_+IrGqz(msO*!@0(OCUO$BI;C zYM4y|4e&H)+esl6jP~fCi~)&YY_Ox?BXBj&6OH1D%Hv zGH#PW{R_3j+s1`DKysfi@+SV?Y=3oE3qG54YT13>UdeMTJ|e=?_5(D#u;~H7RNKC4 zD(o+|sF@ReL3(w>(hbt9BuacI02qn3`Gp4HJ09Z7FP z@FYkrSoY&Mvk|{Zy}P!}M!-5lQv?{6DHKZ8uE`D&W(A-QGZ$2^bso_(ESmBv-bl4M>Ez8`1kL1Rq5{_n?L;Wy<+>PO6zFT zSZ(;i=EvrVQu7u$n+$CiOMC=MR7ptzWt0@0HafpQ7SMyd1+0^w#Cdy|dOUt5PXW)? zAXhAe0oY>nqpIMrcSRZ7?rMt7FXxVpeU~QsegXfgB>Q*2gAU5hvE;AG-Ph7hIFLjX zceabeMJVTi2@_`l;XW+_LHQwA8T2XT3;3vu^mG}%Bl-)DC|WN zy@WylO)seexAxRiPQAsa4*my`aC;nd+b~3N=Tg`W9>0S9D}}@?6!IZ6?%0b(PnrmRFVo; zSJ%=UcZZjP6N*FnUY&2TjgGkGj_d}uQ6o^{lyP#nlvG?HV`RR=D97xqkDNXYv%ITn z#Dkz6rUE#FR&bY+eFDo7bM15#UK&bSrl9q85{}tkY3E&;1^X< znu`xVfh;uR2b_dAxcS=WXN4C@V0gAag`quN9{${^!%!^@zmfsM;$J{1Jlb_d z^!6P-E8`YTv-L|j)`g(gcAwl~+VOof^7N#} zPA5|k4609wHHC}pZ0(PkR;R!+b}#9omR{?aJ43%Tzkx9ZEX1o?%2tL8b`uk)uZ|oU z**HqA8`97V8Q}#oUcc*#pmROw^v+rodi&Mh8FjAu>DxSm_hM@UP*VXzY=`nsW@%Tq$%cvp$P9f0rco>SaK_qyBt=U3lpBu zp!gAcz@8u}3EkoZbW)w_AYPktE=gK27Fd)QMsdyIEn+WLGO{|K!3&ZABK`P!&GFqd za`N2nHQa-&&63e1@#jvr3q8C#I}0fYhV@=ct>w{$;TD&qlGX`kLDaO9&4K3}9IQ(4 zQsAgIlQ9bQQ;9S+S;6`lOPYDL@uLrw6TJ*Bu+U=re6Uf@DbU@m9BR6fvLSjS+auf1 zA5HKDct9(z{*tETs~19%teh7AbF48Gg@gWY05HE8gyK^t1iLvkn15sc8Eu+ZSM`Us zpl0&-m`n>3J@%3C#vN!f#cNlFIXbv|I(|rwB3&d6B;1wW%s^v6s~_n|ijdbERpIXr z$}MQO(?*}$d%j};(<^_qlI@!$-(-66yhtrDo;E1l48g@+2gN_WDVQ8k^=2y+GrKfUz!&Fm~Xm4Wc7AyDpS0`bJY@shK zp+^siTp#QTQy(q%BSkwyB&A-Osevv*ShEwP!z~QjCGyw;nl$)4FFG5BlHy3KdN!t_ zUl$}r2#BC9eT!BNkS?p;Wnmhkv$S+Ne;Oe+SY#@iJW5{@IK#&o?AYLiS6uWh^b$?v zdCSY-ejq{KTSieH<_4V+iuZz(+hB2DXCBrVui!v4EO>ay>SOu5=Xqnykl)JZS1s zXdFSEMlO204MR6o_*h;IGp~=jO>#2feUXbWOCoghvdgh^2@mh8i#*JUqr)TA>@=ZO zMpAwFLfOztPPDSNWFf0B@?iU&wUE_TYGP4;pvWA`zNdJE?A?*oXo3|=sp7(;sGSph=t93v-+ zkMLSTIwkEkyMuE^GT8-GB6@sjYkGaGlTA>j-T3-GpT;1)WZV0s0Z`s5w0lN6-x_MZ zHGGXbS(CXLqeR{C1t9d(!Wa_(0+TC)g&YSSIH9VWRfjX`Y#q%ig^FsmWuC=VH^cF% zDd8L+L|_ZoA{N@_Sf!X2Br_$~rkqXS2WXha#_{2X@S)?xh{4<_c>c6GcScXppXDIXLrcZ+X){t8TH6Nelios?PBf8den%+l6LwqRzNBF zzho-}f6OKR(@%)B-w*JEeCiZlJwMv-@Z%DW|DyX2Lm5Qte)}TF-sq@Kbg{QsxNzC; z@&D4a|BgK9_+K8<4^f)W`Zw={A|@LbqTewkYG%LS$Im~ZeAS-(`eMB^yR%Rpx&PDQ z4C?A_su+#a#@6bisfor#o9Jf+l7_i@Q@7G3gP`amMq=W@hay&T&rW) zw0wEG@I`0m5gZ^5kcbk$ON)Zm(md50=F$_b5L%I`km@4u9Fi-rF=B$OAcUyjrUZW+ zT}-N?h>w90%ihw>D0cnE#i$hU+%|D=5DrL+pyg_GIT8j}Rt3;8f7uDe-ahQbiV?7* zmM;}ELdSvW@3j)I8t-*vw_LGkX*es;80<$?+&1v^cmm>JSQ$+sTq}PGlOiJY1D&LL>^O?*$T)I3Xu4@G0fcrzo>gyX`VK! zlO;w9Q48B}rbT?ij7$sA9PJ88;Vn>*3U9Ut*0qy%;uW3IT66*nR#2*{9Ajox=NBW; z#V)fL@p-h;ds=}?Q^Vf4R<4fpcvAVR$%p(K2UWKQp$2peKozmowJ2Qv`N*_%Z=w^p ztL3!rogJV?Ah~g)f|Xc!lLsJMC(6Qm8Lw^ao|qG=f-0SRpC;LOug4skEm(QIVY_i+ z!t0o3Ag+`m!C393(NJ%%)Y9@y(=iXe(8b7WYwarngioK~fU zWQWQNP*U7=Jt%2W#8}bQV6=54LEYOH9%JRmY+mBuAeqGGyS3*spAr-hgm9nf55oQg zYLSiKI(sk9@eURvC+*Qn*%QdIpdl_KaYtXu+S2o?pq6da4I7J`xZ0HA+U-2O=_q0h zj~OW6vs$0%5X^thtB;X-Qrm=&g)K^6;>Xc`422-5L>*pSy63ddQYcld*?I=8H)pOw zu@RpzBEib$`b}T%vmi%Nd1lePZc>Dim_2`g#Ezh-d`W4-13z)ePeSL~1(8OHEMOGpCrxQ>Rky66>jRPh_Vjl!XM2Y^}j%uJ>)P zItffgljs%rD=BFLqeQFf-djDMo6ZqKQDls&lE98ZX>lPGLU8g1S%wVrUmj((M5|2Z z1Z@+WH%DkMCL1T<7cIV!HgN1&e&gf?i-+R#`deO=^)MY%Sw))$AgsQmQ@&cwyvXbz zshZkQ24zgKqVlPA+}y`ku`Y#bYMP*n$41)FvDO@`0@*Qe5nvGiRSYtQjTwlUy1B0&K+5SD2m!aPxoMApZFi!FP+-|6kZA|2FCy?k%IA zT*a0umS|WywEJ+o4>WBExdk{hT|vj_roL65)#VNr9+(I!@Jr zwHtxaVtaC^je@Mlt}?DD;pUA~24_^>0{S&2s8~(@?u=hI`1bt6#2W)er@DvpcdpW7 zTZ3S1!3AwG#*7$!f{VEh>`rZ~j(~T)4-2q%_^?H;CCzE|+sQ=0P;aZW0B&r1Uqs8X zJv_JKRU<1vHB*Q&Io+W~iO4(%OA)WKHth8-;QHYciu5!V=MIP>cvy$ALVO^zZJi=r zGVc9%2HsvEF}&d7e&52yeWF^GaD208VUvT)$hd=XN06POwu9a*xK?kehlNUQN2lot za5#lr7(s;@jPQF+Um_^1?kuqI6WbRw6f89%kOhPJiZ+&vrg>a|*`ebvD8SVkm4I7z zVeMGR#{iDOSBJ%HD>9Hm2+Uwx$%k^%d?m8IM^qO)U-c~;9A^*Mt$+T~OEAjYTL$vvLo^Y!=1CK5^)vxeF^n40;=#nMms6 z&U`k!B7m!2_!G!#&so#+qk3|~&O!@;ftLv&Pf2*;Bf(N`Hp#_XmfiBCFiP8)4$Ut= z*WjQw20^Kll6M~&hCzwQJ;?6pLnh|zo-&H++xQp6(-vcCxVMu#uo+@Po}{#7n;*%> zw^C&$j;SE3tjqEqITj~p42eB!J(Ix*1RDjk@cKW2-nc)2edj(|0eTG;wYM4i-?-1+ zHbjD)zZ{8{>wo418gUF_*a~Cv#HE!(xdNnKB<`dk$4CY6+_?q11qtu<_tmR(bx{b7 zqWk21vp+toaM^5{!DmIcZ+#irF#04Jsk6%U{4x;i*3- zC5T{)y!LB4IA?GktpjP+jOSEMDX-&q$yh*&@%Z7ufob=5Dk$-m{JvLuX^;&2)Viex z+lA|-201{UsO4YgZU3<$z@G!#4@ucSsn(%Oo;_tLhex>Ud2lJ!;@AB>B`x?hQTt!( zdw)Fr&r$ZD6GHzIW=j4y$eDjU0Ez3DufB`EGinbmcu~3kV4TqYH>vhtp^|^(Wd5CJ z{~rK++h{>~z^T8BM*xp8=I38vB3pqP=6&?t{>spp7JvHhFDxry7~sd2m=|kU(NWGW zFX)05lqCaH9U}Mx1KY2%42_HT?oy=hd@k$edlpC*2CCug#RJ>37!?_-+8+&ahLc#J za5S|k@y98OiH50bZKs<17@7+8;p1$w6SM5a>FOLpcd?2#aub?WIYk6|C|E zmp7@qLbTGP`T3Cv7@SJz92nRM@(L3(x@3!8)RC~ZW$HS{CWvXNI?OUj0R_uXm2vs- zqdn~~U#RJV0`A|xNH^K_Y48YW;8+Gbd;?LVW_|$Na`$RO+J9rpiyb#4N z{*Fu@;Qv@*m~A;>MfC1LqSOT5Ct@+)k2Nd4{~{0Wv%zj@D}jj$)Nd8ApKIFxF{|{u zxqRDyFz~+b1b>@Ozl=U~`eZY$@zC=-5qo+bmb!9t*VIgENm7^%L8u%u+qsNBdguwcD5(>a8Ci)4@7x>1a@u%nP%tZ{4?@h+SM1_$P6+zt?+ZFjWz+MQ5L@MOlsV z(tfFO@EOu&yFl}K7=Q574|+_e+Tz(aZ|h{$>ONOM5Nl29^(evRUpT(tkt*76Ni#+z zu6NC_c_1G#*~zg8$uujsu z9#0GLJrUhWq_mm>^MFcw) zIPif+r@o=Ckv#2{8jE6<#rr`r%!FC!k=PCz#d{fzus)($j8PR`iRxMion=q02PZu} z(NY<7ZjD&j`q~7fQ2LKVAv+A_j-{GnYb$UT4P%zhk*s>U`hw8PS+2;D?fo=-S+7mF z$plW(z684r(o)wZs!eer*%(ggu~M=XYPv-sU62BP)glp)5k=woMnL3V7u{^c zkI}ho)iqB#m#k)F-D#U4w8wZ{ifp)*==lD9oKH9?(44zq)`hyG%8L67HM2dLY#`la z41KDe6i!YAu9RN^W+xvL^-rKKE&Jf3%O(B?V#hM;H{ot?WT*yOHX!!RAeD}YjkKsf zvy8G05dy0Rs*g1%i|$purjAz@5K=DcATxrc9l1lnPi-z)Y7(J!gpagOXF{k!+?j@? zVYo-si}fqEJxQd60i}}Rt4#DrPm9CGP2x$}B{#nAK3Y7lJJpX|5u2>*`g|1OepeA| zX=aPhAvx?vdV1y`IA%@~FI_^Z=1b@i*m;*2PV{iLq8u#W5V{^ojs;fk^H4xCg7@qn zC9P3duRQR5ofcDSoKP8lJ79 zP6OWE)}b?VJY4lUZOk#+w$H|xxzK1m9cuL}%ME$oF6Bsg;=UuJR_@bh%~q|oA!X;B z4XAS}5hn;)`xYpaMd==SdR!?jSzH~s(sPl_49mhoBkf* ze&x6Rtsj2>b3O#9jr}Z*_KO(P6cJ_ikHNHteHf(jnX^U6T0T{A>IsL|5O+V>m2M~B zejX7h`N%MCxQtN5Vf@xq3@}z;iyeIq>S;Yu4|XNRo{?&qq>SqrgM#&*B{*rxMm@Rg4K^MF zPpm%-MFeT!COb&^v>lHYk0=7Fwl8no*Q5_C7&j)c1-#n{(kW9UFlvr3>_pI8&m{s5 zr^Y@A<;Lys^0@f?v~dL3=zh5ZWmWs z%qkOKVb*N%RrxbAb34)2z@a=Gu%o)~Wl(OQdP!+3byHHNg9|-^<$Xj{>+$i*+r#Wl zH%S5$$fHO6*j*n7FXMhLJ6vs@pp0c)$7~NJMb6r7QiF{yx2V(&%09X8m@m7)Pn>@) z&xsh@+pNj`o@PnczdrU*N@%xIH!=UDJd`KIa3-T&p%5B2%Hfc^2-auJ?E>rqT-PZ= z@bP5@mdEQoJt)IMh3iKQHTLEUZ{|V0dY%-1kIQZzcj{4min>>w$Zc$jfWx+T0iy$l zZaE#sLrH-Vn}jd6EoRCo`&>%B46pXYIN}n@x%Tx-DDJ`n%>yErJD;!6-kLKuv2l`8 zQ%)kt21fd?gigwH4NXm5^CV9+sRtdXTut=l+XJyKsS^SYdru*LXIhr?rojQWu4UXy zNKtHFO!6&&vFobTixrYFPT95SV2Imm%%%y~L2K`zPic!w66k7NMjkJF5K;UmaWshe ziCIuAnq3EVv@{X(xl1e?rFSqZBtU5xMce*54f%WA{M^ZSsfBIiwIP_XK{SLr#eCl^ z{i6$CiJW{)aCCMw%}3m6l#G%=o#4Q=Zw(lFzB6So0X#*Oj%IqGT03Y2%ddS4vD_A> zv@sTXZPyBzwv{-pilFLR50=a4b8N<$sL7KM)}E#!2yhhN`|F2iO6qKt*!Ous@y186>B|tc0tYf%!-ajY51=2b-Lu{sMIr z#U5n(ZgpcmX7FVf;4OCbz<^P6`+jFM-9R_XVL0v4Q8!2{3%NP+tCm^1qYq#Y2aRvw zhez&ZjsuF>XB{nC)OgOO{ zTXZnFA%_YcfH*57u%hGIUn17-8beIoG^wMoDxuv4;7AqaQb2X0xOFJA7fbx>SEg=Z zh(i&W(9$r1W`2bB#p2FIiYDRYaRj*up)jz*hsGJ7=cbDu`*)h;PYcup>G+&y9V6~yMe%+f4+J&OCIuPj36pGy-XJ&p_rrnwPpB;Pe<*M4%VUlI$Yy@=D{P_nE6PtG6#NG~s@|(F z3!iE}d0s^e2uq1K42(YZe(YZFEL~_#)-D&HJnb^e{J}U!mND`9tEQ?g-9e(Qr?DNC zWKEZ(&Z0v>bsn6N=4w$_r_4-sNEx`YLDDnm?8wl#?K@wfJvVSb-^A~oUw*DLv>NM~ zmcv7^)v`7O`l15Qs;V3NX?DPlQG9s_FN%A;ncsrluGz%BPTz;3yi@KagsObLlLh#_ zq^ZCpB&b<4c!T*9(z~=iAhGM{rb5IUM8FY4&tp7xJ$DQIz*Ee27hKb&hjwNbx!UTI zEzRz1o>8i!N%ym;sGB<^X-cp>_55W~{^ey05~R7a5Dk$!>Q;xZUl;O42M{+1DJdKH zK)ak@Zi(v@@6PKUoRnZWL{sWN6>00O=ypItiN(=cCl|h!vYSvLGL1;_!PqNUz|c>u z`zW7_HhlPO_e>oxkvKxdllqG_t>nOJfco~p>H{I*cKWS(#gfIAX$c_fq)f3c46%Sw zRlML)_uJ~H8KJ)Q}zyZ#=it zjgv4jeke`Pia-|~C5exZL0iED;DtTmfQ>c|U?`^N$GU0e1MTCn?;ieMih(|7u`yIf zcpM`>J-GTTKgt=vH8CkxKWqRZEmP%3`U(O@8g_cPZ(mg|3DfZCn%_FJlSgd^f5#G;_UdteXwi%HB~ic`g^C` z1eoFx3z(eG6Wj9C+XAw08X8>}NTL=*jU4!P2=~%R%#xz`_rxtmO)}@X-CtNi!s!>6 ziF4jGlk^-9xyAO4h%CX!3=$=Dj|Qje1oiAY6KQrj6ddnuooS{gq*2f|(&Q-U@Mq5XJVCZs|y+23n~6YD^&d^3gS zep1&J;CXWWc$pN(*TvhH-@x3OV-T+_2kgvgN!8`wW&{KEC_~CI24hVcD|2m)si5pi zSFD2QL7GTk<`v^%g4Ixh*C)qo?+PfqxfXx zfE~~S0Ih^R?wN8|chhoYTIF$0U zjy@H#ASf7_>I75IKf)>1dPd9LBp4^>&xyg}y&5MZg zp@r`L{EL4@JHR0M?qA{h5B~~Ti?Xs(Cc}o%uYK!LxT=x|F`zcV3=3#uYr9c~S}eST zr_$ZUikBsz+;{Q zVE{RB{#`GAKwS@i+T`=Rd&;N^vcOGq2RQI7X*=$@pzFfTsPKkbS+ zP(P8tZETR9AT~qx7o}uD;YMc{qsi>>Yy5N)vG}m_KrgRy{doV=I3OeF-XpBP=-5l* zmIb}j$-@Jg&|dP0f0=;3k28OihfT%@MWlEb=KY2%jtOC z?r3IDavgkk6JAO?QV17hI z$3Jt?`W>kA^56G=41UjSe#l<_TE>O^pR}OY5s&1-61rU35^>VjSrFN5wY?E=5Q*ckj5SGrf&$!Hvx+gn}J!Fmc5h3|x05$g9To zi9V+0c0S&`{9bNt~zW!AU^Y^Lv1n%eU=&u{{AI|-QBJU4Vg->AgSB=$T z#y@RDYeWfNvqO$q5UhH7kP4fv&7^bvQJTyM2w*ZU(8xSvM zziB$B3hLNJ4FKKZIQOjj@{2dcu2mpe;lE~(78ElsLBcydHhE|H0&%bePvxq^J%RTz zE$Jy>i&Mv(SuVR;<^@0QYG1o(t!I122<94sYr=9j^y5c$UP%FsPtf$STs9n4T9-npci_iRrfMH54u6F%PVCSh1XVOa^2eP;QpvMw)hFTBRt64?+<8xpcjhxjs7@$}W#7$I8dym{&d z_mg|o&&0AHh$5~k_pYuYk!~9V#?N`0(e{qUmHxd8Yk3X)N|Hvc$ zs5egjx5mLQ8=~K{m+yfMCjJ8ewfL1T7B>?A4-g4m%+Ggb@OuLETS)vht@`f=;a|O} zKcTaK7=(Z8p?)v_{d!?oe;AE2{}_!pec#JyKWkNVjiTR#cPU#yut)6Rzc5QhV+}XN zSMCTw3HrBXxd|Wx?^6W^dZrt4?Q0h6a({DpOm(Jq{7fQ3rm=j2$8IwMroo;vMf|bj zx`#oWn>NZ`X<1TP_u=!5m(P5TQ4nn0>GNJop(5zqMDf-kl`^^99~>lQ%got+2GMT% zi3`vJbauI&F){~Ga5rB0w2Za2yDQbEBBKm8eGH~wdqXuKd-@II74%y}W%cXKW)l`4WX9%Nw@ct^8)6q2#dEe~ai42&I>dMEHwtgJml2RM2E`p&fCiTcdMPZUXQq~ok zYJLYgpu>3)G~f5C_LksLWb%mU>LuZbB~+bxIm*Fw7%Bh7e6UCNG38luB6)=UG9Ro- z5#eLGO3G;6^YV-lTj9GN_0UcKV`w9#*5`+Axij;|Yjw7-aqv$a-<{1~N}q z#ziUw7jb+t)PHVJK!9VWEG2X%1aASYt%xaRZ&|20Kfm7`aWd{v^+3vZLM8WeB9va77L60wGbnH2-htGUAqE?4+qNp`RDb|ucwOb9bq98 zx5~ZzZ=ci$9ZFMX(C5=gH<&Z1@PrC2Tu;Fl(7=rn?Q6qECvXEh#>j(oPP!%*EqY|~Js%(O zpft_K`!o3QU4W256~G&Ft%{PFQJg|c;}GOn^0c6QQ(_AaSP0u`4ubi}>Hrt+yD*ln zyxz@Zr+wJS^JoqB1)XktC?gVyv7cf+UlyY6S6Q6Ng;36edvEW8Ia^nD@+c!QasxKg zJ_O>=KKwDXFz^dXaYvT|txuV(M(uJ*KiDNo<3Lfo6%Bs^n6fy=A#Gmd!Pga(+R{wR ztynY}7I|`?JXsuil_&7X5#%lyg8+_|LzCxFm6w(an)lWYAz+-ohH@{E6a$QZ5qHQl zhp5Raw+d%1mC%Mv{quHjD2 z&VmK$97#qe*@#tFWBWBW;I^YUZ>6tZ!}A#4ZTqqO7O{U`;Qr~d10XMd39&yfe}A!p{_8`u{g#gW zaVd$4>wFNa|8&_c5>p^%^nF?Vcho_crdcJ5gzuKHPTf=wspjrr!LG@+YM^@S65A^_ zIpGJByBDlX6gye^unZ436Z6qt&gZLnA*lrn9Vc=A$yQLBN$^NRbCkJFdcKW#FF;npGj4S4lfFPAb(l!1O9l0iR3Ibl$fMwL*F z)118CBRE7lP?lMMFjEK81w=)JGd&CCCc9Z;?fFOAa9O}n<3P+5!UFp*dK+c|vbWlWDwdHlg_*(;bAti*!CbCbFG{C}P~a?vdV@Wwyb;jwAc( zXEr)Za3fxoT?z9JvxriUtT_et;Cj`d4)mJ_Pb(!AnjkE=XvZueoK4{PmSbbq$+f zd?!QVyB;xB#FucJsP!9ZE`+O~PbYbakTXKti~C-H{n~eQJmaFwz`RtJAfSN62U?8+ zR0IwYq9wS;Zmc`UZ{zLbCiqYtQPD}HtIRzFcMN)sdn{n=C2JZhC$j6C8!flxw&v#g zVB_$eon~RtdgCJ|v7&i`z>Oyf9~0T9R zhQertXQ0J@BL=G1j$Mq1q0pMAxl8@J-`K9$lIv4E>?q67mb7g*esp31@AW7u5~nTp zjzVKqoO$Tmk13GI%J@WBY)L7_^Ds~$dStO>q&Zg}M0vUAny)^^ERrfphG&yiSxi6i zMtU>aOH^@9GR5+;C0P&u+&+rv(Yt{h23n!3n3oysVyi9%s1R8pvw?@x+ODdU<@BPV~W@`)HT5?kM2*2@`&@PmqM83|xyw$k& z{Bk>?J$KKUSrnlYJc{9CH?}r1sZ)T{NrgC6??p4)E zj6F6AwV=00f(r)=EDM&+Bz^fc+26zl$0oUwy-`8{5M}#!kZ{k!XZ5m%&Yn(j3KP5u zm;(!b@_B56=S_|o!6ez~uwHcR2Mi1>v9I5USEdi-2n7pYbg6|aPM5z;FVDTgsjrO% zbBIxLEaKcZJgBS9 zezdpawxR$n)CHi0zN&nyPw(IrBg(r`2E*lo#>P3Q37T+eWy^b2%kMBi;zCtVt@srI zP*M^1%+=A+wN}pU!n^BdTJPsWg*o%sJ4a9cB8u}xkcsP%XIzG=Q9GP~X~ruVN6<8S zs1Q^xy&)Je#^$nwEX!cs5ZI-{E6$Dj7IeR+o=?+&=YV>(zoC9{8&r(9dbTG$5t+_cHq5V(&jm#(zuPo!m2j zHBI^dSbOWZsMh^^e8Z5^AuzOrfRv;(14;}HN{1jV44ncppdj7dN-81UE!`yu3?bb} z3n+f~IrpA(&%K}fxu5&`y?%f22Mjaw?C070iM7^yEiKInJ^#Ox6y*KCZ-W1VZJ>qY zD+>%&FebL^IOV#cWuW`4vYq5$kNpm^{M!@YZ<9KD!P|V>xoS8?zL}jjHQhkn{gMFn zB78yuK;6-iptRZJ{97+RU(u5&p<5rYVZib&Anv!f{nlP6IUg+OPAIchcZeKdkrChP z;{Ds#{a1_7pXy-P|2UrfcOUR?P7@%QM4P$!M}pu4`?la;eu#)u13QJ2Gsn$z;1lDk7&+h{jwFBvhNA=@oYqAtSG zoI6e$;WAB7*GIk&{jRm$X5DXSs$$a)=77FshO&@0hSz16Nl&{by5sQsEX+GCjz4bu?9_-Y2S z4a1+}-2`J{?8Ln`n^FXr200=DBa5V4UG8*fyD;cg&D4=Xo~o-oX74<3zx~FPOS2s< zgdr77QRbe1PFd_nSC(r@(2(vK_ss~ZU3>h{k`kNtD7Iq*$&Aps@$h!r7v>CCoK4J& z+Z^=d>^PpWCFo<`;G6_Kl585HP7Ed-%vgH4OGX-~MDB_K>7SO4v7&Dp2Y&&%)G5>n z|GKqi{1<)7|9l*OFO~l%DC)m{*njZ_f14ow>9H@&*sjgYFB~@)I&~18GR;Qbgfm3TnLMKqJ6}94$i*YPx_Su_KBq~M=lpmeq*D> zOBjF0k063Y?QO>Cj5u-xl^dDT-9zvfk#P*ruKo4QJ z54a8pE2rUP=``;tcHqF}laGr=U=p}2t>>Tyrr%SQ+Gzc(n=>J+K%3ZypxX#zF^`wc zvVF$pt5-`RD@eg=PH}OY&9n)cQ?mPmORAhrNReNFL3e_Sm&la{q^7Py?;YjzOdQW% zUQ)R-bI$@lKCJR=M{)~2!+CKSD`5s#Fo;+Gm14F?v|W%j;N+xGXyTnifVY+BXQ<>Z zZvkiFX}91pHwB&G0auM}v6tC5p*{>DudnCL4UC@(YN5k1yb%>*r{Yeo^J!R!dA-uo zo4BO&Njb;cCB>ms4YEqa&`?oHpN!=(rs*Ksm~HmBT;@<#aXr%$W|FJN5c$7jqW`*v z{qqX=@$_zDd0&4~*czLBWJ z{qAM;*U9={pTd9hTKk_({=c5k|9)Tb_pQjk0ha%UME(OYV2f4sO%u=+{$ z_W;5?&4!#n3Go7SmzVvNQf-Vm@7yeK>77r$6{}gGC{z3M4;gm{$F(TEoSLepTI7IkMioaq%TZ(r zwz`Q8#AN2_q{H-fl6ClAu3P5@CGy=#@F%3lH*Z=e8?@S+JChFP_3lYFH>1!bxvV)w zL(?0^vYg6mq#QsY#WX3znE<8$F04flho<3@u$qV}Sl(KVy@2n+NbEe*A|9k6veLOr z_>C2JCXCuAkhk%iK5UQDR|9D;YnNvEQ9I)L%bCl(ws`d^?|U?{Hhy63nI1dC$oxCy z3jD3Z#{~-n*b#7YmNRH+*jvm3N&hJi5`uPNfMo zzJ4=&42DdRqt%!d89w)Tw=p4m6!+vnUS0OH!YnnF7y{KUqv zEMDH7$Qn7`E=;1@n;fdA6rSkZsvp^pdRx)4hVKMwqU`8A)u$X5rx*2AK4h7a%CMMC zilBlLu%EiKxJcTd&3Mx56k9@Dj}zl`?EE=BGXUCy8@h(kRvYx1!Z5+`%bc*e6@_cr zq~M2+j8Q81F=e{8_8@zoMMO&tgexCuC*@+Ej?#6Pc(^o*t2^G~0G5gM0TvLCvIqlG zeO2?)Inx_>SOURfaA#LX7GCNs2)R2!_0=jZgAx#D{Gx~RQG;bO`<}KomzA~1jt2&J z-Om#9*ik{C%I?aZLii&1YhKvuPo+;}1II7++B<)WkC4uFwixq)ymY10-ocpGLTC>5=*R8y zM#5q5@FEG6kxf0 zFI2D#3UaVuEf5A{0)mBN=$fGC`;W7bu^AEW?IX*I+oMcK<~PPw71au@pQXmE z8`G%t3@ei?xqQn%@GIVe9eg=V1I8w6#8q_`3aUNtMQKheX0gfBJ!D3<|5SJZyxy&a zJf`;Yp7XoLW37&)t`(^6qcj!S1GTT5kB+pf$MPQ3@e2(u3iJE!ZUrLc! zxEM#fFzRF}#z_S4%R#{jZ2a2`rm^oLvI5rdDu|eanTyVH@WV5o-H1ANjs{SaBJ8u7 zj%Y4@k_-KMvzjL$9}2LAyjK*fy%yp5^-~yWZ)TCf6A#x2(VoVt?RngsJ8_^jNuITo zWwZV`7@zNjCeFqNX!oe;LVxh3nLhR>-tM=lV?CgL;1~P4Ix*{U#5yt0Ce@}(Am0dB z;%@@hT~+0_!S5zPX`Yt|Pr&bfouc}z9C+Ua=QnbKq*Vpnfma7Y3p zv(eRB^zu<_toJ)nM$pCy1O4}KMQAlJbZ(d?c?$1$bLH12$qP^18^C58d{!SHeLw~y z>n_oeEas-eNT*HL<>IJY2or1xHd5@*UT1M@GE%V`>+ zYzgBv&4H$y?=Iy$*Ulggikta>ab?RJjT*yn{|9C)&-AkHV$c$6w=*A+qiIUW6e<__ zg^AwvevtB`t2U;)-u$BL>HNAZ1N~I^vSDDR0E47+Di(?ANAdx#OyE8_CjeXy7!1o*g=x;> z^h-B-lh+LUIqQC)k=N0EUu^*%-LOt*jZANsjV6P-M1_R)%yyOnlmo$Wc0$COIdla{ zM;Rj6?>6h$brAFD#xT^(E%vF%oVh8Db6E>1ptgnmC#TA?XPP2?D&H z?k^U_Mb0r;BAYc3q0@b>`6qDtFGjpc^ZE|lc>!;r*Om7&d{)VEKG8Ere2;&u99}%{ zBPq-{l>N+^?3=QHXmp)viNL4<)^qrZB)_;^gRS-P!jJkygr#-Ds&o^qDZ@OYh?#bi z94PEE(Ar*d^l9TkDV0~m3G2Xd0ZtB@gtaIfI$N|S-+Le7tf7psBW})_t?$R(nQ<)` z?rYn>4_Qp1`7p3m76H|>AogO4!BdeVkUdxSF4^DzOzo2z7}*|EBZ1#rkm%@RA0KCw?@IUSp2zT5o`R#;2P9j_wo?Y z&@0&P_=Cm3`rNC9Ov#+zTb9r9PO|@nZ)wwoXAf#MD*^e|dqvM|N)U_)(-~Q3TY%R3 z3(dkhLk12}QjQ7u-@HJbZr2Nq@~~4>Wd~QQ(n07a?~EToI4By%2$GCRG#&|f!CXjl zPa`kOv#0mOMYA3~9M8P1%(#1j-11|GXzTF@KaK%oD_nK!=s~WN;+*(7wN|$)ZRJ}( zF?kCdU0}tz{>OsX_5>31NKl8m7AyfoHE}nDqvKiobE}vpnFfTFxen4g&x8RJ$(n%# zO8Tr*35E(bcWoqE0WN>MjJd7)k_lOTH(e^x)gNTwkiV0ZzsT^;dORQn_;5~vK(1<)J>=)q0S;XqsOWq~?3otI9bkJG+y2+o2dL%rd zTH%T`dKdHRBX`uBu`vN2X>!Ba9fM}E$gXtm18uUwI#1%ak%UI?GK=Gu1WesG!+@za za5)o}i}Flew_IAEH-w90-W=(D4x!%+!%!zIv~)V(#q3l*PnpwGa-oywm!b71&cXlr zP~&xlW$c$vcS_*A*{&qzKaYI@t9R)WGVVgyee$ zq8&{WdCZ%x;LqV$1Dyh7?yKDK-^VbvbD#5j=`3>W&s@veeL3VYC&bYaz&6WzW3&3L z03+?@jnDgq9V`qQ%L>I+a}L-9SI~J}8~tiR{`iG?!)(vgG1 zeQKDFklItt-O);J6POQi$Fxg%lawQ!a*Ur5h{NS4Wi|!T8Th2*vp}(_@pCWf2!)&f zEFgH#9z_Z95D}Lb$eO}w%heyX6E2#(J1)7a%)oe{^#N^l%Lc;VIjQlc3$xVzqdiv| zoPL`vi-R#G`W}Frm+#E}{nrTEeZ+W-1N2}aCRJD1W6V*A?d!b^4kSOy+ zNIJcs28wOJULQGnNqurARsCRq>ZSV((!$3xgDCyf^w{d7`qNcGegv9jWzyZu zhrE5asp!8;WKE$N?8>**Pr9p$@3|749@aj*hr*e5KY{G&$S+3r@WY_Jf@m~0s;+rE zcb62Wzz7Y+6^Q24%dvyEpNIvx0$`i5LW$;tWlk4nLNwo;dKYGTAZo+6*+b+0==B*k8}zR8BBv%|e!Owi1x$P{mErM^4^oWmKH-BmN2h9M}uh{&wJe+q>Q4bE_j}!g7`~gd+*98DMU)y zY8LmI<(!?YVgzV2NAxTGUOofE2cmyQ`bu!RT5$Kyv9x*zI+#2`IgYqSHw^ZOMB`Rl1*;V4D&SFy z@2BI7UqnKE%!&LWhaRqJeXHk6J17EmZZKCb*qg-p<(5_OJwtB7Ts7)&a{4=%(8(PDpzGK zX-``xNmihYn7dpEmzlKL=3`!rVLdn4!CiUEKQM4LfR&oIo#mA^_tiOapeelgbn63= z=qNcF)%eFZK~i1Z?e$`Bva4Kvj#eN3)=8tk0F#v4EZAiEp*cFtA$^ZR#VgIyE|k91`(gndF^(ii{at*w1(-c z$P4Lb2@YC2J+AYtRTOOBJP<6E;o`~UHqh7Ar3}5*h?R7Iz>5V*C@>Y>8ACm{UwxGv z%)9?Jp!qu7N;@>{RsBa<*XSAY_Mw^6(9LYsCS}9HJkWC@4v%xXHhE({Sceda)Wx8n za~bAHQ z0vQXt;8r|)GeYOe+rFff4BlwF{VM^<>l3_&pA0^~>$r(^b?1uZS-*TG!ni3y`(o_Q zK1Ffi!tAYXIvPJ}6Lf&JgAUpJUP?1+8Qzb>SpzPy&FwqZ zz*+RuxS&;a+!Sgn?cPKl0^#{0BWUZ0}@am~(ge&YB&J&&3(GWewMPA|RE!ps-o;e!*-1w0+VW+*v zR5(Mz-@He>)@}i#2pWy#Pqh@4+ZQjbQeER|b)Qi*sN7#5%MBzN&fqh7O%0@9GqFzO z$NEZ_KrJ(kV{7hTC_N!AW3dgP+D87w?c0aZG*Un3%l zjG^Xy_ak0i=af8UgB;#lCi{*QM$liLiqD%lrdoc+>?}LmkQOzRbiR-g*@Y2JpQi5) zM%pgFdV$)ub0k^Jbwloa>%tv&W6MDzG@9W?l2;B>gA4L$F zYjNG$iTxbmx=O>J@7Bw>_jpJ-G6W;WW7cQzUd7i0toejtQA@q@f1ai^{Jf9*j58G_ z*_)wF3$IQ#PhxXAlNiIeNYlxytGgI8DCu^`ad`K-FLzWfR1?Xv{J_Yey^l5ktOl|3 zd#EwRd&qN&d(+PyCR(!kVaA+-qH}>wM$FWy5JD%@PK#Zkp;<2l%KPrWv1-n@$`k-6vE!% zV((issbSAnB{2Wef=Bk7E(WQH)E7qb0bP66ij@y7*UAxxYXe82>7qk#6-hHL{1$%NBKIXCAL=(xx!`MTOhD#erQ%%GQr@5` z-qLNG10A;13Iwe@0<6jA^SdmkXffyDXra9-0sWg(=y}ryg9@&`waJ>{^EE!il$LMLOeac8}VXhY%^8)G0IgL;ZP z?D?$T^HHC7s2zruxJB^*t`d#=3z6x8%MQKRHa)I$Da4ud-xm&rFV*+6Yph*<0ma8h zO&>oxRHHel?-TGEG-na;7=Cy3xNl<-X>eD2K6r8P_yW`A1z4*#U1c;d86N(WktN++ z%G96FNytHK<0OkC0N=nPKaYTapG$SO zi-*F;M;G>Z*z^~0CpLi?r&n`#A4X6!Q6o=;2YLfPi6xCPOb!*5ulEA9?!(_DBC?%B%*^E|hqB?W zmn1*XLhzTO4k`3{p43!}XH{bMc zD-${4%iDMKTKAhYg;aFoV-#V&I~!XRC@TcXMpsmmPBtjY{Xy z0d?BboJZ3J!%?{s<#TYBQW8rK;(9qtais%h2iJMgUP*B88QfI39gkCHk^FLD=uTbS zQ*Qs}b@Dx0dP4{}AKbcH%m{ZGb^&T5En@bi-QNu8MyJrvyMi8UXvtzX+15@mD2XjY zho^g$DU+VC1Ip+03it{jpttxvTXC{5jixwR7g>~2LMqltWg$@c{#M&QDYl7M4ldW( zPvM&lMea=xx9DNaw{H4m*L_{U?m=FZLMb3;yOK$NW$0Gd=t(KPV|ib(Li9ISa{m9p?-usOlE#AGfwA0qrcCs!}@>`(Bc%rFr zt#%^PQWO%1mV=9^u|c@?HZ-)PoxPl7c|JDVBuyya9+Dr0G8fqdRUb562BsjcqskSl z(oMot7rV|S5WD^%8N+nVJi;{$a9d=Y%&DoXx2m_SHy-c3omZ)(;9{=L1FVWdz<5>~ z=M`0+xkcQFiJ|znv6wZ@@wMZh!+P?NVip15M!F!XlBqGH7?3&7xkYAIOZ=RvJIgAg z@-5%I;#R~0MC`pb+uyM7TNS$=9(;-yjoBG2&2cyt4l?-szB#}k3CNz;0D5n_s4cF1 zXF9*;24cpBz^w!8W9yIKi>Gji2pu*AqG8cISlBkKT;ZUpBJ}rc-v4OlzP|47M+yL z!;>FDdkPiZ5y`=8R0t_?zvJi---PN15(HpdaS`|lE^m!oq_#owXnRHVo^o)2buzQZ zjPNne+8pj3+OioD>>!qJAoH|zo|zgpqA9}R1*>BuYrCiCaf)#QYE<0A={Vjh_lHTW zzh7ZQQOVAZokpc&+a2MXY5>2z3ds~rMa;F?wtJ`V469dEn#ie zUw9T;t5_+!%~WT}S58z9b^#kR6jVW)Fiu)lW*v@tts(>N4dZn)k&RJ(!Rp`d1=auL zdqQhd%_`Hi#{-PYyh3l&7T(4_eTjB&hYDTHLlBMoB4oMz2s105wPvzr$o|IOW1_JP z2e8zL`jPRY9=gMh4*vnqH(V5|j_+@vVu>qlj>Jc79S40WEW~`HxeLQvQJ!@>BzXRy zT!|?OhgvQMDH|hp(hZ0WKArqnCRg&fE#vWv%a~@ndlxpdNL|{fC$W7w=#x(;9m~3_ z$rOzP_^LXXSaRHt7ZNzHe&ij&D1-=kVK8$HnGpRqVsNA1tt3d7@TXG3~nA^8QD zNIG1dOVqi?ujxu+KVXOCzGcVN%ES7NZ?I;g%E9>Tt83@@b@-u1)ybTlg>+-wh_>4^ zDXsBDd`c7&RJz*Ni0o^OdX_AxV(3WuzW20VSHxPq?&;*9!*p7LWyTBsi~^CMSd2jWCQJ~t`tCf(12J10$c4>vLkWP%|dllI;|ompoK1BO0J zJVx9^6K1^DWGjQr-P@(Lhw?}IG<{q+z!Z%}|!)fd|{A^zcAWOryg zWJVAzE{lDFj@4D7q6EG{CRANBR8m(-m}wl)gQVYaj( zZMvM;XR&Xz;kWk8XOQsaD{5e1QpjgFJd%So+hx?*D~=%S0nTh7VTL*6YE0neFF>Pi z(v%d18^UIz$LO7rZ3)x6d4f~4$TUgOiPxQ`&zzAM39bupID?n>^ZX9F4qDG{z{qgx zsXArjTrLZo>=ReoHoOV|AidCzE?Z!Ox{a`G=7b9x& z!#&4py|ty#XclG6HA?HTNrwB?%b1WKO#v;~g|An1B>?|b*9)W7(EQNmu83Yx9?pZ8 z!J|Dz48~>ifpUEA{p*rA13iqSOAHr56+#UA?`#r;0p$X7ND`q1G3Cp>I1k&>ezFy| zS&~~co4yDW9A*~l3^zd_iTWV>y%81nT7q)ji<0SMxfcKC^eIOZ1RqgPj5ofym*}?XKnzB#q4odZKpTXwVl;g_HAq0W zW8{4o{MZ?i^TqO(lQB$`K2sp7x_zN$rh2#jAP=5(=edALL(sAX)yN79u=-I_L=fqb zU8?`w1%A6pr7{O)p0%i`_wgdIG4MAwouGB5dS7gJFPXH@LFJ`QAQelJyvphwO*kWc zJ*{UB+S$IO+jmDTcwwMp!?~UJUDw@XrX;E@7ZGrAtnvz13IrLwgV3#i4`&2*Q&p4uwQo0 zs>T_c65=%G!A#oDL;J$S0`8YK$2HN+QQySSZ6Fl>WE~VW=Anhxx4SbYaO8?pjX#e$ z(=Q1ybH_#(GBWTf%OCoZd_b`FyzsuHLbpKG= zE9Uw<`US*bWkz3~feutM{{ z!6g_;J-1AVfw>HK&^h*sPPlTGY0q{^T@Gi~-5CC6|2 zy34UAxc#g?LVn*}0%<{8tT;qOpA&}hY^PChY5u~Kw_vAk`obpNPS0)u7YJR9& z77dMPmr{eC9E*aNa9uek34p{z8(rJh@PNcdi8CKlmg8mBn#glTN-^wNI0{1i03%44#PCY8%K znIH5QJ;B`H&eHgh?U&M=g#>8oK?arED@^>7v5q2kK@~gwCXpbcn0zEfK;~B10|C$kj*pIosGMYQ}aYCjpuA>^V>}K@CuPN|xC6A&()!%47YT$~r#7AqE&g#ya{*e7OQ98qq0c+Y?&C#eZnu9&sNX{9P^q!p^bXq z|NaX=zQ_AM#;kNRVtclKcb$3Rc3b9#u)<)2ljJYp9?&r*h&P*d>|dqIR93{3M8y+9 zs>%>Yyzg!~H#>?Ev5H*^fjWQPNLREib!$r7yeJ za?fD8CNTEbgpBNFFP>F8@fK^Mu zdx~_woPvaj{J|mS))VGq**;~<4#aiv%6;-pNR}7y`3N(pdnt&wgj++^>3o>>`4FX# zIfMl)MVQ@p=XN=s6Fr@E+u~+U5S&n@@s8@#z`%je_lqJ54~}L4VjF6p6^if^{S|Bi=2Oo#t58RuSyI2+n@5Kbt;oZvp2X|7>w@nV`=osE^S} zaXHI}Se|t{`oj+VJ!;sD<*ss*PYPoCa4>e97`&cKs;MTm;HruQ__rl*NwTQ(E3y2v*1a+qN#*DcjCIsO2Ye1;oD zCAxb06z&;Uu$Fx5TaJ!tETVmhoex;rG@>cghV8;X-^rThf4AYMy;(<4UA8qg(3^3T zV1#Z%)n++uF(Ek2xV0BNu(C8*lzb?Fp9k-z!27_Goa&x!nJM$3SA)@@UB>o}$mjK`ecoTq{$r2%v4uMATks}b^? zLwG#__WNJ@Be$V_&jwtYMvYuVaR*F9hIyF3Qq|MIM2v4YDKKIha!J&vT^y7s-lY) zt4cp%aHy-TXssys(SI^$jFMx58Xlx5Rq=l`3ci=id`mRP>eaTVD#IIMxoQJvDXN!; z7hGA*$FP+E=nIB7!zI%?Gif?S7FDKllRIVSc^~EVhVs^~sM=}A_%~AXo*JTT)wyVN z@WOjz4j)%54r!ciiZV#25y8w)sj-&L_H}w(VaRsC{{pba7J=?{(M2s)UcFW8U=*qgquDg#6IpYDNlgXw)Z{GgP*PX*(%g=j>nGM9 zl7C1;VTqr|pZ%~`5HPTD0v9rI+qulw6SBn0MLSsQH(Gim*R$xzFOo8&&rNN;Y_m?( z#j5)&5fAN~Tr-P+ThcuK%TLfWPsP*IiAd)vL((-;BX|sH0z%12bz}ROr(^KP+-g*1 zc&sLb4E4W;6eV3hu}kRhdGy@!rO1wKRyGnVu{+_|tDxu191Ew^Dl(fn*h&^l3@p|M z=^hR+Uw1&RRhil8+Y(Co+&vc3?BWE4-|-}pRe)~8@H`8iQ|AZQxY!Su%*3!b%`5Ia zUF#oAWR+oA4fKL!wL{*9!5!R|M-kl3WpC~eJgLl zi-S3SZHN*ni{RzwQYyLqIY4JO0u0_{q@6&ME>A;stl{kTjq&X{Kqij7MmD^9eex;6@!Osnn(YD%}eWES4*sx6b)C(LBliZR(FPrl&7D zag7jotq^=qVIT6NTl5-146k8y9Gg;gb2?Uy{CF6dBJi$~FaK(;P+p zEP^OJ3jVP(S9-P{Tdf?A8$>N<)mcEepNDkaQartjq$#qUaotIa81HTrt^VZj#t9nF z-TTxTG{%pzqnS69B;CN1u2wdqf+Ms)>jeg=bt)RSU&Y{z3Zm(ps7|?a`pNHoscEj0 zUofxrCa%|8V$FEZnWYY70f+6tXG3Uj7|)@Ke|_A5NbIqw>4;*l$qJI?+kW0TJ?-Q^ z&tr=tSkZ2b6YPu@yxl#U(!DbaRC?~9q}yq#Lt5)(Z?1A&_z;8kp8nx-)sx>%{Cf#N|QP%f;Wu!N8+lbD#Hn6l&Dbu}ZDA z$t~VRGGd#&T$qrG(jCKtnT7TkXBeH+w(;c$A%yUWW>=-0xuDjNlC`VYZ44ePk0_4_ z3x?-dmM9y_PIfjQ@%LR1X0#+*^0(^}b7T8;baXY;Ro~c(xyZArGPFgM~M8QC_+6&BHAdk`6ZDEGN1b&y7<^03HEKjrT9a4~6gfMVU!heY=j^xFk4nhBh%!zoLP>dgVAGDiO*0V?4si{?s z=?oxoQ3JO4y+PBq|4@7)ud(%H6T@^l#-9&HtoLPpd-~ntEYut$PJebbbVolWuInmJ z75J;2(mxoQzfe4X{IS%zaNZatBe*p(CcHH>WQx2>9GOsfCIkB5{@uR)cUI?bG}OSw z^!?|;r3e=mK0ca6R*Qu_r5MFCI-(aCY9ERMNMt`m09XKdFgG9OogmOe{NHg%uz&Db z80ZsdzB6y7C#d;Ie6t&I8O;l|Y|vl)-m>2+x1WJ2+<#idLgJeL;jkn}bHyw6n(64@->Q24to!=cI-4dX?B;&ss%zxM6e+=~h{n|ggu>LgZ{8t;l zzj1hfbl;!<_LruBiC_Qtrhg*#+^8S?K%V{ruFj)>JIkYa1P~j~Dfrl*A6E}VPJI&S zT6%Q{Um60VjY=()Ps6J4m=TMZ=$VQ6m|diP@3qzd){ILtAPOGG4H0XkTOLjb-;3rMF>%XsfSgM zyz>aa^?h_d+O}}saL!=ip|cOItDLK7qy=abjA8%2SM+qt20im4%3d%%6+ynO*=_OY zvFu!6?|nx6kazPZ0U7v-BZQcM$&7?fBi$5}WjVz$CZqC8=K2^?Ec1}}OA(;@mA)+m zjj*)%V@OR%L0t_(YMMNj&&e~Qm_F;NuWQn3tquCMo%mw~$12eAST6AAFW}5OqODMp zZw@Iy*}YF6?Cvu!!nJSwqX>V-Oj+u z`a$3Z6OG8HAQLZ945A+79kH@f%J4(({ID@w4Fi^;jpaklXZ+M*Sdw~Tej79-sN9vd1}Ir z?jvb(uADwEK8R!1To-EfD0r9A;GcvY-9k>L#*d$sO{gDdw z`seN(KgrDi3fVcot;Ue|EPneR9$L6DPsV>C&SE{{__k9r!IQ-ZLh_|B!=}{_UHNL~ zz0Y)uHpd`3hgwlH3dvf>YjNyf1?)9XNFv6tjLX_yOef8F>gdQ$ujq|iSGAr@+O1*r z%Z(0Kzwn(M2B?!mgWk;b)rI7dDcD!3ODB@V_9%MHd9V+hjKF)?(Ochs@Cu_@pb*)! zH-8||s19vmHN@#MYkub(kg-e~Vcr5^obvTEH!D)dO;+VIgs-c_J-?OAT0fdhI9czy zkdQ$O>49-Ac@-Q?UaQ$u$4X|UGm`b6$AIv^UV>^pi^G=EPd_wD`J&Qf4#%>We$21j$2VSqpW#DQSYK;H<)k>dGro1wP zfU5Uv6PHY>AI5i4$cMzmH4U_;uXbVKS5p%SwdHlOxmm{=>0@8x_)f&p#hm!Eb;!}) zxUcTgAmGcS+og`=ptL8}P*b~cp~;pLYbgb?(;gd#w#qn2@nYjWVeZG)Ld^2X5{7%@ zY9?~@2IXkJ6&afnbr`F$AdIHBxD!ViuQge^x8GdF)M%Wl=OebKQAi*320L3rLDJdT z%X*CWM=B3nb8C{`TU+508#5>5=0Ri*8Bz_toQ7rJU1oeqd4&2h-%+Ihp{d8=7vQ8> z_2xtgo$^&inLH6z0Cdc25n3HyTwY7W-O_289Q*@rmjnb0AijF9CH6^}9>KalJDf3l ze%-d3{7M;otgUC(umt@%__et+XaDTdMUntO*j#1ItnAPo`^ zOnO8pv3o>*OenA}SAE!{aC8f(6q-+ue1Q-fnV6HSjzij2{Er zhDC%Em|Up5dR%WT%2NJDD}6MzOt>DicPNDX03xxT@XZKSMBSTK<*uC=HTU8% zyHgb*^?CDEj6z{4Ahv1PNPRT1hv2sIie*Vq_gq)hjMkepcZ4*s%6kn1PmB#Dr8tu- zC-DY_OAx6T-xoK5{`fH;A~klZo+GKU@FLDFK3qYR&^YC+ylhjOn}=mO-NSoCFMwAj z_0{!tM-Vwg=txYIHP1^oDXY)(W9ISM{?9QCXPVW20XXZ`qyvp!b;qyj<{Z07Tg5_R z-Y+_TN!&yaNPcY4P(PEcR#UDJCh{%|RN8z&Z#_T{5;dzUgk45O>eSavd{H?+=DN5?te6*gd!DAz z!iiA)7NGo*gtek=9y^1vRyhRU1#*tO1PDbgk#tvKz}pXY=QC;e?+_9w!@+`@&t39} zbOp#D3;tRr>K9OH1CjO9I$h|u&EFn3;;!V)Ix$KKT(h|6TiQ@DDz3nsRS$E$@((i| zZx+fm6!`McU9us8C)c;O;zMu;P5G>S7Lxu=EDG{rT*ymk_#WrAuf5BFN4;|*3+?@{ z!3x;*Ir#JHq$t%qIyHpAU;yaK8)?13Rq4o%C5%K9VLaIKhLEEnguF`-dD&gcg|^Pc z?C_Tht->Q-Tw5s;Zry-|9e@9a@2_N{7U$Kb+!_)$u?#bEW9tY3d7XQNPd4Lx+zT)~ zNDXRp-@y@xbDP$2|AZ5~AMKgL@jEgi`xzRLJzqadzYm6nd1-bs?re!TZ#4CJWHvFs z&L2k+$+K8k5IUh%6}MFGQ1g!>HpPu&$u5I@3yx6-?bj#^)2lHIgS&OEB?HI3w$E$t zWMYJRwmxwenP>3<9`4tJ?RcKrQ(etF*=l?bK)p1d6UH@ljq!f^lZj|nB zDQT5%k!DC~g#i_%MskowC8fK&8v*G~i6I3f{T;9OdcF63p7;0uHJ>vl*4k_Dz0TSD zyViGcLyld&!S51usEX#8`MzVKr7e2yq#EuUmUw3^_;9@NjY?@R@^u#Bc5duCIiKPg zQ<)6L8tqcvZk}p3J~T!#Mqe!2>pnHn&pTCNwwpe2$9`{}5L}{6tfqM3*-Gd&9+<*l z2##oKF!XCR7w)GwrBipq8T)Cq=a4T|Q!sNF!%#p7pMa{J36aCxFS)tYF^v@CpOrT1 z*czcY&e7@mqFc3c2*VRTI)BZjDw+}I5h+nR)5_?HabKIKN_a}J2v?Nk#{}zdXdK<; zEEC}@t3o0(8We*O>%Q3&E7-)@*ZgNW`e`}4m&87yZr;xLVDqJoe{G%UCMJ5DA-Ash z!NPKq2Q5)Wt*blRH~Nv*X}y=WnTPN-bRhur>5dbO?gPG>XbB{_?zz)A)g0SnW7-60 z6_qJo&OXl%II)hqPSUP{A5T&j42hPpPxhV4YM*6Z$gnME2VYBGrwTT4W<^m6cRf84 z$>ZWx zyBdlB5I6xt6=abmN(E;fL4+H0_3Tp={z&7fvkj_Pn@{=C?yK@>`z(bsS9x|0F(YW? zTT8t>U+0IE2YS@_;Jcs1@-zF_-1_@_lUHX`9kUsU{j{P{=Q5Ztak@FaXk-BLAMGV+ z-zb$=SCo!KDLc_gf0~bHh!V0y#alTUAfUuoutAj<2;Fe693fQ?wL8i0ofQ;~p+|4D;CI+Nqr5HXAt4q>=TD@uYVh9n#azF~m=kIrN+*4e z!w#^D1+0@d5Ae04GKL!0SB<5Qyelr{a$3F27TC}y=Eiho9!$n?sfz8!3_)|!#AN!L zLHS9DC>6t%bOp`P?$5O%NT9=TXI|leKXHqu%<=qTbOT7tx<=>{b{KZW54?GgO{Aod z%9gdKFnE+&%X79r4hH%pn8f95WU^U}E+(o6c(jw3(?dVJ#A80dmxv$=*p0wRfTv!* zJJy&x^|!88zS{AG4pMn-jlpi?v1nB^rl{bllR-I|4lRQWA28%nQ&?a^+`2mE3n z>gO#dy1aI_7#X-EHP5k`Fh-u%!cZwr0xDNGDj8VNG%-SL3H|M7j5&IqC2XRHEMdGx zFv$S9I}~1yGMIa5*903VM+u=^NS_)t{6uE+yX6zc9>f#_hX~*ZqG%!kuoDmv4{?0` zvP;fV5#1lOpm<`$V;(!mkaQzO!J8Q3*TNyoI)AQkFt;S@XIeV_R!ecHHt9<0CHI|~ zF9&LQiKA7)W(o7#^2j7?a_rXS~5 z?qJh+<6>gIG>VWofPDD4F+b(8*S>b@XWaH+-O;VM)uQm}qX=SmQ+&=GiS2M_Vx#GH zEIH~`bjm7rzC#rCYx|vkHbCi60XlMaEXx<~Q%$*{bqIwMvw)`F9uCinkgJa$F)&dl zP%0nQy_>v~pq+>`=WZUMz~^;?edL+P9E0&c`R300Jo(=7)aroXvy_RJj}pzEj90?P znHV}5i?xZh{j!E?vJ{U;X|KuiW2rFsPV)tE&mRjaC8Nc5FlbqwyO$`NHT0jSCUINp zwc_O-QsT|HjKSCy)9rNP4$BcaxE?}8-or8+?>rTxd@Wu9sN=B?gnlrfdhcY4{ixQz z9C|eZovy1pHKi{sl=76Q8A9(E@wC@Ddy{yTIk|9fd^FSJmIP+xkIccSa>1Uc(Qc1R zF!v@saeawv;q00R*$RY!5mzEld4scUb=f?c*&p3z^wYaMw^)7T6Nqi`9Y9Gl=Xyoc z8;RVl%PoF7UUbi5CcBSYJC4D1A;O!=SCgJ^F)=i2lnI1e7*C26Nw&Pi-{H_b%7YJA2k(9k^9YwW6d%|A!NGSGBlTzX<$iu`rzex z+wu^~PGP!+Khuk`xLjL-nEX2=FO>4`@h*hHB^}$SMZr}4RIZl=obM3!^|ILIw>jyP z?v15ZnR4xL#Wpf2D6bw?tuq8jcQ1YtFm&-1_bD$mF;RjenGla44{S99nwz&yN+i@! zh&1+U^yD+&YupMI3+B8gkI~ibZl+Dj@+f=~l^Mpt9PNUKob3mz&&N0xd`Rw$qF8x& z?LqXslgTJVrcNN++p{7kkAA{rkg-$&>PDZNqD{$-x~ct!g=`tXtKZ9L14*Wwr#7!o z8`xb#`v?{4NoUnW-9>f8RI6TD2-|~LoydTJ5n{Flj!1*CDa!G&1MRodYt#H#Fpt$ys^5vG|W0l6aDp9ueP%fDlG9--!wNWDWuh2Sc`)} zx)~Fj2-RX^I~QYvjzoGbXo;*C>9ZA{&iDBM@3~5YXmI23?qYe0QriQL_UZ&7ASxaB zB8Qve7DgQdPFl&LilkoG?XfsQBc*|AKCxVkGuO!r9%&NydaiR*RbLGr3+M)YX=l9< z8wLa%V=Jz_;4V0Re1@@sosj2AT=C4H8>LH82*GV4tKAwLp61z^)Iu`|M*cga&67y) z6OUAL_``Sxdx?>bty!k|mxJf&3y~nq>v_QdIw~+hl!vPlOb-DIwTWIef<$?o!E1Qd zmkcyhN~Amfxu=3Yhg;y#G4iq>3_6o4N1kg3>Ra~?%+@wI)?MzT%-W#f$$`$AD?7g+ z1Fy~?422@dUV~Tb#gw4r9?D7cgVBYsAwHeKd*{qqF5c@-hh`yEi7w%Z)dRjem#o)k z?OIN>D$XU!+oNPRyZLnyR*Q@ewyFH%!PsA@N$2`taxpTjC*;f*!~dT zoq%u4@6xQ`KU;{slP}pynZv6v=9?8fUZc{8lX{}u%peKFkCXN;6p$EKKBiI-SHpUJ z8geeXqc3EJ3+Wgc^cw{~7iSGrR6>pA9#(>x!#0}jRu<-w;RCASRhKC6Mi^SL&6ROS zELUo3k@V2A^?XnEpo!#eqXCer`Ujy$m8nqQVF6>Rm`ix4@YeJgjLpvA*5<8()Th=q zS3RA5VXX9)3m>DWac?$)i^FtrR&+!;^mteyU5}23V1}-Hirde;`t6nEDC80J)|JFP z!+fy^@Hw$qEjQw^Imdfpj$ymT`EU_jVM_NNl=8};LjElkNS58}IFBL}nU(*&O-0KFOnFZZ^6bf=QU)f&WJ7~OO} zA6-~~hn$0P+74}MfkVL7WO}AcY5LgL;#&3@sjEiAGvOmM(p&zix%#HwwSIk3oc-0a zb@->tWNFt(Qm9Bu^m(f1I5Mgt-f&S|46BRohkpR1EUnNXN`FPN@M z`b|51J`l46wFyjnn!QRsp01bl7qXsY=3RF5TqSoIe^Z~@0%O(tqRV5SI#qe%5k14s zjPC0zMVG9MdGeyxsRM(j3^zq&0djT~?w)@aDmn6){jp}LoSWr3<+@m8Wwy>&MnNo) z#|Awm1H?W}-X~anxLFJGM-#b0*Mn&4)*%r)Cj+AU(xgPKaU?gUBxAGlbh+<>w6der zt^?$iB$hfFi5}`QsL}0!e$BAcs=ZUi)|-(TzR-Q8{J@7Dl$4KgpH7mkq}V|A zHuyppecioE)uDK$+piu)8G0=6I*VDP=A@$urcje~r++Z=4$YbtNAvbNlw&2|>eTQn z0}Z1xS~d=!Ef>xlF~48b27UdOU=jRA!b1Hdv*0#POSpOK@rh_`_+@^db1$@-Oa(ha z92(wa9*4O~CcZp0f)bWOUC-uXiJu+0A%u@)#F&YX5n+mDngh_HKVy@Ne{I58LF}v8 z9S^`-zF4qrrd!Z}aRYLTX$g!KymMVAyhi?A}y zhgWx<$2WKQ4x=h?@T&MGt1nSRM43QYRlN^FGKYLFX2Bp`wl8OlW4B(ey>pkyi}N(s zk+ZckQ~M@g!+CZlwbCXe$YuTL2G4yadt9-|UG z?6aUSbV3NaA+DV_O-FfwI4(mNU;?FIW2^106&np%@-h#`jd0RF=%tLTdQ3IZp*RL( zZC_M;qf#B?`vcVY;0n-Q+CKYqK2O`5_4nw`wY%-#e$yEY`?Uq-T?;_zJRoI}UH5U@1eO| zd;Ie~WYZz3F}Pvw3y?tr0DAn=Eyu1%!_CuftYUoj#7Xf+xTXRyEXqvdy(&ST@{j(_n z&)gmrC%%1Wt-*5~5HK!gn3W0UYy0{3Ywy$vh*xkc`_uQoUapojm@k$^v3x8Gbv%_#W#iF_1`?rQY*PLW+87G0a$ZETq-r zx_KhYxE&=1u>f3%Fq&J3Jm5|mm!GvkWNOr+B8MHNv?z9p%7`L82o^;WNj7{?U%%Jq z={7kPW1p)Fo0xm{&I&{OOZ$V=k(4rsz1HUysF;4q*puv6(N@+xavlTGcU`e&i|?gy zd+l(8Sn)Hf@4&eNluvcoA|8o+pZN5|GklB% zS0#{O*ar~oZR>w#Z%?l$?xx|!s6fsLblxJ0rvR42D1C~^ccpLWe@ofiw)Mozz{)FJ zIf$KFJ_#slyPoK6#AWn+TagJeJcKDg5W;B%pWEK><(Ur@MPkzeUlEfvoV@k=rts}gOo7a znJpfD(-}F}Kw-MFbFD;AO>8s^sv;>-;2roP$N0c6Tt58nT-61;;QrE=PReUCcQOKb zxWWi)oh5u81LgZv$S)&HmBT}`#`>X^idA%UXfO!$MbgT0*#1Zrpd?`Em9n-p(E1Fy zy4-w=J?o^OY|1#8hCV!t5w(d*8KgZ2rAVxhh{lZ9JZ2M!ZSz+PMnB zJ75(4OKSIqskA6mE8$C1qed-wlXNjrfK&A9Q}}adskt<~a9+cSGMkLCyF4?U)K)gD zb6Kc}f%dZn+-qpoa!WYlDFe!7WkD^c6^8d5-8kS32crgLs182yvT@gL#Pza zRqFRCD-v9dra^46Z+PbIw9QMt(p6}Gz=gb`y3Yd2K;g2zgy^cp& zin_3_6h5IP6-(aidtkh(~*W2|JMP{Hl3(o(AA3<*3wc32!%LwXhsxz|qkQnP8dWvS{~a!PGoQkUOM(nd=>Q|OrFAlWVD7(yZp2{M}KDtA8MGSeMwf{K5 zFVZ@@7bDe)s?EgK5P8=yy2B%@%dHpJ7)kaH{+a8>WW$96HVf5j z+Az1N0K!4vr*jm(6ZsY)U#Gp_lQT6bbU5qX-T)U*y;N>G&sbCyiz-vK>t6L=;|ysp zLhr3T^){`O)Xa+Bh=L?cnS9_lnWC$%AQ|@l0|!6yNEZPIvsU91kLQSQL|+H zsqC@A6HgT)dBz~aH>?&tU*78Ux(p#H;Wp$>`uq1b5}xIs;fWgzl0^s{eXHPzOwPVm zvDRq;pE(2cU$r@l&h#>>5%U-@E%AtVQ=s^G&<64hIvD^xjr)B%gzUWGymPB`%8s=4 zqhlDxtzs7FAQoTnDamadppwW~@vM0wRI%Al`3YM~11*pj+{WU0;zXR8m8X``eVO9O z5Y~P5{3)j_Z2DefPX+~}%b*{~q;@N_(#7^;bEdwbLBA)v+MWFV`3OqXKq9Q^#A-4C z_wf))cfnf@cM;|?Hi>9-y}R*;p1=c4N=FtNO&b)}^6BY(N2ugf$ETOYGOmpE)4V&t zj@~g<_ka)yd2`cp1nw3Wk?EwZLGo2CRg$KR$6nip`@G*!o<8xNus3g`cR(VN3pd=c zTj?JWq`D*|-vOK3S*H1Ij&%!8Q?-T+?@X4XCr~EG%Ttjw+l%j-k8|jSu17yRFJz~r zLawfwMmFitAU)I3v&A*QHI0?Qoavmw#@g~7hU(-8>koo7l_`qA)Ypc0O9AGV*=onk z2t$>ZFU{eq@x<9?P0Md$qQP7UexTn}yS!ST7SW3o{G?{%dD<=$xq|NF@44#qbm=YL zn7jSyw)^Aak^8_G$wA6rwF93}u+T%q}8z7nEMYMC5OB_X=Eg3>BJ z*c#zg>#%!Cz)sTe;jP-Q?th~D3>|%&@v2{&5hMZN<(0Yv^px*29SuZVdtXL{3Z@Zl zgWOTJ-6CpjT^{B@^NOP|5?rU+wHR(dyBo`c=A7Fcg52)hmTx!cWc z-I9nYn96fzFP`O7Zp*&uwwg1Qg@(Iu2(r_nkL7=*D>OC|SE+q)gC&_YScvRH$GSM{ zk@zJx7)4ztwxr~~>`qu8-S435t2Z0^R>@%*ALX#Qi`HTec4u}=utt8Y*o7*|UN{9S zMc?t7!gh~fX)&6@2jMOZn2-ZgUBZyWQJLW3$|_w_&kGN_kQ@=}7MREup1<}>ckgmB zC2BU`M*3N3*4%cd%|qaQnB}WJ4S$&gY1>J=IB?tP#>8gLQ^Asc3S}I_nfOl?%dSyc zSdKCsSPbGrDE7BT$4JLKND#-vv&K6-p}8MWsH%E`u-a2oYvHh@eN~L!+)dY+@`}`q zR{kM+fx%RdM|Z8rC(;=l9eg2OV4;WN@u(|9G!MycMa&l2^_yd zbo>eXN*Hy{yb!hm*zB6*6=5Gq=F~?5I>jk{zoucE>VCGYiJEJ@SDBn&kw2pBWudu( zF-d+fZ~)nqg)24yeC|@z6C2|v*U6vEbACEjkG8|1Y8FO2buruBnki5MVGjJfo>1)g zw^%JZ?7sMAU{2hU{4jr)6BkRR{*j1*63H3p*Kb*@qQ4gN(-a1xG}O}p-RSm&pbz$0 z{U7ABdiwp34Z}=!g5kr?QCQQiDUuE-JYnwX7=1Mr86e_x<`|FOIayT6B{2CKlU8tI zFT4uo3pyH~1>iF?VqMEnIQ#v-v0Wu;FkVLCM4C5UWc!?TcnnP=Ngu25@)`>orCSq*XHdECG?YR*WLf=gadj{) z+`r69`W%}A6q04zjQdl{-nRtL((3wXwP`5vAe2nMQicD$20KtI4J5f5zEK4~L=&Ez zrO%m-ZbS2xnl(yi$)EeIv%a|TRl;WolZ#{ZbL#6lnUAv@2)BY{$4qR=A%lm;FOZrR zr=Fh8U$>+wcz79`V@%ls9OP9U_Cu-zqZ#e4eN}atd zwXQy+ic%Q9-DO{_4wW?OD&bTVW}pus`eW_$dywI~VgD68a39=c|3~~Jj1%OPMs)jH zO60wGksuiUdJ{sHreIkR{^U(Yuct5Z@B~}Iqe`COn=z~lwPrApqp!puX7DSPYopz9KIqj$_sM`FA-0%} z2xp)51YimwR#{}TTpc3T@|MV(G0opNvGfgeJ{&NYUsO0KFtE>cudc2MTGA;mKlorl zficjs?MZ1?Y%vYi3tP)c^S4!b3Oc8QtIrn4s@~qy-C{L|<5^%43#;)5P9&QunVZ)Q zMJK1(ypJ1PZ^VlLq7nXt5;*}w8$PbKK92>px(=|KXW5qBibbr1$+{U+J0i#t)YK_c z(`uDf4RD)n7TX7w)v^n@=wK?aen z7-rS2SR7~Y-pQUXa2Wu(AW~7XsgiA5IW#pxRu?RO?#5eU%>b(1w4M|R#;E78yjb*o zCJOPq4WH7DTBr%K&p%}++YhV2ZbHIifUkSgjAwmI-{QGi*+t%jT3P}yz5zW)2{C+d zcXCU`>q9YOeEn)5_#)96IHa)pypn|Lb~+3>i6gT0BTre|u@Gn@$vY4R9G&Z7VE7LC zlwg4W&6H%49DnpSL8Wk9ZbN>3XKtJ*WEK1ah4=ahE}908(GrEXfB;l-ZqHaAsBEQ4 zY8Z#k3t}(8c;If*M2)X35fUcYPMXcnxKkvG9w{YRM76(mzE*(osR^VMlseYF9G>#G z*}SegWE4ChXJ?@R0r^op7@{adBt)+Pp;~)=qVMf;-R@LQzc91nmc=^Nlo2+sWrXwM zv)(Y_!V&jjm`EQZDZ!5N3WulAzN8}KW|ml~P$EAKQdHICy^2rQu+0Gp@;pP`+}tQ_ z+8-T!7F>Tx0Vm}cVcE0+M#1vf96B8b%Cq+;xV;{_2;J!+JHya)nS-_8Z2_rx}bwF>GRRabVo8yq7p~Gs%4@rBykP83&#+IYfy3HjtwDiwaONkM?^C^ zv%2~qI;9G1ZiLeW2{2dG6xDo2u8b5|N9pUZ(MNN8u+!Pzid8hH*}xZEYSrrnAo&O1m$*2e`uhHMWUj$fk7Z>z$F;sB3#a(H zz=kx|K~#P$SFfj>k(OpBkQbyl;)Scr17_`mnKc7M3v>U7Y%%do5J4zcUgo;?&pgcqvO{5ZaLZ1*P~CAATv#l++4i+q(5xT?f&4 zN<32fdNL_k8J=jvC+0e7kZ_ht=z}{A&9ENSoCk1xWhyYWSHRI>_)s0uvzl-h0S3Da z6)~Xg4-H|c*wo~Y#d>F%Zte}@Rv^(F5x$hx;RBu#ozww85N5VbYSNnOXYx>YR_M~G z+4UJd1MjFX=1;{ZFw%x=DOqS%Fy@B6qp=TecBOL$0HI?`h3ylvoG4z9rq|ngf5}trN(iNp+P<8z(_s7M4BH9&V@faF|AJ}rUhrKwF$#x z99vUbm30dY7!4$lr5Mjg6{3U7S19c;5-C^WFA4@peA||&PE+K6N+MO1s%|X*xxX`^ z^z`1n&Xc=lKHlD{N4sMIh}}9VH_i_d{jpyKd)*v3GUx5rgtd~qp;hSTvsmU$Y1f2w zH0zJU-%rmlmQLR#JhUMvSwKC+y{L_Uh3$*V%_%JEbX4Fo^Au`bvuDMUm{JShr%(qTxkyLFYL`MXYB z$W?Abff9MB?Mer6EG^6!?q}rQscKQh<9YH0zt5{L~R?RWj zI(S(!(0BzZv6mLvVFSruoJ?T*f_|1xWc2Lgyn|F-ka2T~UIn?UD3tQC6^sc?fGfwl zb=G-*G(X+A*!_9NS zpcP8VTkbk6)1ZluYZJ?%HbQ*LB~BcUE<(0thhC z4I5SWfWvq5Q{A{zCK+f%I5x;NQo+o}5iGN2?}l<#PQ-7SIglCW_3^6I_xT#ARdsjp zg#bOGxWON6D-b6Q+H*-cD@J6Mx9L2RyHg$py7CgdOT%L$+oi8;zwFZ`LNL~Gzm33e zx@{#DFEtF~d%SlNZ|j0NRlIJ8<6GOi@k(cU{4&WJtO_RRk6#z+wKq@ZXjyMK!F1#C z-9>F@1wTvL>)w<+EAHS!u?m-h8_PHss$x=bN!Ex_zZk>)XGJZQAy#}7-C9VWUvLehVWSEw|S*u=w*a_$#izp|z*u2+v^ z%gL^$2&Zw?THamgyMdY%V1)D58>8yKHVf2jZLv{(aHsefTO{q}~Og$r$M z)C|5WhL|R#U_;lZj(JQhl+K!-I0dJcLD0A`~*_5gF(U3h_jP?2}m zF#aTlLM}|yytsK2ACnl6dX-rj(zM~(i`Sn}b6TkxkI=kmSjA0304q17@yhl_rn}Li z?C``o{h7A-?m`}I>N;VDSr=9=OB3~{Z-U#XGaCspI-iVh+P}`M;Js*qRAaeMDFLoz z&iJA$5RB;TY12Wbpe$USIKtDCR)L(z&u~-+vrSUr!8Ee2uH$U<(;#rpeZ zP3I-NpqaX^UYfo%dTJP?AYOmkfqf-@ew>c_c-Wn_aJ72mNZ3pzD&LK=BGae};;G;n z{sJbtLkTK~Vl3F}t5ld#u)Sl{1YcNF)RP&;xBXPWA6FEbyjDmxkZN8W zB~W&-5*cCc*|2o&`2foErj>;i2*Y0es6#~fy_+TQ6J+SEsYeRX)z_Z$L0hA&;<#%t z7B!SjsHHo_d9U*0m(;>0I8t|v!&75tY8_EQZ>?Y(z;A#Vn`v|GZ##JG)^UE(c$E0C zP<21)dRopoVRHPt@Z$_d;H3U^*O^!YSU#7WpoETP}C6^;xc$x9c>B&08Z_vS9 z^GE1TYJo(~>m2X2%Y1>@bM-+aD?;kX`(Q7_Z9JtKDNSg1OS|pBU}nOEsT^4nqZ>sd zC?pr&(?hQO1*;YJ#t|{Z=$rd$rIbxQp>en8&C%gJ!-sEsB0ko_KesIBh)4GWhN9|D z0&H(Umus$6v3;H>hkLZX>kD!#iaslxc(P@$c7E|1A@Qwa8`m1FH1S6vsDHC<~4QS zBScB+?)w zKV*m~(xra)aQU4G7!GS4a)fh!E@WtHGK@SvWw=)zo_1f@O^kq}lM;js(Uv1{rtD3< zqFSs+4d&QP%S06^u{_sq!^hZ_$;1?NoeISlfIId=C0_A)j5Q@?VM;n;Dxsc)Gil^p zl!+~sED<-0XF$le|8iO1FqomVx;COnJ80(iBfmV^fE^`b2wo8AD+&oG=cV@x9-qtC zD%@R5I4pEcOnyunSnqi$^S3qzL^GBD~y`6$umXu6i+5eKp` zEAo9jd5SZ@h=Ggt3~PV}T!S&!FIDG3+h=3jYuP=vT$l7u;M^<=V$;LSGgnhuiK4>7ZDf0k=oaklf$(V;!L;2mE# zab&47??v@gGfY;bL(X~%CIHXRrn1(OIkx$FDJi__YGH+t?$XOXh27^CSs$VLf-(@x zTMhb--{v2W#HP9$PHtGVMsTmNxs}bM<(5R88a5gYCsb2 zfIJK{gNzJEpcznvswCRy8*0|Wy~3m#c~C+W@CE5t&MP#wRIg24);7dCr5i9crznI! ziq(v~u0!te6p99TNq|hIGeKm?1vpupgG;tHH4OI}(Bgz`C^9ki5-e#!vI=C)P!ERO?wt)JYy$R$3zISxsb)1AxNRod{TO5-|Tu!^+aE7d@X z+}=0w{S)$$rs&SOWfmZb%R7Qssw4-~ig}xXlkaWby;gd@y>Oy{-N;a}=Aenu!`Y@i zV+i0DcY_Yc{eL9s{$JewpJ@MoAJ8x`P56(DR9cW;_Qz%Bzg+*1ywpe6U;||4K8L{;%`wUlaR( zybOP|`+u_vz=|4Ed*6wLmXe&}beNT0U?fX^WgtlD)t!eIy-2WP&nKrV!b_i2nSFh(kdPZO{S+9xf}t?m%6Z5cco= zvw`S8G#vb0KK_p;r~KaJo1mxqS1Vpf@{PQ@DE=jton|k7V`4D+msCBeMZS^7Uv@B; zS`--3xG4H@1L==`@qjF=f%Q~-aSG2D|FU!DpF%-#KYKF4^Jh=~afi;IcYuojamNoc zS^s7xuqUjutS^7-iT|MD{NMdfL%z}aPdk47-E9AAzz;M1qnmzoq=eX&*DtgF+wTAI z0fT=H92s+haQ@XTyz$FDaNLmMV2MLBQ%}u3!CvD62ey1m3k}7_hbui}a5CV4lR?X6 zLgSk{|KRE3-QB%vaJ z^LMZ7A#jTNM_8*iQg^jn^uTJ@*aC4E2UTF-D1I9Orx4?q>0!_E)hW%gG}sE}5^!|t z(wuaC2X6f_AO6002poROd5!C_otFnv9k8O*z3546YVALd8uz00{Ri3JoUizYLw*=A zq4&z$$bX*U!scH>?7qDR$!K(`l+JS}md9X4yZ?Bqe~X$W*r)=j-N-9`(C&oxT&Jrp zprzjIr-1|S|0?7^w1fj}cIsd4Wctz02cW(G)UN_Gg8whw5uoniME+A|)TIC5?eD-} z3K@b5N&Pf|e~ZcwWkDYT8uJhPfFJPdF(5GV%YGcGze_FsO)A*a*i65lW&Hgt*f9wI z-*t)_{D)5Zpx^pUDHW;H^ + + + + + + + Installation + + + +
+

Installation

+ +
+

Desktop application

+
+
").text(t("revisions.mime")), $("").text(revisionItem.mime))) - .append($("
").text(t("revisions.file_size")), $("").text(utils.formatSize(revisionItem.contentLength)))); + .append($("
").text(t("revisions.mime")), + $("").text(revisionItem.mime))) + .append($("
").text(t("revisions.file_size")), $("").text(utils.formatSize(revisionItem.contentLength)))); if (fullRevision.content) { $table.append( @@ -294,15 +354,23 @@ export default class RevisionsDialog extends BasicWidget { ); } - this.$content.html($table); + this.$content.html($table.html()); } else if (["canvas", "mindMap"].includes(revisionItem.type)) { const encodedTitle = encodeURIComponent(revisionItem.title); - this.$content.html($("").attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`).css("max-width", "100%")); + this.$content.html( + $("") + .attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`) + .css("max-width", "100%") + .html()); } else if (revisionItem.type === "mermaid") { const encodedTitle = encodeURIComponent(revisionItem.title); - this.$content.html($("").attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`).css("max-width", "100%")); + this.$content.html( + $("") + .attr("src", `api/revisions/${revisionItem.revisionId}/image/${encodedTitle}?${Math.random()}`) + .css("max-width", "100%") + .html()); this.$content.append($("
").text(fullRevision.content));
         } else {

From e2cd875c0356e5523ca6e35d1b299d094aebe915 Mon Sep 17 00:00:00 2001
From: Elian Doran 
Date: Thu, 13 Feb 2025 20:39:00 +0200
Subject: [PATCH 19/77] refactor(client): fix global event handling for modal

---
 src/public/app/widgets/dialogs/revisions.ts | 18 ++----------------
 1 file changed, 2 insertions(+), 16 deletions(-)

diff --git a/src/public/app/widgets/dialogs/revisions.ts b/src/public/app/widgets/dialogs/revisions.ts
index 94c1979ec..e283edfd4 100644
--- a/src/public/app/widgets/dialogs/revisions.ts
+++ b/src/public/app/widgets/dialogs/revisions.ts
@@ -131,7 +131,7 @@ export default class RevisionsDialog extends BasicWidget {
         this.$list = this.$widget.find(".revision-list");
         this.$listDropdown = this.$widget.find(".revision-list-dropdown");
         //@ts-ignore
-        this.listDropdown = bootstrap.Dropdown.getOrCreateInstance(this.$listDropdown);
+        this.listDropdown = bootstrap.Dropdown.getOrCreateInstance(this.$listDropdown, { autoClose: false });
         this.$content = this.$widget.find(".revision-content");
         this.$title = this.$widget.find(".revision-title");
         this.$titleButtons = this.$widget.find(".revision-title-buttons");
@@ -142,23 +142,9 @@ export default class RevisionsDialog extends BasicWidget {
         this.listDropdown.show();
 
         this.$listDropdown.parent().on("hide.bs.dropdown", (e) => {
-            // Prevent closing dropdown by pressing ESC and clicking outside
-            e.preventDefault();
+            this.modal.hide();
         });
 
-        document.addEventListener(
-            "keydown",
-            (e) => {
-                // Close the revision dialog when revision element is focused and ESC is pressed
-                // TODO: Is this corret?
-                // @ts-ignore
-                if (e.key === "Escape" || ((e.target as HTMLElement)?.classList?.contains(["dropdown-item", "active"]))) {
-                    this.modal.hide();
-                }
-            },
-            true
-        );
-
         this.$widget.on("shown.bs.modal", () => {
             this.$list.find(`[data-revision-id="${this.revisionId}"]`).trigger("focus");
         });

From 4b597c5d2cf44f360756d98a906479d6d5c7a760 Mon Sep 17 00:00:00 2001
From: Elian Doran 
Date: Thu, 13 Feb 2025 20:57:34 +0200
Subject: [PATCH 20/77] fix(client/revisions): improper rendering of nested
 lists (closes #1177)

---
 src/public/app/widgets/dialogs/revisions.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/public/app/widgets/dialogs/revisions.ts b/src/public/app/widgets/dialogs/revisions.ts
index e283edfd4..530195ed2 100644
--- a/src/public/app/widgets/dialogs/revisions.ts
+++ b/src/public/app/widgets/dialogs/revisions.ts
@@ -297,7 +297,7 @@ export default class RevisionsDialog extends BasicWidget {
         const fullRevision = await server.get(`revisions/${revisionItem.revisionId}`);
 
         if (revisionItem.type === "text") {
-            this.$content.html(fullRevision.content);
+            this.$content.html(`
${fullRevision.content}
`); if (this.$content.find("span.math-tex").length > 0) { await libraryLoader.requireLibrary(libraryLoader.KATEX); From 6e173467686c0b1177a390a0a95531a452f6fdbf Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 13 Feb 2025 21:28:01 +0200 Subject: [PATCH 21/77] feat(share): allow serving raw file via query parameter (closes #1182) --- src/share/routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/share/routes.ts b/src/share/routes.ts index fedec7abb..c77a41fc0 100644 --- a/src/share/routes.ts +++ b/src/share/routes.ts @@ -143,7 +143,7 @@ function register(router: Router) { addNoIndexHeader(note, res); - if (note.isLabelTruthy("shareRaw")) { + if (note.isLabelTruthy("shareRaw") || typeof req.query.raw !== "undefined") { res.setHeader("Content-Type", note.mime).send(note.getContent()); return; From 030e3cb805b4889449c5b914046868dc1155bf59 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 13 Feb 2025 21:31:54 +0200 Subject: [PATCH 22/77] fix(i18n): accidentally translated values --- src/public/translations/es/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/translations/es/translation.json b/src/public/translations/es/translation.json index 657216a9d..ba5bf3613 100644 --- a/src/public/translations/es/translation.json +++ b/src/public/translations/es/translation.json @@ -440,7 +440,7 @@ "other_notes_with_name": "Otras notas con nombre de {{attributeType}} \"{{attributeName}}\"", "and_more": "... y {{count}} más.", "print_landscape": "Al exportar a PDF, cambia la orientación de la página a paisaje en lugar de retrato.", - "print_page_size": "Al exportar a PDF, cambia el tamaño de la página. Valores soportados: A0, A1, A2, A3, A4, A5, A6, Legal, Carta, Tabloide, Ledger." + "print_page_size": "Al exportar a PDF, cambia el tamaño de la página. Valores soportados: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger." }, "attribute_editor": { "help_text_body1": "Para agregar una etiqueta, simplemente escriba, por ejemplo. #rock o si desea agregar también valor, p.e. #año = 2020", From cc74164b9437b44d5bf8efda715aef3196c58ad4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 13 Feb 2025 21:46:05 +0200 Subject: [PATCH 23/77] chore(i18n): achieve 100% completion for Romanian --- src/public/translations/ro/translation.json | 13 ++++++++++--- translations/ro/server.json | 6 ++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/public/translations/ro/translation.json b/src/public/translations/ro/translation.json index 9f4c1ade9..2efbe6099 100644 --- a/src/public/translations/ro/translation.json +++ b/src/public/translations/ro/translation.json @@ -230,7 +230,9 @@ "workspace_search_home": "notițele de căutare vor fi create sub această notiță", "workspace_tab_background_color": "Culoare CSS ce va fi folosită în tab-urile ce aparțin spațiului de lucru", "workspace_template": "Această notița va apărea în lista de șabloane când se crează o nouă notiță, dar doar când spațiul de lucru în care se află notița este focalizat", - "app_theme_base": "setați valoarea la „next” pentru a folosi drept temă de bază „TriliumNext” în loc de cea clasică." + "app_theme_base": "setați valoarea la „next” pentru a folosi drept temă de bază „TriliumNext” în loc de cea clasică.", + "print_landscape": "Schimbă orientarea paginii din portret în peisaj atunci când se exportă în PDF.", + "print_page_size": "Schimbă dimensiunea paginii când se exportă în PDF. Valori suportate: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger." }, "attribute_editor": { "add_a_new_attribute": "Adaugă un nou attribut", @@ -520,7 +522,8 @@ "format_opml": "OPML - format de interschimbare pentru editoare cu structură ierarhică (outline). Formatarea, imaginile și fișierele nu vor fi incluse.", "opml_version_1": "OPML v1.0 - text simplu", "opml_version_2": "OPML v2.0 - permite și HTML", - "format_html": "HTML - recomandat deoarece păstrează toata formatarea" + "format_html": "HTML - recomandat deoarece păstrează toata formatarea", + "format_pdf": "PDF - cu scopul de printare sau partajare." }, "fast_search": { "description": "Căutarea rapidă dezactivează căutarea la nivel de conținut al notițelor cu scopul de a îmbunătăți performanța de căutare pentru baze de date mari.", @@ -588,7 +591,8 @@ "toggle_fullscreen": "Comută mod ecran complet", "zoom": "Zoom", "zoom_in": "Mărește", - "zoom_out": "Micșorează" + "zoom_out": "Micșorează", + "show-cheatsheet": "Afișează ghidul rapid" }, "heading_style": { "markdown": "Stil Markdown", @@ -1644,5 +1648,8 @@ "geo-map": { "create-child-note-title": "Crează o notiță nouă și adaug-o pe hartă", "unable-to-load-map": "Nu s-a putut încărca harta." + }, + "help-button": { + "title": "Deschide ghidul relevant" } } diff --git a/translations/ro/server.json b/translations/ro/server.json index 6ff05b095..ebf99082e 100644 --- a/translations/ro/server.json +++ b/translations/ro/server.json @@ -91,7 +91,8 @@ "zoom-in": "Mărește zoom-ul", "zoom-out": "Micșorează zoom-ul", "toggle-classic-editor-toolbar": "Comută tab-ul „Formatare” pentru editorul cu bară fixă", - "export-as-pdf": "Exportă notița curentă ca PDF" + "export-as-pdf": "Exportă notița curentă ca PDF", + "show-cheatsheet": "Afișează o fereastră cu scurtături de la tastatură comune" }, "login": { "button": "Autentifică", @@ -241,7 +242,8 @@ "sql-console-history-title": "Istoricul consolei SQL", "go-to-next-note-title": "Mergi la notița următoare", "launch-bar-templates-title": "Șabloane bară de lansare", - "visible-launchers-title": "Lansatoare vizibile" + "visible-launchers-title": "Lansatoare vizibile", + "user-guide": "Ghidul de utilizare" }, "notes": { "new-note": "Notiță nouă" From eecbfd0206239d20a4a00b09111c9364aa3cc835 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 13 Feb 2025 22:09:08 +0200 Subject: [PATCH 24/77] fix(client): note autocomplete not working properly on enter (closes #1100) --- src/public/app/services/note_autocomplete.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/public/app/services/note_autocomplete.ts b/src/public/app/services/note_autocomplete.ts index 8f7d3a191..7a6cc7eb3 100644 --- a/src/public/app/services/note_autocomplete.ts +++ b/src/public/app/services/note_autocomplete.ts @@ -151,11 +151,11 @@ function initNoteAutocomplete($el: JQuery, options?: Options) { $el.addClass("note-autocomplete-input"); - const $clearTextButton = $(" + + `; export default class NoteErasureTimeoutOptions extends OptionsWidget { diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index a85b87e62..efdc101eb 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -1641,4 +1641,4 @@ body.electron.platform-darwin:not(.native-titlebar) .tab-row-container { background: var(--main-background-color); box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity)); border-radius: 4px; -} \ No newline at end of file +} From e347cdda362d7426e1ac8e450f97eab0b5ce1ffc Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 13 Feb 2025 22:45:48 +0200 Subject: [PATCH 27/77] chore(client/ts): port book_properties --- ...{book_properties.js => book_properties.ts} | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) rename src/public/app/widgets/ribbon_widgets/{book_properties.js => book_properties.ts} (80%) diff --git a/src/public/app/widgets/ribbon_widgets/book_properties.js b/src/public/app/widgets/ribbon_widgets/book_properties.ts similarity index 80% rename from src/public/app/widgets/ribbon_widgets/book_properties.js rename to src/public/app/widgets/ribbon_widgets/book_properties.ts index efc49d142..6bb66dd1f 100644 --- a/src/public/app/widgets/ribbon_widgets/book_properties.js +++ b/src/public/app/widgets/ribbon_widgets/book_properties.ts @@ -1,6 +1,8 @@ import NoteContextAwareWidget from "../note_context_aware_widget.js"; import attributeService from "../../services/attributes.js"; import { t } from "../../services/i18n.js"; +import type FNote from "../../entities/fnote.js"; +import type { EventData } from "../../components/app_context.js"; const TPL = `
@@ -9,7 +11,7 @@ const TPL = ` padding: 12px 12px 6px 12px; display: flex; } - + .book-properties-widget > * { margin-right: 15px; } @@ -17,19 +19,19 @@ const TPL = `
${t("book_properties.view_type")}:    - +
- + @@ -37,13 +39,18 @@ const TPL = ` class="expand-children-button btn btn-sm" title="${t("book_properties.expand_all_children")}"> - + ${t("book_properties.expand")}
`; export default class BookPropertiesWidget extends NoteContextAwareWidget { + + private $viewTypeSelect!: JQuery; + private $expandChildrenButton!: JQuery; + private $collapseAllButton!: JQuery; + get name() { return "bookProperties"; } @@ -70,11 +77,15 @@ export default class BookPropertiesWidget extends NoteContextAwareWidget { this.contentSized(); this.$viewTypeSelect = this.$widget.find(".view-type-select"); - this.$viewTypeSelect.on("change", () => this.toggleViewType(this.$viewTypeSelect.val())); + this.$viewTypeSelect.on("change", () => this.toggleViewType(String(this.$viewTypeSelect.val()))); this.$expandChildrenButton = this.$widget.find(".expand-children-button"); this.$expandChildrenButton.on("click", async () => { - if (!this.note.isLabelTruthy("expanded")) { + if (!this.noteId || !this.note) { + return; + } + + if (!this.note?.isLabelTruthy("expanded")) { await attributeService.addLabel(this.noteId, "expanded"); } @@ -83,6 +94,10 @@ export default class BookPropertiesWidget extends NoteContextAwareWidget { this.$collapseAllButton = this.$widget.find(".collapse-all-button"); this.$collapseAllButton.on("click", async () => { + if (!this.noteId || !this.note) { + return; + } + // owned is important - we shouldn't remove inherited expanded labels for (const expandedAttr of this.note.getOwnedLabels("expanded")) { await attributeService.removeAttributeById(this.noteId, expandedAttr.attributeId); @@ -92,7 +107,11 @@ export default class BookPropertiesWidget extends NoteContextAwareWidget { }); } - async refreshWithNote(note) { + async refreshWithNote(note: FNote) { + if (!this.note) { + return; + } + const viewType = this.note.getLabelValue("viewType") || "grid"; this.$viewTypeSelect.val(viewType); @@ -101,7 +120,11 @@ export default class BookPropertiesWidget extends NoteContextAwareWidget { this.$collapseAllButton.toggle(viewType === "list"); } - async toggleViewType(type) { + async toggleViewType(type: string) { + if (!this.noteId) { + return; + } + if (type !== "list" && type !== "grid") { throw new Error(t("book_properties.invalid_view_type", { type })); } @@ -109,7 +132,7 @@ export default class BookPropertiesWidget extends NoteContextAwareWidget { await attributeService.setLabel(this.noteId, "viewType", type); } - entitiesReloadedEvent({ loadResults }) { + entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) { if (loadResults.getAttributeRows().find((attr) => attr.noteId === this.noteId && attr.name === "viewType")) { this.refresh(); } From 786f3e8d406f6e2d026eebd04117f9855d8a5fbb Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 22:51:51 +0100 Subject: [PATCH 28/77] chore(scripts): namespace server:start --- .gitpod.yml | 2 +- README-ZH_CN.md | 2 +- README.es.md | 2 +- README.it.md | 2 +- README.ja.md | 2 +- README.md | 2 +- README.ru.md | 2 +- docs/X4N03xLYEWnN.html | 4 ++-- docs/XxqZW6JjkW2g.html | 2 +- docs/backend_api/index.html | 2 +- docs/backend_api/media/README-ZH_CN.md | 2 +- docs/backend_api/media/README.es.md | 2 +- docs/backend_api/media/README.it.md | 2 +- docs/backend_api/media/README.ja.md | 2 +- docs/backend_api/media/README.md | 2 +- docs/backend_api/media/README.ru.md | 2 +- docs/btM6L9JtG301.html | 2 +- package.json | 4 ++-- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.gitpod.yml b/.gitpod.yml index 2b77be7b7..f87a115d0 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,7 +4,7 @@ image: tasks: - before: nvm install 20.15.1 && nvm use 20.15.1 init: npm install - command: npm run start-server + command: npm run server:start ports: - port: 8080 diff --git a/README-ZH_CN.md b/README-ZH_CN.md index f6aa860b1..1f6bbaf55 100644 --- a/README-ZH_CN.md +++ b/README-ZH_CN.md @@ -78,7 +78,7 @@ Trilium 也提供 Flatpak: ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 致谢 diff --git a/README.es.md b/README.es.md index a2ea94144..bfa57fe45 100644 --- a/README.es.md +++ b/README.es.md @@ -86,7 +86,7 @@ Clone localmente y ejecute ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 Reconocimientos diff --git a/README.it.md b/README.it.md index a778230c7..750027c1a 100644 --- a/README.it.md +++ b/README.it.md @@ -73,7 +73,7 @@ Clona localmente ed esegui ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 Riconoscimenti diff --git a/README.ja.md b/README.ja.md index 110b779c5..757638770 100644 --- a/README.ja.md +++ b/README.ja.md @@ -54,7 +54,7 @@ Trilium は Flatpak としても提供されます: ```shell npm install -npm run start-server +npm run server:start ``` ## 📢 シャウトアウト diff --git a/README.md b/README.md index e2a81aa4c..0170c8135 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ You can also read [Patterns of personal knowledge base](https://triliumnext.gith git clone https://github.com/TriliumNext/Notes.git cd Notes npm install -npm run start-server +npm run server:start ``` ### Documentation diff --git a/README.ru.md b/README.ru.md index d78738915..e2336efb3 100644 --- a/README.ru.md +++ b/README.ru.md @@ -44,7 +44,7 @@ Trilium предоставляется в виде десктопного при ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 Благодарности diff --git a/docs/X4N03xLYEWnN.html b/docs/X4N03xLYEWnN.html index 2b686480d..9e9bcfef6 100644 --- a/docs/X4N03xLYEWnN.html +++ b/docs/X4N03xLYEWnN.html @@ -38,12 +38,12 @@
-

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:
+                

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

+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 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 index 3307c8c4f..666d8ae9f 100644 --- a/docs/XxqZW6JjkW2g.html +++ b/docs/XxqZW6JjkW2g.html @@ -38,7 +38,7 @@
-

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

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 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/backend_api/index.html b/docs/backend_api/index.html index 612058e6f..6c27bd07a 100644 --- a/docs/backend_api/index.html +++ b/docs/backend_api/index.html @@ -71,7 +71,7 @@

To install TriliumNext on your own server (including via Docker from Dockerhub) follow the server installation docs.

See wiki for complete list of documentation pages.

You can also read Patterns of personal knowledge base to get some inspiration on how you might use TriliumNext.

-
git clone https://github.com/TriliumNext/Notes.git
cd Notes
npm install
npm run start-server +
git clone https://github.com/TriliumNext/Notes.git
cd Notes
npm install
npm run server:start

Head on over to our Docs repo

diff --git a/docs/backend_api/media/README-ZH_CN.md b/docs/backend_api/media/README-ZH_CN.md index f6aa860b1..1f6bbaf55 100644 --- a/docs/backend_api/media/README-ZH_CN.md +++ b/docs/backend_api/media/README-ZH_CN.md @@ -78,7 +78,7 @@ Trilium 也提供 Flatpak: ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 致谢 diff --git a/docs/backend_api/media/README.es.md b/docs/backend_api/media/README.es.md index a2ea94144..bfa57fe45 100644 --- a/docs/backend_api/media/README.es.md +++ b/docs/backend_api/media/README.es.md @@ -86,7 +86,7 @@ Clone localmente y ejecute ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 Reconocimientos diff --git a/docs/backend_api/media/README.it.md b/docs/backend_api/media/README.it.md index a778230c7..750027c1a 100644 --- a/docs/backend_api/media/README.it.md +++ b/docs/backend_api/media/README.it.md @@ -73,7 +73,7 @@ Clona localmente ed esegui ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 Riconoscimenti diff --git a/docs/backend_api/media/README.ja.md b/docs/backend_api/media/README.ja.md index 110b779c5..757638770 100644 --- a/docs/backend_api/media/README.ja.md +++ b/docs/backend_api/media/README.ja.md @@ -54,7 +54,7 @@ Trilium は Flatpak としても提供されます: ```shell npm install -npm run start-server +npm run server:start ``` ## 📢 シャウトアウト diff --git a/docs/backend_api/media/README.md b/docs/backend_api/media/README.md index 1800f667e..c427d98d0 100644 --- a/docs/backend_api/media/README.md +++ b/docs/backend_api/media/README.md @@ -102,7 +102,7 @@ You can also read [Patterns of personal knowledge base](https://triliumnext.gith git clone https://github.com/TriliumNext/Notes.git cd Notes npm install -npm run start-server +npm run server:start ``` ### Documentation diff --git a/docs/backend_api/media/README.ru.md b/docs/backend_api/media/README.ru.md index d78738915..e2336efb3 100644 --- a/docs/backend_api/media/README.ru.md +++ b/docs/backend_api/media/README.ru.md @@ -44,7 +44,7 @@ Trilium предоставляется в виде десктопного при ```shell npm install -npm run start-server +npm run server:start ``` ## 👏 Благодарности diff --git a/docs/btM6L9JtG301.html b/docs/btM6L9JtG301.html index a16f503c9..3edf3154a 100644 --- a/docs/btM6L9JtG301.html +++ b/docs/btM6L9JtG301.html @@ -38,7 +38,7 @@
-

Run server

Run with default settings:

npm run start-server

Run with custom port:

TRILIUM_PORT=8082 npm run start-server

Run Electron

Rebuild better-sqlite3 dependency:

npm run switch-electron

Then run Electron:

npm run start-electron

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run switch-server
+

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 switch-electron

Then run Electron:

npm run start-electron

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run switch-server
diff --git a/package.json b/package.json index 9829a639f..65bc95ddc 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,11 @@ }, "type": "module", "scripts": { - "start-server": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", + "server:start": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", "start-server-safe": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", "start-server-no-dir": "cross-env TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", "start-test-server": "npm run switch-server && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", - "qstart-server": "npm run switch-server && npm run start-server", + "qstart-server": "npm run switch-server && npm run server:start", "start-electron": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", "start-electron-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "start-electron-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", From f3dda940ec149e67425206bf99b5d4a51195794b Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 23:00:53 +0100 Subject: [PATCH 29/77] chore(scripts): namespace server server:start-safe server:start-no-dir server:start-test server:qstart --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 65bc95ddc..14f731c44 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "type": "module", "scripts": { "server:start": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", - "start-server-safe": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", - "start-server-no-dir": "cross-env TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", - "start-test-server": "npm run switch-server && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", - "qstart-server": "npm run switch-server && npm run server:start", + "server:start-safe": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", + "server:start-no-dir": "cross-env TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", + "server:start-test": "npm run switch-server && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", + "server:qstart": "npm run switch-server && npm run server:start", "start-electron": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", "start-electron-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "start-electron-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", From 7b062badf032643b49b04d3c2c4d017ceac4aa90 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 23:18:57 +0100 Subject: [PATCH 30/77] chore(scripts): namespace server server:switch --- docs/btM6L9JtG301.html | 2 +- package.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/btM6L9JtG301.html b/docs/btM6L9JtG301.html index 3edf3154a..64a04eb8a 100644 --- a/docs/btM6L9JtG301.html +++ b/docs/btM6L9JtG301.html @@ -38,7 +38,7 @@
-

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 switch-electron

Then run Electron:

npm run start-electron

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run switch-server
+

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 switch-electron

Then run Electron:

npm run start-electron

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run server:switch
diff --git a/package.json b/package.json index 14f731c44..3b117de43 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,9 @@ "server:start": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", "server:start-safe": "cross-env TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", "server:start-no-dir": "cross-env TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/main.ts", - "server:start-test": "npm run switch-server && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", - "server:qstart": "npm run switch-server && npm run server:start", + "server:start-test": "npm run server:switch && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", + "server:qstart": "npm run server:switch && npm run server:start", + "server:switch": "rimraf ./node_modules/better-sqlite3 && npm install", "start-electron": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", "start-electron-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "start-electron-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", @@ -34,7 +35,6 @@ "start-electron-prod-no-dir": "npm run prepare-dist && cross-env TRILIUM_ENV=dev electron --inspect=5858 .", "start-electron-prod-no-dir-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", "qstart-electron": "npm run switch-electron && npm run start-electron", - "switch-server": "rimraf ./node_modules/better-sqlite3 && npm install", "switch-electron": "electron-rebuild", "build-backend-docs": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", "build-frontend-docs": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", From 469519f5dfe6a67ebb48bc7dde13429ee26e5ac7 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Thu, 13 Feb 2025 23:25:38 +0100 Subject: [PATCH 31/77] chore(scripts): namespace electron:start --- docs/X4N03xLYEWnN.html | 4 ++-- docs/XxqZW6JjkW2g.html | 2 +- docs/btM6L9JtG301.html | 2 +- package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/X4N03xLYEWnN.html b/docs/X4N03xLYEWnN.html index 9e9bcfef6..dca059b84 100644 --- a/docs/X4N03xLYEWnN.html +++ b/docs/X4N03xLYEWnN.html @@ -38,12 +38,12 @@
-

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 start-electron with these versions generally causes an error such as this:

Uncaught Exception:
+                

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

+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 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 index 666d8ae9f..25b34176c 100644 --- a/docs/XxqZW6JjkW2g.html +++ b/docs/XxqZW6JjkW2g.html @@ -38,7 +38,7 @@
-

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

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/btM6L9JtG301.html b/docs/btM6L9JtG301.html index 64a04eb8a..4608a1ead 100644 --- a/docs/btM6L9JtG301.html +++ b/docs/btM6L9JtG301.html @@ -38,7 +38,7 @@
-

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 switch-electron

Then run Electron:

npm run start-electron

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run server:switch
+

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 switch-electron

Then run Electron:

npm run electron:start

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run server:switch
diff --git a/package.json b/package.json index 3b117de43..4d5bfec2f 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "server:start-test": "npm run server:switch && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", "server:qstart": "npm run server:switch && npm run server:start", "server:switch": "rimraf ./node_modules/better-sqlite3 && npm install", - "start-electron": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", + "electron:start": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", "start-electron-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "start-electron-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", "start-electron-no-dir-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", From 0f0ebed78aa143ecd5cc5d424ebecee681a2a7ea Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Thu, 13 Feb 2025 23:51:42 +0100 Subject: [PATCH 32/77] Document sync push/pull --- bin/generate-openapi.js | 33 ++++++++++++- src/routes/api/sync.ts | 105 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 1 deletion(-) diff --git a/bin/generate-openapi.js b/bin/generate-openapi.js index ae6818482..cbd88c014 100644 --- a/bin/generate-openapi.js +++ b/bin/generate-openapi.js @@ -24,17 +24,48 @@ const options = { }, }, }, - apis: ['./src/routes/api/*.ts', './bin/generate-openapi.js'], + apis: [ + // Put individual files here to have them ordered first. + './src/routes/api/setup.ts', + // all other files + './src/routes/api/*.ts', './bin/generate-openapi.js' + ], }; const openapiSpecification = swaggerJsdoc(options); console.log(JSON.stringify(openapiSpecification)); +/** + * @swagger + * tags: + * - name: auth + * description: Authentication + * - name: sync + * description: Synchronization + */ + /** * @swagger * components: * schemas: + * EntityChange: + * type: object + * properties: + * entityChange: + * type: object + * properties: + * entityName: + * type: string + * example: "notes" + * description: Database table for this entity. + * changeId: + * type: string + * example: "changeId9630" + * description: ID, referenced in `entity_changes` table. + * entity: + * type: object + * description: Encoded entity data. Object has one property for each database column. * UtcDateTime: * type: string * example: "2025-02-13T07:42:47.698Z" diff --git a/src/routes/api/sync.ts b/src/routes/api/sync.ts index d157fb4ed..49fc97fd0 100644 --- a/src/routes/api/sync.ts +++ b/src/routes/api/sync.ts @@ -86,6 +86,57 @@ function forceFullSync() { syncService.sync(); } +/** + * @swagger + * /api/sync/changed: + * get: + * summary: Pull sync changes + * operationId: sync-changed + * externalDocs: + * description: Server implementation + * url: https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/api/sync.ts + * parameters: + * - in: query + * name: instanceId + * required: true + * schema: + * type: string + * description: Local instance ID + * - in: query + * name: lastEntityChangeId + * required: true + * schema: + * type: integer + * description: Last locally present change ID + * - in: query + * name: logMarkerId + * required: true + * schema: + * type: string + * description: Marker to identify this request in server log + * responses: + * '200': + * content: + * application/json: + * schema: + * type: object + * properties: + * entityChanges: + * type: list + * items: + * $ref: '#/components/schemas/EntityChange' + * lastEntityChangeId: + * type: integer + * description: If `outstandingPullCount > 0`, pass this as parameter in your next request to continue. + * outstandingPullCount: + * type: int + * example: 42 + * description: Number of changes not yet returned by the remote. + * security: + * - session: [] + * tags: + * - sync + */ function getChanged(req: Request) { const startTime = Date.now(); @@ -151,6 +202,60 @@ const partialRequests: Record< } > = {}; +/** + * @swagger + * /api/sync/update: + * put: + * summary: Push sync changes + * description: + * "Basic usage: set `pageCount = 1`, `pageIndex = 0`, and omit `requestId`. Supply your entity changes in the request body." + * operationId: sync-update + * externalDocs: + * description: Server implementation + * url: https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/api/sync.ts + * parameters: + * - in: header + * name: pageCount + * required: true + * schema: + * type: integer + * - in: header + * name: pageIndex + * required: true + * schema: + * type: integer + * - in: header + * name: requestId + * schema: + * type: string + * description: ID to identify paginated requests + * - in: query + * name: logMarkerId + * required: true + * schema: + * type: string + * description: Marker to identify this request in server log + * requestBody: + * content: + * application/json: + * schema: + * type: object + * properties: + * instanceId: + * type: string + * description: Local instance ID + * entities: + * type: list + * items: + * $ref: '#/components/schemas/EntityChange' + * responses: + * '200': + * description: Changes processed successfully + * security: + * - session: [] + * tags: + * - sync + */ function update(req: Request) { let { body } = req; From 4dfce746e94749523c2636b6db1f07490361fd4a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 02:12:18 +0000 Subject: [PATCH 33/77] chore(deps): update dependency prettier to v3.5.1 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fdf64248..3de275613 100644 --- a/package-lock.json +++ b/package-lock.json @@ -162,7 +162,7 @@ "jsdoc": "4.0.4", "lorem-ipsum": "2.0.8", "nodemon": "3.1.9", - "prettier": "3.5.0", + "prettier": "3.5.1", "rcedit": "4.0.1", "rimraf": "6.0.1", "swagger-jsdoc": "6.2.8", @@ -14000,9 +14000,9 @@ } }, "node_modules/prettier": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.0.tgz", - "integrity": "sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", + "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 9829a639f..350d84be5 100644 --- a/package.json +++ b/package.json @@ -209,7 +209,7 @@ "jsdoc": "4.0.4", "lorem-ipsum": "2.0.8", "nodemon": "3.1.9", - "prettier": "3.5.0", + "prettier": "3.5.1", "rcedit": "4.0.1", "rimraf": "6.0.1", "swagger-jsdoc": "6.2.8", From 35f9af15e52fabb7395c6635ed0ea8a8150ee35a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 02:12:30 +0000 Subject: [PATCH 34/77] chore(deps): update dependency electron to v34.2.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fdf64248..02a0411ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -157,7 +157,7 @@ "@types/yargs": "17.0.33", "@vitest/coverage-v8": "3.0.5", "cross-env": "7.0.3", - "electron": "34.1.1", + "electron": "34.2.0", "esm": "3.2.25", "jsdoc": "4.0.4", "lorem-ipsum": "2.0.8", @@ -8004,9 +8004,9 @@ } }, "node_modules/electron": { - "version": "34.1.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-34.1.1.tgz", - "integrity": "sha512-1aDYk9Gsv1/fFeClMrxWGoVMl7uCUgl1pe26BiTnLXmAoqEXCa3f3sCKFWV+cuDzUjQGAZcpkWhGYTgWUSQrLA==", + "version": "34.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-34.2.0.tgz", + "integrity": "sha512-SYwBJNeXBTm1q/ErybQMUBZAYqEreBUqBwTrNkw1rV4YatDZk5Aittpcus3PPeC4UoI/tqmJ946uG8AKHTd6CA==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -8725,9 +8725,9 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "20.17.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.17.tgz", - "integrity": "sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==", + "version": "20.17.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz", + "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==", "license": "MIT", "dependencies": { "undici-types": "~6.19.2" diff --git a/package.json b/package.json index 9829a639f..56d4cad22 100644 --- a/package.json +++ b/package.json @@ -204,7 +204,7 @@ "@types/yargs": "17.0.33", "@vitest/coverage-v8": "3.0.5", "cross-env": "7.0.3", - "electron": "34.1.1", + "electron": "34.2.0", "esm": "3.2.25", "jsdoc": "4.0.4", "lorem-ipsum": "2.0.8", From 325431f0501454ece7e4127dbe478b1bdc79d549 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 02:12:39 +0000 Subject: [PATCH 35/77] chore(deps): update dependency webpack to v5.98.0 --- package-lock.json | 245 ++++++++++------------------------------------ package.json | 2 +- 2 files changed, 52 insertions(+), 195 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fdf64248..0a601d256 100644 --- a/package-lock.json +++ b/package-lock.json @@ -171,7 +171,7 @@ "typedoc": "0.27.7", "typescript": "5.7.3", "vitest": "3.0.5", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" } @@ -4970,15 +4970,15 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -5002,35 +5002,16 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.8.2" } }, "node_modules/amator": { @@ -9027,6 +9008,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", @@ -9547,12 +9550,6 @@ "node": ">= 6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, "node_modules/fast-uri": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", @@ -11707,9 +11704,9 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-stringify-safe": { @@ -15215,14 +15212,15 @@ } }, "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 10.13.0" @@ -16502,59 +16500,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -17295,15 +17240,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/username": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/username/-/username-5.1.0.tgz", @@ -18149,9 +18085,9 @@ } }, "node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", @@ -18172,9 +18108,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -18277,63 +18213,6 @@ } } }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", @@ -18358,28 +18237,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", diff --git a/package.json b/package.json index 9829a639f..f6154c6d3 100644 --- a/package.json +++ b/package.json @@ -218,7 +218,7 @@ "typedoc": "0.27.7", "typescript": "5.7.3", "vitest": "3.0.5", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-cli": "6.0.1", "webpack-dev-middleware": "7.4.2" } From 3d320308c955e1600d170c9e8af90f17883062d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 02:12:50 +0000 Subject: [PATCH 36/77] chore(deps): update node.js to v22.14.0 --- Dockerfile | 4 ++-- Dockerfile.alpine | 4 ++-- package-lock.json | 8 ++++---- package.json | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 959c244a9..d2ceb1c91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build stage -FROM node:22.13.1-bullseye-slim AS builder +FROM node:22.14.0-bullseye-slim AS builder # Configure build dependencies in a single layer RUN apt-get update && apt-get install -y --no-install-recommends \ @@ -36,7 +36,7 @@ RUN cp -R build/src/* src/. && \ rm -r build # Runtime stage -FROM node:22.13.1-bullseye-slim +FROM node:22.14.0-bullseye-slim # Install only runtime dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ diff --git a/Dockerfile.alpine b/Dockerfile.alpine index f7b49b94c..a506193eb 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -1,5 +1,5 @@ # Build stage -FROM node:22.13.1-alpine AS builder +FROM node:22.14.0-alpine AS builder # Configure build dependencies RUN apk add --no-cache --virtual .build-dependencies \ @@ -35,7 +35,7 @@ RUN cp -R build/src/* src/. && \ rm -r build # Runtime stage -FROM node:22.13.1-alpine +FROM node:22.14.0-alpine # Install runtime dependencies RUN apk add --no-cache su-exec shadow diff --git a/package-lock.json b/package-lock.json index 5fdf64248..c75074c94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -141,7 +141,7 @@ "@types/leaflet-gpx": "1.3.7", "@types/mime-types": "2.1.4", "@types/multer": "1.4.12", - "@types/node": "22.13.1", + "@types/node": "22.13.4", "@types/react": "18.3.18", "@types/safe-compare": "1.1.2", "@types/sanitize-html": "2.13.0", @@ -4239,9 +4239,9 @@ } }, "node_modules/@types/node": { - "version": "22.13.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz", - "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==", + "version": "22.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz", + "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" diff --git a/package.json b/package.json index 9829a639f..9a421f033 100644 --- a/package.json +++ b/package.json @@ -188,7 +188,7 @@ "@types/leaflet-gpx": "1.3.7", "@types/mime-types": "2.1.4", "@types/multer": "1.4.12", - "@types/node": "22.13.1", + "@types/node": "22.13.4", "@types/react": "18.3.18", "@types/safe-compare": "1.1.2", "@types/sanitize-html": "2.13.0", From 06890585d2b9e63d458dc5a91ed4bf0d55554e94 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 07:36:49 +0100 Subject: [PATCH 37/77] chore(scripts): namespace "electron:" --- docs/btM6L9JtG301.html | 2 +- package.json | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/btM6L9JtG301.html b/docs/btM6L9JtG301.html index 4608a1ead..6188237d3 100644 --- a/docs/btM6L9JtG301.html +++ b/docs/btM6L9JtG301.html @@ -38,7 +38,7 @@
-

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 switch-electron

Then run Electron:

npm run electron:start

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

npm run start-electron-no-dir

When done, switch back the better-sqlite3 dependency:

npm run server:switch
+

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 switch-electron

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/package.json b/package.json index 4d5bfec2f..04fbb65ec 100644 --- a/package.json +++ b/package.json @@ -27,15 +27,15 @@ "server:qstart": "npm run server:switch && npm run server:start", "server:switch": "rimraf ./node_modules/better-sqlite3 && npm install", "electron:start": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", - "start-electron-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", - "start-electron-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", - "start-electron-no-dir-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", - "start-electron-prod": "npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron-main.js --inspect=5858 .", - "start-electron-prod-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", - "start-electron-prod-no-dir": "npm run prepare-dist && cross-env TRILIUM_ENV=dev electron --inspect=5858 .", - "start-electron-prod-no-dir-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", - "qstart-electron": "npm run switch-electron && npm run start-electron", - "switch-electron": "electron-rebuild", + "electron:start-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", + "electron:start-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", + "electron:start-nix-no-dir": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", + "electron:start-prod": "npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron-main.js --inspect=5858 .", + "electron:start-prod-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", + "electron:start-prod-no-dir": "npm run prepare-dist && cross-env TRILIUM_ENV=dev electron --inspect=5858 .", + "electron:start-prod-no-dir-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", + "electron:qstart": "npm run electron:switch && npm run electron:start", + "electron:switch": "electron-rebuild", "build-backend-docs": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", "build-frontend-docs": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "build-docs": "npm run build-backend-docs && npm run build-frontend-docs", From 0145636fc51d04835a1d6a6811178b5084369247 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 07:39:01 +0100 Subject: [PATCH 38/77] chore(scripts): namespace "electron:" reorder entries --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 04fbb65ec..f1a30b350 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,13 @@ "server:qstart": "npm run server:switch && npm run server:start", "server:switch": "rimraf ./node_modules/better-sqlite3 && npm install", "electron:start": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", - "electron:start-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "electron:start-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", + "electron:start-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "electron:start-nix-no-dir": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "electron:start-prod": "npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron-main.js --inspect=5858 .", - "electron:start-prod-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", "electron:start-prod-no-dir": "npm run prepare-dist && cross-env TRILIUM_ENV=dev electron --inspect=5858 .", - "electron:start-prod-no-dir-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", + "electron:start-prod-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", + "electron:start-prod-nix-no-dir": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", "electron:qstart": "npm run electron:switch && npm run electron:start", "electron:switch": "electron-rebuild", "build-backend-docs": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", From a30d361b1d75c03d3e7fc912efdfeb42f527b354 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 07:52:34 +0100 Subject: [PATCH 39/77] deps: remove leftover @types/jasmine --- package-lock.json | 8 -------- package.json | 1 - 2 files changed, 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5fdf64248..137f45027 100644 --- a/package-lock.json +++ b/package-lock.json @@ -135,7 +135,6 @@ "@types/fs-extra": "11.0.4", "@types/html": "1.0.4", "@types/ini": "4.1.1", - "@types/jasmine": "5.1.5", "@types/jquery": "3.5.32", "@types/jsdom": "21.1.7", "@types/leaflet-gpx": "1.3.7", @@ -4104,13 +4103,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/jasmine": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.5.tgz", - "integrity": "sha512-SaCZ3kM5NjOiJqMRYwHpLbTfUC2Dyk1KS3QanNFsUYPGTk70CWVK/J9ueun6zNhw/UkgV7xl8V4ZLQZNRbfnNw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/jquery": { "version": "3.5.32", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.32.tgz", diff --git a/package.json b/package.json index 9829a639f..1f92328a4 100644 --- a/package.json +++ b/package.json @@ -182,7 +182,6 @@ "@types/fs-extra": "11.0.4", "@types/html": "1.0.4", "@types/ini": "4.1.1", - "@types/jasmine": "5.1.5", "@types/jquery": "3.5.32", "@types/jsdom": "21.1.7", "@types/leaflet-gpx": "1.3.7", From 58eaf5eb5bd83b0906a3d01fa87667dcf33c8bf5 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:01:30 +0100 Subject: [PATCH 40/77] test(etapi): mark as TODO for now fixes typescript build for now (not even sure, why we are building the tests as well) --- spec/etapi/app_info.ts | 3 ++- spec/etapi/backup.ts | 2 ++ spec/etapi/import.ts | 2 ++ spec/etapi/notes.ts | 2 ++ spec/support/etapi.ts | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spec/etapi/app_info.ts b/spec/etapi/app_info.ts index 4bb8c4064..08aade29b 100644 --- a/spec/etapi/app_info.ts +++ b/spec/etapi/app_info.ts @@ -1,8 +1,9 @@ import etapi from "../support/etapi.js"; - +/* TriliumNextTODO: port to Vitest etapi.describeEtapi("app_info", () => { it("get", async () => { const appInfo = await etapi.getEtapi("app-info"); expect(appInfo.clipperProtocolVersion).toEqual("1.0"); }); }); +*/ \ No newline at end of file diff --git a/spec/etapi/backup.ts b/spec/etapi/backup.ts index 78aa01d7f..88e487f9e 100644 --- a/spec/etapi/backup.ts +++ b/spec/etapi/backup.ts @@ -1,8 +1,10 @@ import etapi from "../support/etapi.js"; +/* TriliumNextTODO: port to Vitest etapi.describeEtapi("backup", () => { it("create", async () => { const response = await etapi.putEtapiContent("backup/etapi_test"); expect(response.status).toEqual(204); }); }); +*/ \ No newline at end of file diff --git a/spec/etapi/import.ts b/spec/etapi/import.ts index d36a01c58..fc88a9ef5 100644 --- a/spec/etapi/import.ts +++ b/spec/etapi/import.ts @@ -3,6 +3,7 @@ import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; +/* TriliumNextTODO: port to Vitest etapi.describeEtapi("import", () => { // temporarily skip this test since test-export.zip is missing xit("import", async () => { @@ -22,3 +23,4 @@ etapi.describeEtapi("import", () => { expect(content).toContain("test export content"); }); }); +*/ \ No newline at end of file diff --git a/spec/etapi/notes.ts b/spec/etapi/notes.ts index 6efcd88a1..dccb668df 100644 --- a/spec/etapi/notes.ts +++ b/spec/etapi/notes.ts @@ -1,6 +1,7 @@ import crypto from "crypto"; import etapi from "../support/etapi.js"; +/* TriliumNextTODO: port to Vitest etapi.describeEtapi("notes", () => { it("create", async () => { const { note, branch } = await etapi.postEtapi("create-note", { @@ -99,3 +100,4 @@ etapi.describeEtapi("notes", () => { expect(error.message).toEqual(`Note '${note.noteId}' not found.`); }); }); +*/ \ No newline at end of file diff --git a/spec/support/etapi.ts b/spec/support/etapi.ts index d653707d5..307868d7d 100644 --- a/spec/support/etapi.ts +++ b/spec/support/etapi.ts @@ -1,4 +1,5 @@ import type child_process from "child_process"; +import { describe, beforeAll, afterAll } from "vitest"; let etapiAuthToken: string | undefined; From 688eb4d93f52c6dfd0c5ba77f175959697765061 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:31:07 +0100 Subject: [PATCH 41/77] chore(scripts): namespace "docs:" --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f1a30b350..73af47986 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,9 @@ "electron:start-prod-nix-no-dir": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", "electron:qstart": "npm run electron:switch && npm run electron:start", "electron:switch": "electron-rebuild", - "build-backend-docs": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", - "build-frontend-docs": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", - "build-docs": "npm run build-backend-docs && npm run build-frontend-docs", + "docs:build-backend": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", + "docs:build-frontend": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", + "docs:build": "npm run docs:build-backend && npm run docs:build-frontend", "webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", "test-playwright": "playwright test", "test": "cross-env TRILIUM_DATA_DIR=./data-test vitest", From d2e8f946a0bae86cd35afa100c2c8c0daf698903 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:35:46 +0100 Subject: [PATCH 42/77] chore(scripts): namespace "chore:ci-update-nightly-version" --- .github/workflows/nightly.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2b1fbe57e..f7cee700a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -38,7 +38,7 @@ jobs: shell: bash run: npm ci - name: Update nightly version - run: npm run ci-update-nightly-version + run: npm run chore:ci-update-nightly-version - name: Run the build uses: ./.github/actions/build-electron with: diff --git a/package.json b/package.json index 73af47986..29577415c 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", "generate-openapi": "node bin/generate-openapi.js", - "ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", + "chore:ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", "prettier-check": "prettier . --check", "prettier-fix": "prettier . --write" }, From 47002aa95ad155bb50b7179a755e9fd388861b9b Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:38:18 +0100 Subject: [PATCH 43/77] chore(scripts): namespace "chore:update-build-info" --- .github/actions/build-electron/action.yml | 2 +- .github/actions/build-server/action.yml | 2 +- bin/release.sh | 2 +- docs/mPGbEmYGitWe.html | 2 +- package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/actions/build-electron/action.yml b/.github/actions/build-electron/action.yml index b55ffea4b..e4081b906 100644 --- a/.github/actions/build-electron/action.yml +++ b/.github/actions/build-electron/action.yml @@ -33,7 +33,7 @@ runs: run: sed -e "s/case 'armv7l'/case 'arm64'/g" -e "s/return 'arm'/return 'aarch64'/g" -i node_modules/@electron-forge/maker-flatpak/dist/MakerFlatpak.js - name: Update build info shell: bash - run: npm run update-build-info + run: npm run chore:update-build-info - name: Run electron-forge shell: bash run: npm run make-electron -- --arch=${{ inputs.arch }} diff --git a/.github/actions/build-server/action.yml b/.github/actions/build-server/action.yml index 694005c1b..cf8057c70 100644 --- a/.github/actions/build-server/action.yml +++ b/.github/actions/build-server/action.yml @@ -18,7 +18,7 @@ runs: MATRIX_ARCH: ${{ inputs.arch }} shell: bash run: | - npm run update-build-info + npm run chore:update-build-info ./bin/build-server.sh - name: Prepare artifacts shell: bash diff --git a/bin/release.sh b/bin/release.sh index fea1e030f..74559a88c 100755 --- a/bin/release.sh +++ b/bin/release.sh @@ -32,7 +32,7 @@ mv package.json.tmp package.json git add package.json -npm run update-build-info +npm run chore:update-build-info git add src/services/build.ts diff --git a/docs/mPGbEmYGitWe.html b/docs/mPGbEmYGitWe.html index a66680a97..017d198b7 100644 --- a/docs/mPGbEmYGitWe.html +++ b/docs/mPGbEmYGitWe.html @@ -38,7 +38,7 @@
-
  • Provides context about when the build was made and the corresponding Git revision.
  • The information is displayed to the client when going in the about dialog.
  • The build information is hard-coded in src/services/build.ts. This file is generated automatically via npm run update-build-info which itself is run automatically whenever making a build in the CI, or a local delivery.
+
  • 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/package.json b/package.json index 29577415c..8d81b7cc3 100644 --- a/package.json +++ b/package.json @@ -48,12 +48,12 @@ "package-electron": "electron-forge package", "prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", "watch-dist": "tsx ./bin/watch-dist.ts", - "update-build-info": "tsx bin/update-build-info.ts", "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", "generate-openapi": "node bin/generate-openapi.js", + "chore:update-build-info": "tsx bin/update-build-info.ts", "chore:ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", "prettier-check": "prettier . --check", "prettier-fix": "prettier . --write" From 9cddb1deac183596327678da7b819bce388875f8 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:41:34 +0100 Subject: [PATCH 44/77] chore(scripts): namespace "build:webpack" --- Dockerfile | 2 +- Dockerfile.alpine | 2 +- bin/copy-trilium.sh | 2 +- package.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 959c244a9..620c13789 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,7 +25,7 @@ RUN cp -R build/src/* src/. && \ cp build/docker_healthcheck.js . && \ rm docker_healthcheck.ts && \ npm install && \ - npm run webpack && \ + npm run build:webpack && \ npm prune --omit=dev && \ npm cache clean --force && \ cp -r src/public/app/doc_notes src/public/app-dist/. && \ diff --git a/Dockerfile.alpine b/Dockerfile.alpine index f7b49b94c..cac6d1871 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -24,7 +24,7 @@ RUN cp -R build/src/* src/. && \ cp build/docker_healthcheck.js . && \ rm docker_healthcheck.ts && \ npm install && \ - npm run webpack && \ + npm run build:webpack && \ npm prune --omit=dev && \ npm cache clean --force && \ cp -r src/public/app/doc_notes src/public/app-dist/. && \ diff --git a/bin/copy-trilium.sh b/bin/copy-trilium.sh index 221e8a0ea..e1d0e197f 100755 --- a/bin/copy-trilium.sh +++ b/bin/copy-trilium.sh @@ -23,7 +23,7 @@ rm -rf "$DIR" mkdir -pv "$DIR" echo Webpack start -npm run webpack +npm run build:webpack echo Webpack finish echo "Copying Trilium to build directory $DIR" diff --git a/package.json b/package.json index 8d81b7cc3..2f9f1a406 100644 --- a/package.json +++ b/package.json @@ -39,12 +39,12 @@ "docs:build-backend": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", "docs:build-frontend": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "docs:build": "npm run docs:build-backend && npm run docs:build-frontend", - "webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", + "build:webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", "test-playwright": "playwright test", "test": "cross-env TRILIUM_DATA_DIR=./data-test vitest", "test-coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", "start-electron-forge": "npm run prepare-dist && electron-forge start", - "make-electron": "npm run webpack && npm run prepare-dist && electron-forge make", + "make-electron": "npm run build:webpack && npm run prepare-dist && electron-forge make", "package-electron": "electron-forge package", "prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", "watch-dist": "tsx ./bin/watch-dist.ts", From 4f6085a1a4e1e15c132f8cb4fb6f0b2bc222ece7 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:43:41 +0100 Subject: [PATCH 45/77] chore(scripts): namespace "build:prepare-dist" --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 2f9f1a406..95b51dc71 100644 --- a/package.json +++ b/package.json @@ -30,23 +30,23 @@ "electron:start-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", "electron:start-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", "electron:start-nix-no-dir": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", - "electron:start-prod": "npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron-main.js --inspect=5858 .", - "electron:start-prod-no-dir": "npm run prepare-dist && cross-env TRILIUM_ENV=dev electron --inspect=5858 .", - "electron:start-prod-nix": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", - "electron:start-prod-nix-no-dir": "electron-rebuild --version 33.3.1 && npm run prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", + "electron:start-prod": "npm run build:prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron-main.js --inspect=5858 .", + "electron:start-prod-no-dir": "npm run build:prepare-dist && cross-env TRILIUM_ENV=dev electron --inspect=5858 .", + "electron:start-prod-nix": "electron-rebuild --version 33.3.1 && npm run build:prepare-dist && cross-env TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", + "electron:start-prod-nix-no-dir": "electron-rebuild --version 33.3.1 && npm run build:prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", "electron:qstart": "npm run electron:switch && npm run electron:start", "electron:switch": "electron-rebuild", "docs:build-backend": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", "docs:build-frontend": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "docs:build": "npm run docs:build-backend && npm run docs:build-frontend", "build:webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", + "build:prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", "test-playwright": "playwright test", "test": "cross-env TRILIUM_DATA_DIR=./data-test vitest", "test-coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", - "start-electron-forge": "npm run prepare-dist && electron-forge start", - "make-electron": "npm run build:webpack && npm run prepare-dist && electron-forge make", + "start-electron-forge": "npm run build:prepare-dist && electron-forge start", + "make-electron": "npm run build:webpack && npm run build:prepare-dist && electron-forge make", "package-electron": "electron-forge package", - "prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", "watch-dist": "tsx ./bin/watch-dist.ts", "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", From d23734dd3f091b257d5893ea17e52c67c65ca43a Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:44:25 +0100 Subject: [PATCH 46/77] chore(scripts): add some line breaks for better separation --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index 95b51dc71..1cd4c29e4 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "server:start-test": "npm run server:switch && rimraf ./data-test && cross-env TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 nodemon src/main.ts", "server:qstart": "npm run server:switch && npm run server:start", "server:switch": "rimraf ./node_modules/better-sqlite3 && npm install", + "electron:start": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./electron-main.ts --inspect=5858 .", "electron:start-no-dir": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_ENV=dev electron --inspect=5858 .", "electron:start-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-main.ts --inspect=5858 .\"", @@ -36,11 +37,14 @@ "electron:start-prod-nix-no-dir": "electron-rebuild --version 33.3.1 && npm run build:prepare-dist && cross-env TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./dist/electron-main.js --inspect=5858 .\"", "electron:qstart": "npm run electron:switch && npm run electron:start", "electron:switch": "electron-rebuild", + "docs:build-backend": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", "docs:build-frontend": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "docs:build": "npm run docs:build-backend && npm run docs:build-frontend", + "build:webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", "build:prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", + "test-playwright": "playwright test", "test": "cross-env TRILIUM_DATA_DIR=./data-test vitest", "test-coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", From 5f5d7b54320981f87b2a2f3cb5127f92c61591c6 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:48:14 +0100 Subject: [PATCH 47/77] chore(scripts): namespace "electron-forge:*" --- .github/actions/build-electron/action.yml | 2 +- package.json | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/actions/build-electron/action.yml b/.github/actions/build-electron/action.yml index e4081b906..76e8161b5 100644 --- a/.github/actions/build-electron/action.yml +++ b/.github/actions/build-electron/action.yml @@ -36,7 +36,7 @@ runs: run: npm run chore:update-build-info - name: Run electron-forge shell: bash - run: npm run make-electron -- --arch=${{ inputs.arch }} + run: npm run electron-forge:make -- --arch=${{ inputs.arch }} - name: Prepare artifacts shell: bash run: | diff --git a/package.json b/package.json index 1cd4c29e4..ab706733d 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,10 @@ "electron:qstart": "npm run electron:switch && npm run electron:start", "electron:switch": "electron-rebuild", + "electron-forge:start": "npm run build:prepare-dist && electron-forge start", + "electron-forge:make": "npm run build:webpack && npm run build:prepare-dist && electron-forge make", + "electron-forge:package": "electron-forge package", + "docs:build-backend": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts", "docs:build-frontend": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "docs:build": "npm run docs:build-backend && npm run docs:build-frontend", @@ -48,9 +52,6 @@ "test-playwright": "playwright test", "test": "cross-env TRILIUM_DATA_DIR=./data-test vitest", "test-coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", - "start-electron-forge": "npm run build:prepare-dist && electron-forge start", - "make-electron": "npm run build:webpack && npm run build:prepare-dist && electron-forge make", - "package-electron": "electron-forge package", "watch-dist": "tsx ./bin/watch-dist.ts", "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", From ae41555b514bd0398225e710dc08920b763810f6 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:50:43 +0100 Subject: [PATCH 48/77] chore(scripts): namespace "test:*" --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ab706733d..7cb3974ad 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,10 @@ "build:webpack": "tsx node_modules/webpack/bin/webpack.js -c webpack.config.ts", "build:prepare-dist": "rimraf ./dist && tsc && tsx ./bin/copy-dist.ts", - "test-playwright": "playwright test", "test": "cross-env TRILIUM_DATA_DIR=./data-test vitest", - "test-coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", + "test:coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", + "test:playwright": "playwright test", + "watch-dist": "tsx ./bin/watch-dist.ts", "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", From 218a88972566d064ebf6508cd4abb5f70293aab4 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:54:05 +0100 Subject: [PATCH 49/77] chore(scripts): namespace "dev:*" --- package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 7cb3974ad..2b6457a20 100644 --- a/package.json +++ b/package.json @@ -53,16 +53,17 @@ "test:coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", "test:playwright": "playwright test", - "watch-dist": "tsx ./bin/watch-dist.ts", + "dev:watch-dist": "tsx ./bin/watch-dist.ts", + "dev:prettier-check": "prettier . --check", + "dev:prettier-fix": "prettier . --write", + "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", "generate-openapi": "node bin/generate-openapi.js", "chore:update-build-info": "tsx bin/update-build-info.ts", - "chore:ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", - "prettier-check": "prettier . --check", - "prettier-fix": "prettier . --write" + "chore:ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts" }, "dependencies": { "@braintree/sanitize-url": "7.1.1", From 0cace7f3f9da5799dbf5158de3ba3aff60a64739 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 08:56:45 +0100 Subject: [PATCH 50/77] chore(scripts): add integration test servers to namespace "test:*" --- package.json | 7 ++++--- playwright.config.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2b6457a20..aa0756308 100644 --- a/package.json +++ b/package.json @@ -53,13 +53,14 @@ "test:coverage": "cross-env TRILIUM_DATA_DIR=./data-test vitest --coverage", "test:playwright": "playwright test", + "test:integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", + "test:integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", + "test:integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", + "dev:watch-dist": "tsx ./bin/watch-dist.ts", "dev:prettier-check": "prettier . --check", "dev:prettier-fix": "prettier . --write", - "integration-edit-db": "cross-env TRILIUM_INTEGRATION_TEST=edit TRILIUM_PORT=8081 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", - "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", - "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", "generate-openapi": "node bin/generate-openapi.js", "chore:update-build-info": "tsx bin/update-build-info.ts", diff --git a/playwright.config.ts b/playwright.config.ts index 9015af28e..e5377db4b 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -74,7 +74,7 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ webServer: !process.env.TRILIUM_DOCKER ? { - command: 'npm run integration-mem-db-dev', + command: 'npm run test:integration-mem-db-dev', url: SERVER_URL, reuseExistingServer: !process.env.CI, } : undefined, From 21d18b1bdfecd8da448abcf574e39618e4199b6d Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 09:00:42 +0100 Subject: [PATCH 51/77] chore(scripts): add generate-* to namespace "chore:*" --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index aa0756308..53070e6ed 100644 --- a/package.json +++ b/package.json @@ -61,10 +61,10 @@ "dev:prettier-check": "prettier . --check", "dev:prettier-fix": "prettier . --write", - "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", - "generate-openapi": "node bin/generate-openapi.js", "chore:update-build-info": "tsx bin/update-build-info.ts", - "chore:ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts" + "chore:ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", + "chore:generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", + "chore:generate-openapi": "node bin/generate-openapi.js" }, "dependencies": { "@braintree/sanitize-url": "7.1.1", From e89d1b24131700a76302fb063f0fbde5b9d4a023 Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 09:11:35 +0100 Subject: [PATCH 52/77] chore(scripts): fix electron:switch in docs --- docs/X4N03xLYEWnN.html | 2 +- docs/btM6L9JtG301.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/X4N03xLYEWnN.html b/docs/X4N03xLYEWnN.html index dca059b84..b8e844cba 100644 --- a/docs/X4N03xLYEWnN.html +++ b/docs/X4N03xLYEWnN.html @@ -43,7 +43,7 @@ Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build 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 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.

+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/btM6L9JtG301.html b/docs/btM6L9JtG301.html index 6188237d3..f8a6b4701 100644 --- a/docs/btM6L9JtG301.html +++ b/docs/btM6L9JtG301.html @@ -38,7 +38,7 @@
-

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 switch-electron

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
+

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
From 0e18c405d890a600211a8d1fff0fe7947b15575e Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Fri, 14 Feb 2025 09:17:57 +0100 Subject: [PATCH 53/77] test: "unskip" skipped tests --- src/services/search/services/search.spec.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/services/search/services/search.spec.ts b/src/services/search/services/search.spec.ts index e468ffd07..493eff030 100644 --- a/src/services/search/services/search.spec.ts +++ b/src/services/search/services/search.spec.ts @@ -22,7 +22,7 @@ describe("Search", () => { }); }); - it.skip("simple path match", () => { + it("simple path match", () => { rootNote.child(note("Europe").child(note("Austria"))); const searchContext = new SearchContext(); @@ -32,7 +32,7 @@ describe("Search", () => { expect(findNoteByTitle(searchResults, "Austria")).toBeTruthy(); }); - it.skip("normal search looks also at attributes", () => { + it("normal search looks also at attributes", () => { const austria = note("Austria"); const vienna = note("Vienna"); @@ -50,7 +50,7 @@ describe("Search", () => { expect(findNoteByTitle(searchResults, "Vienna")).toBeTruthy(); }); - it.skip("normal search looks also at type and mime", () => { + it("normal search looks also at type and mime", () => { rootNote.child(note("Effective Java", { type: "book", mime: "" })).child(note("Hello World.java", { type: "code", mime: "text/x-java" })); const searchContext = new SearchContext(); @@ -69,7 +69,7 @@ describe("Search", () => { expect(searchResults.length).toEqual(2); }); - it.skip("only end leafs are results", () => { + it("only end leafs are results", () => { rootNote.child(note("Europe").child(note("Austria"))); const searchContext = new SearchContext(); @@ -79,7 +79,7 @@ describe("Search", () => { expect(findNoteByTitle(searchResults, "Europe")).toBeTruthy(); }); - it.skip("only end leafs are results", () => { + it("only end leafs are results", () => { rootNote.child(note("Europe").child(note("Austria").label("capital", "Vienna"))); const searchContext = new SearchContext(); @@ -132,7 +132,7 @@ describe("Search", () => { expect(findNoteByTitle(searchResults, "Czech Republic")).toBeTruthy(); }); - it.skip("inherited label comparison", () => { + it("inherited label comparison", () => { rootNote.child(note("Europe").label("country", "", true).child(note("Austria")).child(note("Czech Republic"))); const searchContext = new SearchContext(); @@ -527,7 +527,7 @@ describe("Search", () => { expect(becca.notes[searchResults[0].noteId].title).toEqual("Europe"); }); - it.skip("test note.text *=* something", () => { + it("test note.text *=* something", () => { const italy = note("Italy").label("capital", "Rome"); const slovakia = note("Slovakia").label("capital", "Bratislava"); @@ -540,7 +540,7 @@ describe("Search", () => { expect(becca.notes[searchResults[0].noteId].title).toEqual("Slovakia"); }); - it.skip("test that fulltext does not match archived notes", () => { + it("test that fulltext does not match archived notes", () => { const italy = note("Italy").label("capital", "Rome"); const slovakia = note("Slovakia").label("capital", "Bratislava"); From a115214070f42a9be6b1fe766aeda909b7ea0e2d Mon Sep 17 00:00:00 2001 From: FliegendeWurst Date: Fri, 14 Feb 2025 09:40:38 +0100 Subject: [PATCH 54/77] Document some note, branch, tree routes --- bin/generate-openapi.js | 102 +++++++++++++++++++++++++++++++++++ src/routes/api/app_info.ts | 1 + src/routes/api/branches.ts | 45 ++++++++++++++++ src/routes/api/notes.ts | 108 +++++++++++++++++++++++++++++++++++++ src/routes/api/sync.ts | 1 + src/routes/api/tree.ts | 40 ++++++++++++++ 6 files changed, 297 insertions(+) diff --git a/bin/generate-openapi.js b/bin/generate-openapi.js index cbd88c014..3ec26b2c3 100644 --- a/bin/generate-openapi.js +++ b/bin/generate-openapi.js @@ -43,12 +43,78 @@ console.log(JSON.stringify(openapiSpecification)); * description: Authentication * - name: sync * description: Synchronization + * - name: data */ /** * @swagger * components: * schemas: + * Attribute: + * type: object + * properties: + * attributeId: + * type: string + * example: "4G1DPrI58PAb" + * noteId: + * $ref: "#/components/schemas/NoteId" + * type: + * type: string + * enum: ["attribute", "relation"] + * name: + * type: string + * example: "internalLink" + * value: + * type: string + * example: "hA8aHSpTRdZ6" + * description: "If type = \"relation\", a note ID. Otherwise, the attribute content." + * position: + * type: integer + * example: 20 + * isInheritable: + * type: boolean + * Blob: + * type: object + * properties: + * blobId: + * type: string + * example: "8iqMIB8eiY1tPYmElfjm" + * content: + * type: + * - string + * - 'null' + * description: "`null` if not text." + * contentLength: + * type: integer + * dateModified: + * $ref: "#/components/schemas/DateTime" + * utcDateModified: + * $ref: "#/components/schemas/UtcDateTime" + * Branch: + * type: object + * properties: + * branchId: + * $ref: "#/components/schemas/BranchId" + * noteId: + * $ref: "#/components/schemas/NoteId" + * parentNoteId: + * $ref: "#/components/schemas/NoteId" + * notePosition: + * type: integer + * example: 20 + * prefix: + * type: + * - string + * - 'null' + * isExpanded: + * type: boolean + * BranchId: + * type: string + * example: "WUjhaGp4EKah_ur11rSfHkzeV" + * description: Equal to `{parentNoteId}_{noteId}` + * DateTime: + * type: string + * example: "2025-02-14 08:19:59.203+0100" * EntityChange: * type: object * properties: @@ -66,9 +132,45 @@ console.log(JSON.stringify(openapiSpecification)); * entity: * type: object * description: Encoded entity data. Object has one property for each database column. + * Note: + * type: object + * properties: + * noteId: + * $ref: "#/components/schemas/NoteId" + * title: + * type: string + * isProtected: + * type: boolean + * type: + * type: string + * example: "text" + * enum: ["text", "code", "render", "file", "image", "search", "relationMap", "book", "noteMap", "mermaid", "canvas", "webView", "launcher", "doc", "contentWidget", "mindMap", "geoMap"] + * description: "[Reference list](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/note_types.ts)" + * mime: + * type: string + * example: "text/html" + * blobId: + * type: string + * example: "z4PhNX7vuL3xVChQ1m2A" + * NoteId: + * type: string + * example: "ur11rSfHkzeV" + * description: "12-character note ID. Special values: \"none\"`, `\"root\"." + * Timestamps: + * type: object + * properties: + * dateCreated: + * $ref: "#/components/schemas/DateTime" + * dateModified: + * $ref: "#/components/schemas/DateTime" + * utcDateCreated: + * $ref: "#/components/schemas/UtcDateTime" + * utcDateModified: + * $ref: "#/components/schemas/UtcDateTime" * UtcDateTime: * type: string * example: "2025-02-13T07:42:47.698Z" + * description: "Result of `new Date().toISOString().replace('T', ' ')`" * securitySchemes: * user-password: * type: apiKey diff --git a/src/routes/api/app_info.ts b/src/routes/api/app_info.ts index 560a52d1f..fb2f84aec 100644 --- a/src/routes/api/app_info.ts +++ b/src/routes/api/app_info.ts @@ -13,6 +13,7 @@ import appInfo from "../../services/app_info.js"; * url: https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/app_info.ts * responses: * '200': + * description: Installation info * content: * application/json: * schema: diff --git a/src/routes/api/branches.ts b/src/routes/api/branches.ts index b9c5f751d..b81d0cfc0 100644 --- a/src/routes/api/branches.ts +++ b/src/routes/api/branches.ts @@ -186,6 +186,51 @@ function setExpandedForSubtree(req: Request) { }; } +/** + * @swagger + * /api/branches/{branchId}: + * delete: + * summary: Delete branch (note clone) + * operationId: branches-delete + * parameters: + * - name: branchId + * in: path + * required: true + * schema: + * $ref: "#/components/schemas/BranchId" + * - name: taskId + * in: query + * required: true + * schema: + * type: string + * description: Task group identifier + * - name: eraseNotes + * in: query + * schema: + * type: boolean + * required: false + * description: Whether to erase the note immediately + * - name: last + * in: query + * schema: + * type: boolean + * required: true + * description: Whether this is the last request of this task group + * responses: + * '200': + * description: Branch successfully deleted + * content: + * application/json: + * schema: + * type: object + * properties: + * noteDeleted: + * type: boolean + * description: Whether the last note clone was deleted + * security: + * - session: [] + * tags: ["data"] + */ function deleteBranch(req: Request) { const last = req.query.last === "true"; const eraseNotes = req.query.eraseNotes === "true"; diff --git a/src/routes/api/notes.ts b/src/routes/api/notes.ts index 9f1dc5e41..853032938 100644 --- a/src/routes/api/notes.ts +++ b/src/routes/api/notes.ts @@ -14,14 +14,85 @@ import type { Request } from "express"; import type BBranch from "../../becca/entities/bbranch.js"; import type { AttributeRow } from "../../becca/entities/rows.js"; +/** + * @swagger + * /api/notes/{noteId}: + * get: + * summary: Retrieve note metadata + * operationId: notes-get + * parameters: + * - name: noteId + * in: path + * required: true + * schema: + * $ref: "#/components/schemas/NoteId" + * responses: + * '200': + * description: Note metadata + * content: + * application/json: + * schema: + * allOf: + * - $ref: '#/components/schemas/Note' + * - $ref: "#/components/schemas/Timestamps" + * security: + * - session: [] + * tags: ["data"] + */ function getNote(req: Request) { return becca.getNoteOrThrow(req.params.noteId); } +/** + * @swagger + * /api/notes/{noteId}/blob: + * get: + * summary: Retrieve note content + * operationId: notes-blob + * parameters: + * - name: noteId + * in: path + * required: true + * schema: + * $ref: "#/components/schemas/NoteId" + * responses: + * '304': + * description: Note content + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Blob' + * security: + * - session: [] + * tags: ["data"] + */ function getNoteBlob(req: Request) { return blobService.getBlobPojo("notes", req.params.noteId); } +/** + * @swagger + * /api/notes/{noteId}/metadata: + * get: + * summary: Retrieve note metadata (limited to timestamps) + * operationId: notes-metadata + * parameters: + * - name: noteId + * in: path + * required: true + * schema: + * $ref: "#/components/schemas/NoteId" + * responses: + * '200': + * description: Note metadata + * content: + * application/json: + * schema: + * $ref: "#/components/schemas/Timestamps" + * security: + * - session: [] + * tags: ["data"] + */ function getNoteMetadata(req: Request) { const note = becca.getNoteOrThrow(req.params.noteId); @@ -62,6 +133,43 @@ function updateNoteData(req: Request) { return noteService.updateNoteData(noteId, content, attachments); } +/** + * @swagger + * /api/notes/{noteId}: + * delete: + * summary: Delete note + * operationId: notes-delete + * parameters: + * - name: noteId + * in: path + * required: true + * schema: + * $ref: "#/components/schemas/NoteId" + * - name: taskId + * in: query + * required: true + * schema: + * type: string + * description: Task group identifier + * - name: eraseNotes + * in: query + * schema: + * type: boolean + * required: false + * description: Whether to erase the note immediately + * - name: last + * in: query + * schema: + * type: boolean + * required: true + * description: Whether this is the last request of this task group + * responses: + * '200': + * description: Note successfully deleted + * security: + * - session: [] + * tags: ["data"] + */ function deleteNote(req: Request) { const noteId = req.params.noteId; const taskId = req.query.taskId; diff --git a/src/routes/api/sync.ts b/src/routes/api/sync.ts index 49fc97fd0..736e1e97b 100644 --- a/src/routes/api/sync.ts +++ b/src/routes/api/sync.ts @@ -116,6 +116,7 @@ function forceFullSync() { * description: Marker to identify this request in server log * responses: * '200': + * description: Sync changes, limited to approximately one megabyte. * content: * application/json: * schema: diff --git a/src/routes/api/tree.ts b/src/routes/api/tree.ts index d90470993..610c82fde 100644 --- a/src/routes/api/tree.ts +++ b/src/routes/api/tree.ts @@ -127,6 +127,46 @@ function getNotesAndBranchesAndAttributes(_noteIds: string[] | Set) { }; } +/** + * @swagger + * /api/tree: + * get: + * summary: Retrieve tree data + * operationId: tree + * externalDocs: + * description: Server implementation + * url: https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/api/tree.ts + * parameters: + * - in: query + * name: subTreeNoteId + * required: false + * schema: + * type: string + * description: Limit tree data to this note and descendants + * responses: + * '200': + * description: Notes, branches and attributes + * content: + * application/json: + * schema: + * type: object + * properties: + * branches: + * type: list + * items: + * $ref: '#/components/schemas/Branch' + * notes: + * type: list + * items: + * $ref: '#/components/schemas/Note' + * attributes: + * type: list + * items: + * $ref: '#/components/schemas/Attribute' + * security: + * - session: [] + * tags: ["data"] + */ function getTree(req: Request) { const subTreeNoteId = typeof req.query.subTreeNoteId === "string" ? req.query.subTreeNoteId : "root"; const collectedNoteIds = new Set([subTreeNoteId]); From 70d6d375f98d6e5b846e987cd4dddb200e108390 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 11:04:28 +0200 Subject: [PATCH 55/77] chore(i18n/ro): fix translation for landscape --- src/public/translations/ro/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/public/translations/ro/translation.json b/src/public/translations/ro/translation.json index eabe682d1..a7515c183 100644 --- a/src/public/translations/ro/translation.json +++ b/src/public/translations/ro/translation.json @@ -231,7 +231,7 @@ "workspace_tab_background_color": "Culoare CSS ce va fi folosită în tab-urile ce aparțin spațiului de lucru", "workspace_template": "Această notița va apărea în lista de șabloane când se crează o nouă notiță, dar doar când spațiul de lucru în care se află notița este focalizat", "app_theme_base": "setați valoarea la „next” pentru a folosi drept temă de bază „TriliumNext” în loc de cea clasică.", - "print_landscape": "Schimbă orientarea paginii din portret în peisaj atunci când se exportă în PDF.", + "print_landscape": "Schimbă orientarea paginii din portret în vedere atunci când se exportă în PDF.", "print_page_size": "Schimbă dimensiunea paginii când se exportă în PDF. Valori suportate: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger." }, "attribute_editor": { From 568a84f5d2d2737fd669d6e5e87284e3dde94f05 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 13:45:40 +0200 Subject: [PATCH 56/77] feat(global-menu): add option to toggle zen mode --- src/public/app/widgets/buttons/global_menu.ts | 8 ++++++-- src/public/translations/en/translation.json | 3 ++- src/public/translations/ro/translation.json | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/public/app/widgets/buttons/global_menu.ts b/src/public/app/widgets/buttons/global_menu.ts index c7be1f964..7348a3e9c 100644 --- a/src/public/app/widgets/buttons/global_menu.ts +++ b/src/public/app/widgets/buttons/global_menu.ts @@ -133,7 +133,12 @@ const TPL = ` ${t("title_bar_buttons.window-on-top")} - + + + - @@ -256,6 +256,7 @@ export default class GlobalMenuWidget extends BasicWidget { private $updateToLatestVersionButton!: JQuery; private $zoomState!: JQuery; + private $toggleZenMode!: JQuery; constructor(isHorizontalLayout: boolean) { super(); @@ -363,13 +364,8 @@ export default class GlobalMenuWidget extends BasicWidget { } this.$zoomState = this.$widget.find(".zoom-state"); - this.$widget.on("show.bs.dropdown", () => { - this.updateZoomState(); - if (this.tooltip) { - this.tooltip.hide(); - this.tooltip.disable(); - } - }); + this.$toggleZenMode = this.$widget.find('[data-trigger-command="toggleZenMode"'); + this.$widget.on("show.bs.dropdown", () => this.#onShown()); if (this.tooltip) { this.$widget.on("hide.bs.dropdown", () => this.tooltip.enable()); } @@ -385,6 +381,15 @@ export default class GlobalMenuWidget extends BasicWidget { setInterval(() => this.updateVersionStatus(), 8 * 60 * 60 * 1000); } + #onShown() { + this.$toggleZenMode.toggleClass("active", $("body").hasClass("zen")); + this.updateZoomState(); + if (this.tooltip) { + this.tooltip.hide(); + this.tooltip.disable(); + } + } + updateZoomState() { if (!utils.isElectron()) { return; From e8f0af89544591f1adc6561199c154af44cedb84 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 17:39:03 +0200 Subject: [PATCH 60/77] feat(zen): hide some more buttons --- src/public/stylesheets/style.css | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index a6fea749e..9301d116c 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -1645,14 +1645,21 @@ body.electron.platform-darwin:not(.native-titlebar) .tab-row-container { border-radius: 4px; } +body.zen { + --tab-bar-height: 0; +} + body.zen .gutter, body.zen #launcher-container, +body.zen #launcher-pane > :not(.global-menu), body.zen #left-pane, body.zen #right-pane, body.zen .tab-row-container, +body.zen .tab-row-widget, body.zen .ribbon-container, body.zen .note-icon-widget, -body.zen .title-row .button-widget { +body.zen .title-row .button-widget, +body.zen .floating-buttons { display: none !important; } From 2c80607bfd27aa0b81ff74dadfbb19eebf14375a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 18:18:28 +0200 Subject: [PATCH 61/77] feat(zen): use dedicated floating button to stop zen mode --- src/public/app/components/app_context.ts | 1 + .../app/components/root_command_executor.ts | 5 ++- src/public/app/layouts/desktop_layout.js | 4 +- src/public/app/widgets/close_zen_button.ts | 43 +++++++++++++++++++ src/public/stylesheets/style.css | 2 +- 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/public/app/widgets/close_zen_button.ts diff --git a/src/public/app/components/app_context.ts b/src/public/app/components/app_context.ts index d6c7b8cc1..f54fd88fa 100644 --- a/src/public/app/components/app_context.ts +++ b/src/public/app/components/app_context.ts @@ -327,6 +327,7 @@ type EventMappings = { }; scrollToEnd: { ntxId: string }; noteTypeMimeChanged: { noteId: string }; + zenModeChanged: { isEnabled: boolean }; }; export type EventListener = { diff --git a/src/public/app/components/root_command_executor.ts b/src/public/app/components/root_command_executor.ts index 5f15ebe52..eb46e3139 100644 --- a/src/public/app/components/root_command_executor.ts +++ b/src/public/app/components/root_command_executor.ts @@ -179,7 +179,10 @@ export default class RootCommandExecutor extends Component { } toggleZenModeCommand() { - $("body").toggleClass("zen"); + const $body = $("body"); + $body.toggleClass("zen"); + const isEnabled = $body.hasClass("zen"); + appContext.triggerEvent("zenModeChanged", { isEnabled }); } firstTabCommand() { diff --git a/src/public/app/layouts/desktop_layout.js b/src/public/app/layouts/desktop_layout.js index e0f695803..1ece1c156 100644 --- a/src/public/app/layouts/desktop_layout.js +++ b/src/public/app/layouts/desktop_layout.js @@ -87,6 +87,7 @@ import options from "../services/options.js"; import utils from "../services/utils.js"; import GeoMapButtons from "../widgets/floating_buttons/geo_map_button.js"; import ContextualHelpButton from "../widgets/floating_buttons/help_button.js"; +import CloseZenButton from "../widgets/close_zen_button.js"; export default class DesktopLayout { constructor(customWidgets) { @@ -262,7 +263,8 @@ export default class DesktopLayout { .child(new DeleteNotesDialog()) .child(new InfoDialog()) .child(new ConfirmDialog()) - .child(new PromptDialog()); + .child(new PromptDialog()) + .child(new CloseZenButton()) } #buildLauncherPane(isHorizontal) { diff --git a/src/public/app/widgets/close_zen_button.ts b/src/public/app/widgets/close_zen_button.ts new file mode 100644 index 000000000..035104ebe --- /dev/null +++ b/src/public/app/widgets/close_zen_button.ts @@ -0,0 +1,43 @@ +import BasicWidget from "./basic_widget.js"; + +const TPL = `\ + +`; + +export default class CloseZenButton extends BasicWidget { + + doRender(): void { + this.$widget = $(TPL); + } + + zenChangedEvent() { + this.toggleInt(true); + } + +} diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index 9301d116c..3e5d78899 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -1651,7 +1651,7 @@ body.zen { body.zen .gutter, body.zen #launcher-container, -body.zen #launcher-pane > :not(.global-menu), +body.zen #launcher-pane, body.zen #left-pane, body.zen #right-pane, body.zen .tab-row-container, From e829abbad3b918a838ce0f3581f7e89e80b28b48 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 18:47:15 +0200 Subject: [PATCH 62/77] feat(zen): set up draggable regions --- src/public/app/widgets/close_zen_button.ts | 8 ++++++-- src/public/stylesheets/style.css | 12 ++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/public/app/widgets/close_zen_button.ts b/src/public/app/widgets/close_zen_button.ts index 035104ebe..8662aa1da 100644 --- a/src/public/app/widgets/close_zen_button.ts +++ b/src/public/app/widgets/close_zen_button.ts @@ -2,13 +2,16 @@ import BasicWidget from "./basic_widget.js"; const TPL = `\
- From ab7457cf90c476337f932f8fa2087971396d5f34 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 19:07:02 +0200 Subject: [PATCH 66/77] fix(next): transparency issue when background effects are off --- src/public/stylesheets/theme-next/shell.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/public/stylesheets/theme-next/shell.css b/src/public/stylesheets/theme-next/shell.css index 79d11c12d..d173476ac 100644 --- a/src/public/stylesheets/theme-next/shell.css +++ b/src/public/stylesheets/theme-next/shell.css @@ -1808,7 +1808,7 @@ div.bookmark-folder-widget .note-link .bx { color: var(--hover-item-text-color); } -body.zen { +body.background-effects.zen #root-widget { --main-background-color: transparent; --root-background: transparent; -} \ No newline at end of file +} From 137aa93451d2e7cbe49717bbd514a0fab62c3b9d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 19:07:13 +0200 Subject: [PATCH 67/77] fix(zen): not working properly when native titlebar is on --- src/public/app/widgets/close_zen_button.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/public/app/widgets/close_zen_button.ts b/src/public/app/widgets/close_zen_button.ts index 72e067209..175f24946 100644 --- a/src/public/app/widgets/close_zen_button.ts +++ b/src/public/app/widgets/close_zen_button.ts @@ -12,8 +12,8 @@ const TPL = `\ .close-zen-container { display: none; - width: var(--size); - height: var(--size); + width: var(--zen-button-size); + height: var(--zen-button-size); } body.zen .close-zen-container { @@ -26,8 +26,7 @@ const TPL = `\ } body.zen.electron:not(.native-titlebar) .close-zen-container { - --size: 32px; - left: calc(env(titlebar-area-width) - var(--size) - 2px); + left: calc(env(titlebar-area-width) - var(--zen-button-size) - 2px); right: unset; } From be39668488b5f4caeb3de84c619b5ea2636d46c8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 14 Feb 2025 19:45:57 +0200 Subject: [PATCH 68/77] feat(zen): add keyboard shortcut --- src/services/keyboard_actions.ts | 6 ++++++ src/services/keyboard_actions_interface.ts | 1 + translations/en/server.json | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/services/keyboard_actions.ts b/src/services/keyboard_actions.ts index 21745878d..1df14a264 100644 --- a/src/services/keyboard_actions.ts +++ b/src/services/keyboard_actions.ts @@ -238,6 +238,12 @@ function getDefaultKeyboardActions() { description: t("keyboard_actions.toggle-tray"), scope: "window" }, + { + actionName: "toggleZenMode", + defaultShortcuts: ["Alt+Z"], + description: t("keyboard_actions.toggle-zen-mode"), + scope: "window" + }, { actionName: "firstTab", defaultShortcuts: ["CommandOrControl+1"], diff --git a/src/services/keyboard_actions_interface.ts b/src/services/keyboard_actions_interface.ts index 9eb3539bd..2fc96665f 100644 --- a/src/services/keyboard_actions_interface.ts +++ b/src/services/keyboard_actions_interface.ts @@ -35,6 +35,7 @@ const enum KeyboardActionNamesEnum { activatePreviousTab, openNewWindow, toggleTray, + toggleZenMode, firstTab, secondTab, thirdTab, diff --git a/translations/en/server.json b/translations/en/server.json index 0560c5976..49e08bb99 100644 --- a/translations/en/server.json +++ b/translations/en/server.json @@ -92,7 +92,8 @@ "toggle-book-properties": "Toggle Book Properties", "toggle-classic-editor-toolbar": "Toggle the Formatting tab for the editor with fixed toolbar", "export-as-pdf": "Exports the current note as a PDF", - "show-cheatsheet": "Shows a modal with common keyboard operations" + "show-cheatsheet": "Shows a modal with common keyboard operations", + "toggle-zen-mode": "Enables/disables the zen mode (minimal UI for more focused editing)" }, "login": { "title": "Login", From 9d7f1a2d71565d1aef0165d7fdde6e336f76ab59 Mon Sep 17 00:00:00 2001 From: dousha Date: Sat, 15 Feb 2025 01:52:07 +0800 Subject: [PATCH 69/77] Allow removing weak branches even if it's hoisted --- src/becca/entities/bbranch.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/becca/entities/bbranch.ts b/src/becca/entities/bbranch.ts index 0160ef61b..018f8f2f7 100644 --- a/src/becca/entities/bbranch.ts +++ b/src/becca/entities/bbranch.ts @@ -159,7 +159,7 @@ class BBranch extends AbstractBeccaEntity { } } - if (this.noteId === "root" || this.noteId === cls.getHoistedNoteId()) { + if ((this.noteId === "root" || this.noteId === cls.getHoistedNoteId()) && !this.isWeak) { throw new Error("Can't delete root or hoisted branch/note"); } From 81d5d16e1aad305982f0919749e6098218350e2f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 15 Feb 2025 00:02:00 +0200 Subject: [PATCH 70/77] chore(bin): convert generate-openapi to typescript --- bin/{generate-openapi.js => generate-openapi.ts} | 0 package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename bin/{generate-openapi.js => generate-openapi.ts} (100%) diff --git a/bin/generate-openapi.js b/bin/generate-openapi.ts similarity index 100% rename from bin/generate-openapi.js rename to bin/generate-openapi.ts diff --git a/package.json b/package.json index 85f0d8940..7b8770288 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "integration-mem-db": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "integration-mem-db-dev": "cross-env TRILIUM_INTEGRATION_TEST=memory TRILIUM_PORT=8082 TRILIUM_ENV=dev TRILIUM_DATA_DIR=./integration-tests/db nodemon src/main.ts", "generate-document": "cross-env nodemon ./bin/generate_document.ts 1000", - "generate-openapi": "node bin/generate-openapi.js", + "generate-openapi": "tsx bin/generate-openapi.js", "ci-update-nightly-version": "tsx ./bin/update-nightly-version.ts", "prettier-check": "prettier . --check", "prettier-fix": "prettier . --write" From 9299f90b85a0c0f88ffcd2a0ac7e99254fa88d70 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 15 Feb 2025 00:25:23 +0200 Subject: [PATCH 71/77] feat(docs): internal API docs --- bin/copy-dist.ts | 7 ++++++- bin/generate-openapi.ts | 9 +++++++-- src/routes/api/openapi.json | 1 + src/routes/api_docs.ts | 24 +++++++++++++++++------- 4 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 src/routes/api/openapi.json diff --git a/bin/copy-dist.ts b/bin/copy-dist.ts index 85013e992..83a31bbf7 100644 --- a/bin/copy-dist.ts +++ b/bin/copy-dist.ts @@ -29,7 +29,12 @@ const copy = async () => { fs.copySync(path.join("build", srcFile), destFile, { recursive: true }); } - const filesToCopy = ["config-sample.ini", "tsconfig.webpack.json", "./src/etapi/etapi.openapi.yaml"]; + const filesToCopy = [ + "config-sample.ini", + "tsconfig.webpack.json", + "./src/etapi/etapi.openapi.yaml", + "./src/routes/api/openapi.json" + ]; for (const file of filesToCopy) { log(`Copying ${file}`); await fs.copy(file, path.join(DEST_DIR, file)); diff --git a/bin/generate-openapi.ts b/bin/generate-openapi.ts index 3ec26b2c3..4bd97a76f 100644 --- a/bin/generate-openapi.ts +++ b/bin/generate-openapi.ts @@ -1,4 +1,7 @@ +import { fileURLToPath } from "url"; +import { dirname, join } from "path"; import swaggerJsdoc from 'swagger-jsdoc'; +import fs from "fs"; /* * Usage: npm run generate-openapi | tail -n1 > x.json @@ -33,8 +36,10 @@ const options = { }; const openapiSpecification = swaggerJsdoc(options); - -console.log(JSON.stringify(openapiSpecification)); +const scriptDir = dirname(fileURLToPath(import.meta.url)); +const outputPath = join(scriptDir, "..", "src", "routes", "api", "openapi.json"); +fs.writeFileSync(outputPath, JSON.stringify(openapiSpecification)); +console.log("Saved to ", outputPath); /** * @swagger diff --git a/src/routes/api/openapi.json b/src/routes/api/openapi.json new file mode 100644 index 000000000..3034c7e13 --- /dev/null +++ b/src/routes/api/openapi.json @@ -0,0 +1 @@ +{"openapi":"3.1.1","info":{"title":"Trilium Notes - Sync server API","version":"0.96.6","description":"This is the internal sync server API used by Trilium Notes / TriliumNext Notes.\n\n_If you're looking for the officially supported External Trilium API, see [here](https://triliumnext.github.io/Docs/Wiki/etapi.html)._\n\nThis page does not yet list all routes. For a full list, see the [route controller](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/routes.ts).","contact":{"name":"TriliumNext issue tracker","url":"https://github.com/TriliumNext/Notes/issues"},"license":{"name":"GNU Free Documentation License 1.3 (or later)","url":"https://www.gnu.org/licenses/fdl-1.3"}},"paths":{"/api/setup/sync-seed":{"get":{"tags":["auth"],"summary":"Sync documentSecret value","description":"First step to logging in.","operationId":"setup-sync-seed","responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","properties":{"syncVersion":{"type":"integer","example":34},"options":{"type":"object","properties":{"documentSecret":{"type":"string"}}}}}}}}},"security":[{"user-password":[]}]}},"/api/app-info":{"get":{"summary":"Get installation info","operationId":"app-info","externalDocs":{"description":"Server implementation","url":"https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/app_info.ts"},"responses":{"200":{"description":"Installation info","content":{"application/json":{"schema":{"type":"object","properties":{"appVersion":{"type":"string","example":"0.91.6"},"dbVersion":{"type":"integer","example":228},"nodeVersion":{"type":"string","description":"value of process.version"},"syncVersion":{"type":"integer","example":34},"buildDate":{"type":"string","example":"2024-09-07T18:36:34Z"},"buildRevision":{"type":"string","example":"7c0d6930fa8f20d269dcfbcbc8f636a25f6bb9a7"},"dataDirectory":{"type":"string","example":"/var/lib/trilium"},"clipperProtocolVersion":{"type":"string","example":"1.0"},"utcDateTime":{"$ref":"#/components/schemas/UtcDateTime"}}}}}}},"security":[{"session":[]}]}},"/api/branches/{branchId}":{"delete":{"summary":"Delete branch (note clone)","operationId":"branches-delete","parameters":[{"name":"branchId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/BranchId"}},{"name":"taskId","in":"query","required":true,"schema":{"type":"string"},"description":"Task group identifier"},{"name":"eraseNotes","in":"query","schema":{"type":"boolean"},"required":false,"description":"Whether to erase the note immediately"},{"name":"last","in":"query","schema":{"type":"boolean"},"required":true,"description":"Whether this is the last request of this task group"}],"responses":{"200":{"description":"Branch successfully deleted","content":{"application/json":{"schema":{"type":"object","properties":{"noteDeleted":{"type":"boolean","description":"Whether the last note clone was deleted"}}}}}}},"security":[{"session":[]}],"tags":["data"]}},"/api/login/sync":{"post":{"tags":["auth"],"summary":"Log in using documentSecret","description":"The `hash` parameter is computed using a HMAC of the `documentSecret` and `timestamp`.","operationId":"login-sync","externalDocs":{"description":"HMAC calculation","url":"https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/utils.ts#L62-L66"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"timestamp":{"$ref":"#/components/schemas/UtcDateTime"},"hash":{"type":"string"},"syncVersion":{"type":"integer","example":34}}}}}},"responses":{"200":{"description":"Successful operation","content":{"application/json":{"schema":{"type":"object","properties":{"syncVersion":{"type":"integer","example":34},"options":{"type":"object","properties":{"documentSecret":{"type":"string"}}}}}}}},"400":{"description":"Sync version / document secret mismatch","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Non-matching sync versions, local is version ${server syncVersion}, remote is ${requested syncVersion}. It is recommended to run same version of Trilium on both sides of sync"}}}}}},"401":{"description":"Timestamp mismatch","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Auth request time is out of sync, please check that both client and server have correct time. The difference between clocks has to be smaller than 5 minutes"}}}}}}}}},"/api/notes/{noteId}":{"get":{"summary":"Retrieve note metadata","operationId":"notes-get","parameters":[{"name":"noteId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/NoteId"}}],"responses":{"200":{"description":"Note metadata","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Note"},{"$ref":"#/components/schemas/Timestamps"}]}}}}},"security":[{"session":[]}],"tags":["data"]},"delete":{"summary":"Delete note","operationId":"notes-delete","parameters":[{"name":"noteId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/NoteId"}},{"name":"taskId","in":"query","required":true,"schema":{"type":"string"},"description":"Task group identifier"},{"name":"eraseNotes","in":"query","schema":{"type":"boolean"},"required":false,"description":"Whether to erase the note immediately"},{"name":"last","in":"query","schema":{"type":"boolean"},"required":true,"description":"Whether this is the last request of this task group"}],"responses":{"200":{"description":"Note successfully deleted"}},"security":[{"session":[]}],"tags":["data"]}},"/api/notes/{noteId}/blob":{"get":{"summary":"Retrieve note content","operationId":"notes-blob","parameters":[{"name":"noteId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/NoteId"}}],"responses":{"304":{"description":"Note content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Blob"}}}}},"security":[{"session":[]}],"tags":["data"]}},"/api/notes/{noteId}/metadata":{"get":{"summary":"Retrieve note metadata (limited to timestamps)","operationId":"notes-metadata","parameters":[{"name":"noteId","in":"path","required":true,"schema":{"$ref":"#/components/schemas/NoteId"}}],"responses":{"200":{"description":"Note metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Timestamps"}}}}},"security":[{"session":[]}],"tags":["data"]}},"/api/sync/changed":{"get":{"summary":"Pull sync changes","operationId":"sync-changed","externalDocs":{"description":"Server implementation","url":"https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/api/sync.ts"},"parameters":[{"in":"query","name":"instanceId","required":true,"schema":{"type":"string"},"description":"Local instance ID"},{"in":"query","name":"lastEntityChangeId","required":true,"schema":{"type":"integer"},"description":"Last locally present change ID"},{"in":"query","name":"logMarkerId","required":true,"schema":{"type":"string"},"description":"Marker to identify this request in server log"}],"responses":{"200":{"description":"Sync changes, limited to approximately one megabyte.","content":{"application/json":{"schema":{"type":"object","properties":{"entityChanges":{"type":"list","items":{"$ref":"#/components/schemas/EntityChange"}},"lastEntityChangeId":{"type":"integer","description":"If `outstandingPullCount > 0`, pass this as parameter in your next request to continue."},"outstandingPullCount":{"type":"int","example":42,"description":"Number of changes not yet returned by the remote."}}}}}}},"security":[{"session":[]}],"tags":["sync"]}},"/api/sync/update":{"put":{"summary":"Push sync changes","description":"Basic usage: set `pageCount = 1`, `pageIndex = 0`, and omit `requestId`. Supply your entity changes in the request body.","operationId":"sync-update","externalDocs":{"description":"Server implementation","url":"https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/api/sync.ts"},"parameters":[{"in":"header","name":"pageCount","required":true,"schema":{"type":"integer"}},{"in":"header","name":"pageIndex","required":true,"schema":{"type":"integer"}},{"in":"header","name":"requestId","schema":{"type":"string","description":"ID to identify paginated requests"}},{"in":"query","name":"logMarkerId","required":true,"schema":{"type":"string"},"description":"Marker to identify this request in server log"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"instanceId":{"type":"string","description":"Local instance ID"},"entities":{"type":"list","items":{"$ref":"#/components/schemas/EntityChange"}}}}}}},"responses":{"200":{"description":"Changes processed successfully"}},"security":[{"session":[]}],"tags":["sync"]}},"/api/tree":{"get":{"summary":"Retrieve tree data","operationId":"tree","externalDocs":{"description":"Server implementation","url":"https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/api/tree.ts"},"parameters":[{"in":"query","name":"subTreeNoteId","required":false,"schema":{"type":"string"},"description":"Limit tree data to this note and descendants"}],"responses":{"200":{"description":"Notes, branches and attributes","content":{"application/json":{"schema":{"type":"object","properties":{"branches":{"type":"list","items":{"$ref":"#/components/schemas/Branch"}},"notes":{"type":"list","items":{"$ref":"#/components/schemas/Note"}},"attributes":{"type":"list","items":{"$ref":"#/components/schemas/Attribute"}}}}}}}},"security":[{"session":[]}],"tags":["data"]}}},"components":{},"tags":[]} \ No newline at end of file diff --git a/src/routes/api_docs.ts b/src/routes/api_docs.ts index 1535265c3..3df230feb 100644 --- a/src/routes/api_docs.ts +++ b/src/routes/api_docs.ts @@ -1,4 +1,4 @@ -import type { Router } from "express"; +import type { Application, Router } from "express"; import swaggerUi from "swagger-ui-express"; import { readFile } from "fs/promises"; import { fileURLToPath } from "url"; @@ -7,19 +7,29 @@ import yaml from "js-yaml"; import type { JsonObject } from "swagger-ui-express"; const __dirname = dirname(fileURLToPath(import.meta.url)); -const swaggerDocument = yaml.load( +const etapiDocument = yaml.load( await readFile(join(__dirname, "../etapi/etapi.openapi.yaml"), "utf8") ) as JsonObject; +const apiDocument = JSON.parse(await readFile(join(__dirname, "api", "openapi.json"), "utf-8")); -function register(router: Router) { - router.use( - "/etapi", - swaggerUi.serve, - swaggerUi.setup(swaggerDocument, { +function register(app: Application) { + app.use( + "/etapi/docs/", + swaggerUi.serveFiles(etapiDocument), + swaggerUi.setup(etapiDocument, { explorer: true, customSiteTitle: "TriliumNext ETAPI Documentation" }) ); + + app.use( + "/api/docs/", + swaggerUi.serveFiles(apiDocument), + swaggerUi.setup(apiDocument, { + explorer: true, + customSiteTitle: "TriliumNext Internal API Documentation" + }) + ); } export default { From ecb2c53c6f0af8898157004441bee9af8e71191a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 15 Feb 2025 01:02:24 +0200 Subject: [PATCH 72/77] feat(in_app_help): support webviews --- src/services/in_app_help.ts | 14 ++++++++++++++ src/services/meta/note_meta.ts | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/services/in_app_help.ts b/src/services/in_app_help.ts index 0af911684..fffbf7812 100644 --- a/src/services/in_app_help.ts +++ b/src/services/in_app_help.ts @@ -44,6 +44,15 @@ function parseNoteMeta(noteMeta: NoteMeta, docNameRoot: string): HiddenSubtreeIt for (const attribute of noteMeta.attributes ?? []) { if (attribute.name === "iconClass") { iconClass = attribute.value; + continue; + } + + if (attribute.name === "webViewSrc") { + item.attributes?.push({ + type: "label", + name: attribute.name, + value: attribute.value + }); } } @@ -64,6 +73,11 @@ function parseNoteMeta(noteMeta: NoteMeta, docNameRoot: string): HiddenSubtreeIt }); } + // Handle web views + if (noteMeta.type === "webView") { + item.type = "webView"; + } + // Handle children if (noteMeta.children) { const children: HiddenSubtreeItem[] = []; diff --git a/src/services/meta/note_meta.ts b/src/services/meta/note_meta.ts index 0aaafb6b5..681ca4f8c 100644 --- a/src/services/meta/note_meta.ts +++ b/src/services/meta/note_meta.ts @@ -1,3 +1,4 @@ +import type { NoteType } from "../../becca/entities/rows.js"; import type AttachmentMeta from "./attachment_meta.js"; import type AttributeMeta from "./attribute_meta.js"; @@ -15,7 +16,7 @@ export default interface NoteMeta { notePosition?: number; prefix?: string | null; isExpanded?: boolean; - type?: string; + type?: NoteType; mime?: string; /** 'html' or 'markdown', applicable to text notes only */ format?: "html" | "markdown"; From fc77f56516bd08360ef37f515cf94b3c81e7a2a3 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 15 Feb 2025 01:05:37 +0200 Subject: [PATCH 73/77] chore(in_app_help): update docs --- .../app/doc_notes/en/User Guide/!!!meta.json | 661 +++++++++++++++--- .../Custom resource providers.html | 56 ++ .../REST API/ETAPI/API Reference.dat | 0 .../REST API/Internal API/API Reference.dat | 0 .../1_Creating a custom theme_im.png} | Bin .../1_Customize the Next theme_i.png} | Bin .../2_Creating a custom theme_im.png} | Bin .../3_Creating a custom theme_im.png} | Bin .../4_Creating a custom theme_im.png} | Bin .../5_Creating a custom theme_im.png} | Bin .../Creating a custom theme.html | 14 +- .../Creating a custom theme_im.png} | Bin .../Customize the Next theme.html} | 8 +- .../Customize the Next theme_i.png} | Bin .../Theme development/Reference.html | 5 + .../1_Export as PDF_image.png} | Bin .../User Guide/Features/1_Zen mode_image.png | Bin 0 -> 8584 bytes .../2_Export as PDF_image.png} | Bin .../User Guide/Features/2_Zen mode_image.png | Bin 0 -> 16996 bytes .../User Guide/Features/3_Zen mode_image.png | Bin 0 -> 25929 bytes .../User Guide/Features/4_Zen mode_image.png | Bin 0 -> 127552 bytes .../User Guide/Features/5_Zen mode_image.png | Bin 0 -> 95276 bytes .../User Guide/Features/6_Zen mode_image.png | Bin 0 -> 1038 bytes .../User Guide/Features/7_Zen mode_image.png | Bin 0 -> 80489 bytes .../Export as PDF.html} | 19 +- .../Export as PDF_image.png} | Bin .../User Guide/Features/Zen mode.html | 73 ++ .../User Guide/Features/Zen mode_image.png | Bin 0 -> 94050 bytes .../User Guide/User Guide/Installation.html | 38 + .../1_On Fedora Linux_Screenshot.png | Bin 0 -> 45675 bytes .../Installation/1_On Fedora Linux_image.png | Bin 0 -> 1199 bytes .../2_On Fedora Linux_Screenshot.png | Bin 0 -> 11205 bytes .../Installation/2_On Fedora Linux_image.png | Bin 0 -> 1121 bytes .../3_On Fedora Linux_Screenshot.png | Bin 0 -> 34171 bytes .../Installation/On Fedora Linux.html | 82 +++ .../On Fedora Linux_Screenshot.png | Bin 0 -> 13286 bytes .../Installation/On Fedora Linux_image.png | Bin 0 -> 1123 bytes .../User Guide/Installation_Fedora_logo.svg | 10 + .../10_Geo map_image.png} | Bin .../11_Geo map_image.png} | Bin .../12_Geo map_image.png} | Bin .../13_Geo map_image.png | Bin .../14_Geo map_image.png} | Bin .../15_Geo map_image.png} | Bin .../16_Geo map_image.png} | Bin .../17_Geo map_image.png} | Bin .../18_Geo map_image.png} | Bin .../19_Geo map_image.png} | Bin .../1_Geo map_image.png} | Bin .../2_Geo map_image.png} | Bin .../3_Geo map_image.png} | Bin .../4_Geo map_image.png} | Bin .../5_Geo map_image.png} | Bin .../6_Geo map_image.png} | Bin .../7_Geo map_image.png} | Bin .../8_Geo map_image.png} | Bin .../9_Geo map_image.png} | Bin .../Geo map.html | 74 +- .../Geo map_image.png} | Bin .../Note Types/Mermaid Diagram.html | 19 + .../Downloading responses from Goo.html | 19 + .../1_Serving directly the conte.png | Bin 0 -> 6937 bytes .../Serving directly the conte.png | Bin 0 -> 10401 bytes .../Serving directly the content o.html | 60 ++ .../app/doc_notes/en/User Guide/index.html | 2 +- .../doc_notes/en/User Guide/navigation.html | 68 +- 66 files changed, 1076 insertions(+), 132 deletions(-) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Custom resource providers.html create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/REST API/ETAPI/API Reference.dat create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/REST API/Internal API/API Reference.dat rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/2_Creating a custom theme_im.png => Advanced usage/Theme development/1_Creating a custom theme_im.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/Theme base (legacy vs. nex.png => Advanced usage/Theme development/1_Customize the Next theme_i.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/4_Creating a custom theme_im.png => Advanced usage/Theme development/2_Creating a custom theme_im.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/1_Creating a custom theme_im.png => Advanced usage/Theme development/3_Creating a custom theme_im.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/5_Creating a custom theme_im.png => Advanced usage/Theme development/4_Creating a custom theme_im.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/Creating a custom theme_im.png => Advanced usage/Theme development/5_Creating a custom theme_im.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users => Advanced usage}/Theme development/Creating a custom theme.html (87%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/3_Creating a custom theme_im.png => Advanced usage/Theme development/Creating a custom theme_im.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/Theme base (legacy vs. next).html => Advanced usage/Theme development/Customize the Next theme.html} (78%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users/Theme development/1_Theme base (legacy vs. nex.png => Advanced usage/Theme development/Customize the Next theme_i.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Power users => Advanced usage}/Theme development/Reference.html (93%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Working with notes/2_Exporting as PDF_image.png => Features/1_Export as PDF_image.png} (100%) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/1_Zen mode_image.png rename src/public/app/doc_notes/en/User Guide/User Guide/{Working with notes/Exporting as PDF_image.png => Features/2_Export as PDF_image.png} (100%) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/2_Zen mode_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/3_Zen mode_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/4_Zen mode_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/5_Zen mode_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/6_Zen mode_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/7_Zen mode_image.png rename src/public/app/doc_notes/en/User Guide/User Guide/{Working with notes/Exporting as PDF.html => Features/Export as PDF.html} (78%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Working with notes/1_Exporting as PDF_image.png => Features/Export as PDF_image.png} (100%) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode.html create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Features/Zen mode_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation.html create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/1_On Fedora Linux_Screenshot.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/1_On Fedora Linux_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/2_On Fedora Linux_Screenshot.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/2_On Fedora Linux_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/3_On Fedora Linux_Screenshot.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux.html create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux_Screenshot.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux_image.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Installation_Fedora_logo.svg rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/Geo map_image.png => Note Types/10_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/3_Geo map_image.png => Note Types/11_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/9_Geo map_image.png => Note Types/12_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes => Note Types}/13_Geo map_image.png (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/4_Geo map_image.png => Note Types/14_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/19_Geo map_image.png => Note Types/15_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/8_Geo map_image.png => Note Types/16_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/12_Geo map_image.png => Note Types/17_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/10_Geo map_image.png => Note Types/18_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/11_Geo map_image.png => Note Types/19_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/5_Geo map_image.png => Note Types/1_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/14_Geo map_image.png => Note Types/2_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/1_Geo map_image.png => Note Types/3_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/7_Geo map_image.png => Note Types/4_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/2_Geo map_image.png => Note Types/5_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/18_Geo map_image.png => Note Types/6_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/6_Geo map_image.png => Note Types/7_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/17_Geo map_image.png => Note Types/8_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/15_Geo map_image.png => Note Types/9_Geo map_image.png} (100%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes => Note Types}/Geo map.html (80%) rename src/public/app/doc_notes/en/User Guide/User Guide/{Types of notes/16_Geo map_image.png => Note Types/Geo map_image.png} (100%) create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagram.html create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/1_Serving directly the conte.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/Serving directly the conte.png create mode 100644 src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/Serving directly the content o.html diff --git a/src/public/app/doc_notes/en/User Guide/!!!meta.json b/src/public/app/doc_notes/en/User Guide/!!!meta.json index ffee6a973..f7ee2b545 100644 --- a/src/public/app/doc_notes/en/User Guide/!!!meta.json +++ b/src/public/app/doc_notes/en/User Guide/!!!meta.json @@ -1,6 +1,6 @@ { "formatVersion": 2, - "appVersion": "0.91.5", + "appVersion": "0.91.6-test-250214-024424", "files": [ { "isClone": false, @@ -11,7 +11,7 @@ "title": "User Guide", "notePosition": 20, "prefix": null, - "isExpanded": false, + "isExpanded": true, "type": "text", "mime": "text/html", "attributes": [ @@ -29,22 +29,326 @@ "children": [ { "isClone": false, - "noteId": "wmegHv51MJMd", + "noteId": "jrai60LsOhdk", "notePath": [ "OkOZllzB3fqN", - "wmegHv51MJMd" + "jrai60LsOhdk" ], - "title": "Types of notes", + "title": "Installation", "notePosition": 20, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "KPeRqBU7YSAY", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "hideChildrenOverview", + "value": "", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Installation.html", + "attachments": [ + { + "attachmentId": "Mp9RaDeLtETz", + "title": "Fedora_logo.svg", + "role": "image", + "mime": "image/svg+xml", + "position": 10, + "dataFileName": "Installation_Fedora_logo.svg" + } + ], + "dirFileName": "Installation", + "children": [ + { + "isClone": false, + "noteId": "KPeRqBU7YSAY", + "notePath": [ + "OkOZllzB3fqN", + "jrai60LsOhdk", + "KPeRqBU7YSAY" + ], + "title": "On Fedora Linux", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bxl-tux", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "On Fedora Linux.html", + "attachments": [ + { + "attachmentId": "YHD8kyEhgkyZ", + "title": "Screenshot From 2025-02-05 19-30-50.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "On Fedora Linux_Screenshot.png" + }, + { + "attachmentId": "0CpZ5v5xUMia", + "title": "Screenshot From 2025-02-05 19-35-45.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_On Fedora Linux_Screenshot.png" + }, + { + "attachmentId": "9u7nBYvUbXJW", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "On Fedora Linux_image.png" + }, + { + "attachmentId": "ipGBq0moRvF3", + "title": "Screenshot From 2025-02-05 19-36-27.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "2_On Fedora Linux_Screenshot.png" + }, + { + "attachmentId": "fa83WbDUIB4G", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_On Fedora Linux_image.png" + }, + { + "attachmentId": "kcCWr0YXytOU", + "title": "Screenshot From 2025-02-05 19-30-30.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "3_On Fedora Linux_Screenshot.png" + }, + { + "attachmentId": "YF3JZy1qz7Fq", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "2_On Fedora Linux_image.png" + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "yoAe4jV2yzbd", + "notePath": [ + "OkOZllzB3fqN", + "yoAe4jV2yzbd" + ], + "title": "Features", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", "attributes": [], "format": "html", "attachments": [], - "dirFileName": "Types of notes", + "dirFileName": "Features", "children": [ + { + "isClone": false, + "noteId": "13D1lOc9sqmZ", + "notePath": [ + "OkOZllzB3fqN", + "yoAe4jV2yzbd", + "13D1lOc9sqmZ" + ], + "title": "Export as PDF", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Export as PDF.html", + "attachments": [ + { + "attachmentId": "xsGM34t8ssKV", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Export as PDF_image.png" + }, + { + "attachmentId": "cvyes4f1Vhmm", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Export as PDF_image.png" + }, + { + "attachmentId": "b3v1pLE6TF1Y", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "2_Export as PDF_image.png" + } + ] + }, + { + "isClone": false, + "noteId": "B3YLYM4erjnW", + "notePath": [ + "OkOZllzB3fqN", + "yoAe4jV2yzbd", + "B3YLYM4erjnW" + ], + "title": "Zen mode", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Zen mode.html", + "attachments": [ + { + "attachmentId": "TS5MS8fQ8Rfr", + "title": "image.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Zen mode_image.png" + }, + { + "attachmentId": "cswryNtIFZHy", + "title": "image.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "1_Zen mode_image.png" + }, + { + "attachmentId": "UDk4M7uiTE7w", + "title": "image.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "2_Zen mode_image.png" + }, + { + "attachmentId": "sQldbByAmE0k", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "3_Zen mode_image.png" + }, + { + "attachmentId": "DzrJD3hXJwXJ", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "4_Zen mode_image.png" + }, + { + "attachmentId": "HeGfp8wObFO5", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "5_Zen mode_image.png" + }, + { + "attachmentId": "uWsrFwgfypsS", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "6_Zen mode_image.png" + }, + { + "attachmentId": "hX8xmbxgSNFh", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "7_Zen mode_image.png" + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "wmegHv51MJMd", + "notePath": [ + "OkOZllzB3fqN", + "wmegHv51MJMd" + ], + "title": "Note Types", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Note Types", + "children": [ + { + "isClone": false, + "noteId": "TTWESa9YFyB4", + "notePath": [ + "OkOZllzB3fqN", + "wmegHv51MJMd", + "TTWESa9YFyB4" + ], + "title": "Mermaid Diagram", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-shape-square", + "isInheritable": false, + "position": 10 + } + ], + "format": "html", + "dataFileName": "Mermaid Diagram.html", + "attachments": [] + }, { "isClone": false, "noteId": "foPEtsL51pD2", @@ -54,7 +358,7 @@ "foPEtsL51pD2" ], "title": "Geo map", - "notePosition": 10, + "notePosition": 20, "prefix": null, "isExpanded": false, "type": "text", @@ -72,7 +376,7 @@ "dataFileName": "Geo map.html", "attachments": [ { - "attachmentId": "viN50n5G4kB0", + "attachmentId": "J0baLTpafs7C", "title": "image.png", "role": "image", "mime": "image/png", @@ -80,7 +384,7 @@ "dataFileName": "Geo map_image.png" }, { - "attachmentId": "eUrcqc8RRuZG", + "attachmentId": "kcYjOvJDFkbS", "title": "image.png", "role": "image", "mime": "image/png", @@ -88,7 +392,7 @@ "dataFileName": "1_Geo map_image.png" }, { - "attachmentId": "1quk4yxJpeHZ", + "attachmentId": "FDP3JzIVSnuJ", "title": "image.png", "role": "image", "mime": "image/png", @@ -96,7 +400,7 @@ "dataFileName": "2_Geo map_image.png" }, { - "attachmentId": "mgwGrtQZjxxb", + "attachmentId": "eUrcqc8RRuZG", "title": "image.png", "role": "image", "mime": "image/png", @@ -104,7 +408,7 @@ "dataFileName": "3_Geo map_image.png" }, { - "attachmentId": "JULizn130rVI", + "attachmentId": "0AwaQMqt3FVA", "title": "image.png", "role": "image", "mime": "image/png", @@ -112,7 +416,7 @@ "dataFileName": "4_Geo map_image.png" }, { - "attachmentId": "kcYjOvJDFkbS", + "attachmentId": "1quk4yxJpeHZ", "title": "image.png", "role": "image", "mime": "image/png", @@ -120,7 +424,7 @@ "dataFileName": "5_Geo map_image.png" }, { - "attachmentId": "ut6vm2aXVfXI", + "attachmentId": "iSpyhQ5Ya6Nk", "title": "image.png", "role": "image", "mime": "image/png", @@ -128,7 +432,7 @@ "dataFileName": "6_Geo map_image.png" }, { - "attachmentId": "0AwaQMqt3FVA", + "attachmentId": "ut6vm2aXVfXI", "title": "image.png", "role": "image", "mime": "image/png", @@ -136,7 +440,7 @@ "dataFileName": "7_Geo map_image.png" }, { - "attachmentId": "gFR2Izzp18LQ", + "attachmentId": "uYdb9wWf5Nuv", "title": "image.png", "role": "image", "mime": "image/png", @@ -144,7 +448,7 @@ "dataFileName": "8_Geo map_image.png" }, { - "attachmentId": "PMqmCbNLlZOG", + "attachmentId": "GhHYO2LteDmZ", "title": "image.png", "role": "image", "mime": "image/png", @@ -152,7 +456,7 @@ "dataFileName": "9_Geo map_image.png" }, { - "attachmentId": "pKdtiq4r0eFY", + "attachmentId": "viN50n5G4kB0", "title": "image.png", "role": "image", "mime": "image/png", @@ -160,7 +464,7 @@ "dataFileName": "10_Geo map_image.png" }, { - "attachmentId": "FXRVvYpOxWyR", + "attachmentId": "mgwGrtQZjxxb", "title": "image.png", "role": "image", "mime": "image/png", @@ -168,7 +472,7 @@ "dataFileName": "11_Geo map_image.png" }, { - "attachmentId": "42AncDs7SSAf", + "attachmentId": "PMqmCbNLlZOG", "title": "image.png", "role": "image", "mime": "image/png", @@ -184,7 +488,7 @@ "dataFileName": "13_Geo map_image.png" }, { - "attachmentId": "FDP3JzIVSnuJ", + "attachmentId": "JULizn130rVI", "title": "image.png", "role": "image", "mime": "image/png", @@ -192,7 +496,7 @@ "dataFileName": "14_Geo map_image.png" }, { - "attachmentId": "GhHYO2LteDmZ", + "attachmentId": "MdC0DpifJwu4", "title": "image.png", "role": "image", "mime": "image/png", @@ -200,7 +504,7 @@ "dataFileName": "15_Geo map_image.png" }, { - "attachmentId": "J0baLTpafs7C", + "attachmentId": "gFR2Izzp18LQ", "title": "image.png", "role": "image", "mime": "image/png", @@ -208,7 +512,7 @@ "dataFileName": "16_Geo map_image.png" }, { - "attachmentId": "uYdb9wWf5Nuv", + "attachmentId": "42AncDs7SSAf", "title": "image.png", "role": "image", "mime": "image/png", @@ -216,7 +520,7 @@ "dataFileName": "17_Geo map_image.png" }, { - "attachmentId": "iSpyhQ5Ya6Nk", + "attachmentId": "pKdtiq4r0eFY", "title": "image.png", "role": "image", "mime": "image/png", @@ -224,7 +528,7 @@ "dataFileName": "18_Geo map_image.png" }, { - "attachmentId": "MdC0DpifJwu4", + "attachmentId": "FXRVvYpOxWyR", "title": "image.png", "role": "image", "mime": "image/png", @@ -237,13 +541,13 @@ }, { "isClone": false, - "noteId": "BDEpqZHDS51s", + "noteId": "BhLd0mxKn0gY", "notePath": [ "OkOZllzB3fqN", - "BDEpqZHDS51s" + "BhLd0mxKn0gY" ], - "title": "Working with notes", - "notePosition": 30, + "title": "Shared notes", + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -251,17 +555,17 @@ "attributes": [], "format": "html", "attachments": [], - "dirFileName": "Working with notes", + "dirFileName": "Shared notes", "children": [ { "isClone": false, - "noteId": "13D1lOc9sqmZ", + "noteId": "1DtQ2mHreeOI", "notePath": [ "OkOZllzB3fqN", - "BDEpqZHDS51s", - "13D1lOc9sqmZ" + "BhLd0mxKn0gY", + "1DtQ2mHreeOI" ], - "title": "Exporting as PDF", + "title": "Serving directly the content of a note", "notePosition": 10, "prefix": null, "isExpanded": false, @@ -269,31 +573,23 @@ "mime": "text/html", "attributes": [], "format": "html", - "dataFileName": "Exporting as PDF.html", + "dataFileName": "Serving directly the content o.html", "attachments": [ { - "attachmentId": "b3v1pLE6TF1Y", + "attachmentId": "2zgbdi7zMieM", "title": "image.png", "role": "image", - "mime": "image/png", + "mime": "image/jpg", "position": 10, - "dataFileName": "Exporting as PDF_image.png" + "dataFileName": "Serving directly the conte.png" }, { - "attachmentId": "xsGM34t8ssKV", + "attachmentId": "DsKDaFOcumH6", "title": "image.png", "role": "image", - "mime": "image/png", + "mime": "image/jpg", "position": 10, - "dataFileName": "1_Exporting as PDF_image.png" - }, - { - "attachmentId": "cvyes4f1Vhmm", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "2_Exporting as PDF_image.png" + "dataFileName": "1_Serving directly the conte.png" } ] } @@ -301,28 +597,89 @@ }, { "isClone": false, - "noteId": "XUG1egT28FBk", + "noteId": "LTnkDnYmmZ7s", "notePath": [ "OkOZllzB3fqN", - "XUG1egT28FBk" + "LTnkDnYmmZ7s" ], - "title": "Power users", - "notePosition": 50, + "title": "Scripting", + "notePosition": 110, "prefix": null, - "isExpanded": true, + "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [], "format": "html", "attachments": [], - "dirFileName": "Power users", + "dirFileName": "Scripting", + "children": [ + { + "isClone": false, + "noteId": "cTWlUHkiv1fB", + "notePath": [ + "OkOZllzB3fqN", + "LTnkDnYmmZ7s", + "cTWlUHkiv1fB" + ], + "title": "Examples", + "notePosition": 10, + "prefix": null, + "isExpanded": true, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Examples", + "children": [ + { + "isClone": false, + "noteId": "g5Vta7jt3aq3", + "notePath": [ + "OkOZllzB3fqN", + "LTnkDnYmmZ7s", + "cTWlUHkiv1fB", + "g5Vta7jt3aq3" + ], + "title": "Downloading responses from Google Forms", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Downloading responses from Goo.html", + "attachments": [] + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "m4Paddd5qnnQ", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ" + ], + "title": "Advanced usage", + "notePosition": 120, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Advanced usage", "children": [ { "isClone": false, "noteId": "DtJJ20yEozPA", "notePath": [ "OkOZllzB3fqN", - "XUG1egT28FBk", + "m4Paddd5qnnQ", "DtJJ20yEozPA" ], "title": "Theme development", @@ -349,7 +706,7 @@ "noteId": "5HH79ztN0fZA", "notePath": [ "OkOZllzB3fqN", - "XUG1egT28FBk", + "m4Paddd5qnnQ", "DtJJ20yEozPA", "5HH79ztN0fZA" ], @@ -372,7 +729,7 @@ "dataFileName": "Creating a custom theme.html", "attachments": [ { - "attachmentId": "bn93hwF7C8sR", + "attachmentId": "AJHVfQtIQgJ7", "title": "image.png", "role": "image", "mime": "image/png", @@ -380,7 +737,7 @@ "dataFileName": "Creating a custom theme_im.png" }, { - "attachmentId": "17p6z24yW5eP", + "attachmentId": "gXLyv5KXjfxg", "title": "image.png", "role": "image", "mime": "image/png", @@ -388,7 +745,7 @@ "dataFileName": "1_Creating a custom theme_im.png" }, { - "attachmentId": "gXLyv5KXjfxg", + "attachmentId": "on1gD7BzCWdN", "title": "image.png", "role": "image", "mime": "image/png", @@ -396,7 +753,7 @@ "dataFileName": "2_Creating a custom theme_im.png" }, { - "attachmentId": "AJHVfQtIQgJ7", + "attachmentId": "17p6z24yW5eP", "title": "image.png", "role": "image", "mime": "image/png", @@ -404,7 +761,7 @@ "dataFileName": "3_Creating a custom theme_im.png" }, { - "attachmentId": "on1gD7BzCWdN", + "attachmentId": "K3cdwj8f90m0", "title": "image.png", "role": "image", "mime": "image/png", @@ -412,7 +769,7 @@ "dataFileName": "4_Creating a custom theme_im.png" }, { - "attachmentId": "K3cdwj8f90m0", + "attachmentId": "bn93hwF7C8sR", "title": "image.png", "role": "image", "mime": "image/png", @@ -426,11 +783,11 @@ "noteId": "aH8Dk5aMiq7R", "notePath": [ "OkOZllzB3fqN", - "XUG1egT28FBk", + "m4Paddd5qnnQ", "DtJJ20yEozPA", "aH8Dk5aMiq7R" ], - "title": "Theme base (legacy vs. next)", + "title": "Customize the Next theme", "notePosition": 20, "prefix": null, "isExpanded": false, @@ -438,23 +795,23 @@ "mime": "text/html", "attributes": [], "format": "html", - "dataFileName": "Theme base (legacy vs. next).html", + "dataFileName": "Customize the Next theme.html", "attachments": [ - { - "attachmentId": "u0zkXkD7rGXA", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Theme base (legacy vs. nex.png" - }, { "attachmentId": "5z4bC0x0eH0P", "title": "image.png", "role": "image", "mime": "image/png", "position": 10, - "dataFileName": "1_Theme base (legacy vs. nex.png" + "dataFileName": "Customize the Next theme_i.png" + }, + { + "attachmentId": "u0zkXkD7rGXA", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Customize the Next theme_i.png" } ] }, @@ -463,7 +820,7 @@ "noteId": "pMq6N1oBV9oo", "notePath": [ "OkOZllzB3fqN", - "XUG1egT28FBk", + "m4Paddd5qnnQ", "DtJJ20yEozPA", "pMq6N1oBV9oo" ], @@ -473,12 +830,160 @@ "isExpanded": false, "type": "text", "mime": "text/html", - "attributes": [], + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "po38jIc0LD2H", + "isInheritable": false, + "position": 10 + } + ], "format": "html", "dataFileName": "Reference.html", "attachments": [] } ] + }, + { + "isClone": false, + "noteId": "po38jIc0LD2H", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ", + "po38jIc0LD2H" + ], + "title": "Custom resource providers", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "dataFileName": "Custom resource providers.html", + "attachments": [] + }, + { + "isClone": false, + "noteId": "rGq9oI9hWwGf", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ", + "rGq9oI9hWwGf" + ], + "title": "REST API", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "REST API", + "children": [ + { + "isClone": false, + "noteId": "sztusxU10ADE", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ", + "rGq9oI9hWwGf", + "sztusxU10ADE" + ], + "title": "ETAPI", + "notePosition": 10, + "prefix": null, + "isExpanded": true, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "ETAPI", + "children": [ + { + "isClone": false, + "noteId": "f3xpgx6H01PW", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ", + "rGq9oI9hWwGf", + "sztusxU10ADE", + "f3xpgx6H01PW" + ], + "title": "API Reference", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "webView", + "mime": "", + "attributes": [ + { + "type": "label", + "name": "webViewSrc", + "value": "/etapi/docs", + "isInheritable": false, + "position": 10 + } + ], + "dataFileName": "API Reference.dat", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "9OiEC6pf3Wfv", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ", + "rGq9oI9hWwGf", + "9OiEC6pf3Wfv" + ], + "title": "Internal API", + "notePosition": 20, + "prefix": null, + "isExpanded": true, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "html", + "attachments": [], + "dirFileName": "Internal API", + "children": [ + { + "isClone": false, + "noteId": "7uB5k0iCmOtZ", + "notePath": [ + "OkOZllzB3fqN", + "m4Paddd5qnnQ", + "rGq9oI9hWwGf", + "9OiEC6pf3Wfv", + "7uB5k0iCmOtZ" + ], + "title": "API Reference", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "webView", + "mime": "", + "attributes": [ + { + "type": "label", + "name": "webViewSrc", + "value": "/api/docs", + "isInheritable": false, + "position": 10 + } + ], + "dataFileName": "API Reference.dat", + "attachments": [] + } + ] + } + ] } ] } diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Custom resource providers.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Custom resource providers.html new file mode 100644 index 000000000..e847d0808 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Custom resource providers.html @@ -0,0 +1,56 @@ + + + + + + + + Custom resource providers + + + +
+

Custom resource providers

+ +
+

A custom resource provider allows any file imported into Trilium (images, + fonts, stylesheets) to be publicly accessible via a URL.

+

A potential use case for this is to add embed a custom font alongside + a theme.

+

Steps for creating a custom resource provider

+
    +
  1. Import a file such as an image or a font into Trilium by drag & drop.
  2. +
  3. Select the file and go to the Owned Attributes section.
  4. +
  5. Add the label #customResourceProvider=hello.
  6. +
  7. To test if it is working, use a browser to navigate to <protocol>://<host>/custom/hello (where <protocol> is + either http or https based on your setup, and <host> is + the host or IP to your Trilium server instance). If you are running the + TriliumNext application without a server, use http://localhost:37840 as + the base URL.
  8. +
  9. If everything went well, at the previous step the browser should have + downloaded the file uploaded in the first step.
  10. +
+

Instead of hello, the name can be:

+
    +
  • A path, such as fonts/Roboto.ttf, which would be accessible + via <host>/custom/fonts/Roboto.ttf.
  • +
  • As a more advanced use case, a regular expression to match multiple routes, + such as hello/.* which will be accessible via /custom/hello/1, /custom/hello/2, /custom/hello/world, + etc.
  • +
+

Using it in a theme

+

For example, if you have a custom font to be imported by the theme, first + upload a font file into Trilium and assign it the #customResourceProvider=fonts/myfont.ttf attribute.

+

Then modify the theme CSS to point to:

@font-face {
+	font-family: customFont;
+	src: url("/custom/fonts/myfont.ttf");
+}
+
+div {
+	font-family: customFont;
+}
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/REST API/ETAPI/API Reference.dat b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/REST API/ETAPI/API Reference.dat new file mode 100644 index 000000000..e69de29bb diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/REST API/Internal API/API Reference.dat b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/REST API/Internal API/API Reference.dat new file mode 100644 index 000000000..e69de29bb diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/2_Creating a custom theme_im.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/1_Creating a custom theme_im.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/2_Creating a custom theme_im.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/1_Creating a custom theme_im.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Theme base (legacy vs. nex.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/1_Customize the Next theme_i.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Theme base (legacy vs. nex.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/1_Customize the Next theme_i.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/4_Creating a custom theme_im.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/2_Creating a custom theme_im.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/4_Creating a custom theme_im.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/2_Creating a custom theme_im.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/1_Creating a custom theme_im.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/3_Creating a custom theme_im.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/1_Creating a custom theme_im.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/3_Creating a custom theme_im.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/5_Creating a custom theme_im.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/4_Creating a custom theme_im.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/5_Creating a custom theme_im.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/4_Creating a custom theme_im.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Creating a custom theme_im.png b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/5_Creating a custom theme_im.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Creating a custom theme_im.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/5_Creating a custom theme_im.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Creating a custom theme.html b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Creating a custom theme.html similarity index 87% rename from src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Creating a custom theme.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Creating a custom theme.html index e4d1eeda4..d2dc5fea7 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Power users/Theme development/Creating a custom theme.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Advanced usage/Theme development/Creating a custom theme.html @@ -19,7 +19,7 @@ keep them into one place.

As such, the first step is to create a new note to gather all the themes.

- +

Step 2. Create the theme

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

Fedora +

+
+ +

Self-hosted server

+ + + + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation/1_On Fedora Linux_Screenshot.png b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/1_On Fedora Linux_Screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d519f9b75ac6f6f2243bb13769d9e8d81a94c19e GIT binary patch literal 45675 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%0D)xiE|{;~ht_KF?WIf4$<1`|#mY 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 N002ovPDHLkV1nRuOt1g| literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation/2_On Fedora Linux_Screenshot.png b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/2_On Fedora Linux_Screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d7370a422124323846cbf969aed114ad8e04d271 GIT binary patch literal 11205 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 i|KC?k|4;bv}bCTT9$Y!~>Crrbs9u2omDK zg9nL-H1QxjNF+o;+$upxL`VpUOVJXQpi0rYx3t>rcGvFCZrAzF+SQ7>rR|*M{FBYj znVmW3o9{Q@cg~)fqxk*)5WcFk!h_4zUOfL8fEJAGmEXPT0h0m9PB&skP8=4EvqhU$ z2-Mq_Ahw)!qPjlNn>NX|e&K#D+xH5hFgBkP_bm5|sFixP=mw1QjD5h!Hb& zkEo+7`=DZTCej^j?xY)Jw;DRBpqdR3kqvr=N+JOXj8gNi{ustnQ$?`|3`u z>5H@LGP=83-Rt}3KpfKY-&9L!s6U&8JYDI*!hAbY>;~L??#1@=Eok$# zgOb{^Ne;{zX+vL@E*o4yRKD_~Z+*qVO?n>n~An!{#ZM*(o8TL z71Vstu;+>s_h0+}#zbAt5i+8((oI-B)qz)^0#F#4nZvADKH0$?G%MGJwbK*e_J(k* zybbqW`q1DE&#oN3-3AYPYU2-tu>V>s&Oh+*bF%uFkZ4so@T&KI{amYw8^5`N(zM}*M-Vi?a2~sHf3>tV+uVK#adfsQ1J@aDR zU<>vvPWx#Z+cYZ)Yo;aO#xoyQ9sY;|W#6JrU^bmh6CTv}jx?$Y?}yG*y0P&@6K=im z!fH}5AUT{I0xT0+SlPnTUqtx~Cc!Q(ckzBt3w9vip#ka-J4z(y2%Gx82NWqUU?aiV zBW!#`NADNp53<1R3!%1ABVXqY@C4%-V;IK-28-FVX+K)*x-cFa#j^?MD4W9*%( zZ}x=yxfN`{a$qmJBmu@`zYOc`Ru_$&+R zTZ1@s)5Rlm3G3S^V)d3Xw&cx^^MKx#$@V*WAm$?Kf8{4Z#Rz!`N`i_J55$O>GNNJy z6#W;G659jBNTnCjrNs6CF;Z#OfRxxCAVw-J?VwcyQet|5*bpN=n4qN{5|((NBFk>b nGQK`4VxnBgra!E%7P5T-;wM=8HgQhz00000NkvXXu0mjf5R(}V literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation/3_On Fedora Linux_Screenshot.png b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/3_On Fedora Linux_Screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3589ca4a8558384d9eb5d717f9f7b083294d16 GIT binary patch literal 34171 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�yB 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

6a!B=oygRidS%1BFuWnSm! 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 literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux.html b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux.html new file mode 100644 index 000000000..88ad36272 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux.html @@ -0,0 +1,82 @@ + + + + + + + + On Fedora Linux + + + +

+

On Fedora Linux

+ +
+

First, download a release from GitHub.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1 +
+ +
+
In your file explorer, look for the .rpm file of TriliumNext.
2 +
+ +
+
Right click the file and select Open With Software Install.
3 +
+ +
+
+

GNOME Software will appear. Press the + .

+

You will be asked to confirm the action by entering your password.

+

After confirmation the software will start installing.

+

Once it's done the “Install” button will turn into + .

+
4 +
+ +
+
After installation, the application will be available in the GNOME overview + section.
+
+
+
+ + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux_Screenshot.png b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux_Screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fb0ce66ef59087f240276e04e5bfbdc526d03674 GIT binary patch literal 13286 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 literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Installation/On Fedora Linux_image.png new file mode 100644 index 0000000000000000000000000000000000000000..5791f83ef852e15ad94c8b9ef89169e17dd494f4 GIT binary patch literal 1123 zcmV-p1f2VcP){}j=#kdL@=X_dK(he-GOd`Ln}GQvor*EE zLZCEF!{U7n(dzne7n&r8`jrQAv#i)sn2hWci=xuW64I|+X3pmnIGaj5d~lW0os1-N zK>W_A#D*BDRFkB{_5d+bY2hFxwg-rjDpz-6Ln7;l5noJ5iSGdkN_U0n@&B~bWj~V zyOXQBqhw81M|W#_fBzgP(>>Zr2E<~$lRE#KZYd4*OtIipl^^p8Tu5_SQ2r!g;MIOd=|u-;`i)Mv;%WSxR8^f z!DdxZ^H#^Miyqv5`Sm{se`9M`UL#~gBzkk`|O?d%JY z;uLcFKjbf5L>X4DJ@x_jUxzR#+lKv1GLhfg#y{$t5i_~+d4Pjz`rOhwF={UymB^!J z?-g(Bae_uKLz@dzF^vJIzOUBA$GuKrK?U?E_bb6_VQ*7e3M5^4@ENo7U06KY&7in( z<9QH!E;ZrqtM=2F&7xr8=tN8$kbtZtD~~Rc@s~FQm+-MqkfJeW+?5aObxhw`&udoM z;{ZnXwPV+UjGv~l4O3IFYGM+uJ`Q5Vp?BC{_BGlB=hJGQ@SwhTq*YaT9Xeg*!}{YN zaP4UT4oyL?)L3!|vrK4bZ97YUh6)%=f?a&w%j=#VX+yrv08|g#N+jn9oBF;7WVGk9 zmEg3&PQId}=L-t@*x?IC@$9|MPpN6pF|L0Cw$4i95Kr9np{_BE9?2GLo0E>}H#%kw zcYV`+qd!*XmazrPfwE?N^2OTutZzE^)Gc3o=5*O{k-jv)HR+GcsS%bBXAE#o7J?oI$Ysp5A^65-`{~z zId;@HMR2g(%Oi6Ut8EmqW=k1SRQKaNV76s){BJxEcM1iD zQSkzbev3$n?Ezw>(gW#IVtarXskCcAN^B1hBbByx(5?X~F+D(Rh!I~*(AEwKOFU4< pwi~jH?~gJhH?o-ztG$hEUjPM@SikkV$6EjZ002ovPDHLkV1h@y8q)v( literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Installation_Fedora_logo.svg b/src/public/app/doc_notes/en/User Guide/User Guide/Installation_Fedora_logo.svg new file mode 100644 index 000000000..1ad9c15c8 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Installation_Fedora_logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/10_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/10_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/3_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/11_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/3_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/11_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/9_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/12_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/9_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/12_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/13_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/13_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/13_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/13_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/4_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/14_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/4_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/14_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/19_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/15_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/19_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/15_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/8_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/16_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/8_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/16_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/12_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/17_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/12_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/17_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/10_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/18_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/10_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/18_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/11_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/19_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/11_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/19_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/5_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/1_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/5_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/1_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/14_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/2_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/14_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/2_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/1_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/3_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/1_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/3_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/7_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/4_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/7_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/4_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/2_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/5_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/2_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/5_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/18_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/6_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/18_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/6_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/6_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/7_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/6_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/7_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/17_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/8_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/17_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/8_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/15_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/9_Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/15_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/9_Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/Geo map.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo map.html similarity index 80% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/Geo map.html rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo map.html index bcaf6d7b7..65d8ee517 100644 --- a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/Geo map.html +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo map.html @@ -26,7 +26,7 @@ 1
-
@@ -36,7 +36,7 @@ 2
-
@@ -51,8 +51,8 @@
  • Use the mouse wheel, two-finger gesture on a touchpad or the +/- buttons on the top-left to adjust the zoom.
  • -

    The position on the map and the zoom are saved inside the map note. When - visting again the note it will restore this position.

    +

    The position on the map and the zoom are saved inside the map note and + restored when visiting again the note.

    Adding a marker using the map

    @@ -69,18 +69,18 @@

    To create a marker, first navigate to the desired point on the map. Then press the button on the top-right of the map.

    + src="5_Geo map_image.png" width="72" height="66">button on the top-right of the map.

    If the button is not visible, make sure the button section is visible by pressing the chevron button ( ) in the top-right of the map.

    + src="11_Geo map_image.png" width="72" height="66">) in the top-right of the map.

    2
    -

     

    @@ -96,7 +96,7 @@
    3
    -

     

    @@ -107,7 +107,7 @@
    4
    -

     

    @@ -118,6 +118,15 @@
    +

    How the location of the markers is stored

    +

    The location of a marker is stored in the #geolocation attribute + of the child notes:

    +
    + +
    +

    This value can be added manually if needed. The value of the attribute + is made up of the latitude and longitude separated by a comma.

    Repositioning markers

    It's possible to reposition existing markers by simply drag and dropping them to the new destination.

    @@ -125,13 +134,30 @@

    If moved by mistake, there is currently no way to undo the change. If the mouse was not yet released, it's possible to force a refresh of the page (Ctrl+R or Meta+R) to cancel it.

    -

    Adding the geolocation manually

    -

    The location of a marker is stored in the #geolocation attribute - of the child notes:

    -
    - -
    +

    Interaction with the markers

    +
      +
    • Hovering over a marker will display the content of the note it belongs + to. +
        +
      • Clicking on the note title in the tooltip will navigate to the note in + the current view.
      • +
      +
    • +
    • Middle-clicking the marker will open the note in a new tab.
    • +
    • Right-clicking the marker will open a contextual menu allowing: +
        +
      • Opening the note in a new tab, split or window.
      • +
      • Opening the location using an external application (if the operating system + supports it).
      • +
      • Removing the marker from the map, which will remove the #geolocation attribute + of the note. To add it back again, the coordinates have to be manually + added back in.
      • +
      +
    • +
    +

    Adding the coordinates manually

    +

    In a nutshell, create a child note and set the #geolocation attribute + to the coordinates.

    The value of the attribute is made up of the latitude and longitude separated by a comma.

    Adding from Google Maps

    @@ -142,7 +168,7 @@ 1
    -
    @@ -159,7 +185,7 @@ 2
    -
    @@ -173,7 +199,7 @@ 3
    -
    @@ -199,7 +225,7 @@ 1
    -
    @@ -224,7 +250,7 @@ 3
    -
    @@ -249,7 +275,7 @@ 1
    -
    @@ -260,7 +286,7 @@ 2
    -
    @@ -271,7 +297,7 @@ 3
    -
    diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/16_Geo map_image.png b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo map_image.png similarity index 100% rename from src/public/app/doc_notes/en/User Guide/User Guide/Types of notes/16_Geo map_image.png rename to src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Geo map_image.png diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagram.html b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagram.html new file mode 100644 index 000000000..bbe5d76cc --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Note Types/Mermaid Diagram.html @@ -0,0 +1,19 @@ + + + + + + + + Mermaid Diagram + + + +
    +

    Mermaid Diagram

    + +
    +
    + + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html new file mode 100644 index 000000000..7e4955655 --- /dev/null +++ b/src/public/app/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html @@ -0,0 +1,19 @@ + + + + + + + + Downloading responses from Google Forms + + + +
    +

    Downloading responses from Google Forms

    + +
    +
    + + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/1_Serving directly the conte.png b/src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/1_Serving directly the conte.png new file mode 100644 index 0000000000000000000000000000000000000000..bab0f97f53992c2907b53a8938d1442166037ffc GIT binary patch literal 6937 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 literal 0 HcmV?d00001 diff --git a/src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/Serving directly the conte.png b/src/public/app/doc_notes/en/User Guide/User Guide/Shared notes/Serving directly the conte.png new file mode 100644 index 0000000000000000000000000000000000000000..981a4314622b93965e189a4d814904dacb602ff9 GIT binary patch literal 10401 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 + + + + + + + Serving directly the content of a note + + + +
    +

    Serving directly the content of a note

    + +
    +

    When accessing a shared note, Trilium will render it as a web page. Sometimes + it's desirable to serve the content directly so that it can be used in + a script or downloaded by the user.

    +
    + + + + + + + + + + + +
    +
    + +
    A note displayed as a web page (HTML)
    +
    +
    +
    + +
    A note displayed as a raw format
    +
    +
    +
    +

    By adding an attribute to the note

    +

    Simply add the #shareRaw attribute and the note will always + be rendered raw when accessed from the share URL.

    +

    By altering the URL

    +

    Append ?raw to the URL to display a note in its raw format + regardless of whether the #shareRaw attribute is added on the + note.

    +

    + +

    +

     

    +
    +
    + + + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/index.html b/src/public/app/doc_notes/en/User Guide/index.html index bac353ead..fc49dc742 100644 --- a/src/public/app/doc_notes/en/User Guide/index.html +++ b/src/public/app/doc_notes/en/User Guide/index.html @@ -6,6 +6,6 @@ - + \ No newline at end of file diff --git a/src/public/app/doc_notes/en/User Guide/navigation.html b/src/public/app/doc_notes/en/User Guide/navigation.html index ddf57d958..77cf9ca53 100644 --- a/src/public/app/doc_notes/en/User Guide/navigation.html +++ b/src/public/app/doc_notes/en/User Guide/navigation.html @@ -9,34 +9,82 @@
    • User Guide From dd4f8a8c27837a72cd88a64e3e1ec56bec575fbe Mon Sep 17 00:00:00 2001 From: Panagiotis Papadopoulos Date: Sat, 15 Feb 2025 13:08:13 +0100 Subject: [PATCH 74/77] chore(copy-dist): "unpack" log messages before printing previously it was printin all messages as part of an array, i.e. ["message"] After spreading the array, we get the desired out "message" --- bin/copy-dist.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/copy-dist.ts b/bin/copy-dist.ts index 83a31bbf7..6087a69bd 100644 --- a/bin/copy-dist.ts +++ b/bin/copy-dist.ts @@ -7,9 +7,9 @@ const DEST_DIR_NODE_MODULES = path.join(DEST_DIR, "node_modules"); const VERBOSE = process.env.VERBOSE; -function log(...args) { +function log(...args: any[]) { if (VERBOSE) { - console.log(args); + console.log(...args); } } From a8f9403990e63319fd5fd4701fd99661981a3aa7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 16 Feb 2025 11:41:29 +0200 Subject: [PATCH 75/77] feat(code_block): map a few more themes --- src/services/code_block_theme_names.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/services/code_block_theme_names.json b/src/services/code_block_theme_names.json index 0981092f2..4bfa6a290 100644 --- a/src/services/code_block_theme_names.json +++ b/src/services/code_block_theme_names.json @@ -14,6 +14,10 @@ "brown paper": "Brown Paper (Light)", "codepen embed": "CodePen Embed (Dark)", "color brewer": "Color Brewer (Light)", + "cybertopia cherry": "Cybertopia Cherry (Dark)", + "cybertopia dimmer": "Cybertopia Dimmer (Dark)", + "cybertopia icecap": "Cybertopia Icecap (Dark)", + "cybertopia saturated": "Cybertopia Saturated (Dark)", "dark": "Dark", "default": "Original highlight.js Theme (Light)", "devibeans": "devibeans (Dark)", @@ -58,6 +62,9 @@ "qtcreator light": "Qt Creator (Light)", "rainbow": "Rainbow (Dark)", "routeros": "RouterOS Script (Light)", + "rose pine dawn": "Rose Pine Dawn (Light)", + "rose pine moon": "Rose Pine Moon (Dark)", + "rose pine": "Rose Pine (Dark)", "school book": "School Book (Light)", "shades of purple": "Shades of Purple (Dark)", "srcery": "Srcery (Dark)", From 952ec516eeeaa44720994650c23a791253c40515 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 16 Feb 2025 11:42:14 +0200 Subject: [PATCH 76/77] feat(test): add test for code block mpapings --- src/services/code_block_theme.spec.ts | 21 +++++++++++++++++++++ src/services/code_block_theme.ts | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/services/code_block_theme.spec.ts diff --git a/src/services/code_block_theme.spec.ts b/src/services/code_block_theme.spec.ts new file mode 100644 index 000000000..84482b416 --- /dev/null +++ b/src/services/code_block_theme.spec.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from "vitest"; +import { getStylesDirectory, readThemesFromFileSystem } from "./code_block_theme.js"; + +import themeNames from "./code_block_theme_names.json" with { type: "json" }; + +describe("Code block theme", () => { + it("all themes are mapped", () => { + const themes = readThemesFromFileSystem(getStylesDirectory()); + + const mappedThemeNames = new Set(Object.values(themeNames)); + const unmappedThemeNames = new Set(); + + for (const theme of themes) { + if (!mappedThemeNames.has(theme.title)) { + unmappedThemeNames.add(theme.title); + } + } + + expect(unmappedThemeNames.size, `Unmapped themes: ${Array.from(unmappedThemeNames).join(", ")}`).toBe(0); + }); +}); diff --git a/src/services/code_block_theme.ts b/src/services/code_block_theme.ts index 8351b2519..8a3964fcd 100644 --- a/src/services/code_block_theme.ts +++ b/src/services/code_block_theme.ts @@ -44,7 +44,7 @@ export function listSyntaxHighlightingThemes() { }; } -function getStylesDirectory() { +export function getStylesDirectory() { if (isElectron && !isDev) { return "styles"; } @@ -60,7 +60,7 @@ function getStylesDirectory() { * @param path the path to read from. Usually this is the highlight.js `styles` directory. * @returns the list of themes. */ -function readThemesFromFileSystem(path: string): ColorTheme[] { +export function readThemesFromFileSystem(path: string): ColorTheme[] { return fs .readdirSync(path) .filter((el) => el.endsWith(".min.css")) From dc0ac4daa2dddeaf415d54304ff814ee0857038a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 16 Feb 2025 15:38:31 +0200 Subject: [PATCH 77/77] fix(zen): buttons on darwin --- src/public/app/widgets/close_zen_button.ts | 2 +- src/public/stylesheets/style.css | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/public/app/widgets/close_zen_button.ts b/src/public/app/widgets/close_zen_button.ts index 175f24946..138fa6ed6 100644 --- a/src/public/app/widgets/close_zen_button.ts +++ b/src/public/app/widgets/close_zen_button.ts @@ -25,7 +25,7 @@ const TPL = `\ -webkit-app-region: no-drag; } - body.zen.electron:not(.native-titlebar) .close-zen-container { + body.zen.electron:not(.platform-darwin):not(.native-titlebar) .close-zen-container { left: calc(env(titlebar-area-width) - var(--zen-button-size) - 2px); right: unset; } diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index 53fb6f197..7d6a6501c 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -1677,6 +1677,7 @@ body.zen .title-row { display: block !important; height: unset !important; -webkit-app-region: drag; + padding-left: env(titlebar-area-x); } body.zen .note-title-widget,