From ddce014495ad52e1d7068fd0082dc019a013638b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Jul 2024 19:25:31 +0300 Subject: [PATCH 01/25] server: Fix sync failing if local EC is missing --- src/services/sync_update.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/sync_update.ts b/src/services/sync_update.ts index 888947b8b..0b4c5fb1d 100644 --- a/src/services/sync_update.ts +++ b/src/services/sync_update.ts @@ -75,13 +75,12 @@ function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instan } function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string, updateContext: UpdateContext) { - const localEC = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]); + const localEC = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]); + const localECIsOlderThanRemote = ( + localEC && localEC.utcDateChanged && remoteEC.utcDateChanged && + localEC.utcDateChanged <= remoteEC.utcDateChanged); - if (!localEC.utcDateChanged || !remoteEC.utcDateChanged) { - throw new Error("Missing date changed."); - } - - if (!localEC || localEC.utcDateChanged <= remoteEC.utcDateChanged) { + if (!localEC || localECIsOlderThanRemote) { if (remoteEC.isErased) { if (localEC?.isErased) { eraseEntity(remoteEC); // make sure it's erased anyway @@ -104,7 +103,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, } if (!localEC - || localEC.utcDateChanged < remoteEC.utcDateChanged + || localECIsOlderThanRemote || localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased ) { @@ -113,7 +112,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, return true; } else if ((localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased) - && localEC.utcDateChanged > remoteEC.utcDateChanged) { + && !localECIsOlderThanRemote) { // the change on our side is newer than on the other side, so the other side should update entityChangesService.putEntityChangeForOtherInstances(localEC); From 81a2b206ca1d60d0275b423b0893525c17653823 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Jul 2024 19:25:55 +0300 Subject: [PATCH 02/25] electron: Improve run & switch scripts --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c39403b79..d5d651086 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "trilium", - "version": "0.63.6", + "version": "0.90.0-beta", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "trilium", - "version": "0.63.6", + "version": "0.90.0-beta", "hasInstallScript": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 5b37b89e3..7e9c9fedf 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,11 @@ "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", "qstart-server": "npm run qswitch-server && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts", "start-electron": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .", - "start-electron-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 electron --inspect=5858 .", + "start-electron-no-dir": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .", "qstart-electron": "npm run qswitch-electron && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .", "start-test-server": "npm run qswitch-server; rm -rf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 ts-node src/www.ts", "switch-server": "rm -rf ./node_modules/better-sqlite3 && npm install", - "switch-electron": "./node_modules/.bin/electron-rebuild", + "switch-electron": "electron-rebuild", "qswitch-server": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-server-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node", "qswitch-electron": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-desktop-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node", "build-backend-docs": "rm -rf ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js", From ea47668916fd8063bd69e64f3feab994432f6125 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 15 Jul 2024 19:31:59 +0300 Subject: [PATCH 03/25] server: Clarify name --- src/services/sync_update.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/sync_update.ts b/src/services/sync_update.ts index 0b4c5fb1d..78a6f3f27 100644 --- a/src/services/sync_update.ts +++ b/src/services/sync_update.ts @@ -76,11 +76,11 @@ function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instan function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string, updateContext: UpdateContext) { const localEC = sql.getRow(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]); - const localECIsOlderThanRemote = ( + const localECIsOlderOrSameAsRemote = ( localEC && localEC.utcDateChanged && remoteEC.utcDateChanged && localEC.utcDateChanged <= remoteEC.utcDateChanged); - if (!localEC || localECIsOlderThanRemote) { + if (!localEC || localECIsOlderOrSameAsRemote) { if (remoteEC.isErased) { if (localEC?.isErased) { eraseEntity(remoteEC); // make sure it's erased anyway @@ -103,7 +103,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, } if (!localEC - || localECIsOlderThanRemote + || localECIsOlderOrSameAsRemote || localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased ) { @@ -112,7 +112,7 @@ function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, return true; } else if ((localEC.hash !== remoteEC.hash || localEC.isErased !== remoteEC.isErased) - && !localECIsOlderThanRemote) { + && !localECIsOlderOrSameAsRemote) { // the change on our side is newer than on the other side, so the other side should update entityChangesService.putEntityChangeForOtherInstances(localEC); From 9fdb7b29de68fea8205b2946c2f73e462bcb9256 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 16 Jul 2024 21:30:07 +0300 Subject: [PATCH 04/25] server: Update TypeScript to latest --- package-lock.json | 24 ++++++++++++------------ tsconfig.json | 3 ++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index f76d6a643..be340dc0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12490,9 +12490,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -12564,9 +12564,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -22904,9 +22904,9 @@ } }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "tsscmp": { "version": "1.0.6", @@ -22963,9 +22963,9 @@ } }, "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true }, "uc.micro": { diff --git a/tsconfig.json b/tsconfig.json index 55f0090c8..335872b51 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "moduleResolution": "Node", + "moduleResolution": "Node", + "target": "ES2018", "declaration": false, "sourceMap": true, "outDir": "./build", From c0b3c8496e2470d7bbf1a1a6e972baf72188f77f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 16 Jul 2024 21:43:04 +0300 Subject: [PATCH 05/25] server: Fix build errors after updating to latest TypeScript --- src/etapi/attachments.ts | 1 + src/etapi/attributes.ts | 1 + src/etapi/etapi-interface.ts | 4 ++-- src/etapi/etapi_utils.ts | 1 + src/etapi/notes.ts | 1 + src/share/shaca/entities/rows.ts | 8 ++++---- src/share/shaca/entities/sattachment.ts | 1 + src/share/shaca/entities/sattribute.ts | 1 + src/share/shaca/entities/sbranch.ts | 1 + src/share/shaca/entities/snote.ts | 1 + src/share/shaca/shaca_loader.ts | 1 + tsconfig.json | 3 ++- 12 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/etapi/attachments.ts b/src/etapi/attachments.ts index 8e76d27e8..802e9975f 100644 --- a/src/etapi/attachments.ts +++ b/src/etapi/attachments.ts @@ -5,6 +5,7 @@ import v = require('./validators'); import utils = require('../services/utils'); import { Router } from 'express'; import { AttachmentRow } from '../becca/entities/rows'; +import { ValidatorMap } from './etapi-interface'; function register(router: Router) { const ALLOWED_PROPERTIES_FOR_CREATE_ATTACHMENT: ValidatorMap = { diff --git a/src/etapi/attributes.ts b/src/etapi/attributes.ts index d5b407fb3..59865da62 100644 --- a/src/etapi/attributes.ts +++ b/src/etapi/attributes.ts @@ -5,6 +5,7 @@ import attributeService = require('../services/attributes'); import v = require('./validators'); import { Router } from 'express'; import { AttributeRow } from '../becca/entities/rows'; +import { ValidatorMap } from './etapi-interface'; function register(router: Router) { eu.route(router, 'get', '/etapi/attributes/:attributeId', (req, res, next) => { diff --git a/src/etapi/etapi-interface.ts b/src/etapi/etapi-interface.ts index c0b6d3f04..c0bfef6d9 100644 --- a/src/etapi/etapi-interface.ts +++ b/src/etapi/etapi-interface.ts @@ -1,3 +1,3 @@ -type ValidatorFunc = (obj: unknown) => (string | undefined); +export type ValidatorFunc = (obj: unknown) => (string | undefined); -type ValidatorMap = Record; \ No newline at end of file +export type ValidatorMap = Record; \ No newline at end of file diff --git a/src/etapi/etapi_utils.ts b/src/etapi/etapi_utils.ts index 3498a8257..9799deef0 100644 --- a/src/etapi/etapi_utils.ts +++ b/src/etapi/etapi_utils.ts @@ -6,6 +6,7 @@ import etapiTokenService = require('../services/etapi_tokens'); import config = require('../services/config'); import { NextFunction, Request, RequestHandler, Response, Router } from 'express'; import { AppRequest, AppRequestHandler } from '../routes/route-interface'; +import { ValidatorMap } from './etapi-interface'; const GENERIC_CODE = "GENERIC"; type HttpMethod = "all" | "get" | "post" | "put" | "delete" | "patch" | "options" | "head"; diff --git a/src/etapi/notes.ts b/src/etapi/notes.ts index 620e9f3d8..62263983f 100644 --- a/src/etapi/notes.ts +++ b/src/etapi/notes.ts @@ -15,6 +15,7 @@ import { ParsedQs } from 'qs'; import { NoteParams } from '../services/note-interface'; import BNote = require('../becca/entities/bnote'); import { SearchParams } from '../services/search/services/types'; +import { ValidatorMap } from './etapi-interface'; function register(router: Router) { eu.route(router, 'get', '/etapi/notes', (req, res, next) => { diff --git a/src/share/shaca/entities/rows.ts b/src/share/shaca/entities/rows.ts index d8b8ec84e..ed20fea1f 100644 --- a/src/share/shaca/entities/rows.ts +++ b/src/share/shaca/entities/rows.ts @@ -1,4 +1,4 @@ -type SNoteRow = [ string, string, string, string, string, string, boolean ]; -type SBranchRow = [ string, string, string, string, string, boolean ]; -type SAttributeRow = [ string, string, string, string, string, boolean, number ]; -type SAttachmentRow = [ string, string, string, string, string, string, string ]; +export type SNoteRow = [ string, string, string, string, string, string, boolean ]; +export type SBranchRow = [ string, string, string, string, string, boolean ]; +export type SAttributeRow = [ string, string, string, string, string, boolean, number ]; +export type SAttachmentRow = [ string, string, string, string, string, string, string ]; diff --git a/src/share/shaca/entities/sattachment.ts b/src/share/shaca/entities/sattachment.ts index 1e9565ce3..7951fe081 100644 --- a/src/share/shaca/entities/sattachment.ts +++ b/src/share/shaca/entities/sattachment.ts @@ -5,6 +5,7 @@ import utils = require('../../../services/utils'); import AbstractShacaEntity = require('./abstract_shaca_entity'); import SNote = require('./snote'); import { Blob } from '../../../services/blob-interface'; +import { SAttachmentRow } from './rows'; class SAttachment extends AbstractShacaEntity { private attachmentId: string; diff --git a/src/share/shaca/entities/sattribute.ts b/src/share/shaca/entities/sattribute.ts index 390a85b8c..6bd8418b1 100644 --- a/src/share/shaca/entities/sattribute.ts +++ b/src/share/shaca/entities/sattribute.ts @@ -1,5 +1,6 @@ "use strict"; +import { SAttributeRow } from "./rows"; import SNote = require("./snote"); const AbstractShacaEntity = require('./abstract_shaca_entity'); diff --git a/src/share/shaca/entities/sbranch.ts b/src/share/shaca/entities/sbranch.ts index 0ff356922..b4ff9a73b 100644 --- a/src/share/shaca/entities/sbranch.ts +++ b/src/share/shaca/entities/sbranch.ts @@ -1,6 +1,7 @@ "use strict"; import AbstractShacaEntity = require('./abstract_shaca_entity'); +import { SBranchRow } from './rows'; import SNote = require('./snote'); class SBranch extends AbstractShacaEntity { diff --git a/src/share/shaca/entities/snote.ts b/src/share/shaca/entities/snote.ts index bae610886..18182f1d4 100644 --- a/src/share/shaca/entities/snote.ts +++ b/src/share/shaca/entities/snote.ts @@ -8,6 +8,7 @@ import { Blob } from '../../../services/blob-interface'; import SAttachment = require('./sattachment'); import SAttribute = require('./sattribute'); import SBranch = require('./sbranch'); +import { SNoteRow } from './rows'; const LABEL = 'label'; const RELATION = 'relation'; diff --git a/src/share/shaca/shaca_loader.ts b/src/share/shaca/shaca_loader.ts index c6a3fc4da..050e5e886 100644 --- a/src/share/shaca/shaca_loader.ts +++ b/src/share/shaca/shaca_loader.ts @@ -9,6 +9,7 @@ import SAttribute = require('./entities/sattribute'); import SAttachment = require('./entities/sattachment'); import shareRoot = require('../share_root'); import eventService = require('../../services/events'); +import { SAttachmentRow, SAttributeRow, SBranchRow, SNoteRow } from './entities/rows'; function load() { const start = Date.now(); diff --git a/tsconfig.json b/tsconfig.json index 335872b51..d9bbf4378 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { - "moduleResolution": "Node", + "moduleResolution": "Node16", + "module": "Node16", "target": "ES2018", "declaration": false, "sourceMap": true, From 623b2730ed0e7958dc7d5ae8ed0521476f7608f0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 16 Jul 2024 21:43:14 +0300 Subject: [PATCH 06/25] server: Update @types/* to latest --- package-lock.json | 72 +++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index be340dc0e..fe6c25356 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1196,9 +1196,9 @@ } }, "node_modules/@types/better-sqlite3": { - "version": "7.6.9", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.9.tgz", - "integrity": "sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==", + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.11.tgz", + "integrity": "sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==", "dev": true, "dependencies": { "@types/node": "*" @@ -1404,9 +1404,9 @@ "dev": true }, "node_modules/@types/ini": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-4.1.0.tgz", - "integrity": "sha512-mTehMtc+xtnWBBvqizcqYCktKDBH2WChvx1GU3Sfe4PysFDXiNe+1YwtpVX1MDtCa4NQrSPw2+3HmvXHY3gt1w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg==", "dev": true }, "node_modules/@types/jasmine": { @@ -1416,9 +1416,9 @@ "dev": true }, "node_modules/@types/jsdom": { - "version": "21.1.6", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz", - "integrity": "sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==", + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, "dependencies": { "@types/node": "*", @@ -1527,9 +1527,9 @@ } }, "node_modules/@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -1748,9 +1748,9 @@ "optional": true }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.5.11", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", + "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", "dev": true, "dependencies": { "@types/node": "*" @@ -5948,9 +5948,9 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "18.19.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz", - "integrity": "sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -14252,9 +14252,9 @@ } }, "@types/better-sqlite3": { - "version": "7.6.9", - "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.9.tgz", - "integrity": "sha512-FvktcujPDj9XKMJQWFcl2vVl7OdRIqsSRX9b0acWwTmwLK9CF2eqo/FRcmMLNpugKoX/avA6pb7TorDLmpgTnQ==", + "version": "7.6.11", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.11.tgz", + "integrity": "sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==", "dev": true, "requires": { "@types/node": "*" @@ -14460,9 +14460,9 @@ "dev": true }, "@types/ini": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@types/ini/-/ini-4.1.0.tgz", - "integrity": "sha512-mTehMtc+xtnWBBvqizcqYCktKDBH2WChvx1GU3Sfe4PysFDXiNe+1YwtpVX1MDtCa4NQrSPw2+3HmvXHY3gt1w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg==", "dev": true }, "@types/jasmine": { @@ -14472,9 +14472,9 @@ "dev": true }, "@types/jsdom": { - "version": "21.1.6", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.6.tgz", - "integrity": "sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==", + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, "requires": { "@types/node": "*", @@ -14576,9 +14576,9 @@ } }, "@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "requires": { "undici-types": "~5.26.4" } @@ -14774,9 +14774,9 @@ "optional": true }, "@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.5.11", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", + "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", "dev": true, "requires": { "@types/node": "*" @@ -17431,9 +17431,9 @@ }, "dependencies": { "@types/node": { - "version": "18.19.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz", - "integrity": "sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==", + "version": "18.19.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", + "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", "requires": { "undici-types": "~5.26.4" } From 95b8bf620ff3f0a1be729d74e32b78a20e03a8f7 Mon Sep 17 00:00:00 2001 From: root-hal9000 <2352828+root-hal9000@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:24:00 -0500 Subject: [PATCH 07/25] update links in English language readme --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 374197c3c..c3d80c4f9 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ TriliumNext Notes is a hierarchical note taking application with focus on building large personal knowledge bases. -See [screenshots](https://triliumnext.github.io/Docs/Wiki/Screenshot%20tour) for quick overview: +See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for quick overview: -Trilium Screenshot +Trilium Screenshot ## ⚠️ Why TriliumNext? @@ -18,7 +18,7 @@ Feel free to join our official discussions and community. We are focused on the - [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous discussions) - [Github Discussions](https://github.com/TriliumNext/Notes/discussions) (For Asynchronous discussions) -- [Wiki](https://github.com/zadam/trilium/wiki) (For common how-to questions and user guides) +- [Wiki](https://triliumnext.github.io/Docs/) (For common how-to questions and user guides) The two rooms linked above are mirrored, so you can use either XMPP or Matrix, from any client you prefer, on pretty much any platform under the sun! @@ -28,25 +28,25 @@ The two rooms linked above are mirrored, so you can use either XMPP or Matrix, f ## 🎁 Features -* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/Cloning-notes)) -* Rich WYSIWYG note editing including e.g. tables, images and [math](https://triliumnext.github.io/Docs/Wiki/Text-notes) with markdown [autoformat](https://triliumnext.github.io/Docs/Wiki/Text-notes#autoformat) -* Support for editing [notes with source code](https://triliumnext.github.io/Docs/Wiki/Code-notes), including syntax highlighting -* Fast and easy [navigation between notes](https://triliumnext.github.io/Docs/Wiki/Note-navigation), full text search and [note hoisting](https://triliumnext.github.io/Docs/Wiki/Note-hoisting) -* Seamless [note versioning](https://triliumnext.github.io/Docs/Wiki/Note-revisions) -* Note [attributes](https://triliumnext.github.io/Docs/Wiki/Attributes) can be used for note organization, querying and advanced [scripting](https://triliumnext.github.io/Docs/Wiki/Scripts) -* [Synchronization](https://triliumnext.github.io/Docs/Wiki/Synchronization) with self-hosted sync server +* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes) +* Rich WYSIWYG note editing including e.g. tables, images and [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) +* Support for editing [notes with source code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax highlighting +* Fast and easy [navigation between notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text search and [note hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting) +* Seamless [note versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be used for note organization, querying and advanced [scripting](https://triliumnext.github.io/Docs/Wiki/scripts) +* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) with self-hosted sync server * there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting) -* [Sharing](https://triliumnext.github.io/Docs/Wiki/Sharing) (publishing) notes to public internet -* Strong [note encryption](https://triliumnext.github.io/Docs/Wiki/Protected-notes) with per-note granularity +* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes to public internet +* Strong [note encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with per-note granularity * Sketching diagrams with built-in Excalidraw (note type "canvas") -* [Relation maps](https://triliumnext.github.io/Docs/Wiki/Relation-map) and [link maps](https://triliumnext.github.io/Docs/Wiki/Link-map) for visualizing notes and their relations -* [Scripting](https://triliumnext.github.io/Docs/Wiki/Scripts) - see [Advanced showcases](https://triliumnext.github.io/Docs/Wiki/Advanced-showcases) -* [REST API](https://triliumnext.github.io/Docs/Wiki/ETAPI) for automation +* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing notes and their relations +* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) +* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation * Scales well in both usability and performance upwards of 100 000 notes -* Touch optimized [mobile frontend](https://triliumnext.github.io/Docs/Wiki/Mobile-frontend) for smartphones and tablets -* [Night theme](https://triliumnext.github.io/Docs/Wiki/Themes) -* [Evernote](https://triliumnext.github.io/Docs/Wiki/Evernote-import) and [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/Markdown) -* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/Web-clipper) for easy saving of web content +* Touch optimized [mobile frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for smartphones and tablets +* [Night theme](https://triliumnext.github.io/Docs/Wiki/themes) +* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown) +* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy saving of web content ✨ Check out the following third-party resources for more TriliumNext related goodies: @@ -55,10 +55,10 @@ The two rooms linked above are mirrored, so you can use either XMPP or Matrix, f ## 🏗 Builds -Trilium is provided as either desktop application (Linux and Windows) or web application hosted on your server (Linux). Mac OS desktop build is available, but it is [unsupported](https://triliumnext.github.io/Docs/Wiki/FAQ#mac-os-support). +Trilium is provided as either desktop application (Linux and Windows) or web application hosted on your server (Linux). Mac OS desktop build is available, but it is [unsupported](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support). * If you want to use TriliumNext on the desktop, download binary release for your platform from [latest release](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run ```trilium``` executable. -* If you want to install TriliumNext on your own server, follow [this page](https://triliumnext.github.io/Docs/Wiki/Server-installation). +* If you want to install TriliumNext on your own server, follow [this page](https://triliumnext.github.io/Docs/Wiki/server-installation). * Currently only recent versions of Chrome and Firefox are supported (tested) browsers. TriliumNext will also provided as a Flatpak: @@ -69,7 +69,7 @@ TriliumNext will also provided as a Flatpak: [See wiki for complete list of documentation pages.](https://triliumnext.github.io/Docs) -You can also read [Patterns of personal knowledge base](https://triliumnext.github.io/Docs/Wiki/Patterns-of-personal-knowledge-base) to get some inspiration on how you might use Trilium. +You can also read [Patterns of personal knowledge base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) to get some inspiration on how you might use Trilium. ## 💻 Contribute From be978e893fcf5988dd88b0708be4a27a11d419f6 Mon Sep 17 00:00:00 2001 From: root-hal9000 <2352828+root-hal9000@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:49:21 -0500 Subject: [PATCH 08/25] Updates of chinese language readme - updated for content to match current English version - Changed wiki links from original zadam repo to TriliumNext docs - changed release/builds link to TriliumNext repo - removed gitpod reference - added the same heading icons as in english version - left a link referring to a third party wiki in chinese. Were they the ones who translated this? : https://github.com/baddate/trilium/wiki/ - did not mess with adding any of the new content such as "Why TriliumNext" - need an actual translator for a few of these --- README-ZH_CN.md | 71 +++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 40 deletions(-) diff --git a/README-ZH_CN.md b/README-ZH_CN.md index 8b2b21253..79530b53d 100644 --- a/README-ZH_CN.md +++ b/README-ZH_CN.md @@ -1,63 +1,54 @@ # Trilium Notes -[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) +[English](https://github.com/TriliumNext/Notes/blob/master/README.md) | [Chinese](https://github.com/TriliumNext/Notes/blob/master/README-ZH_CN.md) | [Russian](https://github.com/TriliumNext/Notes/blob/master/README.ru.md) | [Japanese](https://github.com/TriliumNext/Notes/blob/master/README.ja.md) | [Italian](https://github.com/TriliumNext/Notes/blob/master/README.it.md) -[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Trilium Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解: +TriliumNext Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)以快速了解: -![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png) +Trilium Screenshot -Ukraine is currently suffering from Russian aggression, please consider donating to [one of these charities](https://old.reddit.com/r/ukraine/comments/s6g5un/want_to_support_ukraine_heres_a_list_of_charities/). +## 🎁 特性 -drawing -Trilium Notes supports Ukraine! - -## 特性 - -* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://github.com/zadam/trilium/wiki/Cloning-notes)) -* 丰富的所见即所得笔记编辑功能,包括带有 Markdown [自动格式化功能的](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)表格,图像和[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support) -* 支持编辑[使用源代码的笔记](https://github.com/zadam/trilium/wiki/Code-notes),包括语法高亮显示 -* 笔记之间快速[导航](https://github.com/zadam/trilium/wiki/Note-navigation),全文搜索和[笔记聚焦](https://github.com/zadam/trilium/wiki/Note-hoisting) -* 无缝[笔记版本控制](https://github.com/zadam/trilium/wiki/Note-revisions) -* 笔记[属性](https://github.com/zadam/trilium/wiki/Attributes)可用于笔记组织,查询和高级[脚本编写](https://github.com/zadam/trilium/wiki/Scripts) -* [同步](https://github.com/zadam/trilium/wiki/Synchronization)与自托管同步服务器 +* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) +* 丰富的所见即所得笔记编辑功能,包括带有 Markdown [自动格式化功能的](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)表格,图像和[数学](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) +* 支持编辑[使用源代码的笔记](https://triliumnext.github.io/Docs/Wiki/code-notes),包括语法高亮显示 +* 笔记之间快速[导航](https://triliumnext.github.io/Docs/Wiki/note-navigation),全文搜索和[笔记聚焦](https://triliumnext.github.io/Docs/Wiki/note-hoisting) +* 无缝[笔记版本控制](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* 笔记[属性](https://triliumnext.github.io/Docs/Wiki/attributes)可用于笔记组织,查询和高级[脚本编写](https://triliumnext.github.io/Docs/Wiki/scripts) +* [同步](https://triliumnext.github.io/Docs/Wiki/synchronization)与自托管同步服务器 * 有一个[第三方提供的同步服务器托管服务](https://trilium.cc/paid-hosting) -* 公开地[分享](https://github.com/zadam/trilium/wiki/Sharing)(发布)笔记到互联网 -* 具有按笔记粒度的强大的[笔记加密](https://github.com/zadam/trilium/wiki/Protected-notes) +* 公开地[分享](https://triliumnext.github.io/Docs/Wiki/sharing)(发布)笔记到互联网 +* 具有按笔记粒度的强大的[笔记加密](https://triliumnext.github.io/Docs/Wiki/protected-notes) * 使用自带的 Excalidraw 来绘制图表(笔记类型“画布”) -* [关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map),用于可视化笔记及其关系 -* [脚本](https://github.com/zadam/trilium/wiki/Scripts) - 请参阅[高级功能展示](https://github.com/zadam/trilium/wiki/Advanced-showcases) +* [关系图](https://triliumnext.github.io/Docs/Wiki/relation-map)和[链接图](https://triliumnext.github.io/Docs/Wiki/link-map),用于可视化笔记及其关系 +* [脚本](https://triliumnext.github.io/Docs/Wiki/scripts) - 请参阅[高级功能展示](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) * 在拥有超过 10 万条笔记时仍能保持良好的可用性和性能 -* 针对智能手机和平板电脑进行优化的[用于移动设备的前端](https://github.com/zadam/trilium/wiki/Mobile-frontend) -* [夜间主题](https://github.com/zadam/trilium/wiki/Themes) -* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) 和 [Markdown 导入导出](https://github.com/zadam/trilium/wiki/Markdown)功能 -* 使用[网页剪藏](https://github.com/zadam/trilium/wiki/Web-clipper)轻松保存互联网上的内容 +* 针对智能手机和平板电脑进行优化的[用于移动设备的前端](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) +* [夜间主题](https://triliumnext.github.io/Docs/Wiki/themes) +* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) 和 [Markdown 导入导出](https://triliumnext.github.io/Docs/Wiki/markdown)功能 +* 使用[网页剪藏](https://triliumnext.github.io/Docs/Wiki/web-clipper)轻松保存互联网上的内容 -## 构建 +## 🏗 构建 -Trilium 可以用作桌面应用程序(Linux 和 Windows)或服务器(Linux)上托管的 Web 应用程序。虽然有 macOS 版本的桌面应用程序,但它[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。 +Trilium 可以用作桌面应用程序(Linux 和 Windows)或服务器(Linux)上托管的 Web 应用程序。虽然有 macOS 版本的桌面应用程序,但它[不受支持](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support)。 -* 如果要在桌面上使用 Trilium,请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制版本,解压缩该软件包并运行`trilium`可执行文件。 -* 如果要在服务器上安装 Trilium,请参考[此页面](https://github.com/zadam/trilium/wiki/Server-installation)。 +* 如果要在桌面上使用 Trilium,请从[最新版本](https://github.com/TriliumNext/Notes/releases/latest)下载适用于您平台的二进制版本,解压缩该软件包并运行`trilium`可执行文件。 +* 如果要在服务器上安装 Trilium,请参考[此页面](https://triliumnext.github.io/Docs/Wiki/server-installation)。 * 当前仅支持(测试过)最近发布的 Chrome 和 Firefox 浏览器。 Trilium 也提供 Flatpak: [](https://flathub.org/apps/details/com.github.zadam.trilium) -## 文档 +## 📝 文档 -[有关文档页面的完整列表,请参见 Wiki。](https://github.com/zadam/trilium/wiki/) +[有关文档页面的完整列表,请参见 Wiki。](https://triliumnext.github.io/Docs/Wiki/) * [Wiki 的中文翻译版本](https://github.com/baddate/trilium/wiki/) -您还可以阅读[个人知识库模式](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base),以获取有关如何使用 Trilium 的灵感。 +您还可以阅读[个人知识库模式](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge),以获取有关如何使用 Trilium 的灵感。 -## 贡献 +## 💻 贡献 -使用基于浏览器的开发环境 - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium) 或者克隆本仓库到本地,并运行 @@ -66,17 +57,17 @@ npm install npm run start-server ``` -## 致谢 +## 👏 致谢 * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市面上最好的所见即所得编辑器,拥有互动性强且聆听能力强的团队 * [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大到没有对手。没有它,Trilium Notes 将不会如此。 * [CodeMirror](https://github.com/codemirror/CodeMirror) - 支持大量语言的代码编辑器 -* [jsPlumb](https://github.com/jsplumb/jsplumb) - 强大的可视化连接库。用于[关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map) +* [jsPlumb](https://github.com/jsplumb/jsplumb) - 强大的可视化连接库。用于[关系图](https://triliumnext.github.io/Docs/Wiki/relation-map)和[链接图](https://triliumnext.github.io/Docs/Wiki/link-map) -## 捐赠 +## 🤝 捐赠 你可以通过 GitHub Sponsors,[PayPal](https://paypal.me/za4am) 或者比特币 (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) 来捐赠。 -## 许可证 +## 🔑 许可证 本程序是自由软件:你可以再发布本软件和/或修改本软件,只要你遵循 Free Software Foundation 发布的 GNU Affero General Public License 的第三版或者任何(由你选择)更晚的版本。 From 4ef6406a76f1a43930c694078cd7c89ec0a9c66b Mon Sep 17 00:00:00 2001 From: root-hal9000 <2352828+root-hal9000@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:00:08 -0500 Subject: [PATCH 09/25] Italian README links fixed - Italian: same basic clean up and change of links as the other languages **** Please note: Italian README file is not present in master branch - For chinese: changed title to TriliumNext and fixed general link to docs --- README-ZH_CN.md | 4 +-- README.it.md | 71 +++++++++++++++++++------------------------------ 2 files changed, 29 insertions(+), 46 deletions(-) diff --git a/README-ZH_CN.md b/README-ZH_CN.md index 79530b53d..ace7ae1c1 100644 --- a/README-ZH_CN.md +++ b/README-ZH_CN.md @@ -1,4 +1,4 @@ -# Trilium Notes +# TriliumNext Notes [English](https://github.com/TriliumNext/Notes/blob/master/README.md) | [Chinese](https://github.com/TriliumNext/Notes/blob/master/README-ZH_CN.md) | [Russian](https://github.com/TriliumNext/Notes/blob/master/README.ru.md) | [Japanese](https://github.com/TriliumNext/Notes/blob/master/README.ja.md) | [Italian](https://github.com/TriliumNext/Notes/blob/master/README.it.md) @@ -41,7 +41,7 @@ Trilium 也提供 Flatpak: ## 📝 文档 -[有关文档页面的完整列表,请参见 Wiki。](https://triliumnext.github.io/Docs/Wiki/) +[有关文档页面的完整列表,请参见 Wiki。](https://triliumnext.github.io/Docs/) * [Wiki 的中文翻译版本](https://github.com/baddate/trilium/wiki/) diff --git a/README.it.md b/README.it.md index 8f845ca46..e4db9c8b8 100644 --- a/README.it.md +++ b/README.it.md @@ -1,47 +1,34 @@ -# Trilium Notes +# TriliumNext Notes -## Trilium è in manutenzione - vedi i dettagli in https://github.com/zadam/trilium/issues/4620 +[English](https://github.com/TriliumNext/Notes/blob/master/README.md) | [Chinese](https://github.com/TriliumNext/Notes/blob/master/README-ZH_CN.md) | [Russian](https://github.com/TriliumNext/Notes/blob/master/README.ru.md) | [Japanese](https://github.com/TriliumNext/Notes/blob/master/README.ja.md) | [Italian](https://github.com/TriliumNext/Notes/blob/master/README.it.md) -Le discussioni preliminari sull'organizzazione si stanno svolgendo in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions). +TriliumNext Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni. -[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) +Vedi [fotografie](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) per una panoramica veloce: - -Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni. - -Vedi [fotografie](https://github.com/zadam/trilium/wiki/Screenshot-tour) per una panoramica veloce: - -Trilium Screenshot - -L'Ucraina si sta difendendo dall'aggressione russa, considera [donare all'esercito ucraino o a organizzazioni umanitarie](https://standforukraine.com/). - -

- drawing - Trilium Notes supports Ukraine! -

+Trilium Screenshot ## 🎁 Funzionalità - -* Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://github.com/zadam/trilium/wiki/Cloning-notes)) -* Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://github.com/zadam/trilium/wiki/Text-notes#math-support) e con [formattazione automatica](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) per markdown -* Supporto per la modifica di [appunti con codice sorgente](https://github.com/zadam/trilium/wiki/Code-notes), con evidenziazione della sintassi -* [Navigazione veloce](https://github.com/zadam/trilium/wiki/Note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://github.com/zadam/trilium/wiki/Note-hoisting) -* Supporto integrato ed automatico per le [revisioni degli appunti](https://github.com/zadam/trilium/wiki/Note-revisions) -* Gli [attributi](https://github.com/zadam/trilium/wiki/Attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione). -* [Sincronizzazione](https://github.com/zadam/trilium/wiki/Synchronization) con un server di sincronizzazione auto-ospitato +* Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) +* Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) e con [formattazione automatica](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) per markdown +* Supporto per la modifica di [appunti con codice sorgente](https://triliumnext.github.io/Docs/Wiki/code-notes), con evidenziazione della sintassi +* [Navigazione veloce](https://triliumnext.github.io/Docs/Wiki/note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://triliumnext.github.io/Docs/Wiki/note-hoisting) +* Supporto integrato ed automatico per le [revisioni degli appunti](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* Gli [attributi](https://triliumnext.github.io/Docs/Wiki/attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione). +* [Sincronizzazione](https://triliumnext.github.io/Docs/Wiki/synchronization) con un server di sincronizzazione auto-ospitato * c'è un [servizio di terze parti per ospitare server di sincronizzazione](https://trilium.cc/paid-hosting) -* [Condivisione](https://github.com/zadam/trilium/wiki/Sharing) (pubblicazione) di appunti sull'internet pubblico -* Robusta [crittografia](https://github.com/zadam/trilium/wiki/Protected-notes) configurabile singolarmente per ogni appunto +* [Condivisione](https://triliumnext.github.io/Docs/Wiki/sharing) (pubblicazione) di appunti sull'internet pubblico +* Robusta [crittografia](https://triliumnext.github.io/Docs/Wiki/protected-notes) configurabile singolarmente per ogni appunto * Disegno di diagrammi con Excalidraw (tipo di appunto "canvas") -* [Mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map) per visualizzare gli appunti e le loro relazioni -* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - vedi [Esempi avanzati](https://github.com/zadam/trilium/wiki/Advanced-showcases) -* [API REST](https://github.com/zadam/trilium/wiki/ETAPI) per l'automazione +* [Mappe relazionali](https://triliumnext.github.io/Docs/Wiki/relation-map) e [mappe di collegamenti](https://triliumnext.github.io/Docs/Wiki/link-map) per visualizzare gli appunti e le loro relazioni +* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - vedi [Esempi avanzati](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) +* [API REST](https://triliumnext.github.io/Docs/Wiki/etapi) per l'automazione * Si adatta bene sia in termini di usabilità che di prestazioni fino ad oltre 100 000 appunti -* Interfaccia utente ottimizzata per il [mobile](https://github.com/zadam/trilium/wiki/Mobile-frontend) (smartphone e tablet) -* [Tema Notturno](https://github.com/zadam/trilium/wiki/Themes) -* Supporto per importazione ed esportazione da e per [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) e [Markdown import](https://github.com/zadam/trilium/wiki/Markdown) -* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) per il salvataggio facile di contenuti web +* Interfaccia utente ottimizzata per il [mobile](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) (smartphone e tablet) +* [Tema Notturno](https://triliumnext.github.io/Docs/Wiki/themes) +* Supporto per importazione ed esportazione da e per [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) e [Markdown import](https://triliumnext.github.io/Docs/Wiki/markdown) +* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) per il salvataggio facile di contenuti web Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti. @@ -49,10 +36,10 @@ Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) p ## 🏗 Rilasci -Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support). +Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support). -* Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/zadam/trilium/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```. -* Se vuoi installare Trilium su un server, segui [questa pagina](https://github.com/zadam/trilium/wiki/Server-installation). +* Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/TriliumNext/Notes/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```. +* Se vuoi installare Trilium su un server, segui [questa pagina](https://triliumnext.github.io/Docs/Wiki/server-installation). * Per ora solo Chrome e Firefox sono i browser supportati (testati). Trilium è anche disponibile su Flatpak: @@ -61,16 +48,12 @@ Trilium è anche disponibile su Flatpak: ## 📝 Documentazione -[Vedi la wiki per una lista completa delle pagine di documentazione.](https://github.com/zadam/trilium/wiki/) +[Vedi la wiki per una lista completa delle pagine di documentazione.](https://triliumnext.github.io/Docs/) -Puoi anche leggere ["Patterns of personal knowledge base"](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) per avere un'ispirazione su come potresti utilizzare Trilium. +Puoi anche leggere ["Patterns of personal knowledge base"](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) per avere un'ispirazione su come potresti utilizzare Trilium. ## 💻 Contribuire -Usa un ambiente di sviluppo basato su browser - -[![Apri in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium) - O clona localmente ed esegui ``` npm install @@ -82,7 +65,7 @@ npm run start-server * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva * [FancyTree](https://github.com/mar10/fancytree) - libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa. * [CodeMirror](https://github.com/codemirror/CodeMirror) - editor di codice con supporto per un'enorme quantità di linguaggi. -* [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la connettività visuale senza pari. Utilizzata per [mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map). +* [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la connettività visuale senza pari. Utilizzata per [mappe relazionali](https://triliumnext.github.io/Docs/Wiki/relation-map) e [mappe di collegamenti](https://triliumnext.github.io/Docs/Wiki/link-map). ## 🤝 Supporto From 7562c2868693d85c86a6b8fa6c36f47519ccbb9e Mon Sep 17 00:00:00 2001 From: root-hal9000 <2352828+root-hal9000@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:06:44 -0500 Subject: [PATCH 10/25] updated links in japanese readme --- README.ja.md | 61 +++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/README.ja.md b/README.ja.md index f1c2e9c66..3140dc38d 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,48 +1,41 @@ # Trilium Notes -[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) +[English](https://github.com/TriliumNext/Notes/blob/master/README.md) | [Chinese](https://github.com/TriliumNext/Notes/blob/master/README-ZH_CN.md) | [Russian](https://github.com/TriliumNext/Notes/blob/master/README.ru.md) | [Japanese](https://github.com/TriliumNext/Notes/blob/master/README.ja.md) | [Italian](https://github.com/TriliumNext/Notes/blob/master/README.it.md) -Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://github.com/zadam/trilium/wiki/Screenshot-tour)をご覧ください: +Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)をご覧ください: -Trilium Screenshot - -ウクライナは現在、ロシアの侵略から自国を守っています。[ウクライナ軍や人道的な慈善団体への寄付](https://standforukraine.com/)をご検討ください。 - -

- drawing - Trilium Notes supports Ukraine! -

+Trilium Screenshot ## 🎁 特徴 -* ノートは、任意の深さのツリーに配置できます。単一のノートをツリー内の複数の場所に配置できます ([cloning](https://github.com/zadam/trilium/wiki/Cloning-notes) を参照) -* マークダウン[オートフォーマット](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)による、表、画像、[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)などの豊富な WYSIWYG ノート編集機能 -* シンタックスハイライトを含む[ソースコード付きノート](https://github.com/zadam/trilium/wiki/Code-notes)の編集をサポート -* [ノート間のナビゲーション](https://github.com/zadam/trilium/wiki/Note-navigation)、全文検索、[ノートホイスト](https://github.com/zadam/trilium/wiki/Note-hoisting)が高速かつ簡単に行えます -* シームレスな[ノートのバージョン管理](https://github.com/zadam/trilium/wiki/Note-revisions) -* ノート[属性](https://github.com/zadam/trilium/wiki/Attributes)は、ノート整理、クエリ、高度な[スクリプト](https://github.com/zadam/trilium/wiki/Scripts)に使用できます -* 自己ホスト型同期サーバーとの[同期](https://github.com/zadam/trilium/wiki/Synchronization) +* ノートは、任意の深さのツリーに配置できます。単一のノートをツリー内の複数の場所に配置できます ([cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes) を参照) +* マークダウン[オートフォーマット](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)による、表、画像、[数学](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support)などの豊富な WYSIWYG ノート編集機能 +* シンタックスハイライトを含む[ソースコード付きノート](https://triliumnext.github.io/Docs/Wiki/code-notes)の編集をサポート +* [ノート間のナビゲーション](https://triliumnext.github.io/Docs/Wiki/note-navigation)、全文検索、[ノートホイスト](https://triliumnext.github.io/Docs/Wiki/note-hoisting)が高速かつ簡単に行えます +* シームレスな[ノートのバージョン管理](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* ノート[属性](https://triliumnext.github.io/Docs/Wiki/Attributes)は、ノート整理、クエリ、高度な[スクリプト](https://triliumnext.github.io/Docs/Wiki/scripts)に使用できます +* 自己ホスト型同期サーバーとの[同期](https://triliumnext.github.io/Docs/Wiki/synchronization) * [同期サーバーをホストするサードパーティ・サービス](https://trilium.cc/paid-hosting)があります -* 公開インターネットへのノートの[共有](https://github.com/zadam/trilium/wiki/Sharing)(公開) -* ノートごとの粒度を持つ強力な[ノート暗号化](https://github.com/zadam/trilium/wiki/Protected-notes) +* 公開インターネットへのノートの[共有](https://triliumnext.github.io/Docs/Wiki/sharing)(公開) +* ノートごとの粒度を持つ強力な[ノート暗号化](https://triliumnext.github.io/Docs/Wiki/protected-notes) * 組み込みの Excalidraw を使用した図のスケッチ (ノート タイプ"キャンバス") -* ノートとその関係を可視化するための[関係図](https://github.com/zadam/trilium/wiki/Relation-map)と[リンクマップ](https://github.com/zadam/trilium/wiki/Link-map) -* [スクリプティング](https://github.com/zadam/trilium/wiki/Scripts) - [高度なショーケース](https://github.com/zadam/trilium/wiki/Advanced-showcases)を参照 -* 自動化のための [REST API](https://github.com/zadam/trilium/wiki/ETAPI) +* ノートとその関係を可視化するための[関係図](https://triliumnext.github.io/Docs/Wiki/relation-map)と[リンクマップ](https://triliumnext.github.io/Docs/Wiki/link-map) +* [スクリプティング](https://triliumnext.github.io/Docs/Wiki/scripts) - [高度なショーケース](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)を参照 +* 自動化のための [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) * ユーザビリティとパフォーマンスの両方で 100 000 ノート以上に拡張可能 -* スマートフォンとタブレット向けのタッチ最適化[モバイルフロントエンド](https://github.com/zadam/trilium/wiki/Mobile-frontend) -* [ナイトテーマ](https://github.com/zadam/trilium/wiki/Themes) -* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) と [Markdown のインポートとエクスポート](https://github.com/zadam/trilium/wiki/Markdown) -* Web コンテンツを簡単に保存するための [Web クリッパー](https://github.com/zadam/trilium/wiki/Web-clipper) +* スマートフォンとタブレット向けのタッチ最適化[モバイルフロントエンド](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) +* [ナイトテーマ](https://triliumnext.github.io/Docs/Wiki/themes) +* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) と [Markdown のインポートとエクスポート](https://triliumnext.github.io/Docs/Wiki/Markdown) +* Web コンテンツを簡単に保存するための [Web クリッパー](https://triliumnext.github.io/Docs/Wiki/web-clipper) サードパーティのテーマ、スクリプト、プラグインなどは、 [awesome-trilium](https://github.com/Nriver/awesome-trilium) をチェックしてください。 ## 🏗 ビルド -Trilium は、デスクトップアプリケーション(Linux、Windows)またはサーバー上でホストされるウェブアプリケーション(Linux)として提供されます。 Mac OS のデスクトップビルドも利用可能ですが、 [unsupported](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support) となっています。 +Trilium は、デスクトップアプリケーション(Linux、Windows)またはサーバー上でホストされるウェブアプリケーション(Linux)として提供されます。 Mac OS のデスクトップビルドも利用可能ですが、 [unsupported](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support) となっています。 -* デスクトップで Trilium を使用したい場合は、 [latest release](https://github.com/zadam/trilium/releases/latest) からお使いのプラットフォームのバイナリリリースをダウンロードし、パッケージを解凍して ``trilium`` の実行ファイルを実行してください。 -* サーバーに Trilium をインストールする場合は、[このページ](https://github.com/zadam/trilium/wiki/Server-installation)に従ってください。 +* デスクトップで Trilium を使用したい場合は、 [latest release](https://github.com/TriliumNext/Notes/releases/latest) からお使いのプラットフォームのバイナリリリースをダウンロードし、パッケージを解凍して ``trilium`` の実行ファイルを実行してください。 +* サーバーに Trilium をインストールする場合は、[このページ](https://triliumnext.github.io/Docs/Wiki/server-installation)に従ってください。 * 現在、対応(動作確認)しているブラウザは、最近の Chrome と Firefox のみです。 Trilium は Flatpak としても提供されます: @@ -51,16 +44,12 @@ Trilium は Flatpak としても提供されます: ## 📝 ドキュメント -[ドキュメントページの全リストはwikiをご覧ください。](https://github.com/zadam/trilium/wiki/) +[ドキュメントページの全リストはwikiをご覧ください。](https://triliumnext.github.io/Docs/) -また、[個人的な知識基盤のパターン](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base)を読むと、 Trilium の使い方のヒントを得ることができます。 +また、[個人的な知識基盤のパターン](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)を読むと、 Trilium の使い方のヒントを得ることができます。 ## 💻 コントリビュート -ブラウザベースの開発環境を使用 - -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium) - または、ローカルにクローンして実行 ``` npm install @@ -72,7 +61,7 @@ npm run start-server * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市場で最高の WYSIWYG エディター、非常にインタラクティブで聞き上手なチーム * [FancyTree](https://github.com/mar10/fancytree) - 真の競争相手がいない、非常に機能豊富なツリーライブラリです。 Trilium Notes は、これなしでは成り立たないでしょう。 * [CodeMirror](https://github.com/codemirror/CodeMirror) - 膨大な数の言語をサポートするコードエディタ -* [jsPlumb](https://github.com/jsplumb/jsplumb) - 競合のないビジュアルコネクティビティライブラリです。[関係図](https://github.com/zadam/trilium/wiki/Relation-map)、[リンク図](https://github.com/zadam/trilium/wiki/Link-map)で使用。 +* [jsPlumb](https://github.com/jsplumb/jsplumb) - 競合のないビジュアルコネクティビティライブラリです。[関係図](https://triliumnext.github.io/Docs/Wiki/relation-map)、[リンク図](https://triliumnext.github.io/Docs/Wiki/link-map)で使用。 ## 🤝 サポート From 75d583e064b6765e6a88894b3072ef62cc349dba Mon Sep 17 00:00:00 2001 From: root-hal9000 <2352828+root-hal9000@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:16:58 -0500 Subject: [PATCH 11/25] Russian language README fixes - fixes links and other small issues that differed from the English version, same as other languages - Fixed forgotten change of title in Japanese version --- README.ja.md | 2 +- README.ru.md | 70 ++++++++++++++++++++++------------------------------ 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/README.ja.md b/README.ja.md index 3140dc38d..ae3fc88d3 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,4 +1,4 @@ -# Trilium Notes +# TriliumNext Notes [English](https://github.com/TriliumNext/Notes/blob/master/README.md) | [Chinese](https://github.com/TriliumNext/Notes/blob/master/README-ZH_CN.md) | [Russian](https://github.com/TriliumNext/Notes/blob/master/README.ru.md) | [Japanese](https://github.com/TriliumNext/Notes/blob/master/README.ja.md) | [Italian](https://github.com/TriliumNext/Notes/blob/master/README.it.md) diff --git a/README.ru.md b/README.ru.md index 4bf087deb..7964c0b48 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,54 +1,44 @@ -# Trilium Notes +# TriliumNext Notes -[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) +[English](https://github.com/TriliumNext/Notes/blob/master/README.md) | [Chinese](https://github.com/TriliumNext/Notes/blob/master/README-ZH_CN.md) | [Russian](https://github.com/TriliumNext/Notes/blob/master/README.ru.md) | [Japanese](https://github.com/TriliumNext/Notes/blob/master/README.ja.md) | [Italian](https://github.com/TriliumNext/Notes/blob/master/README.it.md) -[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour): +Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://triliumnext.github.io/Docs/Wiki/screenshot-tour): -![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png) +Trilium Screenshot -Ukraine is currently suffering from Russian aggression, please consider donating to [one of these charities](https://old.reddit.com/r/ukraine/comments/s6g5un/want_to_support_ukraine_heres_a_list_of_charities/). +## 🎁 Возможности -drawing -Trilium Notes supports Ukraine! - -## Возможности - -* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://github.com/zadam/trilium/wiki/Cloning-notes)) -* Продвинутый визуальный редактор (WYSIWYG) позволяет работать с таблицами, изображениями, [формулами](https://github.com/zadam/trilium/wiki/Text-notes#math-support) и разметкой markdown, имеет [автоформатирование](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) -* Редактирование [заметок с исходным кодом](https://github.com/zadam/trilium/wiki/Code-notes), включая подсветку синтаксиса -* Быстрая и простая [навигация между заметками](https://github.com/zadam/trilium/wiki/Note-navigation), полнотекстовый поиск и [выделение заметок](https://github.com/zadam/trilium/wiki/Note-hoisting) в отдельный блок -* Бесшовное [версионирование заметки](https://github.com/zadam/trilium/wiki/Note-revisions) -* Специальные [атрибуты](https://github.com/zadam/trilium/wiki/Attributes) позволяют гибко организовать структуру, используются для поиска и продвинутого [скриптинга](https://github.com/zadam/trilium/wiki/Scripts) -* [Синхронизация](https://github.com/zadam/trilium/wiki/Synchronization) заметок со своим сервером -* Надёжное [шифрование](https://github.com/zadam/trilium/wiki/Protected-notes) с детализацией по каждой заметке -* [Карты связей](https://github.com/zadam/trilium/wiki/Relation-map) и [карты ссылок](https://github.com/zadam/trilium/wiki/Link-map) для визуализации их взяимосвязей -* [Скрипты](https://github.com/zadam/trilium/wiki/Scripts) - см. [продвинутые примеры](https://github.com/zadam/trilium/wiki/Advanced-showcases) +* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) +* Продвинутый визуальный редактор (WYSIWYG) позволяет работать с таблицами, изображениями, [формулами](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) и разметкой markdown, имеет [автоформатирование](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) +* Редактирование [заметок с исходным кодом](https://triliumnext.github.io/Docs/Wiki/code-notes), включая подсветку синтаксиса +* Быстрая и простая [навигация между заметками](https://triliumnext.github.io/Docs/Wiki/note-navigation), полнотекстовый поиск и [выделение заметок](https://triliumnext.github.io/Docs/Wiki/note-hoisting) в отдельный блок +* Бесшовное [версионирование заметки](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* Специальные [атрибуты](https://triliumnext.github.io/Docs/Wiki/attributes) позволяют гибко организовать структуру, используются для поиска и продвинутого [скриптинга](https://triliumnext.github.io/Docs/Wiki/scripts) +* [Синхронизация](https://triliumnext.github.io/Docs/Wiki/synchronization) заметок со своим сервером +* Надёжное [шифрование](https://triliumnext.github.io/Docs/Wiki/protected-notes) с детализацией по каждой заметке +* [Карты связей](https://triliumnext.github.io/Docs/Wiki/relation-map) и [карты ссылок](https://triliumnext.github.io/Docs/Wiki/link-map) для визуализации их взяимосвязей +* [Скрипты](https://triliumnext.github.io/Docs/Wiki/scripts) - см. [продвинутые примеры](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) * Хорошо масштабируется, как по удобству использования, так и по производительности до 100000 заметок -* Оптимизированный [мобильный фронтенд](https://github.com/zadam/trilium/wiki/Mobile-frontend) смартфонов и планшетов -* [Темная тема](https://github.com/zadam/trilium/wiki/Themes) -* Импорт и экпорт [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) и данных в [markdown](https://github.com/zadam/trilium/wiki/Markdown) формате -* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) для удобного сохранения веб-контента +* Оптимизированный [мобильный фронтенд](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) смартфонов и планшетов +* [Темная тема](https://triliumnext.github.io/Docs/Wiki/themes) +* Импорт и экпорт [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) и данных в [markdown](https://triliumnext.github.io/Docs/Wiki/markdown) формате +* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) для удобного сохранения веб-контента -## Сборки +## 🏗 Сборки -Trilium предоставляется в виде десктопного приложения (Linux и Windows) или веб-приложения, размещенного на вашем сервере (Linux). Доступна сборка Mac OS, но она [не поддерживается](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support). +Trilium предоставляется в виде десктопного приложения (Linux и Windows) или веб-приложения, размещенного на вашем сервере (Linux). Доступна сборка Mac OS, но она [не поддерживается](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support). -* Если вы хотите использовать Trilium на десктопе, скачайте архив для своей платформы со страницы [релизов](https://github.com/zadam/trilium/releases/latest), распакуйте и запустите исполняемый файл ```trilium```. -* Если вы хотите установить Trilium на сервере, следуйте этой [инструкции](https://github.com/zadam/trilium/wiki/Server-installation). +* Если вы хотите использовать Trilium на десктопе, скачайте архив для своей платформы со страницы [релизов](https://github.com/TriliumNext/Notes/releases/latest), распакуйте и запустите исполняемый файл ```trilium```. +* Если вы хотите установить Trilium на сервере, следуйте этой [инструкции](https://triliumnext.github.io/Docs/Wiki/server-installation). * В данный момент поддерживаются (протестированы) последние версии браузеров Chrome и Firefox. -## Документация +## 📝 Документация -[Полный список страниц документации доступен в Wiki.](https://github.com/zadam/trilium/wiki/) +[Полный список страниц документации доступен в Wiki.](https://triliumnext.github.io/Docs/) -Вы также можете ознакомиться с [шаблонами персональных баз знаний](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base), чтобы получить представление о том, как можно использовать Trilium. +Вы также можете ознакомиться с [шаблонами персональных баз знаний](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge), чтобы получить представление о том, как можно использовать Trilium. -## Участвуйте в разработке - -Используйте онлайн среду разработки в браузере - -[![Открыть в Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium) +## 💻 Участвуйте в разработке Или склонируйте на своё устройство и запустите ``` @@ -56,13 +46,13 @@ npm install npm run start-server ``` -## Благодарности +## 👏 Благодарности * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - лучший WYSIWYG редактор, очень активная и внимательная команда. * [FancyTree](https://github.com/mar10/fancytree) - многофункциональная библиотека для создания древовидных структур. Вне конкуренции. Без него Trilium Notes не были бы таким. * [CodeMirror](https://github.com/codemirror/CodeMirror) - редактор кода с поддержкой огромного количество языков. -* [jsPlumb](https://github.com/jsplumb/jsplumb) - библиотека для визуализации связей. Вне конкуренции. Используется в [картах связей](https://github.com/zadam/trilium/wiki/Relation-map) и [картах ссылок](https://github.com/zadam/trilium/wiki/Link-map). +* [jsPlumb](https://github.com/jsplumb/jsplumb) - библиотека для визуализации связей. Вне конкуренции. Используется в [картах связей](https://triliumnext.github.io/Docs/Wiki/relation-map) и [картах ссылок](https://triliumnext.github.io/Docs/Wiki/link-map). -## Лицензия +## 🔑 Лицензия Эта программа является бесплатным программным обеспечением: вы можете распространять и/или изменять ее в соответствии с условиями GNU Affero General Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии. From 8b799755003a31e7d765f6cc07f9c533b78c6e08 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Thu, 18 Jul 2024 19:29:34 +0300 Subject: [PATCH 12/25] server: Fix SVG backwards compatibility (fixes #238) --- src/becca/entities/bnote.ts | 2 +- src/routes/api/image.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/becca/entities/bnote.ts b/src/becca/entities/bnote.ts index edb7f67e3..a1d4cf395 100644 --- a/src/becca/entities/bnote.ts +++ b/src/becca/entities/bnote.ts @@ -1151,7 +1151,7 @@ class BNote extends AbstractBeccaEntity { .map(row => new BAttachment(row)); } - getAttachmentByTitle(title: string): BAttachment { + getAttachmentByTitle(title: string): BAttachment | undefined { // cannot use SQL to filter by title since it can be encrypted return this.getAttachments().filter(attachment => attachment.title === title)[0]; } diff --git a/src/routes/api/image.ts b/src/routes/api/image.ts index 0c6f29124..926ad3ead 100644 --- a/src/routes/api/image.ts +++ b/src/routes/api/image.ts @@ -44,9 +44,8 @@ function renderSvgAttachment(image: BNote | BRevision, res: Response, attachment let svg: string | Buffer = '' const attachment = image.getAttachmentByTitle(attachmentName); - const content = attachment.getContent(); if (attachment) { - svg = content; + svg = attachment.getContent(); } else { // backwards compatibility, before attachments, the SVG was stored in the main note content as a separate key const contentSvg = image.getJsonContentSafely()?.svg; From 508b53d47ba82de9aeef6ac839f0db00ad66e680 Mon Sep 17 00:00:00 2001 From: Nriver <6752679+Nriver@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:00:53 +0800 Subject: [PATCH 13/25] update Chinese README --- README-ZH_CN.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/README-ZH_CN.md b/README-ZH_CN.md index ace7ae1c1..c494964e6 100644 --- a/README-ZH_CN.md +++ b/README-ZH_CN.md @@ -6,12 +6,30 @@ TriliumNext Notes 是一个层次化的笔记应用程序,专注于建立大 Trilium Screenshot +## ⚠️ 为什么选择TriliumNext? + +[原始的Trilium项目目前处于维护模式](https://github.com/zadam/trilium/issues/4620) + +## 🗭 与我们讨论 + +欢迎加入我们的官方讨论和社区。我们专注于Trilium的开发,乐于听取您对功能、建议或问题的意见! + +- [Matrix](https://matrix.to/#/#triliumnext:matrix.org)(用于同步讨论) +- [Github Discussions](https://github.com/TriliumNext/Notes/discussions)(用于异步讨论) +- [Wiki](https://triliumnext.github.io/Docs/)(用于常见操作问题和用户指南) + +上面链接的两个房间是镜像的,所以您可以在任意平台上使用XMPP或者Matrix来和我们交流。 + +### 非官方社区 + +[Trilium Rocks](https://discord.gg/aqdX9mXX4r) + ## 🎁 特性 * 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) -* 丰富的所见即所得笔记编辑功能,包括带有 Markdown [自动格式化功能的](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)表格,图像和[数学](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) +* 丰富的所见即所得笔记编辑功能,包括带有 Markdown [自动格式化功能的](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)表格,图像和[数学公式](https://triliumnext.github.io/Docs/Wiki/text-notes#math-support) * 支持编辑[使用源代码的笔记](https://triliumnext.github.io/Docs/Wiki/code-notes),包括语法高亮显示 -* 笔记之间快速[导航](https://triliumnext.github.io/Docs/Wiki/note-navigation),全文搜索和[笔记聚焦](https://triliumnext.github.io/Docs/Wiki/note-hoisting) +* 笔记之间快速[导航](https://triliumnext.github.io/Docs/Wiki/note-navigation),全文搜索和[提升笔记](https://triliumnext.github.io/Docs/Wiki/note-hoisting) * 无缝[笔记版本控制](https://triliumnext.github.io/Docs/Wiki/note-revisions) * 笔记[属性](https://triliumnext.github.io/Docs/Wiki/attributes)可用于笔记组织,查询和高级[脚本编写](https://triliumnext.github.io/Docs/Wiki/scripts) * [同步](https://triliumnext.github.io/Docs/Wiki/synchronization)与自托管同步服务器 @@ -21,12 +39,18 @@ TriliumNext Notes 是一个层次化的笔记应用程序,专注于建立大 * 使用自带的 Excalidraw 来绘制图表(笔记类型“画布”) * [关系图](https://triliumnext.github.io/Docs/Wiki/relation-map)和[链接图](https://triliumnext.github.io/Docs/Wiki/link-map),用于可视化笔记及其关系 * [脚本](https://triliumnext.github.io/Docs/Wiki/scripts) - 请参阅[高级功能展示](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) +* 可用于自动化的 [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) * 在拥有超过 10 万条笔记时仍能保持良好的可用性和性能 * 针对智能手机和平板电脑进行优化的[用于移动设备的前端](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) * [夜间主题](https://triliumnext.github.io/Docs/Wiki/themes) * [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) 和 [Markdown 导入导出](https://triliumnext.github.io/Docs/Wiki/markdown)功能 * 使用[网页剪藏](https://triliumnext.github.io/Docs/Wiki/web-clipper)轻松保存互联网上的内容 +✨ 查看以下第三方资源,获取更多关于TriliumNext的好东西: + +- [awesome-trilium](https://github.com/Nriver/awesome-trilium):提供第三方主题、脚本、插件等资源的列表。 +- [TriliumRocks!](https://trilium.rocks/):提供教程、指南等更多内容。 + ## 🏗 构建 Trilium 可以用作桌面应用程序(Linux 和 Windows)或服务器(Linux)上托管的 Web 应用程序。虽然有 macOS 版本的桌面应用程序,但它[不受支持](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support)。 From f18939942bd3876197b6768413d33525ae01b62a Mon Sep 17 00:00:00 2001 From: CrO2Cl2 <111274010+CrO2Cl2@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:27:29 +0000 Subject: [PATCH 14/25] copy Italian README by MatMasIt from Zadams Repo --- README.it.md.1 | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 README.it.md.1 diff --git a/README.it.md.1 b/README.it.md.1 new file mode 100644 index 000000000..8f845ca46 --- /dev/null +++ b/README.it.md.1 @@ -0,0 +1,93 @@ +# Trilium Notes + +## Trilium è in manutenzione - vedi i dettagli in https://github.com/zadam/trilium/issues/4620 + +Le discussioni preliminari sull'organizzazione si stanno svolgendo in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions). + +[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) + + +Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni. + +Vedi [fotografie](https://github.com/zadam/trilium/wiki/Screenshot-tour) per una panoramica veloce: + +Trilium Screenshot + +L'Ucraina si sta difendendo dall'aggressione russa, considera [donare all'esercito ucraino o a organizzazioni umanitarie](https://standforukraine.com/). + +

+ drawing + Trilium Notes supports Ukraine! +

+ +## 🎁 Funzionalità + + +* Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://github.com/zadam/trilium/wiki/Cloning-notes)) +* Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://github.com/zadam/trilium/wiki/Text-notes#math-support) e con [formattazione automatica](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) per markdown +* Supporto per la modifica di [appunti con codice sorgente](https://github.com/zadam/trilium/wiki/Code-notes), con evidenziazione della sintassi +* [Navigazione veloce](https://github.com/zadam/trilium/wiki/Note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://github.com/zadam/trilium/wiki/Note-hoisting) +* Supporto integrato ed automatico per le [revisioni degli appunti](https://github.com/zadam/trilium/wiki/Note-revisions) +* Gli [attributi](https://github.com/zadam/trilium/wiki/Attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione). +* [Sincronizzazione](https://github.com/zadam/trilium/wiki/Synchronization) con un server di sincronizzazione auto-ospitato + * c'è un [servizio di terze parti per ospitare server di sincronizzazione](https://trilium.cc/paid-hosting) +* [Condivisione](https://github.com/zadam/trilium/wiki/Sharing) (pubblicazione) di appunti sull'internet pubblico +* Robusta [crittografia](https://github.com/zadam/trilium/wiki/Protected-notes) configurabile singolarmente per ogni appunto +* Disegno di diagrammi con Excalidraw (tipo di appunto "canvas") +* [Mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map) per visualizzare gli appunti e le loro relazioni +* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - vedi [Esempi avanzati](https://github.com/zadam/trilium/wiki/Advanced-showcases) +* [API REST](https://github.com/zadam/trilium/wiki/ETAPI) per l'automazione +* Si adatta bene sia in termini di usabilità che di prestazioni fino ad oltre 100 000 appunti +* Interfaccia utente ottimizzata per il [mobile](https://github.com/zadam/trilium/wiki/Mobile-frontend) (smartphone e tablet) +* [Tema Notturno](https://github.com/zadam/trilium/wiki/Themes) +* Supporto per importazione ed esportazione da e per [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) e [Markdown import](https://github.com/zadam/trilium/wiki/Markdown) +* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) per il salvataggio facile di contenuti web + + +Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti. + +## 🏗 Rilasci + + +Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support). + +* Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/zadam/trilium/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```. +* Se vuoi installare Trilium su un server, segui [questa pagina](https://github.com/zadam/trilium/wiki/Server-installation). + * Per ora solo Chrome e Firefox sono i browser supportati (testati). + +Trilium è anche disponibile su Flatpak: + +[](https://flathub.org/apps/details/com.github.zadam.trilium) + +## 📝 Documentazione + +[Vedi la wiki per una lista completa delle pagine di documentazione.](https://github.com/zadam/trilium/wiki/) + +Puoi anche leggere ["Patterns of personal knowledge base"](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) per avere un'ispirazione su come potresti utilizzare Trilium. + +## 💻 Contribuire + +Usa un ambiente di sviluppo basato su browser + +[![Apri in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium) + +O clona localmente ed esegui +``` +npm install +npm run start-server +``` + +## 📢 Riconoscimenti + +* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva +* [FancyTree](https://github.com/mar10/fancytree) - libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa. +* [CodeMirror](https://github.com/codemirror/CodeMirror) - editor di codice con supporto per un'enorme quantità di linguaggi. +* [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la connettività visuale senza pari. Utilizzata per [mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map). + +## 🤝 Supporto + +È possibile supportare Trilium attraverso Github Sponsors, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). + +## 🔑 Licenza + +Questo programma è software libero: è possibile redistribuirlo e/o modificarlo nei termini della GNU Affero General Public License come pubblicata dalla Free Software Foundation, sia la versione 3 della Licenza, o (a propria scelta) qualsiasi versione successiva. From ab234592990c2e47edb886eecfe494a368a5a249 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 19 Jul 2024 19:30:27 +0300 Subject: [PATCH 15/25] server: Fix script execution error (closes #244) --- src/services/backend_script_api.ts | 4 ++-- src/services/backend_script_api_interface.ts | 4 ++-- src/services/script.ts | 4 ---- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/services/backend_script_api.ts b/src/services/backend_script_api.ts index 9b72929a4..29acac388 100644 --- a/src/services/backend_script_api.ts +++ b/src/services/backend_script_api.ts @@ -63,7 +63,7 @@ interface Api { * Note where the script started executing (entrypoint). * As an analogy, in C this would be the file which contains the main() function of the current process. */ - startNote?: BNote; + startNote?: BNote | null; /** * Note where the script is currently executing. This comes into play when your script is spread in multiple code @@ -76,7 +76,7 @@ interface Api { /** * Entity whose event triggered this execution */ - originEntity?: AbstractBeccaEntity; + originEntity?: AbstractBeccaEntity | null; /** * Axios library for HTTP requests. See {@link https://axios-http.com} for documentation diff --git a/src/services/backend_script_api_interface.ts b/src/services/backend_script_api_interface.ts index f74b65ad7..5ffdf56c5 100644 --- a/src/services/backend_script_api_interface.ts +++ b/src/services/backend_script_api_interface.ts @@ -3,8 +3,8 @@ import AbstractBeccaEntity = require("../becca/entities/abstract_becca_entity"); import BNote = require("../becca/entities/bnote"); export interface ApiParams { - startNote?: BNote; - originEntity?: AbstractBeccaEntity; + startNote?: BNote | null; + originEntity?: AbstractBeccaEntity | null; pathParams?: string[], req?: Request, res?: Response diff --git a/src/services/script.ts b/src/services/script.ts index 975964b18..1a864353a 100644 --- a/src/services/script.ts +++ b/src/services/script.ts @@ -95,10 +95,6 @@ function executeScript(script: string, params: ScriptParams, startNoteId: string throw new Error("Unable to determine script bundle."); } - if (!startNote || !originEntity) { - throw new Error("Missing start note or origin entity."); - } - return executeBundle(bundle, { startNote, originEntity }); } From 6a0949e5b48256c3ff5f4e17db843c1b1f5a34b5 Mon Sep 17 00:00:00 2001 From: CrO2Cl2 <111274010+CrO2Cl2@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:27:18 +0000 Subject: [PATCH 16/25] found out the Italian README was actually already in here, and Translated all of the new stuff --- README.it.md | 30 ++++++++++++---- README.it.md.1 | 93 -------------------------------------------------- 2 files changed, 23 insertions(+), 100 deletions(-) delete mode 100644 README.it.md.1 diff --git a/README.it.md b/README.it.md index e4db9c8b8..4e2ea9bac 100644 --- a/README.it.md +++ b/README.it.md @@ -8,6 +8,20 @@ Vedi [fotografie](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) per u Trilium Screenshot +## ⚠️ Perchè TriliumNext? +[Il progetto originale Trilium è in modalità di manutenzione](https://github.com/zadam/trilium/issues/4620) + +## 🗭 Discuti con noi +Sentiti libero di unirti alle nostre discussioni ufficiali e alla nostra comunità. Siamo concentrati sullo sviluppo di Trilium e ci piacerebbe sapere quali funzioni, suggerimenti o eventuali problemi hai! + +- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (Per discussioni sincrone) +- [Discussioni Github](https://github.com/TriliumNext/Notes/discussions) (Per discussioni asincrone) +- [Wiki](https://triliumnext.github.io/Docs/) (Per le domande più comuni e le guide per l'utente) + +Le due stanze linkate sopra sono connesse e contengono gli stessi messaggi, quindi puoi usare XMPP o Matrix da qualsiasi client tu preferisca, praticamente su qualsiasi piattaforma! +### Comunità non ufficiali + +[Trilium Rocks](https://discord.gg/aqdX9mXX4r) ## 🎁 Funzionalità * Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) @@ -30,9 +44,10 @@ Vedi [fotografie](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) per u * Supporto per importazione ed esportazione da e per [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) e [Markdown import](https://triliumnext.github.io/Docs/Wiki/markdown) * [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) per il salvataggio facile di contenuti web +✨ Dai un'occhiata alle seguenti risorse di terze parti per scoprire altre bellezze legate a TriliumNext: -Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti. - +-[awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti. +- [TriliumRocks!](https://trilium.rocks/) per tutorial, guide e molto altro. ## 🏗 Rilasci @@ -42,9 +57,9 @@ Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazio * Se vuoi installare Trilium su un server, segui [questa pagina](https://triliumnext.github.io/Docs/Wiki/server-installation). * Per ora solo Chrome e Firefox sono i browser supportati (testati). -Trilium è anche disponibile su Flatpak: +TriliumNext sarà fornito anche come Flatpak: -[](https://flathub.org/apps/details/com.github.zadam.trilium) + ## 📝 Documentazione @@ -54,13 +69,13 @@ Puoi anche leggere ["Patterns of personal knowledge base"](https://triliumnext.g ## 💻 Contribuire -O clona localmente ed esegui +Clona localmente ed esegui ``` npm install npm run start-server ``` -## 📢 Riconoscimenti +## 👏 Riconoscimenti * [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva * [FancyTree](https://github.com/mar10/fancytree) - libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa. @@ -69,7 +84,8 @@ npm run start-server ## 🤝 Supporto -È possibile supportare Trilium attraverso Github Sponsors, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). +Puoi sostenere lo sviluppatore originale di Trilium utilizzando gli sponsor di GitHub, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). +Il supporto all'organizzazione TriliumNext sarà possibile nel prossimo futuro. ## 🔑 Licenza diff --git a/README.it.md.1 b/README.it.md.1 deleted file mode 100644 index 8f845ca46..000000000 --- a/README.it.md.1 +++ /dev/null @@ -1,93 +0,0 @@ -# Trilium Notes - -## Trilium è in manutenzione - vedi i dettagli in https://github.com/zadam/trilium/issues/4620 - -Le discussioni preliminari sull'organizzazione si stanno svolgendo in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions). - -[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md) - - -Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni. - -Vedi [fotografie](https://github.com/zadam/trilium/wiki/Screenshot-tour) per una panoramica veloce: - -Trilium Screenshot - -L'Ucraina si sta difendendo dall'aggressione russa, considera [donare all'esercito ucraino o a organizzazioni umanitarie](https://standforukraine.com/). - -

- drawing - Trilium Notes supports Ukraine! -

- -## 🎁 Funzionalità - - -* Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://github.com/zadam/trilium/wiki/Cloning-notes)) -* Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://github.com/zadam/trilium/wiki/Text-notes#math-support) e con [formattazione automatica](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) per markdown -* Supporto per la modifica di [appunti con codice sorgente](https://github.com/zadam/trilium/wiki/Code-notes), con evidenziazione della sintassi -* [Navigazione veloce](https://github.com/zadam/trilium/wiki/Note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://github.com/zadam/trilium/wiki/Note-hoisting) -* Supporto integrato ed automatico per le [revisioni degli appunti](https://github.com/zadam/trilium/wiki/Note-revisions) -* Gli [attributi](https://github.com/zadam/trilium/wiki/Attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione). -* [Sincronizzazione](https://github.com/zadam/trilium/wiki/Synchronization) con un server di sincronizzazione auto-ospitato - * c'è un [servizio di terze parti per ospitare server di sincronizzazione](https://trilium.cc/paid-hosting) -* [Condivisione](https://github.com/zadam/trilium/wiki/Sharing) (pubblicazione) di appunti sull'internet pubblico -* Robusta [crittografia](https://github.com/zadam/trilium/wiki/Protected-notes) configurabile singolarmente per ogni appunto -* Disegno di diagrammi con Excalidraw (tipo di appunto "canvas") -* [Mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map) per visualizzare gli appunti e le loro relazioni -* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - vedi [Esempi avanzati](https://github.com/zadam/trilium/wiki/Advanced-showcases) -* [API REST](https://github.com/zadam/trilium/wiki/ETAPI) per l'automazione -* Si adatta bene sia in termini di usabilità che di prestazioni fino ad oltre 100 000 appunti -* Interfaccia utente ottimizzata per il [mobile](https://github.com/zadam/trilium/wiki/Mobile-frontend) (smartphone e tablet) -* [Tema Notturno](https://github.com/zadam/trilium/wiki/Themes) -* Supporto per importazione ed esportazione da e per [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) e [Markdown import](https://github.com/zadam/trilium/wiki/Markdown) -* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) per il salvataggio facile di contenuti web - - -Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti. - -## 🏗 Rilasci - - -Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support). - -* Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/zadam/trilium/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```. -* Se vuoi installare Trilium su un server, segui [questa pagina](https://github.com/zadam/trilium/wiki/Server-installation). - * Per ora solo Chrome e Firefox sono i browser supportati (testati). - -Trilium è anche disponibile su Flatpak: - -[](https://flathub.org/apps/details/com.github.zadam.trilium) - -## 📝 Documentazione - -[Vedi la wiki per una lista completa delle pagine di documentazione.](https://github.com/zadam/trilium/wiki/) - -Puoi anche leggere ["Patterns of personal knowledge base"](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) per avere un'ispirazione su come potresti utilizzare Trilium. - -## 💻 Contribuire - -Usa un ambiente di sviluppo basato su browser - -[![Apri in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium) - -O clona localmente ed esegui -``` -npm install -npm run start-server -``` - -## 📢 Riconoscimenti - -* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva -* [FancyTree](https://github.com/mar10/fancytree) - libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa. -* [CodeMirror](https://github.com/codemirror/CodeMirror) - editor di codice con supporto per un'enorme quantità di linguaggi. -* [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la connettività visuale senza pari. Utilizzata per [mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map). - -## 🤝 Supporto - -È possibile supportare Trilium attraverso Github Sponsors, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). - -## 🔑 Licenza - -Questo programma è software libero: è possibile redistribuirlo e/o modificarlo nei termini della GNU Affero General Public License come pubblicata dalla Free Software Foundation, sia la versione 3 della Licenza, o (a propria scelta) qualsiasi versione successiva. From 30c18102118d0f84726a9ae5efd689832f9038ea Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:23:56 +0300 Subject: [PATCH 17/25] docs: Set up basic download script --- docs-new/.env | 1 + docs-new/.env.example | 1 + docs-new/.gitignore | 1 + docs-new/prepare.sh | 11 +++++++++++ 4 files changed, 14 insertions(+) create mode 100644 docs-new/.env create mode 100644 docs-new/.env.example create mode 100644 docs-new/.gitignore create mode 100755 docs-new/prepare.sh diff --git a/docs-new/.env b/docs-new/.env new file mode 100644 index 000000000..fa85707e4 --- /dev/null +++ b/docs-new/.env @@ -0,0 +1 @@ +SHARE_URL=https://notes.eliandoran.me/share/4yYHqKbLovVX \ No newline at end of file diff --git a/docs-new/.env.example b/docs-new/.env.example new file mode 100644 index 000000000..51661dcd3 --- /dev/null +++ b/docs-new/.env.example @@ -0,0 +1 @@ +SHARE_URL=https://notes.example.com/share/4yYHqKbLovVY \ No newline at end of file diff --git a/docs-new/.gitignore b/docs-new/.gitignore new file mode 100644 index 000000000..6caf68aff --- /dev/null +++ b/docs-new/.gitignore @@ -0,0 +1 @@ +output \ No newline at end of file diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh new file mode 100755 index 000000000..735af9818 --- /dev/null +++ b/docs-new/prepare.sh @@ -0,0 +1,11 @@ +if [ ! -f .env ]; then + echo "Missing .env file, cannot proceed." + exit 1 +fi + +output_dir="output" +rm -rf "$output_dir" +mkdir -p "$output_dir" + +source ./.env +wget -rp -e robots=off "$SHARE_URL" -P "$output_dir" \ No newline at end of file From 621cc4a0651f0dc0ac3054f7117133d6c47b7098 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:26:52 +0300 Subject: [PATCH 18/25] docs: Get rid of domain in output folder --- docs-new/.env | 3 +++ docs-new/prepare.sh | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs-new/.env b/docs-new/.env index fa85707e4..e1182ce1a 100644 --- a/docs-new/.env +++ b/docs-new/.env @@ -1 +1,4 @@ +SHARE_PROTOCOL=https +SHARE_HOST=notes.eliandoran.me +ROOT_NOTE_ID=4yYHqKbLovVX SHARE_URL=https://notes.eliandoran.me/share/4yYHqKbLovVX \ No newline at end of file diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh index 735af9818..bc579ad28 100755 --- a/docs-new/prepare.sh +++ b/docs-new/prepare.sh @@ -8,4 +8,11 @@ rm -rf "$output_dir" mkdir -p "$output_dir" source ./.env -wget -rp -e robots=off "$SHARE_URL" -P "$output_dir" \ No newline at end of file + +# Download everything in output/notes.example.com/share/... +share_url="$SHARE_PROTOCOL://$SHARE_HOST/share/$ROOT_NOTE_ID" +wget -rp -e robots=off "$share_url" -P "$output_dir" + +# Get rid of the domain in the output folder +mv "$output_dir/$SHARE_HOST"/* "$output_dir/" +rmdir "$output_dir/$SHARE_HOST" \ No newline at end of file From bfab6b4d5cc017e6868fdc1b4a0908ddca98ede8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:29:12 +0300 Subject: [PATCH 19/25] docs: Add preview script --- docs-new/preview.sh | 1 + 1 file changed, 1 insertion(+) create mode 100755 docs-new/preview.sh diff --git a/docs-new/preview.sh b/docs-new/preview.sh new file mode 100755 index 000000000..a7860509c --- /dev/null +++ b/docs-new/preview.sh @@ -0,0 +1 @@ +httpd -fv -p 127.0.0.1:8089 -h output \ No newline at end of file From 5db499cf565b898e93fc05db20152ce26f56911b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:40:03 +0300 Subject: [PATCH 20/25] docs: Create home page with redirect --- docs-new/prepare.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh index bc579ad28..09e8e686e 100755 --- a/docs-new/prepare.sh +++ b/docs-new/prepare.sh @@ -15,4 +15,9 @@ wget -rp -e robots=off "$share_url" -P "$output_dir" # Get rid of the domain in the output folder mv "$output_dir/$SHARE_HOST"/* "$output_dir/" -rmdir "$output_dir/$SHARE_HOST" \ No newline at end of file +rmdir "$output_dir/$SHARE_HOST" + +# Create home page with redirect +index_dest_path="$output_dir/index.html" +cp index.template.html "$index_dest_path" +sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path" \ No newline at end of file From 0a1a8c5a278f8c520cb3ddf0febb0d23ab89cd72 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:41:30 +0300 Subject: [PATCH 21/25] docs: Deploy to docs folder --- docs-new/index.template.html | 10 ++++++++++ docs-new/prepare.sh | 8 ++++++-- docs-new/preview.sh | 4 ++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 docs-new/index.template.html diff --git a/docs-new/index.template.html b/docs-new/index.template.html new file mode 100644 index 000000000..c36a51172 --- /dev/null +++ b/docs-new/index.template.html @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh index 09e8e686e..13819e8cb 100755 --- a/docs-new/prepare.sh +++ b/docs-new/prepare.sh @@ -1,11 +1,15 @@ +#!/usr/bin/env bash + if [ ! -f .env ]; then echo "Missing .env file, cannot proceed." exit 1 fi -output_dir="output" -rm -rf "$output_dir" +script_dir=$(realpath $(dirname $0)) +output_dir="$script_dir/../docs" mkdir -p "$output_dir" +rm -f "$output_dir"/* +rm -rf "$output_dir"/{assets,share} source ./.env diff --git a/docs-new/preview.sh b/docs-new/preview.sh index a7860509c..ead04b24d 100755 --- a/docs-new/preview.sh +++ b/docs-new/preview.sh @@ -1 +1,5 @@ +#!/usr/bin/env bash + +script_dir=$(realpath $(dirname $0)) +output_dir="$script_dir/../docs" httpd -fv -p 127.0.0.1:8089 -h output \ No newline at end of file From d381ef51003783b9abb96e3f8f21a44b2e67881a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:41:39 +0300 Subject: [PATCH 22/25] docs: Deploy first documentation --- docs/assets/v0.63.6/app-dist/share.js | 23 + .../libraries/ckeditor/ckeditor-content.css | 551 ++++++++++++++++++ .../v0.63.6/libraries/normalize.min.css | 2 + docs/assets/v0.63.6/stylesheets/share.css | 165 ++++++ docs/favicon.ico | Bin 0 -> 113456 bytes docs/index.html | 10 + docs/share/4yYHqKbLovVX | 126 ++++ docs/share/QXCi6Y1SYulw | 165 ++++++ docs/share/VS22Hq5PBFNf | 126 ++++ docs/share/hkrBX8KE1HQl | 121 ++++ 10 files changed, 1289 insertions(+) create mode 100644 docs/assets/v0.63.6/app-dist/share.js create mode 100644 docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css create mode 100644 docs/assets/v0.63.6/libraries/normalize.min.css create mode 100644 docs/assets/v0.63.6/stylesheets/share.css create mode 100644 docs/favicon.ico create mode 100644 docs/index.html create mode 100644 docs/share/4yYHqKbLovVX create mode 100644 docs/share/QXCi6Y1SYulw create mode 100644 docs/share/VS22Hq5PBFNf create mode 100644 docs/share/hkrBX8KE1HQl diff --git a/docs/assets/v0.63.6/app-dist/share.js b/docs/assets/v0.63.6/app-dist/share.js new file mode 100644 index 000000000..03ad92515 --- /dev/null +++ b/docs/assets/v0.63.6/app-dist/share.js @@ -0,0 +1,23 @@ +/** + * Fetch note with given ID from backend + * + * @param noteId of the given note to be fetched. If false, fetches current note. + */ +async function fetchNote(noteId = null) { + if (!noteId) { + noteId = document.body.getAttribute("data-note-id"); + } + + const resp = await fetch(`api/notes/${noteId}`); + + return await resp.json(); +} + +document.addEventListener('DOMContentLoaded', () => { + const toggleMenuButton = document.getElementById('toggleMenuButton'); + const layout = document.getElementById('layout'); + + if (toggleMenuButton && layout) { + toggleMenuButton.addEventListener('click', () => layout.classList.toggle('showMenu')); + } +}, false); diff --git a/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css b/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css new file mode 100644 index 000000000..47274e5f4 --- /dev/null +++ b/docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css @@ -0,0 +1,551 @@ +/* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */ + +.printed-content .ck-widget__selection-handle, .printed-content .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */ + display: none; +} + +/* + * CKEditor 5 (v41.0.0) content styles. + * Generated on Fri, 26 Jan 2024 10:23:49 GMT. + * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html + */ + +:root { + --ck-color-image-caption-background: hsl(0, 0%, 97%); + --ck-color-image-caption-text: hsl(0, 0%, 20%); + --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); + --ck-color-mention-text: hsl(341, 100%, 30%); + --ck-color-selector-caption-background: hsl(0, 0%, 97%); + --ck-color-selector-caption-text: hsl(0, 0%, 20%); + --ck-highlight-marker-blue: hsl(201, 97%, 72%); + --ck-highlight-marker-green: hsl(120, 93%, 68%); + --ck-highlight-marker-pink: hsl(345, 96%, 73%); + --ck-highlight-marker-yellow: hsl(60, 97%, 73%); + --ck-highlight-pen-green: hsl(112, 100%, 27%); + --ck-highlight-pen-red: hsl(0, 85%, 49%); + --ck-image-style-spacing: 1.5em; + --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); + --ck-todo-list-checkmark-size: 16px; +} + +/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ +.ck-content .table .ck-table-resized { + table-layout: fixed; +} +/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ +.ck-content .table table { + overflow: hidden; +} +/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ +.ck-content .table td, +.ck-content .table th { + overflow-wrap: break-word; + position: relative; +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table { + margin: 0.9em auto; + display: table; +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + height: 100%; + border: 1px double hsl(0, 0%, 70%); +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table table td, +.ck-content .table table th { + min-width: 2em; + padding: .4em; + border: 1px solid hsl(0, 0%, 75%); +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table table th { + font-weight: bold; + background: hsla(0, 0%, 0%, 5%); +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content[dir="rtl"] .table th { + text-align: right; +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content[dir="ltr"] .table th { + text-align: left; +} +/* @ckeditor/ckeditor5-table/theme/tablecaption.css */ +.ck-content .table > figcaption { + display: table-caption; + caption-side: top; + word-break: break-word; + text-align: center; + color: var(--ck-color-selector-caption-text); + background-color: var(--ck-color-selector-caption-background); + padding: .6em; + font-size: .75em; + outline-offset: -1px; +} +/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ +.ck-content .page-break { + position: relative; + clear: both; + padding: 5px 0; + display: flex; + align-items: center; + justify-content: center; +} +/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ +.ck-content .page-break::after { + content: ''; + position: absolute; + border-bottom: 2px dashed hsl(0, 0%, 77%); + width: 100%; +} +/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ +.ck-content .page-break__label { + position: relative; + z-index: 1; + padding: .3em .6em; + display: block; + text-transform: uppercase; + border: 1px solid hsl(0, 0%, 77%); + border-radius: 2px; + font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; + font-size: 0.75em; + font-weight: bold; + color: hsl(0, 0%, 20%); + background: hsl(0, 0%, 100%); + box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ +.ck-content .media { + clear: both; + margin: 0.9em 0; + display: block; + min-width: 15em; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list { + list-style: none; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list li { + position: relative; + margin-bottom: 5px; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list li .todo-list { + margin-top: 5px; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input { + -webkit-appearance: none; + display: inline-block; + position: relative; + width: var(--ck-todo-list-checkmark-size); + height: var(--ck-todo-list-checkmark-size); + vertical-align: middle; + border: 0; + left: -25px; + margin-right: -15px; + right: 0; + margin-left: 0; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content[dir=rtl] .todo-list .todo-list__label > input { + left: 0; + margin-right: 0; + right: -25px; + margin-left: -15px; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input::before { + display: block; + position: absolute; + box-sizing: border-box; + content: ''; + width: 100%; + height: 100%; + border: 1px solid hsl(0, 0%, 20%); + border-radius: 2px; + transition: 250ms ease-in-out box-shadow; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input::after { + display: block; + position: absolute; + box-sizing: content-box; + pointer-events: none; + content: ''; + left: calc( var(--ck-todo-list-checkmark-size) / 3 ); + top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); + width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); + height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); + border-style: solid; + border-color: transparent; + border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; + transform: rotate(45deg); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input[checked]::before { + background: hsl(126, 64%, 41%); + border-color: hsl(126, 64%, 41%); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input[checked]::after { + border-color: hsl(0, 0%, 100%); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label .todo-list__label__description { + vertical-align: middle; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] { + position: absolute; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > input, +.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input { + cursor: pointer; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > input:hover::before, .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input:hover::before { + box-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input { + -webkit-appearance: none; + display: inline-block; + position: relative; + width: var(--ck-todo-list-checkmark-size); + height: var(--ck-todo-list-checkmark-size); + vertical-align: middle; + border: 0; + left: -25px; + margin-right: -15px; + right: 0; + margin-left: 0; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content[dir=rtl] .todo-list .todo-list__label > span[contenteditable=false] > input { + left: 0; + margin-right: 0; + right: -25px; + margin-left: -15px; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::before { + display: block; + position: absolute; + box-sizing: border-box; + content: ''; + width: 100%; + height: 100%; + border: 1px solid hsl(0, 0%, 20%); + border-radius: 2px; + transition: 250ms ease-in-out box-shadow; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::after { + display: block; + position: absolute; + box-sizing: content-box; + pointer-events: none; + content: ''; + left: calc( var(--ck-todo-list-checkmark-size) / 3 ); + top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); + width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); + height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); + border-style: solid; + border-color: transparent; + border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; + transform: rotate(45deg); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::before { + background: hsl(126, 64%, 41%); + border-color: hsl(126, 64%, 41%); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::after { + border-color: hsl(0, 0%, 100%); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] { + position: absolute; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol { + list-style-type: decimal; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol { + list-style-type: lower-latin; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol ol { + list-style-type: lower-roman; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol ol ol { + list-style-type: upper-latin; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol ol ol ol { + list-style-type: upper-roman; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul { + list-style-type: disc; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul ul { + list-style-type: circle; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul ul ul { + list-style-type: square; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul ul ul ul { + list-style-type: square; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image { + display: table; + clear: both; + text-align: center; + margin: 0.9em auto; + min-width: 50px; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image img { + display: block; + margin: 0 auto; + max-width: 100%; + min-width: 100%; + height: auto; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image-inline { + /* + * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; + * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. + * This strange behavior does not happen with inline-flex. + */ + display: inline-flex; + max-width: 100%; + align-items: flex-start; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image-inline picture { + display: flex; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image-inline picture, +.ck-content .image-inline img { + flex-grow: 1; + flex-shrink: 1; + max-width: 100%; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content img.image_resized { + height: auto; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content .image.image_resized { + max-width: 100%; + display: block; + box-sizing: border-box; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content .image.image_resized img { + width: 100%; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content .image.image_resized > figcaption { + display: block; +} +/* @ckeditor/ckeditor5-image/theme/imagecaption.css */ +.ck-content .image > figcaption { + display: table-caption; + caption-side: bottom; + word-break: break-word; + color: var(--ck-color-image-caption-text); + background-color: var(--ck-color-image-caption-background); + padding: .6em; + font-size: .75em; + outline-offset: -1px; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-block-align-left, +.ck-content .image-style-block-align-right { + max-width: calc(100% - var(--ck-image-style-spacing)); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-left, +.ck-content .image-style-align-right { + clear: none; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-side { + float: right; + margin-left: var(--ck-image-style-spacing); + max-width: 50%; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-left { + float: left; + margin-right: var(--ck-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-center { + margin-left: auto; + margin-right: auto; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-right { + float: right; + margin-left: var(--ck-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-block-align-right { + margin-right: 0; + margin-left: auto; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-block-align-left { + margin-left: 0; + margin-right: auto; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content p + .image-style-align-left, +.ck-content p + .image-style-align-right, +.ck-content p + .image-style-side { + margin-top: 0; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-inline.image-style-align-left, +.ck-content .image-inline.image-style-align-right { + margin-top: var(--ck-inline-image-style-spacing); + margin-bottom: var(--ck-inline-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-inline.image-style-align-left { + margin-right: var(--ck-inline-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-inline.image-style-align-right { + margin-left: var(--ck-inline-image-style-spacing); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-yellow { + background-color: var(--ck-highlight-marker-yellow); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-green { + background-color: var(--ck-highlight-marker-green); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-pink { + background-color: var(--ck-highlight-marker-pink); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-blue { + background-color: var(--ck-highlight-marker-blue); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .pen-red { + color: var(--ck-highlight-pen-red); + background-color: transparent; +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .pen-green { + color: var(--ck-highlight-pen-green); + background-color: transparent; +} +/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ +.ck-content blockquote { + overflow: hidden; + padding-right: 1.5em; + padding-left: 1.5em; + margin-left: 0; + margin-right: 0; + font-style: italic; + border-left: solid 5px hsl(0, 0%, 80%); +} +/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ +.ck-content[dir="rtl"] blockquote { + border-left: 0; + border-right: solid 5px hsl(0, 0%, 80%); +} +/* @ckeditor/ckeditor5-basic-styles/theme/code.css */ +.ck-content code { + background-color: hsla(0, 0%, 78%, 0.3); + padding: .15em; + border-radius: 2px; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-tiny { + font-size: .7em; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-small { + font-size: .85em; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-big { + font-size: 1.4em; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-huge { + font-size: 1.8em; +} +/* @ckeditor/ckeditor5-mention/theme/mention.css */ +.ck-content .mention { + background: var(--ck-color-mention-background); + color: var(--ck-color-mention-text); +} +/* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */ +.ck-content hr { + margin: 15px 0; + height: 4px; + background: hsl(0, 0%, 87%); + border: 0; +} +/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ +.ck-content pre { + padding: 1em; + color: hsl(0, 0%, 20.8%); + background: hsla(0, 0%, 78%, 0.3); + border: 1px solid hsl(0, 0%, 77%); + border-radius: 2px; + text-align: left; + direction: ltr; + tab-size: 4; + white-space: pre-wrap; + font-style: normal; + min-width: 200px; +} +/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ +.ck-content pre code { + background: unset; + padding: 0; + border-radius: 0; +} +@media print { + /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ + .ck-content .page-break { + padding: 0; + } + /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ + .ck-content .page-break::after { + display: none; + } +} diff --git a/docs/assets/v0.63.6/libraries/normalize.min.css b/docs/assets/v0.63.6/libraries/normalize.min.css new file mode 100644 index 000000000..87aa24dc5 --- /dev/null +++ b/docs/assets/v0.63.6/libraries/normalize.min.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} +/*# sourceMappingURL=normalize.min.css.map */ \ No newline at end of file diff --git a/docs/assets/v0.63.6/stylesheets/share.css b/docs/assets/v0.63.6/stylesheets/share.css new file mode 100644 index 000000000..718f8594c --- /dev/null +++ b/docs/assets/v0.63.6/stylesheets/share.css @@ -0,0 +1,165 @@ +body { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; + line-height: 1.5; +} + +#layout { + max-width: 1200px; + margin: 0 auto; + display: flex; + flex-direction: row-reverse; +} + +#menu { + padding: 25px; + flex-basis: 0; + flex-grow: 1; + overflow: auto; +} + +#menu p { + margin: 0; +} + +#menu > p { + font-weight: bold; + font-size: 110%; +} + +#menu ul { + padding-left: 20px; +} + +#main { + flex-basis: 0; + flex-grow: 3; + overflow: auto; + padding: 10px 20px 20px 20px; +} + +#parentLink { + float: right; + margin-top: 20px; +} + +#title { + margin: 0; + padding-top: 10px; +} + +img { + max-width: 100%; +} + +pre { + white-space: pre-wrap; + word-wrap: anywhere; +} + +iframe.pdf-view { + width: 100%; + height: 800px; +} + +#toggleMenuButton { + display: none; + position: fixed; + top: 8px; + left: 5px; + width: 1.4em; + border-radius: 5px; + border: 1px solid #aaa; + font-size: 2rem; + z-index: 10; + height: auto; + color: black; + cursor: pointer; +} + +#childLinks.grid ul { + list-style-type: none; + display: flex; + flex-wrap: wrap; + padding: 0; +} + +#childLinks.grid ul li { + width: 180px; + height: 140px; + padding: 10px; +} + +#childLinks.grid ul li a { + display: flex; + flex-direction: column; + height: 100%; + width: 100%; + border: 1px solid #ddd; + border-radius: 5px; + justify-content: center; + align-content: center; + text-align: center; + font-size: large; +} + +#childLinks.grid ul li a:hover { + background: #eee; +} + +#childLinks.list ul { + list-style-type: none; + display: inline-flex; + flex-wrap: wrap; + padding: 0; + margin-top: 5px; +} + +#childLinks.list ul li { + margin-right: 20px; +} + +#noteClippedFrom { + padding: 10px 0 10px 0; + margin: 20px 0 20px 0; + color: #666; + border: 1px solid #ddd; + border-left: 0; + border-right: 0; +} + +#toggleMenuButton::after { + position: relative; + top: -2px; + left: 1px; +} + +@media (max-width: 48em) { + #layout.showMenu #menu { + display: block; + margin-top: 40px; + } + + #toggleMenuButton { + display: block; + } + + #layout.showMenu #main { + display: none; + } + + #title { + padding-left: 60px; + } + + #layout.showMenu #toggleMenuButton::after { + content: "«"; + } + + #toggleMenuButton::after { + content: "»"; + } + + #menu { + display: none; + } +} diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..46b97e62f959eb1d6f7e9a11293f6b4fb7837109 GIT binary patch literal 113456 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 a!z{Wh$r7QO9N^t7z~08$`h_Jn;eP + + + + + + + + + \ No newline at end of file diff --git a/docs/share/4yYHqKbLovVX b/docs/share/4yYHqKbLovVX new file mode 100644 index 000000000..40fbd79e4 --- /dev/null +++ b/docs/share/4yYHqKbLovVX @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + Developer's Guide + + +
+
+ + +

Developer's Guide

+ + + + + + + + +
+ + + + + + +
+ + diff --git a/docs/share/QXCi6Y1SYulw b/docs/share/QXCi6Y1SYulw new file mode 100644 index 000000000..22caad28f --- /dev/null +++ b/docs/share/QXCi6Y1SYulw @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + Adding a new client library + + +
+
+ + + + +

Adding a new client library

+ + + + +
+

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

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

npm i i18next

Step 1. Understanding the structure of the import

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

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

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

Step 2. Exposing the library from the server

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

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

Step 3. Adding it to the library loader

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

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

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

Then add it to the export default section:

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

Step 4. Using the library

To import the library, simply use the following mechanism:

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

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

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

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

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

i18next.init({});
+
+ + + +
+ + + + + + +
+ + diff --git a/docs/share/VS22Hq5PBFNf b/docs/share/VS22Hq5PBFNf new file mode 100644 index 000000000..cf656981e --- /dev/null +++ b/docs/share/VS22Hq5PBFNf @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + Dependency Management + + +
+
+ + + + +

Dependency Management

+ + + + + + + + +
+ + + + + + +
+ + diff --git a/docs/share/hkrBX8KE1HQl b/docs/share/hkrBX8KE1HQl new file mode 100644 index 000000000..3cd51c05f --- /dev/null +++ b/docs/share/hkrBX8KE1HQl @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + Internationalisation + + +
+
+ + + + +

Internationalisation

+ + + + +
+

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

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

The library used is i18next.

What has been implemented so far

Where are the translations?

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

Message keys

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

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

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

Adding a new locale

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

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

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

Changing the language

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

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

Recommendations

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

Client-side translations

Component-level translations

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

Translation support has to be added manually for every file.

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

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

Afterwards, simply replace the hard-coded message with:

${t("msgid")}

where msgid is the key of the message being translated.

Template-level translations

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

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

Server-side translations

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

+
+ + + +
+ + + + + + +
+ + From 4f5fa9f42b3890a17d23b7d9f5e46809723ba281 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 12:51:41 +0300 Subject: [PATCH 23/25] docs: Deploy .html files for GitHub Pages --- docs-new/prepare.sh | 5 +++++ docs/share/{4yYHqKbLovVX => 4yYHqKbLovVX.html} | 0 docs/share/{QXCi6Y1SYulw => QXCi6Y1SYulw.html} | 0 docs/share/{VS22Hq5PBFNf => VS22Hq5PBFNf.html} | 0 docs/share/{hkrBX8KE1HQl => hkrBX8KE1HQl.html} | 0 5 files changed, 5 insertions(+) rename docs/share/{4yYHqKbLovVX => 4yYHqKbLovVX.html} (100%) rename docs/share/{QXCi6Y1SYulw => QXCi6Y1SYulw.html} (100%) rename docs/share/{VS22Hq5PBFNf => VS22Hq5PBFNf.html} (100%) rename docs/share/{hkrBX8KE1HQl => hkrBX8KE1HQl.html} (100%) diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh index 13819e8cb..e791434ed 100755 --- a/docs-new/prepare.sh +++ b/docs-new/prepare.sh @@ -21,6 +21,11 @@ wget -rp -e robots=off "$share_url" -P "$output_dir" mv "$output_dir/$SHARE_HOST"/* "$output_dir/" rmdir "$output_dir/$SHARE_HOST" +# Rename share/* to share/*.html because GitHub Pages will ask the client to download the files otherwise. +for file in "$output_dir/share"/*; do + mv "$file" "$file.html" +done + # Create home page with redirect index_dest_path="$output_dir/index.html" cp index.template.html "$index_dest_path" diff --git a/docs/share/4yYHqKbLovVX b/docs/share/4yYHqKbLovVX.html similarity index 100% rename from docs/share/4yYHqKbLovVX rename to docs/share/4yYHqKbLovVX.html diff --git a/docs/share/QXCi6Y1SYulw b/docs/share/QXCi6Y1SYulw.html similarity index 100% rename from docs/share/QXCi6Y1SYulw rename to docs/share/QXCi6Y1SYulw.html diff --git a/docs/share/VS22Hq5PBFNf b/docs/share/VS22Hq5PBFNf.html similarity index 100% rename from docs/share/VS22Hq5PBFNf rename to docs/share/VS22Hq5PBFNf.html diff --git a/docs/share/hkrBX8KE1HQl b/docs/share/hkrBX8KE1HQl.html similarity index 100% rename from docs/share/hkrBX8KE1HQl rename to docs/share/hkrBX8KE1HQl.html From 5bcae52d081ab96c75f54c104c35bb4fbf6af8b1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 13:08:22 +0300 Subject: [PATCH 24/25] docs: Always use HTML extensions --- docs-new/index.template.html | 2 +- docs-new/prepare.sh | 9 ++------- docs-new/preview.sh | 2 +- docs/index.html | 2 +- docs/share/4yYHqKbLovVX.html | 10 +++++----- docs/share/QXCi6Y1SYulw.html | 8 ++++---- docs/share/VS22Hq5PBFNf.html | 10 +++++----- docs/share/hkrBX8KE1HQl.html | 8 ++++---- 8 files changed, 23 insertions(+), 28 deletions(-) diff --git a/docs-new/index.template.html b/docs-new/index.template.html index c36a51172..c37cb1c98 100644 --- a/docs-new/index.template.html +++ b/docs-new/index.template.html @@ -1,7 +1,7 @@ - + diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh index e791434ed..91a520520 100755 --- a/docs-new/prepare.sh +++ b/docs-new/prepare.sh @@ -15,18 +15,13 @@ source ./.env # Download everything in output/notes.example.com/share/... share_url="$SHARE_PROTOCOL://$SHARE_HOST/share/$ROOT_NOTE_ID" -wget -rp -e robots=off "$share_url" -P "$output_dir" +wget -rpEk -e robots=off "$share_url" -P "$output_dir" # Get rid of the domain in the output folder mv "$output_dir/$SHARE_HOST"/* "$output_dir/" rmdir "$output_dir/$SHARE_HOST" -# Rename share/* to share/*.html because GitHub Pages will ask the client to download the files otherwise. -for file in "$output_dir/share"/*; do - mv "$file" "$file.html" -done - # Create home page with redirect index_dest_path="$output_dir/index.html" cp index.template.html "$index_dest_path" -sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path" \ No newline at end of file +sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path" diff --git a/docs-new/preview.sh b/docs-new/preview.sh index ead04b24d..507dec3fc 100755 --- a/docs-new/preview.sh +++ b/docs-new/preview.sh @@ -2,4 +2,4 @@ script_dir=$(realpath $(dirname $0)) output_dir="$script_dir/../docs" -httpd -fv -p 127.0.0.1:8089 -h output \ No newline at end of file +httpd -fv -p 127.0.0.1:8089 -h "$output_dir" \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 974b29b47..525ed208c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,7 +1,7 @@ - + diff --git a/docs/share/4yYHqKbLovVX.html b/docs/share/4yYHqKbLovVX.html index 40fbd79e4..c9bc4b6ef 100644 --- a/docs/share/4yYHqKbLovVX.html +++ b/docs/share/4yYHqKbLovVX.html @@ -40,12 +40,12 @@
  • - Internationalisation
  • - Dependency Management
  • @@ -76,7 +76,7 @@ - Internationalisation + Internationalisation

    @@ -90,7 +90,7 @@ - Dependency Management + Dependency Management

    @@ -103,7 +103,7 @@ - Adding a new client library + Adding a new client library

    diff --git a/docs/share/QXCi6Y1SYulw.html b/docs/share/QXCi6Y1SYulw.html index 22caad28f..636aac31d 100644 --- a/docs/share/QXCi6Y1SYulw.html +++ b/docs/share/QXCi6Y1SYulw.html @@ -27,7 +27,7 @@
    @@ -102,7 +102,7 @@ await library_loader.requireLibrary(library_loader.I18NEXT);

    Make - Developer's Guide + Developer's Guide

    @@ -115,7 +115,7 @@ await library_loader.requireLibrary(library_loader.I18NEXT);

    Make - Internationalisation + Internationalisation

    @@ -129,7 +129,7 @@ await library_loader.requireLibrary(library_loader.I18NEXT);

    Make - Dependency Management + Dependency Management

    diff --git a/docs/share/VS22Hq5PBFNf.html b/docs/share/VS22Hq5PBFNf.html index cf656981e..2b838932e 100644 --- a/docs/share/VS22Hq5PBFNf.html +++ b/docs/share/VS22Hq5PBFNf.html @@ -27,7 +27,7 @@
    @@ -45,7 +45,7 @@
    • - Adding a new client library
    • @@ -63,7 +63,7 @@ - Developer's Guide + Developer's Guide

      @@ -76,7 +76,7 @@ - Internationalisation + Internationalisation

      @@ -103,7 +103,7 @@ - Adding a new client library + Adding a new client library

      diff --git a/docs/share/hkrBX8KE1HQl.html b/docs/share/hkrBX8KE1HQl.html index 3cd51c05f..b1ed0e7aa 100644 --- a/docs/share/hkrBX8KE1HQl.html +++ b/docs/share/hkrBX8KE1HQl.html @@ -27,7 +27,7 @@
      @@ -58,7 +58,7 @@ - Developer's Guide + Developer's Guide

      @@ -85,7 +85,7 @@ - Dependency Management + Dependency Management

      @@ -98,7 +98,7 @@ - Adding a new client library + Adding a new client library

      From 46c193dd9f75ada2c81afd1ce32d6a611753c6f7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 20 Jul 2024 13:10:19 +0300 Subject: [PATCH 25/25] docs: Get rid of /share --- docs-new/index.template.html | 2 +- docs-new/prepare.sh | 7 +++++++ docs/{share => }/4yYHqKbLovVX.html | 10 +++++----- docs/{share => }/QXCi6Y1SYulw.html | 10 +++++----- docs/{share => }/VS22Hq5PBFNf.html | 10 +++++----- docs/{share => }/hkrBX8KE1HQl.html | 10 +++++----- docs/index.html | 2 +- 7 files changed, 29 insertions(+), 22 deletions(-) rename docs/{share => }/4yYHqKbLovVX.html (82%) rename docs/{share => }/QXCi6Y1SYulw.html (93%) rename docs/{share => }/VS22Hq5PBFNf.html (81%) rename docs/{share => }/hkrBX8KE1HQl.html (95%) diff --git a/docs-new/index.template.html b/docs-new/index.template.html index c37cb1c98..b2580cb88 100644 --- a/docs-new/index.template.html +++ b/docs-new/index.template.html @@ -1,7 +1,7 @@ - + diff --git a/docs-new/prepare.sh b/docs-new/prepare.sh index 91a520520..84ef77f6c 100755 --- a/docs-new/prepare.sh +++ b/docs-new/prepare.sh @@ -25,3 +25,10 @@ rmdir "$output_dir/$SHARE_HOST" index_dest_path="$output_dir/index.html" cp index.template.html "$index_dest_path" sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path" + +# Rewrite links to get rid of the share folder +sed -i "s/ - + - + - - + + - + diff --git a/docs/share/QXCi6Y1SYulw.html b/docs/QXCi6Y1SYulw.html similarity index 93% rename from docs/share/QXCi6Y1SYulw.html rename to docs/QXCi6Y1SYulw.html index 636aac31d..3e5f58f87 100644 --- a/docs/share/QXCi6Y1SYulw.html +++ b/docs/QXCi6Y1SYulw.html @@ -6,15 +6,15 @@ - + - + - - + + - + diff --git a/docs/share/VS22Hq5PBFNf.html b/docs/VS22Hq5PBFNf.html similarity index 81% rename from docs/share/VS22Hq5PBFNf.html rename to docs/VS22Hq5PBFNf.html index 2b838932e..126d58524 100644 --- a/docs/share/VS22Hq5PBFNf.html +++ b/docs/VS22Hq5PBFNf.html @@ -6,15 +6,15 @@ - + - + - - + + - + diff --git a/docs/share/hkrBX8KE1HQl.html b/docs/hkrBX8KE1HQl.html similarity index 95% rename from docs/share/hkrBX8KE1HQl.html rename to docs/hkrBX8KE1HQl.html index b1ed0e7aa..0b7abfe87 100644 --- a/docs/share/hkrBX8KE1HQl.html +++ b/docs/hkrBX8KE1HQl.html @@ -6,15 +6,15 @@ - + - + - - + + - + diff --git a/docs/index.html b/docs/index.html index 525ed208c..bca34c937 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,7 +1,7 @@ - +