-

+
<%= t("login.heading") %>
<% if (ssoEnabled) { %>
diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts
index 710feeb7a..c11742132 100644
--- a/apps/server/src/routes/assets.ts
+++ b/apps/server/src/routes/assets.ts
@@ -39,9 +39,9 @@ async function register(app: express.Application) {
app.use(`/${assetUrlFragment}/libraries`, persistentCacheStatic(path.join(publicDir, "libraries")));
app.use(`/${assetUrlFragment}/fonts`, persistentCacheStatic(path.join(publicDir, "fonts")));
app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations")));
- app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images")));
app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules")));
}
+ app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images")));
app.use(`/${assetUrlFragment}/doc_notes`, persistentCacheStatic(path.join(resourceDir, "assets", "doc_notes")));
app.use(`/assets/vX/fonts`, express.static(path.join(srcRoot, "public/fonts")));
app.use(`/assets/vX/images`, express.static(path.join(srcRoot, "..", "images")));
diff --git a/apps/server/src/routes/login.ts b/apps/server/src/routes/login.ts
index 877d65577..234f9e1d8 100644
--- a/apps/server/src/routes/login.ts
+++ b/apps/server/src/routes/login.ts
@@ -3,7 +3,7 @@ import optionService from "../services/options.js";
import myScryptService from "../services/encryption/my_scrypt.js";
import log from "../services/log.js";
import passwordService from "../services/encryption/password.js";
-import assetPath from "../services/asset_path.js";
+import assetPath, { assetUrlFragment } from "../services/asset_path.js";
import appPath from "../services/app_path.js";
import ValidationError from "../errors/validation_error.js";
import type { Request, Response } from 'express';
@@ -19,6 +19,7 @@ function loginPage(req: Request, res: Response) {
totpEnabled: totp.isTotpEnabled(),
ssoEnabled: openID.isOpenIDEnabled(),
assetPath: assetPath,
+ assetPathFragment: assetUrlFragment,
appPath: appPath,
});
}
From 82f94ff3e672f4f063621b56ac39e4f16a5211ca Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 16:33:34 +0300
Subject: [PATCH 108/115] fix(server): wrong import for dayjs
---
apps/server/src/services/i18n.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/server/src/services/i18n.ts b/apps/server/src/services/i18n.ts
index c060f80fd..3bdf6f9cd 100644
--- a/apps/server/src/services/i18n.ts
+++ b/apps/server/src/services/i18n.ts
@@ -18,7 +18,7 @@ const DAYJS_LOADER: Record Promise import("dayjs/locale/he.js"),
"ku": () => import("dayjs/locale/ku.js"),
"ro": () => import("dayjs/locale/ro.js"),
- "tw": () => import("dayjs/locale/tw.js")
+ "tw": () => import("dayjs/locale/zh-tw.js")
}
export async function initializeTranslations() {
From 758745f19ea5373c9083272bccd321413db649cc Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 16:42:00 +0300
Subject: [PATCH 109/115] fix(desktop): missing tray icon
---
apps/desktop/package.json | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index e43d6adbb..04ce4c825 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -85,6 +85,11 @@
"input": "apps/server/dist/assets",
"output": "assets"
},
+ {
+ "glob": "**/*",
+ "input": "apps/desktop/src/assets",
+ "output": "assets"
+ },
{
"glob": "**/*",
"input": "apps/server/dist/public",
From 9688013c9120b9e704dce86db7ac52756500319c Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 17:36:53 +0300
Subject: [PATCH 110/115] fix(server): login rendering failure
---
apps/server/src/routes/login.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/apps/server/src/routes/login.ts b/apps/server/src/routes/login.ts
index 234f9e1d8..d428f21bf 100644
--- a/apps/server/src/routes/login.ts
+++ b/apps/server/src/routes/login.ts
@@ -13,6 +13,7 @@ import openID from '../services/open_id.js';
import openIDEncryption from '../services/encryption/open_id_encryption.js';
function loginPage(req: Request, res: Response) {
+ // Login page is triggered twice. Once here, and another time if the password is failed.
res.render('login', {
wrongPassword: false,
wrongTotp: false,
@@ -170,6 +171,7 @@ function sendLoginError(req: Request, res: Response, errorType: 'password' | 'to
totpEnabled: totp.isTotpEnabled(),
ssoEnabled: openID.isOpenIDEnabled(),
assetPath: assetPath,
+ assetPathFragment: assetUrlFragment,
appPath: appPath,
});
}
From b0fe4f67d8803df90f5ca4b89d766b9009448f0e Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 18:29:31 +0300
Subject: [PATCH 111/115] fix(edit-docs): main window not starting properly
---
apps/desktop/src/electron-main.ts | 2 +-
apps/edit-docs/src/electron-docs-main.ts | 26 ++++++++++++++++--------
2 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/apps/desktop/src/electron-main.ts b/apps/desktop/src/electron-main.ts
index ac1c712dc..8a9ebae03 100644
--- a/apps/desktop/src/electron-main.ts
+++ b/apps/desktop/src/electron-main.ts
@@ -44,7 +44,7 @@ async function main() {
await import("@triliumnext/server/src/main.js");
}
-export async function onReady() {
+async function onReady() {
// electron.app.setAppUserModelId('com.github.zadam.trilium');
// if db is not initialized -> setup process
diff --git a/apps/edit-docs/src/electron-docs-main.ts b/apps/edit-docs/src/electron-docs-main.ts
index ac1baa107..7f293af49 100644
--- a/apps/edit-docs/src/electron-docs-main.ts
+++ b/apps/edit-docs/src/electron-docs-main.ts
@@ -13,9 +13,9 @@ import TaskContext from "@triliumnext/server/src/services/task_context.js";
import { deferred } from "@triliumnext/server/src/services/utils.js";
import { parseNoteMetaFile } from "@triliumnext/server/src/services/in_app_help.js";
import { resolve } from "path";
-import electron from "electron";
-import { onReady } from "@triliumnext/desktop/src/electron-main.js";
import type NoteMeta from "@triliumnext/server/src/services/meta/note_meta.js";
+import electron from "electron";
+import windowService from "@triliumnext/server/src/services/window.js";
interface NoteMapping {
rootNoteId: string;
@@ -56,12 +56,25 @@ const NOTE_MAPPINGS: NoteMapping[] = [
];
async function main() {
- electron.app.on("ready", onReady);
+ const initializedPromise = deferred();
+ electron.app.on("ready", async () => {
+ await initializedPromise;
+
+ console.log("Electron is ready!");
+
+ // Start the server.
+ await import("@triliumnext/server/src/main.js");
+
+ // Create the main window.
+ await windowService.createMainWindow(electron.app);
+
+ // Wait for the import to be finished and the application to be loaded before we listen to changes.
+ setTimeout(() => registerHandlers(), 10_000);
+ });
await initializeTranslations();
await initializeDatabase(true);
- const initializedPromise = deferred();
cls.init(async () => {
for (const mapping of NOTE_MAPPINGS) {
if (!mapping.exportOnly) {
@@ -71,11 +84,6 @@ async function main() {
setOptions();
initializedPromise.resolve();
});
-
- await initializedPromise;
-
- // Wait for the import to be finished and the application to be loaded before we listen to changes.
- setTimeout(() => registerHandlers(), 10_000);
}
async function setOptions() {
From 04343fbc2e395933e859b8e4669ab22c590d81b2 Mon Sep 17 00:00:00 2001
From: SiriusXT <1160925501@qq.com>
Date: Mon, 26 May 2025 00:17:52 +0800
Subject: [PATCH 112/115] Fix: Automatically close modal when dropdown is
dismissed
---
apps/client/src/widgets/dialogs/note_type_chooser.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/apps/client/src/widgets/dialogs/note_type_chooser.ts b/apps/client/src/widgets/dialogs/note_type_chooser.ts
index 5e9b7bdf1..927e2f174 100644
--- a/apps/client/src/widgets/dialogs/note_type_chooser.ts
+++ b/apps/client/src/widgets/dialogs/note_type_chooser.ts
@@ -110,6 +110,8 @@ export default class NoteTypeChooserDialog extends BasicWidget {
//@ts-ignore
if (e.clickEvent) {
e.preventDefault();
+ } else {
+ this.modal.hide();
}
});
}
From 3850d471c0a20a675a759b876b7748c76b5ad5ef Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 20:06:04 +0300
Subject: [PATCH 113/115] fix(server): CSS raw imports
---
apps/server/package.json | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/apps/server/package.json b/apps/server/package.json
index 6123655c1..f58bddd65 100644
--- a/apps/server/package.json
+++ b/apps/server/package.json
@@ -223,7 +223,10 @@
"minify": true,
"thirdParty": true,
"esbuildOptions": {
- "splitting": false
+ "splitting": false,
+ "loader": {
+ ".css": "text"
+ }
},
"additionalEntryPoints": [
"apps/server/src/docker_healthcheck.ts"
From dbe16be7adbcd41ed84671d187c2fba966eef9ca Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 20:38:06 +0300
Subject: [PATCH 114/115] fix({desktop,edit-docs}: zip export
---
apps/desktop/package.json | 5 ++++-
apps/edit-docs/package.json | 8 ++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index 04ce4c825..a7f613546 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -67,7 +67,10 @@
"minify": true,
"thirdParty": true,
"esbuildOptions": {
- "splitting": false
+ "splitting": false,
+ "loader": {
+ ".css": "text"
+ }
},
"assets": [
{
diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json
index 1c9d194c3..402c32f3f 100644
--- a/apps/edit-docs/package.json
+++ b/apps/edit-docs/package.json
@@ -41,6 +41,14 @@
"format": [
"cjs"
],
+ "minify": true,
+ "thirdParty": true,
+ "esbuildOptions": {
+ "splitting": false,
+ "loader": {
+ ".css": "text"
+ }
+ },
"assets": [
{
"glob": "**/*",
From 549ef96806be459cdd03e047eeef73e6b08ddbf2 Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sun, 25 May 2025 20:43:48 +0300
Subject: [PATCH 115/115] docs(release): simplify release note & add warning
for manual install
---
docs/Release Notes/Release Notes/v0.94.0.md | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)
diff --git a/docs/Release Notes/Release Notes/v0.94.0.md b/docs/Release Notes/Release Notes/v0.94.0.md
index 1b050552c..340d5404e 100644
--- a/docs/Release Notes/Release Notes/v0.94.0.md
+++ b/docs/Release Notes/Release Notes/v0.94.0.md
@@ -1,4 +1,7 @@
# v0.94.0
+> [!CAUTION]
+> **For (advanced) manual setups only:** Following a tooling change, the main entry point has changed from `main.js` to `main.cjs`. Same goes for the Electron build.
+
> [!IMPORTANT]
> If you enjoyed this release, consider showing a token of appreciation by:
>
@@ -38,21 +41,7 @@
* Added the Nix language (and also in code blocks for text notes).
* Added an indentation marker.
* Note: syntax highlighting for some languages (mostly HTML-template languages such as EJS, JSP) is no longer supported due to lack of upstream support. If this is a problem, feel free to report an issue and we can see what can be done about it.
-* Syntax highlighting in code blocks for text notes:
- * Added support for Cypher.
- * Added support for XML-DTD.
- * Added support for Jinja2.
- * Added support for ClojureScript.
- * Added support for Perl.
- * Added support for Scala.
- * Added support for Scheme.
- * Added support for Swift.
- * Added support for SystemVerilog.
- * Added support for mIRC.
- * Added support for Cobol.
- * Added support for Dylan.
- * Added support for RPM Specfile.
- * Added support for TCCN3.
+* Added support for additional syntax highlighting for code blocks in text notes: Cypher, XML-DTD, Jinja2, ClojureScript, Perl, Scala, Scheme, Swift, SystemVerilog, mIRC, Cobol, Dylan, RPM Specfile, TCCN3.
* Mermaid diagrams: basic syntax highlight (not all diagram types are supported) and code folding.
* Slight organization in Appearance settings: code block themes are now in "Text Notes", added a "Related settings" section in Appearance.
* [Added support for opening and activating a note in a new tab using Ctrl+Shift+click on notes in the launcher pane, note tree, or note images](https://github.com/TriliumNext/Notes/pull/1854) by @SiriusXT