Compare commits

..

1 Commits

Author SHA1 Message Date
zadam
baed93e749 algolia v1 upgrade 2021-12-14 22:44:54 +01:00
1203 changed files with 118630 additions and 162453 deletions

View File

@@ -5,6 +5,3 @@
/docs
/npm-debug.log
node_modules
src/**/*.ts
!src/services/asset_path.ts

View File

@@ -3,11 +3,18 @@ description: Report a bug
title: "(Bug report) "
labels: "Type: Bug"
body:
- type: checkboxes
attributes:
label: Preflight Checklist
description: Please ensure you've completed all of the following.
options:
- label: I have searched the [issue tracker](https://www.github.com/zadam/trilium/issues) for a bug report that matches the one I want to file, without success.
required: true
- type: input
attributes:
label: TriliumNext Version
description: What version of TriliumNext are you using?
placeholder: 0.90.0-beta
label: Trilium Version
description: What version of Trilium are you using?
placeholder: 0.48.0-beta
validations:
required: true
- type: dropdown
@@ -23,8 +30,8 @@ body:
required: true
- type: dropdown
attributes:
label: What is your setup?
description: https://triliumnext.github.io/Docs/Wiki/quick-start.html
label: What is your setup?
description: https://github.com/zadam/trilium/wiki#choose-the-setup
options:
- Local (no sync)
- Local + server sync
@@ -40,13 +47,17 @@ body:
required: true
- type: textarea
attributes:
label: Description
description: A clear and concise description of the bug and any additional information.
label: Expected Behavior
description: A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: Error logs
description: Please provide error logs, see [wiki page](https://triliumnext.github.io/Docs/Wiki/error-logs.html) for instructions on how to submit them.
label: Actual Behavior
description: A clear description of what actually happens.
validations:
required: false
required: true
- type: textarea
attributes:
label: Additional Information
description: If your problem needs further explanation, or if the issue you're seeing cannot be reproduced in a gist, please add more information here.

View File

@@ -1,8 +1,15 @@
name: Feature Request
description: Ask for a new feature to be added
description: Report a bug
title: "(Feature request) "
labels: "Type: Enhancement"
body:
- type: checkboxes
attributes:
label: Preflight Checklist
description: Please ensure you've completed all of the following.
options:
- label: I have searched the [issue tracker](https://www.github.com/zadam/trilium/issues) for a feature request that matches the one I want to file, without success.
required: true
- type: textarea
attributes:
label: Describe feature

View File

@@ -1,33 +0,0 @@
name: Dev
on:
push:
branches-ignore:
- 'develop'
- 'feature/update**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build_docker:
name: Build Docker image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- name: Run the TypeScript build
run: npx tsc
- name: Create server-package.json
run: cat package.json | grep -v electron > server-package.json
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
with:
context: .
cache-from: type=gha
cache-to: type=gha,mode=max

View File

@@ -1,188 +0,0 @@
name: Main
on:
push:
branches:
- 'develop'
- 'feature/update**'
- 'feature/server_esm**'
paths-ignore:
- 'docs/**'
- 'bin/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build_darwin-x64:
name: Build macOS x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- run: |
npm run update-build-info
./bin/build-mac-x64.sh
- uses: actions/upload-artifact@v4
with:
name: trilium-mac-x64.zip
path: dist/trilium-mac-x64*.zip
build_darwin-arm64:
name: Build macOS aarch64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- run: |
npm run update-build-info
./bin/build-mac-arm64.sh
- uses: actions/upload-artifact@v4
with:
name: trilium-mac-arm64.zip
path: dist/trilium-mac-arm64*.zip
build_linux-x64:
name: Build Linux x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- run: |
npm run update-build-info
./bin/build-linux-x64.sh
- uses: actions/upload-artifact@v4
with:
name: trilium-linux-x64.tar.xz
path: dist/trilium-linux-x64-*.tar.xz
- uses: actions/upload-artifact@v4
with:
name: trilium_amd64.deb
path: dist/trilium_*.deb
build_linux_server-x64:
name: Build Linux Server x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- run: |
npm run update-build-info
./bin/build-server.sh
- uses: actions/upload-artifact@v4
with:
name: trilium-linux-x64-server.tar.xz
path: dist/trilium-linux-x64-server-*.tar.xz
build_windows-x64:
name: Build Windows x86_64
runs-on: ubuntu-latest
steps:
- name: Set up Wine
run: |
sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main"
sudo apt install --install-recommends winehq-stable
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- run: |
npm run update-build-info
./bin/build-win-x64.sh DONTPACK
- uses: actions/upload-artifact@v4
with:
name: trilium-windows-x64
path: dist/trilium-windows-x64
build_windows-installer:
name: Build Windows x86_64 (Setup)
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- name: Run installer build
run: |
npm run update-build-info
npm run make-electron
- name: Publish installer artifact
uses: actions/upload-artifact@v4
with:
name: TriliumNext Notes for Windows (Setup)
path: out/make/squirrel.windows/x64/*.exe
build_docker:
name: Build Docker image
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
attestations: write
id-token: write
steps:
- uses: actions/checkout@v4
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- run: npm ci
- name: Run the TypeScript build
run: npx tsc
- name: Create server-package.json
run: cat package.json | grep -v electron > server-package.json
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
id: push
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v1
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true

10
.gitignore vendored
View File

@@ -1,7 +1,6 @@
.DS_Store
node_modules/
dist/
build/
src/public/app-dist/
npm-debug.log
yarn-error.log
@@ -9,11 +8,4 @@ yarn-error.log
config.ini
cert.key
cert.crt
server-package.json
.idea/httpRequests/
data/
data-test/
tmp/
.eslintcache
out/
server-package.json

View File

@@ -2,7 +2,7 @@ image:
file: .gitpod.dockerfile
tasks:
- before: nvm install 20.15.1 && nvm use 20.15.1
- before: nvm install 16.13.1 && nvm use 16.13.1
init: npm install
command: npm run start-server

4
.idea/dataSources.xml generated
View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="document.db" uuid="2a4ac1e6-b828-4a2a-8e4a-3f59f10aff26">
<data-source source="LOCAL" name="SQLite - document.db" uuid="30cef30d-e704-484d-a4ca-5d3bfc2ece63">
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/data/document.db</jdbc-url>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/../trilium-data/document.db</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitToolBoxProjectSettings">
<option name="commitMessageIssueKeyValidationOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
</BoolValueOverride>
</option>
<option name="commitMessageValidationEnabledOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
</BoolValueOverride>
</option>
</component>
</project>

View File

@@ -1,7 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="JSUnfilteredForInLoop" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />

3
.idea/misc.xml generated
View File

@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@@ -1,14 +0,0 @@
{
"printWidth": 200,
"tabWidth": 4,
"useTabs": false,
"semi": true,
"singleQuote": true,
"quoteProps": "as-needed",
"trailingComma": "none",
"bracketSpacing": false,
"arrowParens": "always",
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "css",
"endOfLine": "lf"
}

View File

@@ -1,5 +0,0 @@
{
"recommendations": [
"lokalise.i18n-ally"
]
}

View File

@@ -1,30 +0,0 @@
# An array of strings which contain Language Ids defined by VS Code
# You can check available language ids here: https://code.visualstudio.com/docs/languages/identifiers
languageIds:
- javascript
- typescript
# An array of RegExes to find the key usage. **The key should be captured in the first match group**.
# You should unescape RegEx strings in order to fit in the YAML file
# To help with this, you can use https://www.freeformatter.com/json-escape.html
usageMatchRegex:
# The following example shows how to detect `t("your.i18n.keys")`
# the `{key}` will be placed by a proper keypath matching regex,
# you can ignore it and use your own matching rules as well
- "[^\\w\\d]t\\(['\"`]({key})['\"`]"
# A RegEx to set a custom scope range. This scope will be used as a prefix when detecting keys
# and works like how the i18next framework identifies the namespace scope from the
# useTranslation() hook.
# You should unescape RegEx strings in order to fit in the YAML file
# To help with this, you can use https://www.freeformatter.com/json-escape.html
scopeRangeRegex: "useTranslation\\(\\s*\\[?\\s*['\"`](.*?)['\"`]"
# An array of strings containing refactor templates.
# The "$1" will be replaced by the keypath specified.
refactorTemplates:
- t("$1")
# If set to true, only enables this custom framework (will disable all built-in frameworks)
monopoly: true

20
.vscode/launch.json vendored
View File

@@ -1,24 +1,18 @@
{
"version": "0.2.0",
"configurations": [
// nodemon should be installed globally, use npm i -g nodemon
{
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"name": "nodemon start-server",
"program": "${workspaceFolder}/src/www",
"type": "node",
"request": "launch",
"restart": true,
"runtimeExecutable": "nodemon",
"env": {
"TRILIUM_ENV": "dev",
"TRILIUM_DATA_DIR": "./data"
},
"name": "start-server",
"skipFiles": [
"<node_internals>/**"
],
"type": "node",
"env": {
"TRILIUM_ENV": "dev"
},
"outputCapture": "std",
},
"program": "${workspaceFolder}/src/www"
}
]
}

14
.vscode/settings.json vendored
View File

@@ -1,14 +0,0 @@
{
"editor.formatOnSave": false,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"files.eol": "\n",
"typescript.tsdk": "node_modules/typescript/lib",
"i18n-ally.sourceLanguage": "en",
"i18n-ally.keystyle": "nested",
"i18n-ally.localesPaths": [
"./src/public/translations"
],
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
}

17
.vscode/tasks.json vendored
View File

@@ -1,17 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "errors",
"problemMatcher": "$tsc-watch",
"isBackground": true,
"presentation": {
"revealProblems": "never"
},
"runOptions": {
"runOn": "folderOpen"
}
}
]
}

View File

@@ -1 +0,0 @@
Please treat each other with respect and understanding.

View File

@@ -1,50 +1,29 @@
# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
FROM node:20.15.1-alpine
# Configure system dependencies
RUN apk add --no-cache --virtual .build-dependencies \
autoconf \
automake \
g++ \
gcc \
libtool \
make \
nasm \
libpng-dev \
python3
FROM node:16.13.1-alpine
# Create app directory
WORKDIR /usr/src/app
# Bundle app source
COPY . .
COPY server-package.json package.json
# Copy TypeScript build artifacts into the original directory structure.
RUN ls
RUN cp -R build/src/* src/.
RUN rm -r build
# Install app dependencies
RUN set -x \
&& npm install \
&& apk del .build-dependencies \
&& npm run webpack \
&& npm prune --omit=dev \
&& cp src/public/app/share.js src/public/app-dist/. \
&& cp -r src/public/app/doc_notes src/public/app-dist/. \
&& rm -rf src/public/app \
&& rm src/services/asset_path.ts
&& apk add --no-cache --virtual .build-dependencies \
autoconf \
automake \
g++ \
gcc \
libtool \
make \
nasm \
libpng-dev \
python3 \
&& npm install --production \
&& apk del .build-dependencies
# Some setup tools need to be kept
RUN apk add --no-cache su-exec shadow
# Bundle app source
COPY . .
# Add application user and setup proper volume permissions
RUN adduser -s /bin/false node; exit 0
USER node
# Start the application
EXPOSE 8080
CMD [ "./start-docker.sh" ]
HEALTHCHECK --start-period=10s CMD exec su-exec node node docker_healthcheck.js
CMD [ "node", "./src/www" ]

View File

@@ -1,97 +1,62 @@
# TriliumNext Notes
# Trilium笔记
[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)
[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)
TriliumNext Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)以快速了解:
[![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)以快速了解:
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="https://github.com/TriliumNext/Docs/blob/main/Wiki/images/screenshot.png?raw=true" alt="Trilium Screenshot" width="1000"></a>
![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png)
## ⚠️ 为什么选择TriliumNext
## 特性
[原始的Trilium项目目前处于维护模式](https://github.com/zadam/trilium/issues/4620)
* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](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://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)
* 可用性和性能均能很好地扩展至超过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)
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper)可轻松保存Web内容
## 🗭 与我们讨论
## 构建
欢迎加入我们的官方讨论和社区。我们专注于Trilium的开发乐于听取您对功能、建议或问题的意见
Trilium是作为桌面应用程序Linux和Windows或服务器上托管的Web应用程序Linux提供的。Mac OS桌面版本可用但[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。
- [Matrix](https://matrix.to/#/#triliumnext:matrix.org)(用于同步讨论)
- [Github Discussions](https://github.com/TriliumNext/Notes/discussions)(用于异步讨论)
- [Wiki](https://triliumnext.github.io/Docs/)(用于常见操作问题和用户指南)
* 如果要在桌面上使用Trilium请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制[版本](https://github.com/zadam/trilium/releases/latest),解压缩该软件包并运行`trilium`可执行文件。
* 如果要在服务器上安装Trilium请遵循[此页面](https://github.com/zadam/trilium/wiki/Server-installation)
* 当前仅支持经过测试最新的Chrome和Firefox浏览器。
上面链接的两个房间是镜像的所以您可以在任意平台上使用XMPP或者Matrix来和我们交流。
## 文档
### 非官方社区
[有关文档页面的完整列表请参见Wiki。](https://github.com/zadam/trilium/wiki/)
[Trilium Rocks](https://discord.gg/aqdX9mXX4r)
[中文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/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://triliumnext.github.io/Docs/Wiki/sharing)(发布)笔记到互联网
* 具有按笔记粒度的强大的[笔记加密](https://triliumnext.github.io/Docs/Wiki/protected-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/):提供教程、指南等更多内容。
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium)
## 🏗 构建
Trilium 可以用作桌面应用程序Linux 和 Windows或服务器Linux上托管的 Web 应用程序。虽然有 macOS 版本的桌面应用程序,但它[不受支持](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support)。
* 如果要在桌面上使用 Trilium请从[最新版本](https://github.com/TriliumNext/Notes/releases/latest)下载适用于您平台的二进制版本,解压缩该软件包并运行`trilium`可执行文件。
* 如果要在服务器上安装 Trilium请参考[此页面](https://triliumnext.github.io/Docs/Wiki/server-installation)。
* 当前仅支持(测试过)最近发布的 Chrome 和 Firefox 浏览器。
Trilium 也提供 Flatpak
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
## 📝 文档
[有关文档页面的完整列表,请参见 Wiki。](https://triliumnext.github.io/Docs/)
* [Wiki 的中文翻译版本](https://github.com/baddate/trilium/wiki/)
您还可以阅读[个人知识库模式](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge),以获取有关如何使用 Trilium 的灵感。
## 💻 贡献
或者克隆本仓库到本地,并运行
或在本地克隆并运行
```
npm install
npm run start-server
```
## 👏 致谢
## 致谢
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - 市上最好的所见即所得编辑器,拥有互动性强且聆听能力强的团队
* [FancyTree](https://github.com/mar10/fancytree) - 一个非常丰富的关于树的库,强大没有对手。没有它Trilium Notes 将不会如此。
* [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://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 的第三版或者任何(由你选择)更晚的版本。
* [jsPlumb](https://github.com/jsplumb/jsplumb)强大的可视化连接库。- 用于[关系图](https://github.com/zadam/trilium/wiki/Relation-map)和[链接图](https://github.com/zadam/trilium/wiki/Link-map)

View File

@@ -1,92 +0,0 @@
# 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)
TriliumNext Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni.
Vedi [fotografie](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) per una panoramica veloce:
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="https://github.com/TriliumNext/Docs/blob/main/Wiki/images/screenshot.png?raw=true" alt="Trilium Screenshot" width="1000"></a>
## ⚠️ 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))
* 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://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://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://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 alle seguenti risorse di terze parti per scoprire altre bellezze legate a TriliumNext:
-[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
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/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).
TriliumNext sarà fornito anche come Flatpak:
<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">
## 📝 Documentazione
[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://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) per avere un'ispirazione su come potresti utilizzare Trilium.
## 💻 Contribuire
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://triliumnext.github.io/Docs/Wiki/relation-map) e [mappe di collegamenti](https://triliumnext.github.io/Docs/Wiki/link-map).
## 🤝 Supporto
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
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.

View File

@@ -1,72 +0,0 @@
# 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)
Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://triliumnext.github.io/Docs/Wiki/screenshot-tour)をご覧ください:
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png" alt="Trilium Screenshot" width="1000"></a>
## 🎁 特徴
* ノートは、任意の深さのツリーに配置できます。単一のノートをツリー内の複数の場所に配置できます ([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://triliumnext.github.io/Docs/Wiki/sharing)(公開)
* ノートごとの粒度を持つ強力な[ノート暗号化](https://triliumnext.github.io/Docs/Wiki/protected-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)
* ユーザビリティとパフォーマンスの両方で 100 000 ノート以上に拡張可能
* スマートフォンとタブレット向けのタッチ最適化[モバイルフロントエンド](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://triliumnext.github.io/Docs/Wiki/faq#mac-os-support) となっています。
* デスクトップで Trilium を使用したい場合は、 [latest release](https://github.com/TriliumNext/Notes/releases/latest) からお使いのプラットフォームのバイナリリリースをダウンロードし、パッケージを解凍して ``trilium`` の実行ファイルを実行してください。
* サーバーに Trilium をインストールする場合は、[このページ](https://triliumnext.github.io/Docs/Wiki/server-installation)に従ってください。
* 現在、対応(動作確認)しているブラウザは、最近の Chrome と Firefox のみです。
Trilium は Flatpak としても提供されます:
[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
## 📝 ドキュメント
[ドキュメントページの全リストはwikiをご覧ください。](https://triliumnext.github.io/Docs/)
また、[個人的な知識基盤のパターン](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)を読むと、 Trilium の使い方のヒントを得ることができます。
## 💻 コントリビュート
または、ローカルにクローンして実行
```
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://triliumnext.github.io/Docs/Wiki/relation-map)、[リンク図](https://triliumnext.github.io/Docs/Wiki/link-map)で使用。
## 🤝 サポート
GitHub スポンサー、[PayPal](https://paypal.me/za4am)もしくは Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2) にて Trilium をサポートすることができます。
## 🔑 ライセンス
このプログラムはフリーソフトウェアです:フリーソフトウェア財団が発行した GNU Affero General Public License のバージョン3、またはそれ以降のバージョンのいずれかに従って、再配布および/または改変することができます。

103
README.md
View File

@@ -1,96 +1,63 @@
# TriliumNext Notes
# Trilium 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)
[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)
TriliumNext Notes is a hierarchical note taking application with focus on building large personal knowledge bases.
[![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 is a hierarchical note taking application with focus on building large personal knowledge bases. See [screenshots](https://github.com/zadam/trilium/wiki/Screenshot-tour) for quick overview:
See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for quick overview:
![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png)
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="https://github.com/TriliumNext/Docs/blob/main/Wiki/images/screenshot.png?raw=true" alt="Trilium Screenshot" width="1000"></a>
## Features
## ⚠️ Why TriliumNext?
[The original Trilium project is in maintenance mode](https://github.com/zadam/trilium/issues/4620)
## 🗭 Discuss with us
Feel free to join our official discussions and community. We are focused on the development on Trilium, and would love to hear what features, suggestions, or issues you may have!
- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous discussions)
- [Github Discussions](https://github.com/TriliumNext/Notes/discussions) (For Asynchronous discussions)
- [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!
### Unofficial Communities
[Trilium Rocks](https://discord.gg/aqdX9mXX4r)
## 🎁 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
* 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
* 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
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://github.com/zadam/trilium/wiki/Cloning-notes))
* Rich WYSIWYG note editing including e.g. tables, images and [math](https://github.com/zadam/trilium/wiki/Text-notes#math-support) with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
* Support for editing [notes with source code](https://github.com/zadam/trilium/wiki/Code-notes), including syntax highlighting
* Fast and easy [navigation between notes](https://github.com/zadam/trilium/wiki/Note-navigation), full text search and [note hoisting](https://github.com/zadam/trilium/wiki/Note-hoisting)
* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions)
* Note [attributes](https://github.com/zadam/trilium/wiki/Attributes) can be used for note organization, querying and advanced [scripting](https://github.com/zadam/trilium/wiki/Scripts)
* [Synchronization](https://github.com/zadam/trilium/wiki/Synchronization) with self-hosted sync server
* Strong [note encryption](https://github.com/zadam/trilium/wiki/Protected-notes) with per-note granularity
* [Relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map) for visualizing notes and their relations
* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - see [Advanced showcases](https://github.com/zadam/trilium/wiki/Advanced-showcases)
* 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://github.com/zadam/trilium/wiki/Mobile-frontend) for smartphones and tablets
* [Night theme](https://github.com/zadam/trilium/wiki/Themes)
* [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) and [Markdown import & export](https://github.com/zadam/trilium/wiki/Markdown)
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) for easy saving of web content
✨ Check out the following third-party resources for more TriliumNext related goodies:
## Builds
- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party themes, scripts, plugins and more.
- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
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://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
## 🏗 Builds
* If you want to use Trilium on the desktop, download binary release for your platform from [latest release](https://github.com/zadam/trilium/releases/latest), unzip the package and run ```trilium``` executable.
* If you want to install Trilium on server, follow [this page](https://github.com/zadam/trilium/wiki/Server-installation).
* Currently only recent Chrome and Firefox are supported (tested) browsers.
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).
## Documentation
* 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).
* Currently only recent versions of Chrome and Firefox are supported (tested) browsers.
[See wiki for complete list of documentation pages.](https://github.com/zadam/trilium/wiki/)
TriliumNext will also provided as a Flatpak:
You can also read [Patterns of personal knowledge base](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) to get some inspiration on how you might use Trilium.
<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">
## Contribute
## 📝 Documentation
Use a browser based dev environment
[See wiki for complete list of documentation pages.](https://triliumnext.github.io/Docs)
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/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
Clone locally and run
Or clone locally and run
```
npm install
npm run start-server
```
## 👏 Shoutouts
## Shoutouts
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/Relation-map) and [link maps](https://triliumnext.github.io/Docs/Wiki/Link-map)
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map)
## 🤝 Support
You can support the original Trilium developer using GitHub Sponsors, [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
Support for the TriliumNext organization will be possible in the near future.
## 🔑 License
## License
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

View File

@@ -1,44 +1,49 @@
# TriliumNext Notes
# Trilium 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)
[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)
Trilium Notes это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://triliumnext.github.io/Docs/Wiki/screenshot-tour):
[![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):
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="https://github.com/TriliumNext/Docs/blob/main/Wiki/images/screenshot.png?raw=true" alt="Trilium Screenshot" width="1000"></a>
![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png)
## 🎁 Возможности
## Возможности
* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](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)
* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](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)
* Хорошо масштабируется, как по удобству использования, так и по производительности до 100000 заметок
* Оптимизированный [мобильный фронтенд](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) для удобного сохранения веб-контента
* Оптимизированный [мобильный фронтенд](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) для удобного сохранения веб-контента
## 🏗 Сборки
## Сборки
Trilium предоставляется в виде десктопного приложения (Linux и Windows) или веб-приложения, размещенного на вашем сервере (Linux). Доступна сборка Mac OS, но она [не поддерживается](https://triliumnext.github.io/Docs/Wiki/faq#mac-os-support).
Trilium предоставляется в виде десктопного приложения (Linux и Windows) или веб-приложения, размещенного на вашем сервере (Linux). Доступна сборка Mac OS, но она [не поддерживается](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
* Если вы хотите использовать Trilium на десктопе, скачайте архив для своей платформы со страницы [релизов](https://github.com/TriliumNext/Notes/releases/latest), распакуйте и запустите исполняемый файл ```trilium```.
* Если вы хотите установить Trilium на сервере, следуйте этой [инструкции](https://triliumnext.github.io/Docs/Wiki/server-installation).
* Если вы хотите использовать Trilium на десктопе, скачайте архив для своей платформы со страницы [релизов](https://github.com/zadam/trilium/releases/latest), распакуйте и запустите исполняемый файл ```trilium```.
* Если вы хотите установить Trilium на сервере, следуйте этой [инструкции](https://github.com/zadam/trilium/wiki/Server-installation).
* В данный момент поддерживаются (протестированы) последние версии браузеров Chrome и Firefox.
## 📝 Документация
## Документация
[Полный список страниц документации доступен в Wiki.](https://triliumnext.github.io/Docs/)
[Полный список страниц документации доступен в Wiki.](https://github.com/zadam/trilium/wiki/)
Вы также можете ознакомиться с [шаблонами персональных баз знаний](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge), чтобы получить представление о том, как можно использовать Trilium.
Вы также можете ознакомиться с [шаблонами персональных баз знаний](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base), чтобы получить представление о том, как можно использовать Trilium.
## 💻 Участвуйте в разработке
## Участвуйте в разработке
Используйте онлайн среду разработки в браузере
[![Открыть в Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium)
Или склонируйте на своё устройство и запустите
```
@@ -46,13 +51,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://triliumnext.github.io/Docs/Wiki/relation-map) и [картах ссылок](https://triliumnext.github.io/Docs/Wiki/link-map).
* [jsPlumb](https://github.com/jsplumb/jsplumb) - библиотека для визуализации связей. Вне конкуренции. Используется в [картах связей](https://github.com/zadam/trilium/wiki/Relation-map) и [картах ссылок](https://github.com/zadam/trilium/wiki/Link-map).
## 🔑 Лицензия
## Лицензия
Эта программа является бесплатным программным обеспечением: вы можете распространять и/или изменять ее в соответствии с условиями GNU Affero General Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.

View File

@@ -10,4 +10,4 @@ Description above is a general rule and may be altered on case by case basis.
## Reporting a Vulnerability
You can report low severity vulnerabilities as GitHub issues, more severe vulnerabilities should be reported to the email [contact@eliandoran.me](mailto:contact@eliandoran.me)
You can report low severity vulnerabilities as GitHub issues, more severe vulnerabilities should be reported to the email zadam.apps@gmail.com

3
TODO Normal file
View File

@@ -0,0 +1,3 @@
- new icon
- polish becca entities API
- separate private and public APIs in becca entities

View File

@@ -1,10 +0,0 @@
#!/usr/bin/env bash
cloc HEAD \
--git --md \
--include-lang=javascript,typescript \
--found=filelist.txt \
--exclude-dir=public,libraries,views,docs
grep -R \.js$ filelist.txt
rm filelist.txt

BIN
bin/better-sqlite3/linux-desktop-better_sqlite3.node Executable file → Normal file

Binary file not shown.

BIN
bin/better-sqlite3/linux-server-better_sqlite3.node Executable file → Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1,38 +0,0 @@
#!/usr/bin/env bash
ELECTRON_VERSION="electron-v125"
NODE_VERSION="node-v115"
if ! command -v jq &> /dev/null; then
echo "Missing command: jq"
exit 1
fi
script_dir=$(realpath $(dirname $0))
cd "$script_dir"
BETTER_SQLITE3_VERSION=$(jq -r '.dependencies.["better-sqlite3"]' ../../package.json | grep -oP "\d+\.\d+\.\d+")
if [ -z $BETTER_SQLITE3_VERSION ]; then
echo "Unable to determine better-sqlite3 version."
exit 2
fi
echo "Version: $BETTER_SQLITE3_VERSION"
function download() {
version="$1"
platform="$2"
dest_name="$3"
url=https://github.com/WiseLibs/better-sqlite3/releases/download/v${BETTER_SQLITE3_VERSION}/better-sqlite3-v${BETTER_SQLITE3_VERSION}-${version}-${platform}.tar.gz
temp_file="temp.tar.gz"
curl -L "$url" -o "$temp_file"
tar -xzvf "$temp_file"
mv build/Release/better_sqlite3.node "$dest_name-better_sqlite3.node"
rm -rf build
rm -f "$temp_file"
}
download $NODE_VERSION "linux-x64" "linux-server"
download $ELECTRON_VERSION "linux-x64" "linux-desktop"
download $ELECTRON_VERSION "win32-x64" "win"
download $ELECTRON_VERSION "darwin-x64" "mac-x64"
download $ELECTRON_VERSION "darwin-arm64" "mac-arm64"

View File

@@ -1,19 +1,22 @@
#!/usr/bin/env bash
set -e # Fail on any command error
if ! command -v dpkg-deb &> /dev/null; then
echo "Missing command: dpkg-deb"
exit 1
fi
if dpkg-deb 2>&1 | grep BusyBox &> /dev/null; then
echo "The dpkg-deb binary provided by BusyBox is not compatible. The Debian tool needs to be used instead."
exit 1
fi
echo "Packaging debian x64 distribution..."
VERSION=`jq -r ".version" package.json`
./node_modules/.bin/electron-installer-debian --config bin/deb-options.json --options.version=${VERSION} --arch amd64
# hacky stop-gag measure to produce debian compatible XZ compressed debs until this is fixed: https://github.com/electron-userland/electron-installer-debian/issues/272
cd dist
ar x trilium_${VERSION}_amd64.deb
rm trilium_${VERSION}_amd64.deb
# recompress
< control.tar.zst zstd -d | xz > control.tar.xz
< data.tar.zst zstd -d | xz > data.tar.xz
# create deb archive (I really do not know, what argument "sdsd" is for but something is required for ar to create the archive as desired)
ar -m -c -a sdsd trilium_${VERSION}_amd64.deb debian-binary control.tar.xz data.tar.xz
rm control* data* debian-binary
echo "Converted to XZ deb"

View File

@@ -1,15 +1,10 @@
#!/usr/bin/env bash
set -e # Fail on any command error
VERSION=`jq -r ".version" package.json`
SERIES=${VERSION:0:4}-latest
cat package.json | grep -v electron > server-package.json
echo "Compiling typescript..."
npx tsc
sudo docker build -t zadam/trilium:$VERSION --network host -t zadam/trilium:$SERIES .
if [[ $VERSION != *"beta"* ]]; then

View File

@@ -1,58 +1,48 @@
#!/usr/bin/env bash
set -e # Fail on any command error
if ! command -v jq &> /dev/null; then
echo "Missing command: jq"
exit 1
fi
if ! command -v fakeroot &> /dev/null; then
echo "Missing command: fakeroot"
exit 1
fi
if ! command -v dpkg-deb &> /dev/null; then
echo "Missing command: dpkg-deb"
exit 1
fi
if dpkg-deb 2>&1 | grep BusyBox &> /dev/null; then
echo "The dpkg-deb binary provided by BusyBox is not compatible. The Debian tool needs to be used instead."
exit 1
fi
SRC_DIR=./dist/trilium-linux-x64-src
[ "$1" != "DONTCOPY" ] && ./bin/copy-trilium.sh "$SRC_DIR"
if [ "$1" != "DONTCOPY" ]
then
./bin/copy-trilium.sh $SRC_DIR
fi
rm -r $SRC_DIR/src/public/app-dist/*.mobile.*
echo "Copying required linux-x64 binaries"
cp -r bin/better-sqlite3/linux-desktop-better_sqlite3.node "$SRC_DIR"/node_modules/better-sqlite3/build/Release/better_sqlite3.node
cp -r bin/better-sqlite3/linux-desktop-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
echo "Packaging linux x64 electron build"
./node_modules/.bin/electron-packager "$SRC_DIR" --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=linux --arch=x64 --overwrite
BUILD_DIR=./dist/trilium-linux-x64
rm -rf "$BUILD_DIR"
rm -rf $BUILD_DIR
mv "./dist/TriliumNext Notes-linux-x64" "$BUILD_DIR"
mv "./dist/Trilium Notes-linux-x64" $BUILD_DIR
cp images/app-icons/png/128x128.png "$BUILD_DIR"/icon.png
cp bin/tpl/anonymize-database.sql "$BUILD_DIR"/
cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
cp -r dump-db "$BUILD_DIR"/
rm -rf "$BUILD_DIR"/dump-db/node_modules
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
for f in 'trilium-portable' 'trilium-safe-mode' 'trilium-no-cert-check'; do
cp bin/tpl/"$f".sh "$BUILD_DIR"/
chmod 755 "$BUILD_DIR"/"$f".sh
done
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/trilium-portable.sh
cp bin/tpl/trilium-safe-mode.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/trilium-safe-mode.sh
cp bin/tpl/trilium-no-cert-check.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/trilium-no-cert-check.sh
echo "Packaging linux x64 electron distribution..."
VERSION=`jq -r ".version" package.json`
pushd dist
tar cJf "trilium-linux-x64-${VERSION}.tar.xz" trilium-linux-x64
popd
cd dist
tar cJf trilium-linux-x64-${VERSION}.tar.xz trilium-linux-x64
cd ..
bin/build-debian.sh

View File

@@ -1,37 +0,0 @@
#!/usr/bin/env bash
set -e # Fail on any command error
SRC_DIR=./dist/trilium-mac-arm64-src
if [ "$1" != "DONTCOPY" ]
then
./bin/copy-trilium.sh $SRC_DIR
fi
echo "Copying required mac arm64 binaries"
cp -r bin/better-sqlite3/mac-arm64-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
echo "Packaging mac arm64 electron build"
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=darwin --arch=arm64 --overwrite --icon=images/app-icons/mac/icon.icns
BUILD_DIR=./dist/trilium-mac-arm64
rm -rf $BUILD_DIR
# Mac build has by default useless directory level
mv "./dist/TriliumNext Notes-darwin-arm64" $BUILD_DIR
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
cp -r dump-db $BUILD_DIR/
rm -rf $BUILD_DIR/dump-db/node_modules
echo "Zipping mac arm64 electron distribution..."
VERSION=`jq -r ".version" package.json`
cd dist
zip -r9 --symlinks trilium-mac-arm64-${VERSION}.zip trilium-mac-arm64

View File

@@ -1,7 +1,5 @@
#!/usr/bin/env bash
set -e # Fail on any command error
SRC_DIR=./dist/trilium-mac-x64-src
if [ "$1" != "DONTCOPY" ]
@@ -9,9 +7,11 @@ then
./bin/copy-trilium.sh $SRC_DIR
fi
echo "Copying required mac x64 binaries"
echo "Copying required mac binaries"
cp -r bin/better-sqlite3/mac-x64-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
cp -r bin/better-sqlite3/mac-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
rm -r $SRC_DIR/src/public/app-dist/*.mobile.*
echo "Packaging mac x64 electron build"
@@ -21,12 +21,7 @@ BUILD_DIR=./dist/trilium-mac-x64
rm -rf $BUILD_DIR
# Mac build has by default useless directory level
mv "./dist/TriliumNext Notes-darwin-x64" $BUILD_DIR
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
cp -r dump-db $BUILD_DIR/
rm -rf $BUILD_DIR/dump-db/node_modules
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
echo "Zipping mac x64 electron distribution..."
@@ -34,4 +29,5 @@ VERSION=`jq -r ".version" package.json`
cd dist
rm trilium-mac-x64-${VERSION}.zip
zip -r9 --symlinks trilium-mac-x64-${VERSION}.zip trilium-mac-x64

View File

@@ -1,9 +1,7 @@
#!/usr/bin/env bash
set -e # Fail on any command error
PKG_DIR=dist/trilium-linux-x64-server
NODE_VERSION=20.15.1
NODE_VERSION=16.13.1
if [ "$1" != "DONTCOPY" ]
then
@@ -22,18 +20,12 @@ rm -r $PKG_DIR/node/lib/node_modules/npm
rm -r $PKG_DIR/node/include/node
rm -r $PKG_DIR/node_modules/electron*
rm -r $PKG_DIR/electron.js
cp -r bin/better-sqlite3/linux-server-better_sqlite3.node $PKG_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
printf "#!/bin/sh\n./node/bin/node src/www" > $PKG_DIR/trilium.sh
chmod 755 $PKG_DIR/trilium.sh
cp bin/tpl/anonymize-database.sql $PKG_DIR/
cp -r dump-db $PKG_DIR/
rm -rf $PKG_DIR/dump-db/node_modules
VERSION=`jq -r ".version" package.json`
cd dist

View File

@@ -1,12 +1,5 @@
#!/usr/bin/env bash
set -e # Fail on any command error
if ! command -v wine &> /dev/null; then
echo "Missing command: wine"
exit 1
fi
SRC_DIR=./dist/trilium-windows-x64-src
if [ "$1" != "DONTCOPY" ]
@@ -18,6 +11,8 @@ echo "Copying required windows binaries"
cp -r bin/better-sqlite3/win-better_sqlite3.node $SRC_DIR/node_modules/better-sqlite3/build/Release/better_sqlite3.node
rm -r $SRC_DIR/src/public/app-dist/*.mobile.*
echo "Packaging windows x64 electron build"
./node_modules/.bin/electron-packager $SRC_DIR --asar --out=dist --executable-name=trilium --platform=win32 --arch=x64 --overwrite --icon=images/app-icons/win/icon.ico
@@ -25,20 +20,18 @@ echo "Packaging windows x64 electron build"
BUILD_DIR=./dist/trilium-windows-x64
rm -rf $BUILD_DIR
mv "./dist/TriliumNext Notes-win32-x64" $BUILD_DIR
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
cp -r dump-db $BUILD_DIR/
rm -rf $BUILD_DIR/dump-db/node_modules
cp bin/tpl/trilium-portable.bat $BUILD_DIR/
cp bin/tpl/trilium-no-cert-check.bat $BUILD_DIR/
cp bin/tpl/trilium-safe-mode.bat $BUILD_DIR/
cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/
echo "Zipping windows x64 electron distribution..."
VERSION=`jq -r ".version" package.json`
if [ "$1" != "DONTPACK" ]
then
echo "Zipping windows x64 electron distribution..."
VERSION=`jq -r ".version" package.json`
cd dist
cd dist
zip -r9 trilium-windows-x64-${VERSION}.zip trilium-windows-x64
fi
zip -r9 trilium-windows-x64-${VERSION}.zip trilium-windows-x64

View File

@@ -1,32 +1,5 @@
#!/usr/bin/env bash
set -e # Fail on any command error
if ! command -v jq &> /dev/null; then
echo "Missing command: jq"
exit 1
fi
if ! command -v fakeroot &> /dev/null; then
echo "Missing command: fakeroot"
exit 1
fi
if ! command -v dpkg-deb &> /dev/null; then
echo "Missing command: dpkg-deb"
exit 1
fi
if dpkg-deb 2>&1 | grep BusyBox &> /dev/null; then
echo "The dpkg-deb binary provided by BusyBox is not compatible. The Debian tool needs to be used instead."
exit 1
fi
if ! command -v wine &> /dev/null; then
echo "Missing command: wine"
exit 1
fi
echo "Deleting existing builds"
rm -rf dist/*
@@ -40,14 +13,11 @@ cp -r $SRC_DIR ./dist/trilium-linux-x64-src
cp -r $SRC_DIR ./dist/trilium-linux-x64-server
cp -r $SRC_DIR ./dist/trilium-windows-x64-src
cp -r $SRC_DIR ./dist/trilium-mac-x64-src
cp -r $SRC_DIR ./dist/trilium-mac-arm64-src
bin/build-win-x64.sh DONTCOPY
bin/build-mac-x64.sh DONTCOPY
bin/build-mac-arm64.sh DONTCOPY
bin/build-linux-x64.sh DONTCOPY
bin/build-server.sh DONTCOPY

View File

@@ -1,88 +0,0 @@
import fs from "fs-extra";
import path from "path";
const DEST_DIR = "./dist";
const DEST_DIR_SRC = path.join(DEST_DIR, "src");
const DEST_DIR_NODE_MODULES = path.join(DEST_DIR, "node_modules");
const VERBOSE = process.env.VERBOSE;
function log(...args) {
if (VERBOSE) {
console.log(args);
}
}
async function copyNodeModuleFileOrFolder(source: string) {
const adjustedSource = source.substring(13);
const destination = path.join(DEST_DIR_NODE_MODULES, adjustedSource);
log(`Copying ${source} to ${destination}`);
await fs.ensureDir(path.dirname(destination));
await fs.copy(source, destination);
}
const copy = async () => {
for (const srcFile of fs.readdirSync("build")) {
const destFile = path.join(DEST_DIR, path.basename(srcFile));
log(`Copying source ${srcFile} -> ${destFile}.`);
fs.copySync(path.join("build", srcFile), destFile, { recursive: true });
}
const filesToCopy = ["config-sample.ini"];
for (const file of filesToCopy) {
log(`Copying ${file}`);
await fs.copy(file, path.join(DEST_DIR, file));
}
const dirsToCopy = ["images", "libraries", "db"];
for (const dir of dirsToCopy) {
log(`Copying ${dir}`);
await fs.copy(dir, path.join(DEST_DIR, dir));
}
const srcDirsToCopy = ["./src/public", "./src/views", "./build"];
for (const dir of srcDirsToCopy) {
log(`Copying ${dir}`);
await fs.copy(dir, path.join(DEST_DIR_SRC, path.basename(dir)));
}
const nodeModulesFile = [
"node_modules/react/umd/react.production.min.js",
"node_modules/react/umd/react.development.js",
"node_modules/react-dom/umd/react-dom.production.min.js",
"node_modules/react-dom/umd/react-dom.development.js",
"node_modules/katex/dist/katex.min.js",
"node_modules/katex/dist/contrib/mhchem.min.js",
"node_modules/katex/dist/contrib/auto-render.min.js",
];
for (const file of nodeModulesFile) {
await copyNodeModuleFileOrFolder(file);
}
const nodeModulesFolder = [
"node_modules/@excalidraw/excalidraw/dist/",
"node_modules/katex/dist/",
"node_modules/dayjs/",
"node_modules/force-graph/dist/",
"node_modules/boxicons/css/",
"node_modules/boxicons/fonts/",
"node_modules/mermaid/dist/",
"node_modules/jquery/dist/",
"node_modules/jquery-hotkeys/",
"node_modules/print-this/",
"node_modules/split.js/dist/",
"node_modules/panzoom/dist/",
"node_modules/i18next/",
"node_modules/i18next-http-backend/"
];
for (const folder of nodeModulesFolder) {
await copyNodeModuleFileOrFolder(folder);
}
};
copy()
.then(() => console.log("Copying complete!"))
.catch((err) => console.error("Error during copy:", err));

View File

@@ -1,76 +1,51 @@
#!/usr/bin/env bash
set -e # Fail on any command error
shopt -s globstar
if [[ $# -eq 0 ]] ; then
echo "Missing argument of target directory"
exit 1
fi
if ! [[ $(which npm) ]]; then
echo "Missing npm"
exit 1
fi
# Trigger the TypeScript build
echo TypeScript build start
npx tsc
echo TypeScript build finished
n exec 16.13.1 npm run webpack
# Copy the TypeScript artifacts
DIR="$1"
rm -rf "$DIR"
mkdir -pv "$DIR"
DIR=$1
echo Webpack start
npm run webpack
echo Webpack finish
rm -rf $DIR
mkdir $DIR
echo "Copying Trilium to build directory $DIR"
for d in 'images' 'libraries' 'src' 'db'; do
cp -r "$d" "$DIR"/
done
for f in 'package.json' 'package-lock.json' 'README.md' 'LICENSE' 'config-sample.ini'; do
cp "$f" "$DIR"/
done
# Patch package.json main
sed -i 's/.\/dist\/electron.js/electron.js/g' "$DIR/package.json"
script_dir=$(realpath $(dirname $0))
cp -R "$script_dir/../build/src" "$DIR"
cp "$script_dir/../build/electron.js" "$DIR"
cp -r images $DIR/
cp -r libraries $DIR/
cp -r src $DIR/
cp -r db $DIR/
cp -r package.json $DIR/
cp -r package-lock.json $DIR/
cp -r README.md $DIR/
cp -r LICENSE $DIR/
cp -r config-sample.ini $DIR/
cp -r electron.js $DIR/
cp webpack-* $DIR/
# run in subshell (so we return to original dir)
(cd $DIR && npm install --omit=dev)
(cd $DIR && n exec 16.13.1 npm install --only=prod)
if [[ -d "$DIR"/node_modules ]]; then
# cleanup of useless files in dependencies
for d in 'image-q/demo' \
'@excalidraw/excalidraw/dist/excalidraw-assets-dev' '@excalidraw/excalidraw/dist/excalidraw.development.js' '@excalidraw/excalidraw/dist/excalidraw-with-preact.development.js' \
'mermaid/dist/mermaid.js' \
'boxicons/svg' 'boxicons/node_modules/react'/* \
'better-sqlite3/Release' 'better-sqlite3/deps/sqlite3.tar.gz' 'better-sqlite3/deps/sqlite3' \
'@jimp/plugin-print/fonts' 'jimp/browser' 'jimp/fonts'; do
[[ -e "$DIR"/node_modules/"$d" ]] && rm -r "$DIR"/node_modules/"$d"
done
# cleanup of useless files in dependencies
rm -r $DIR/node_modules/image-q/demo
rm -r $DIR/node_modules/better-sqlite3/Release
rm -r $DIR/node_modules/better-sqlite3/deps/sqlite3.tar.gz
rm -r $DIR/node_modules/@jimp/plugin-print/fonts
rm -r $DIR/node_modules/jimp/browser
rm -r $DIR/node_modules/jimp/fonts
# delete all tests (there are often large images as test file for jimp etc.)
for d in 'test' 'docs' 'demo' 'example'; do
find "$DIR"/node_modules -name "$d" -exec rm -rf {} +
done
fi
# delete all tests (there are often large images as test file for jimp etc.)
find $DIR/node_modules -name test -exec rm -rf {} \;
find $DIR/node_modules -name docs -exec rm -rf {} \;
find $DIR/node_modules -name demo -exec rm -rf {} \;
find $DIR/libraries -name "*.map" -type f -delete
find $DIR/node_modules -name "*.map" -type f -delete
find $DIR -name "*.ts" -type f -delete
d="$DIR"/src/public
[[ -d "$d"/app-dist ]] || mkdir -pv "$d"/app-dist
cp "$d"/app/share.js "$d"/app-dist/
cp -r "$d"/app/doc_notes "$d"/app-dist/
rm -r $DIR/src/public/app
rm -rf "$d"/app
unset f d DIR
sed -i -e 's/app\/desktop.js/app-dist\/desktop.js/g' $DIR/src/views/desktop.ejs
sed -i -e 's/app\/mobile.js/app-dist\/mobile.js/g' $DIR/src/views/mobile.ejs
sed -i -e 's/app\/setup.js/app-dist\/setup.js/g' $DIR/src/views/setup.ejs

View File

@@ -1,7 +0,0 @@
#!/usr/bin/env node
const anonymizationService = require('../src/services/anonymization');
const fs = require('fs');
const path = require('path');
fs.writeFileSync(path.resolve(__dirname, 'tpl', 'anonymize-database.sql'), anonymizationService.getFullAnonymizationScript());

View File

@@ -1,7 +1,6 @@
{
"src": "dist/trilium-linux-x64",
"dest": "dist/",
"compression": "xz",
"name": "trilium",
"productName": "Trilium Notes",
"genericName": "Note taker",
@@ -12,4 +11,4 @@
"bin": "trilium",
"icon": "dist/trilium-linux-x64/icon.png",
"categories": [ "Office" ]
}
}

View File

@@ -1,3 +0,0 @@
SHARE_PROTOCOL=http
SHARE_HOST=notes.johnsmith.me
ROOT_NOTE_ID=4yYHqKbLovVX

2
bin/docs/.gitignore vendored
View File

@@ -1,2 +0,0 @@
output
.env

View File

@@ -1,23 +0,0 @@
/**
* Fetch note with given ID from backend
*
* @param noteId of the given note to be fetched. If false, fetches current note.
*/
async function fetchNote(noteId = null) {
if (!noteId) {
noteId = document.body.getAttribute("data-note-id");
}
const resp = await fetch(`api/notes/${noteId}`);
return await resp.json();
}
document.addEventListener('DOMContentLoaded', () => {
const toggleMenuButton = document.getElementById('toggleMenuButton');
const layout = document.getElementById('layout');
if (toggleMenuButton && layout) {
toggleMenuButton.addEventListener('click', () => layout.classList.toggle('showMenu'));
}
}, false);

View File

@@ -1,551 +0,0 @@
/* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */
.printed-content .ck-widget__selection-handle, .printed-content .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */
display: none;
}
/*
* CKEditor 5 (v41.0.0) content styles.
* Generated on Fri, 26 Jan 2024 10:23:49 GMT.
* For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html
*/
:root {
--ck-color-image-caption-background: hsl(0, 0%, 97%);
--ck-color-image-caption-text: hsl(0, 0%, 20%);
--ck-color-mention-background: hsla(341, 100%, 30%, 0.1);
--ck-color-mention-text: hsl(341, 100%, 30%);
--ck-color-selector-caption-background: hsl(0, 0%, 97%);
--ck-color-selector-caption-text: hsl(0, 0%, 20%);
--ck-highlight-marker-blue: hsl(201, 97%, 72%);
--ck-highlight-marker-green: hsl(120, 93%, 68%);
--ck-highlight-marker-pink: hsl(345, 96%, 73%);
--ck-highlight-marker-yellow: hsl(60, 97%, 73%);
--ck-highlight-pen-green: hsl(112, 100%, 27%);
--ck-highlight-pen-red: hsl(0, 85%, 49%);
--ck-image-style-spacing: 1.5em;
--ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2);
--ck-todo-list-checkmark-size: 16px;
}
/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
.ck-content .table .ck-table-resized {
table-layout: fixed;
}
/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
.ck-content .table table {
overflow: hidden;
}
/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
.ck-content .table td,
.ck-content .table th {
overflow-wrap: break-word;
position: relative;
}
/* @ckeditor/ckeditor5-table/theme/table.css */
.ck-content .table {
margin: 0.9em auto;
display: table;
}
/* @ckeditor/ckeditor5-table/theme/table.css */
.ck-content .table table {
border-collapse: collapse;
border-spacing: 0;
width: 100%;
height: 100%;
border: 1px double hsl(0, 0%, 70%);
}
/* @ckeditor/ckeditor5-table/theme/table.css */
.ck-content .table table td,
.ck-content .table table th {
min-width: 2em;
padding: .4em;
border: 1px solid hsl(0, 0%, 75%);
}
/* @ckeditor/ckeditor5-table/theme/table.css */
.ck-content .table table th {
font-weight: bold;
background: hsla(0, 0%, 0%, 5%);
}
/* @ckeditor/ckeditor5-table/theme/table.css */
.ck-content[dir="rtl"] .table th {
text-align: right;
}
/* @ckeditor/ckeditor5-table/theme/table.css */
.ck-content[dir="ltr"] .table th {
text-align: left;
}
/* @ckeditor/ckeditor5-table/theme/tablecaption.css */
.ck-content .table > figcaption {
display: table-caption;
caption-side: top;
word-break: break-word;
text-align: center;
color: var(--ck-color-selector-caption-text);
background-color: var(--ck-color-selector-caption-background);
padding: .6em;
font-size: .75em;
outline-offset: -1px;
}
/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
.ck-content .page-break {
position: relative;
clear: both;
padding: 5px 0;
display: flex;
align-items: center;
justify-content: center;
}
/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
.ck-content .page-break::after {
content: '';
position: absolute;
border-bottom: 2px dashed hsl(0, 0%, 77%);
width: 100%;
}
/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
.ck-content .page-break__label {
position: relative;
z-index: 1;
padding: .3em .6em;
display: block;
text-transform: uppercase;
border: 1px solid hsl(0, 0%, 77%);
border-radius: 2px;
font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;
font-size: 0.75em;
font-weight: bold;
color: hsl(0, 0%, 20%);
background: hsl(0, 0%, 100%);
box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15);
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */
.ck-content .media {
clear: both;
margin: 0.9em 0;
display: block;
min-width: 15em;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list {
list-style: none;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list li {
position: relative;
margin-bottom: 5px;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list li .todo-list {
margin-top: 5px;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label > input {
-webkit-appearance: none;
display: inline-block;
position: relative;
width: var(--ck-todo-list-checkmark-size);
height: var(--ck-todo-list-checkmark-size);
vertical-align: middle;
border: 0;
left: -25px;
margin-right: -15px;
right: 0;
margin-left: 0;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content[dir=rtl] .todo-list .todo-list__label > input {
left: 0;
margin-right: 0;
right: -25px;
margin-left: -15px;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label > input::before {
display: block;
position: absolute;
box-sizing: border-box;
content: '';
width: 100%;
height: 100%;
border: 1px solid hsl(0, 0%, 20%);
border-radius: 2px;
transition: 250ms ease-in-out box-shadow;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label > input::after {
display: block;
position: absolute;
box-sizing: content-box;
pointer-events: none;
content: '';
left: calc( var(--ck-todo-list-checkmark-size) / 3 );
top: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
width: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
height: calc( var(--ck-todo-list-checkmark-size) / 2.6 );
border-style: solid;
border-color: transparent;
border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0;
transform: rotate(45deg);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label > input[checked]::before {
background: hsl(126, 64%, 41%);
border-color: hsl(126, 64%, 41%);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label > input[checked]::after {
border-color: hsl(0, 0%, 100%);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label .todo-list__label__description {
vertical-align: middle;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] {
position: absolute;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > input,
.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input {
cursor: pointer;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > input:hover::before, .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input:hover::before {
box-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input {
-webkit-appearance: none;
display: inline-block;
position: relative;
width: var(--ck-todo-list-checkmark-size);
height: var(--ck-todo-list-checkmark-size);
vertical-align: middle;
border: 0;
left: -25px;
margin-right: -15px;
right: 0;
margin-left: 0;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content[dir=rtl] .todo-list .todo-list__label > span[contenteditable=false] > input {
left: 0;
margin-right: 0;
right: -25px;
margin-left: -15px;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::before {
display: block;
position: absolute;
box-sizing: border-box;
content: '';
width: 100%;
height: 100%;
border: 1px solid hsl(0, 0%, 20%);
border-radius: 2px;
transition: 250ms ease-in-out box-shadow;
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::after {
display: block;
position: absolute;
box-sizing: content-box;
pointer-events: none;
content: '';
left: calc( var(--ck-todo-list-checkmark-size) / 3 );
top: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
width: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
height: calc( var(--ck-todo-list-checkmark-size) / 2.6 );
border-style: solid;
border-color: transparent;
border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0;
transform: rotate(45deg);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::before {
background: hsl(126, 64%, 41%);
border-color: hsl(126, 64%, 41%);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::after {
border-color: hsl(0, 0%, 100%);
}
/* @ckeditor/ckeditor5-list/theme/todolist.css */
.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] {
position: absolute;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ol {
list-style-type: decimal;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ol ol {
list-style-type: lower-latin;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ol ol ol {
list-style-type: lower-roman;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ol ol ol ol {
list-style-type: upper-latin;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ol ol ol ol ol {
list-style-type: upper-roman;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ul {
list-style-type: disc;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ul ul {
list-style-type: circle;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ul ul ul {
list-style-type: square;
}
/* @ckeditor/ckeditor5-list/theme/list.css */
.ck-content ul ul ul ul {
list-style-type: square;
}
/* @ckeditor/ckeditor5-image/theme/image.css */
.ck-content .image {
display: table;
clear: both;
text-align: center;
margin: 0.9em auto;
min-width: 50px;
}
/* @ckeditor/ckeditor5-image/theme/image.css */
.ck-content .image img {
display: block;
margin: 0 auto;
max-width: 100%;
min-width: 100%;
height: auto;
}
/* @ckeditor/ckeditor5-image/theme/image.css */
.ck-content .image-inline {
/*
* Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).;
* Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root.
* This strange behavior does not happen with inline-flex.
*/
display: inline-flex;
max-width: 100%;
align-items: flex-start;
}
/* @ckeditor/ckeditor5-image/theme/image.css */
.ck-content .image-inline picture {
display: flex;
}
/* @ckeditor/ckeditor5-image/theme/image.css */
.ck-content .image-inline picture,
.ck-content .image-inline img {
flex-grow: 1;
flex-shrink: 1;
max-width: 100%;
}
/* @ckeditor/ckeditor5-image/theme/imageresize.css */
.ck-content img.image_resized {
height: auto;
}
/* @ckeditor/ckeditor5-image/theme/imageresize.css */
.ck-content .image.image_resized {
max-width: 100%;
display: block;
box-sizing: border-box;
}
/* @ckeditor/ckeditor5-image/theme/imageresize.css */
.ck-content .image.image_resized img {
width: 100%;
}
/* @ckeditor/ckeditor5-image/theme/imageresize.css */
.ck-content .image.image_resized > figcaption {
display: block;
}
/* @ckeditor/ckeditor5-image/theme/imagecaption.css */
.ck-content .image > figcaption {
display: table-caption;
caption-side: bottom;
word-break: break-word;
color: var(--ck-color-image-caption-text);
background-color: var(--ck-color-image-caption-background);
padding: .6em;
font-size: .75em;
outline-offset: -1px;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-block-align-left,
.ck-content .image-style-block-align-right {
max-width: calc(100% - var(--ck-image-style-spacing));
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-align-left,
.ck-content .image-style-align-right {
clear: none;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-side {
float: right;
margin-left: var(--ck-image-style-spacing);
max-width: 50%;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-align-left {
float: left;
margin-right: var(--ck-image-style-spacing);
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-align-center {
margin-left: auto;
margin-right: auto;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-align-right {
float: right;
margin-left: var(--ck-image-style-spacing);
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-block-align-right {
margin-right: 0;
margin-left: auto;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-style-block-align-left {
margin-left: 0;
margin-right: auto;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content p + .image-style-align-left,
.ck-content p + .image-style-align-right,
.ck-content p + .image-style-side {
margin-top: 0;
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-inline.image-style-align-left,
.ck-content .image-inline.image-style-align-right {
margin-top: var(--ck-inline-image-style-spacing);
margin-bottom: var(--ck-inline-image-style-spacing);
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-inline.image-style-align-left {
margin-right: var(--ck-inline-image-style-spacing);
}
/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
.ck-content .image-inline.image-style-align-right {
margin-left: var(--ck-inline-image-style-spacing);
}
/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
.ck-content .marker-yellow {
background-color: var(--ck-highlight-marker-yellow);
}
/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
.ck-content .marker-green {
background-color: var(--ck-highlight-marker-green);
}
/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
.ck-content .marker-pink {
background-color: var(--ck-highlight-marker-pink);
}
/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
.ck-content .marker-blue {
background-color: var(--ck-highlight-marker-blue);
}
/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
.ck-content .pen-red {
color: var(--ck-highlight-pen-red);
background-color: transparent;
}
/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
.ck-content .pen-green {
color: var(--ck-highlight-pen-green);
background-color: transparent;
}
/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */
.ck-content blockquote {
overflow: hidden;
padding-right: 1.5em;
padding-left: 1.5em;
margin-left: 0;
margin-right: 0;
font-style: italic;
border-left: solid 5px hsl(0, 0%, 80%);
}
/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */
.ck-content[dir="rtl"] blockquote {
border-left: 0;
border-right: solid 5px hsl(0, 0%, 80%);
}
/* @ckeditor/ckeditor5-basic-styles/theme/code.css */
.ck-content code {
background-color: hsla(0, 0%, 78%, 0.3);
padding: .15em;
border-radius: 2px;
}
/* @ckeditor/ckeditor5-font/theme/fontsize.css */
.ck-content .text-tiny {
font-size: .7em;
}
/* @ckeditor/ckeditor5-font/theme/fontsize.css */
.ck-content .text-small {
font-size: .85em;
}
/* @ckeditor/ckeditor5-font/theme/fontsize.css */
.ck-content .text-big {
font-size: 1.4em;
}
/* @ckeditor/ckeditor5-font/theme/fontsize.css */
.ck-content .text-huge {
font-size: 1.8em;
}
/* @ckeditor/ckeditor5-mention/theme/mention.css */
.ck-content .mention {
background: var(--ck-color-mention-background);
color: var(--ck-color-mention-text);
}
/* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */
.ck-content hr {
margin: 15px 0;
height: 4px;
background: hsl(0, 0%, 87%);
border: 0;
}
/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */
.ck-content pre {
padding: 1em;
color: hsl(0, 0%, 20.8%);
background: hsla(0, 0%, 78%, 0.3);
border: 1px solid hsl(0, 0%, 77%);
border-radius: 2px;
text-align: left;
direction: ltr;
tab-size: 4;
white-space: pre-wrap;
font-style: normal;
min-width: 200px;
}
/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */
.ck-content pre code {
background: unset;
padding: 0;
border-radius: 0;
}
@media print {
/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
.ck-content .page-break {
padding: 0;
}
/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
.ck-content .page-break::after {
display: none;
}
}

View File

@@ -1,2 +0,0 @@
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}
/*# sourceMappingURL=normalize.min.css.map */

View File

@@ -1,165 +0,0 @@
body {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
line-height: 1.5;
}
#layout {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-direction: row-reverse;
}
#menu {
padding: 25px;
flex-basis: 0;
flex-grow: 1;
overflow: auto;
}
#menu p {
margin: 0;
}
#menu > p {
font-weight: bold;
font-size: 110%;
}
#menu ul {
padding-left: 20px;
}
#main {
flex-basis: 0;
flex-grow: 3;
overflow: auto;
padding: 10px 20px 20px 20px;
}
#parentLink {
float: right;
margin-top: 20px;
}
#title {
margin: 0;
padding-top: 10px;
}
img {
max-width: 100%;
}
pre {
white-space: pre-wrap;
word-wrap: anywhere;
}
iframe.pdf-view {
width: 100%;
height: 800px;
}
#toggleMenuButton {
display: none;
position: fixed;
top: 8px;
left: 5px;
width: 1.4em;
border-radius: 5px;
border: 1px solid #aaa;
font-size: 2rem;
z-index: 10;
height: auto;
color: black;
cursor: pointer;
}
#childLinks.grid ul {
list-style-type: none;
display: flex;
flex-wrap: wrap;
padding: 0;
}
#childLinks.grid ul li {
width: 180px;
height: 140px;
padding: 10px;
}
#childLinks.grid ul li a {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
border: 1px solid #ddd;
border-radius: 5px;
justify-content: center;
align-content: center;
text-align: center;
font-size: large;
}
#childLinks.grid ul li a:hover {
background: #eee;
}
#childLinks.list ul {
list-style-type: none;
display: inline-flex;
flex-wrap: wrap;
padding: 0;
margin-top: 5px;
}
#childLinks.list ul li {
margin-right: 20px;
}
#noteClippedFrom {
padding: 10px 0 10px 0;
margin: 20px 0 20px 0;
color: #666;
border: 1px solid #ddd;
border-left: 0;
border-right: 0;
}
#toggleMenuButton::after {
position: relative;
top: -2px;
left: 1px;
}
@media (max-width: 48em) {
#layout.showMenu #menu {
display: block;
margin-top: 40px;
}
#toggleMenuButton {
display: block;
}
#layout.showMenu #main {
display: none;
}
#title {
padding-left: 60px;
}
#layout.showMenu #toggleMenuButton::after {
content: "«";
}
#toggleMenuButton::after {
content: "»";
}
#menu {
display: none;
}
}

View File

@@ -1,10 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; url=./{{ROOT_NOTE_ID}}.html" />
</head>
<body>
</body>
</html>

View File

@@ -1,43 +0,0 @@
#!/usr/bin/env bash
script_dir=$(realpath $(dirname $0))
cd "$script_dir"
env_file="$script_dir/.env"
if [ ! -f "$env_file" ]; then
echo "Missing .env file, cannot proceed."
exit 1
fi
output_dir="$script_dir/../../docs"
mkdir -p "$output_dir"
rm -f "$output_dir"/*
rm -rf "$output_dir"/{assets,share}
source "$env_file"
# Download everything in output/notes.example.com/share/...
share_url="$SHARE_PROTOCOL://$SHARE_HOST/share/$ROOT_NOTE_ID"
wget -rpEk -e robots=off "$share_url" -P "$output_dir"
if [ $? -ne 0 ]; then
echo -e \\nDownloading failed, make sure you are using the real wget package and not the busybox one.
exit 1
fi
# Get rid of the domain in the output folder
mv "$output_dir/$SHARE_HOST"/* "$output_dir/"
rmdir "$output_dir/$SHARE_HOST"
# Create home page with redirect
index_dest_path="$output_dir/index.html"
cp index.template.html "$index_dest_path"
sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path"
# Rewrite links to get rid of the share folder
sed -i "s/<link href=\"\\.\\./<link href=\"\\./g" "$output_dir/share"/*.html
sed -i "s/<script src=\"\\.\\./<script src=\"\\./g" "$output_dir/share"/*.html
sed -i "s/rel=\"shortcut icon\" href=\"\\.\\./rel=\"shortcut icon\" href=\"\\./g" "$output_dir/share"/*.html
cp -r "$output_dir/share"/* "$output_dir"
rm -r "$output_dir/share"

View File

@@ -1,8 +0,0 @@
#!/usr/bin/env bash
LISTEN_ADDRESS=127.0.0.1:8088
script_dir=$(realpath $(dirname $0))
output_dir="$script_dir/../../docs"
echo "Preview the documentation at http://$LISTEN_ADDRESS"
httpd -fv -p "$LISTEN_ADDRESS" -h "$output_dir"

View File

@@ -2,6 +2,6 @@
SCHEMA_FILE_PATH=db/schema.sql
sqlite3 ./data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH"
sqlite3 ~/trilium-data/document.db .schema | grep -v "sqlite_sequence" > "$SCHEMA_FILE_PATH"
echo "DB schema exported to $SCHEMA_FILE_PATH"

View File

@@ -1,57 +0,0 @@
#!/usr/bin/env bash
if [[ $# -eq 0 ]] ; then
echo "Missing argument of new version"
exit 1
fi
VERSION=$1
if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ;
then
echo "Version ${VERSION} isn't in format X.Y.Z"
exit 1
fi
VERSION_DATE=$(git log -1 --format=%aI "v${VERSION}" | cut -c -10)
VERSION_COMMIT=$(git rev-list -n 1 "v${VERSION}")
# expecting the directory at a specific path
cd ~/trilium-flathub || exit
if ! git diff-index --quiet HEAD --; then
echo "There are uncommitted changes"
exit 1
fi
BASE_BRANCH=master
if [[ "$VERSION" == *"beta"* ]]; then
BASE_BRANCH=beta
fi
git switch "${BASE_BRANCH}"
git pull
BRANCH=b${VERSION}
git branch "${BRANCH}"
git switch "${BRANCH}"
echo "Updating files with version ${VERSION}, date ${VERSION_DATE} and commit ${VERSION_COMMIT}"
flatpak-node-generator npm ../trilium/package-lock.json
xmlstarlet ed --inplace --update "/component/releases/release/@version" --value "${VERSION}" --update "/component/releases/release/@date" --value "${VERSION_DATE}" ./com.github.zadam.trilium.metainfo.xml
yq --inplace "(.modules[0].sources[0].tag = \"v${VERSION}\") | (.modules[0].sources[0].commit = \"${VERSION_COMMIT}\")" ./com.github.zadam.trilium.yml
git add ./generated-sources.json
git add ./com.github.zadam.trilium.metainfo.xml
git add ./com.github.zadam.trilium.yml
git commit -m "release $VERSION"
git push --set-upstream origin "${BRANCH}"
gh pr create --fill -B "${BASE_BRANCH}"
gh pr merge --auto --merge --delete-branch

View File

@@ -7,11 +7,6 @@ if [[ $# -eq 0 ]] ; then
exit 1
fi
if ! command -v jq &> /dev/null; then
echo "Missing command: jq"
exit 1
fi
VERSION=$1
if ! [[ ${VERSION} =~ ^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}(-.+)?$ ]] ;
@@ -27,14 +22,13 @@ fi
echo "Releasing Trilium $VERSION"
jq '.version = "'$VERSION'"' package.json > package.json.tmp
mv package.json.tmp package.json
jq '.version = "'$VERSION'"' package.json|sponge package.json
git add package.json
npm run update-build-info
echo 'module.exports = { buildDate:"'`date --iso-8601=seconds`'", buildRevision: "'`git log -1 --format="%H"`'" };' > src/services/build.js
git add src/services/build.ts
git add src/services/build.js
TAG=v$VERSION
@@ -54,7 +48,6 @@ LINUX_X64_BUILD=trilium-linux-x64-$VERSION.tar.xz
DEBIAN_X64_BUILD=trilium_${VERSION}_amd64.deb
WINDOWS_X64_BUILD=trilium-windows-x64-$VERSION.zip
MAC_X64_BUILD=trilium-mac-x64-$VERSION.zip
MAC_ARM64_BUILD=trilium-mac-arm64-$VERSION.zip
SERVER_BUILD=trilium-linux-x64-server-$VERSION.tar.xz
echo "Creating release in GitHub"
@@ -65,9 +58,7 @@ if [[ $TAG == *"beta"* ]]; then
EXTRA=--prerelease
fi
if [ ! -z "$GITHUB_CLI_AUTH_TOKEN" ]; then
echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
fi
echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
gh release create "$TAG" \
--title "$TAG release" \
@@ -77,5 +68,4 @@ gh release create "$TAG" \
"dist/$LINUX_X64_BUILD" \
"dist/$WINDOWS_X64_BUILD" \
"dist/$MAC_X64_BUILD" \
"dist/$MAC_ARM64_BUILD" \
"dist/$SERVER_BUILD"

View File

@@ -1,50 +0,0 @@
UPDATE etapi_tokens SET tokenHash = 'API token hash value';
UPDATE notes SET title = 'title'
WHERE noteId NOT IN ('root', '_hidden', '_share')
AND SUBSTR(noteId, 1, 8) != '_options'
AND SUBSTR(noteId, 1, 3) != '_lb';
UPDATE blobs SET content = 'text' WHERE content IS NOT NULL;
UPDATE revisions SET title = 'title';
UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label'
AND name NOT IN
('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss',
'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass',
'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider',
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
'template', 'toc', 'color', 'keepCurrentHoisting', 'executeButton', 'executeDescription', 'newNotesOnTop',
'clipperInbox', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation',
'runOnNoteTitleChange', 'runOnNoteChange', 'runOnNoteContentChange', 'runOnNoteDeletion', 'runOnBranchCreation', 'runOnBranchChange',
'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template',
'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareTemplate', 'shareFavicon');
UPDATE attributes SET name = 'name' WHERE type = 'relation'
AND name NOT IN
('inbox', 'disableVersioning', 'calendarRoot', 'archived', 'excludeFromExport', 'disableInclusion', 'appCss',
'appTheme', 'hidePromotedAttributes', 'readOnly', 'autoReadOnlyDisabled', 'cssClass', 'iconClass',
'keyboardShortcut', 'run', 'runOnInstance', 'runAtHour', 'customRequestHandler', 'customResourceProvider',
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
'template', 'toc', 'color', 'keepCurrentHoisting', 'executeButton', 'executeDescription', 'newNotesOnTop',
'clipperInbox', 'internalLink', 'imageLink', 'relationMapLink', 'includeMapLink', 'runOnNoteCreation',
'runOnNoteTitleChange', 'runOnNoteChange', 'runOnNoteContentChange', 'runOnNoteDeletion', 'runOnBranchCreation', 'runOnBranchChange',
'runOnBranchDeletion', 'runOnChildNoteCreation', 'runOnAttributeCreation', 'runOnAttributeChange', 'template',
'inherit', 'widget', 'renderNote', 'shareCss', 'shareJs', 'shareTemplate', 'shareFavicon');
UPDATE branches SET prefix = 'prefix' WHERE prefix IS NOT NULL AND prefix != 'recovered';
UPDATE options SET value = 'anonymized' WHERE name IN
('documentId', 'documentSecret', 'encryptedDataKey',
'passwordVerificationHash', 'passwordVerificationSalt',
'passwordDerivedKeySalt', 'username', 'syncServerHost', 'syncProxy')
AND value != '';
VACUUM;

View File

@@ -1,23 +1,4 @@
@echo off
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
:: If there's no powershell available, fallback to unicode enabled command interpreter
WHERE powershell.exe > NUL 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
:POWERSHELL
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:NODE_TLS_REJECT_UNAUTHORIZED -Value 0; ./trilium.exe"
GOTO END
:BATCH
:: Make sure we support UTF-8 characters
chcp 65001
:: Get Current Trilium executable directory and compute data directory
SET DIR=%~dp0
set NODE_TLS_REJECT_UNAUTHORIZED=0
cd %DIR%
start trilium.exe
GOTO END
:END

View File

@@ -1,23 +1,4 @@
@echo off
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
:: If there's no powershell available, fallback to unicode enabled command interpreter
WHERE powershell.exe > NUL 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
:POWERSHELL
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_DATA_DIR -Value './trilium-data'; ./trilium.exe"
GOTO END
:BATCH
:: Make sure we support UTF-8 characters
chcp 65001
:: Get Current Trilium executable directory and compute data directory
SET DIR=%~dp0
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
cd %DIR%
start trilium.exe
GOTO END
:END
start trilium.exe

View File

@@ -1,23 +1,4 @@
@echo off
:: Try to get powershell to launch Trilium since it deals with UTF-8 characters in current path
:: If there's no powershell available, fallback to unicode enabled command interpreter
WHERE powershell.exe > NUL 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO BATCH ELSE GOTO POWERSHELL
:POWERSHELL
powershell -ExecutionPolicy Bypass -NonInteractive -NoLogo "Set-Item -Path Env:TRILIUM_SAFE_MODE -Value 1; ./trilium.exe --disable-gpu"
GOTO END
:BATCH
:: Make sure we support UTF-8 characters
chcp 65001
:: Get Current Trilium executable directory and compute data directory
SET DIR=%~dp0
SET TRILIUM_SAFE_MODE=1
cd %DIR%
start trilium.exe --disable-gpu
GOTO END
:END
start trilium.exe

View File

@@ -3,5 +3,5 @@
DIR=`dirname "$0"`
export TRILIUM_SAFE_MODE=1
"$DIR/trilium" --disable-gpu
"$DIR/trilium"

View File

@@ -1,25 +0,0 @@
import child_process from "child_process";
import fs from "fs";
function getBuildDate() {
const now = new Date();
now.setMilliseconds(0);
return now
.toISOString()
.replace(".000", "");
}
function getGitRevision() {
return child_process.execSync('git log -1 --format="%H"')
.toString("utf-8")
.trimEnd();
}
const output = `\
export default {
buildDate: "${getBuildDate()}",
buildRevision: "${getGitRevision()}"
};
`;
fs.writeFileSync("src/services/build.ts", output);

View File

@@ -16,14 +16,8 @@ noBackup=false
# host=0.0.0.0
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
port=8080
# true for TLS/SSL/HTTPS (secure), false for HTTP (insecure).
# true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure).
https=false
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
certPath=
keyPath=
# setting to give trust to reverse proxies, a comma-separated list of trusted rev. proxy IPs can be specified (CIDR notation is permitted),
# alternatively 'true' will make use of the leftmost IP in X-Forwarded-For, ultimately an integer can be used to tell about the number of hops between
# Trilium (which is hop 0) and the first trusted rev. proxy.
# once set, expressjs will use the X-Forwarded-For header set by the rev. proxy to determinate the real IPs of clients.
# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
trustedReverseProxy=false

View File

@@ -1,5 +1,11 @@
- drop branches.utcDateCreated - not used for anything
- drop options.utcDateCreated - not used for anything
- isDeleted = 0 by default
- rename openTabs to openNoteContexts
- migrate black theme to dark theme
- unify readOnly handling to a single attribute:
* readOnly - like now
* readOnly=auto - like without readOnly (used to override inherited readOnly)
* readOnly=never - like autoReadOnlyDisabled
- remove focusOnAttributesKeyboardShortcut
- rename white theme to "light" theme (it's not completely white and matches well to dark theme)

Binary file not shown.

View File

@@ -0,0 +1,15 @@
const becca = require('../../src/becca/becca');
const beccaLoader = require('../../src/becca/becca_loader');
const cls = require('../../src/services/cls');
module.exports = () => {
cls.init(() => {
beccaLoader.load();
for (const note of Object.values(becca.notes)) {
if (note.hasLabel('calendarRoot')) {
note.addLabel('excludeFromNoteMap', "", true);
}
}
});
};

View File

@@ -0,0 +1,4 @@
-- black theme has been removed, dark is closest replacement
UPDATE options SET value = 'dark' WHERE name = 'theme' AND value = 'black';
UPDATE options SET value = 'light' WHERE name = 'theme' AND value = 'white';

View File

@@ -0,0 +1,2 @@
ALTER TABLE branches DROP COLUMN utcDateCreated;
ALTER TABLE options DROP COLUMN utcDateCreated;

View File

@@ -0,0 +1,23 @@
CREATE TABLE IF NOT EXISTS "mig_entity_changes" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`hash` TEXT NOT NULL,
`isErased` INT NOT NULL,
`changeId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`isSynced` INTEGER NOT NULL,
`utcDateChanged` TEXT NOT NULL
);
INSERT INTO mig_entity_changes (entityName, entityId, hash, isErased, changeId, sourceId, isSynced, utcDateChanged)
SELECT entityName, entityId, hash, isErased, '', sourceId, isSynced, utcDateChanged FROM entity_changes;
DROP TABLE entity_changes;
ALTER TABLE mig_entity_changes RENAME TO entity_changes;
CREATE UNIQUE INDEX `IDX_entityChanges_entityName_entityId` ON "entity_changes" (
`entityName`,
`entityId`
);

View File

@@ -1,13 +0,0 @@
CREATE TABLE IF NOT EXISTS "blobs" (
`blobId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`dateModified` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`blobId`)
);
ALTER TABLE notes ADD blobId TEXT DEFAULT NULL;
ALTER TABLE note_revisions ADD blobId TEXT DEFAULT NULL;
CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId);
CREATE INDEX IF NOT EXISTS IDX_note_revisions_blobId on note_revisions (blobId);

View File

@@ -1,62 +0,0 @@
module.exports = () => {
const sql = require('../../src/services/sql');
const utils = require('../../src/services/utils');
const existingBlobIds = new Set();
for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) {
const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]);
const blobId = utils.hashedBlobId(row.content);
if (!existingBlobIds.has(blobId)) {
existingBlobIds.add(blobId);
sql.insert('blobs', {
blobId,
content: row.content,
dateModified: row.dateModified,
utcDateModified: row.utcDateModified
});
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_contents' AND entityId = ?", [blobId, row.noteId]);
} else {
// duplicates
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_contents' AND entityId = ?", [row.noteId]);
}
sql.execute('UPDATE notes SET blobId = ? WHERE noteId = ?', [blobId, row.noteId]);
}
for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) {
const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]);
const blobId = utils.hashedBlobId(row.content);
if (!existingBlobIds.has(blobId)) {
existingBlobIds.add(blobId);
sql.insert('blobs', {
blobId,
content: row.content,
dateModified: row.utcDateModified,
utcDateModified: row.utcDateModified
});
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]);
} else {
// duplicates
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]);
}
sql.execute('UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?', [blobId, row.noteRevisionId]);
}
const notesWithoutBlobIds = sql.getColumn("SELECT noteId FROM notes WHERE blobId IS NULL");
if (notesWithoutBlobIds.length > 0) {
throw new Error("BlobIds were not filled correctly in notes: " + JSON.stringify(notesWithoutBlobIds));
}
const noteRevisionsWithoutBlobIds = sql.getColumn("SELECT noteRevisionId FROM note_revisions WHERE blobId IS NULL");
if (noteRevisionsWithoutBlobIds.length > 0) {
throw new Error("BlobIds were not filled correctly in note revisions: " + JSON.stringify(noteRevisionsWithoutBlobIds));
}
};

View File

@@ -1,4 +0,0 @@
DROP TABLE note_contents;
DROP TABLE note_revision_contents;
DELETE FROM entity_changes WHERE entityName IN ('note_contents', 'note_revision_contents');

View File

@@ -1,26 +0,0 @@
CREATE TABLE IF NOT EXISTS "revisions" (`revisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
`title` TEXT NOT NULL,
`isProtected` INT NOT NULL DEFAULT 0,
blobId TEXT DEFAULT NULL,
`utcDateLastEdited` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
`dateLastEdited` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL);
INSERT INTO revisions (revisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId)
SELECT noteRevisionId, noteId, type, mime, title, isProtected, utcDateLastEdited, utcDateCreated, utcDateModified, dateLastEdited, dateCreated, blobId FROM note_revisions;
DROP TABLE note_revisions;
CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`);
CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`);
CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`);
CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`);
CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId);
UPDATE entity_changes SET entityName = 'revisions' WHERE entityName = 'note_revisions';

View File

@@ -1,23 +0,0 @@
CREATE TABLE IF NOT EXISTS "attachments"
(
attachmentId TEXT not null primary key,
ownerId TEXT not null,
role TEXT not null,
mime TEXT not null,
title TEXT not null,
isProtected INT not null DEFAULT 0,
position INT default 0 not null,
blobId TEXT DEFAULT null,
dateModified TEXT NOT NULL,
utcDateModified TEXT not null,
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
isDeleted INT not null,
deleteId TEXT DEFAULT NULL);
CREATE INDEX IDX_attachments_ownerId_role
on attachments (ownerId, role);
CREATE INDEX IDX_attachments_utcDateScheduledForErasureSince
on attachments (utcDateScheduledForErasureSince);
CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId);

View File

@@ -1,27 +0,0 @@
module.exports = () => {
const beccaLoader = require('../../src/becca/becca_loader');
const becca = require('../../src/becca/becca');
const cls = require('../../src/services/cls');
const log = require('../../src/services/log');
const sql = require('../../src/services/sql');
cls.init(() => {
// emergency disabling of image compression since it appears to make problems in migration to 0.61
sql.execute(`UPDATE options SET value = 'false' WHERE name = 'compressImages'`);
beccaLoader.load();
for (const note of Object.values(becca.notes)) {
try {
const attachment = note.convertToParentAttachment({ autoConversion: true });
if (attachment) {
log.info(`Auto-converted note '${note.noteId}' into attachment '${attachment.attachmentId}'.`);
}
}
catch (e) {
log.error(`Cannot convert note '${note.noteId}' to attachment: ${e.message} ${e.stack}`);
}
}
});
};

View File

@@ -1,2 +0,0 @@
DELETE FROM options WHERE name = 'hideIncludedImages_main';
DELETE FROM entity_changes WHERE entityName = 'options' AND entityId = 'hideIncludedImages_main';

View File

@@ -1,2 +0,0 @@
UPDATE options SET name = 'openNoteContexts' WHERE name = 'openTabs';
UPDATE entity_changes SET entityId = 'openNoteContexts' WHERE entityName = 'options' AND entityId = 'openTabs';

View File

@@ -1 +0,0 @@
SELECT 1;

View File

@@ -1,14 +0,0 @@
UPDATE blobs SET blobId = REPLACE(blobId, '+', 'X');
UPDATE blobs SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE notes SET blobId = REPLACE(blobId, '+', 'X');
UPDATE notes SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE attachments SET blobId = REPLACE(blobId, '+', 'X');
UPDATE attachments SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE revisions SET blobId = REPLACE(blobId, '+', 'X');
UPDATE revisions SET blobId = REPLACE(blobId, '/', 'Y');
UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'X') WHERE entityName = 'blobs';
UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'Y') WHERE entityName = 'blobs';

View File

@@ -1,3 +0,0 @@
CREATE INDEX IF NOT EXISTS IDX_notes_blobId on notes (blobId);
CREATE INDEX IF NOT EXISTS IDX_revisions_blobId on revisions (blobId);
CREATE INDEX IF NOT EXISTS IDX_attachments_blobId on attachments (blobId);

View File

@@ -1 +0,0 @@
UPDATE attributes SET value = 'contentAndAttachmentsAndRevisionsSize' WHERE name = 'orderBy' AND value = 'noteSize';

View File

@@ -1,2 +0,0 @@
-- emergency disabling of image compression since it appears to make problems in migration to 0.61
UPDATE options SET value = 'false' WHERE name = 'compressImages';

View File

@@ -1,17 +0,0 @@
-- + is normally replaced by X and / by Y, but this can temporarily cause UNIQUE key exception
-- this might create blob duplicates, but cleanup will eventually take care of it
UPDATE blobs SET blobId = REPLACE(blobId, '+', 'A');
UPDATE blobs SET blobId = REPLACE(blobId, '/', 'B');
UPDATE notes SET blobId = REPLACE(blobId, '+', 'A');
UPDATE notes SET blobId = REPLACE(blobId, '/', 'B');
UPDATE attachments SET blobId = REPLACE(blobId, '+', 'A');
UPDATE attachments SET blobId = REPLACE(blobId, '/', 'B');
UPDATE revisions SET blobId = REPLACE(blobId, '+', 'A');
UPDATE revisions SET blobId = REPLACE(blobId, '/', 'B');
UPDATE entity_changes SET entityId = REPLACE(entityId, '+', 'A') WHERE entityName = 'blobs';
UPDATE entity_changes SET entityId = REPLACE(entityId, '/', 'B') WHERE entityName = 'blobs';

View File

@@ -5,18 +5,15 @@ CREATE TABLE IF NOT EXISTS "entity_changes" (
`hash` TEXT NOT NULL,
`isErased` INT NOT NULL,
`changeId` TEXT NOT NULL,
`componentId` TEXT NOT NULL,
`instanceId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`isSynced` INTEGER NOT NULL,
`utcDateChanged` TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "etapi_tokens"
CREATE TABLE IF NOT EXISTS "api_tokens"
(
etapiTokenId TEXT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
tokenHash TEXT NOT NULL,
apiTokenId TEXT PRIMARY KEY NOT NULL,
token TEXT NOT NULL,
utcDateCreated TEXT NOT NULL,
utcDateModified TEXT NOT NULL,
isDeleted INT NOT NULL DEFAULT 0);
CREATE TABLE IF NOT EXISTS "branches" (
`branchId` TEXT NOT NULL,
@@ -35,7 +32,6 @@ CREATE TABLE IF NOT EXISTS "notes" (
`isProtected` INT NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'text',
`mime` TEXT NOT NULL DEFAULT 'text/html',
blobId TEXT DEFAULT NULL,
`isDeleted` INT NOT NULL DEFAULT 0,
`deleteId` TEXT DEFAULT NULL,
`dateCreated` TEXT NOT NULL,
@@ -43,22 +39,31 @@ CREATE TABLE IF NOT EXISTS "notes" (
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`));
CREATE TABLE IF NOT EXISTS "revisions" (`revisionId` TEXT NOT NULL PRIMARY KEY,
CREATE TABLE IF NOT EXISTS "note_contents" (
`noteId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`dateModified` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`noteId`)
);
CREATE TABLE IF NOT EXISTS "note_revisions" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
type TEXT DEFAULT '' NOT NULL,
mime TEXT DEFAULT '' NOT NULL,
`title` TEXT NOT NULL,
`title` TEXT,
`isProtected` INT NOT NULL DEFAULT 0,
blobId TEXT DEFAULT NULL,
`utcDateLastEdited` TEXT NOT NULL,
`utcDateCreated` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
`dateLastEdited` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS "note_revision_contents" (`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`content` TEXT,
`utcDateModified` TEXT NOT NULL);
CREATE TABLE IF NOT EXISTS "options"
(
name TEXT not null PRIMARY KEY,
value TEXT not null,
value TEXT,
isSynced INTEGER default 0 not null,
utcDateModified TEXT NOT NULL
);
@@ -86,12 +91,11 @@ CREATE INDEX `IDX_notes_dateCreated` ON `notes` (`dateCreated`);
CREATE INDEX `IDX_notes_dateModified` ON `notes` (`dateModified`);
CREATE INDEX `IDX_notes_utcDateModified` ON `notes` (`utcDateModified`);
CREATE INDEX `IDX_notes_utcDateCreated` ON `notes` (`utcDateCreated`);
CREATE INDEX `IDX_revisions_noteId` ON `revisions` (`noteId`);
CREATE INDEX `IDX_revisions_utcDateCreated` ON `revisions` (`utcDateCreated`);
CREATE INDEX `IDX_revisions_utcDateLastEdited` ON `revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_revisions_dateCreated` ON `revisions` (`dateCreated`);
CREATE INDEX `IDX_revisions_dateLastEdited` ON `revisions` (`dateLastEdited`);
CREATE INDEX `IDX_entity_changes_changeId` ON `entity_changes` (`changeId`);
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (`noteId`);
CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCreated`);
CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`);
CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`);
CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`);
CREATE INDEX IDX_attributes_name_value
on attributes (name, value);
CREATE INDEX IDX_attributes_noteId_index
@@ -104,31 +108,3 @@ CREATE TABLE IF NOT EXISTS "recent_notes"
notePath TEXT not null,
utcDateCreated TEXT not null
);
CREATE TABLE IF NOT EXISTS "blobs" (
`blobId` TEXT NOT NULL,
`content` TEXT NULL DEFAULT NULL,
`dateModified` TEXT NOT NULL,
`utcDateModified` TEXT NOT NULL,
PRIMARY KEY(`blobId`)
);
CREATE TABLE IF NOT EXISTS "attachments"
(
attachmentId TEXT not null primary key,
ownerId TEXT not null,
role TEXT not null,
mime TEXT not null,
title TEXT not null,
isProtected INT not null DEFAULT 0,
position INT default 0 not null,
blobId TEXT DEFAULT null,
dateModified TEXT NOT NULL,
utcDateModified TEXT not null,
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
isDeleted INT not null,
deleteId TEXT DEFAULT NULL);
CREATE INDEX IDX_attachments_ownerId_role
on attachments (ownerId, role);
CREATE INDEX IDX_notes_blobId on notes (blobId);
CREATE INDEX IDX_revisions_blobId on revisions (blobId);
CREATE INDEX IDX_attachments_blobId on attachments (blobId);

View File

@@ -1,16 +1,17 @@
# Running `docker-compose up` will create/use the "trilium-data" directory in the user home
# Run `TRILIUM_DATA_DIR=/path/of/your/choice docker-compose up` to set a different directory
version: '2.1'
services:
trilium:
build:
context: .
image: zadam/trilium
restart: always
environment:
- TRILIUM_DATA_DIR=/home/node/trilium-data
- TRILIUM_DATA_DIR=/data
ports:
- "8080:8080"
volumes:
- ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data
- trilium:/data
volumes:
trilium:

View File

@@ -1,42 +0,0 @@
const http = require("http");
const ini = require("ini");
const fs = require("fs");
const dataDir = require('./src/services/data_dir');
const config = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, 'utf-8'));
if (config.Network.https) {
// built-in TLS (terminated by trilium) is not supported yet, PRs are welcome
// for reverse proxy terminated TLS this will works since config.https will be false
process.exit(0);
}
const port = require('./src/services/port');
const host = require('./src/services/host');
const options = { timeout: 2000 };
const callback = res => {
console.log(`STATUS: ${res.statusCode}`);
if (res.statusCode === 200) {
process.exit(0);
} else {
process.exit(1);
}
};
let request;
if (port !== 0) { // TCP socket.
const url = `http://${host}:${port}/api/health-check`;
request = http.request(url, options, callback);
} else { // Unix socket.
options.socketPath = host;
options.path = '/api/health-check';
request = http.request(options, callback);
}
request.on("error", err => {
console.log("ERROR");
process.exit(1);
});
request.end();

View File

@@ -1,771 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Branch prefixes</title>
</head>
<body data-note-id="1l1f6WZbaBEZ" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="B8hxg4e66cVL.html"
class="type-text">Development and architecture</a>
</nav>
<h1 id="title">Branch prefixes</h1>
<p>This note has no content.</p>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<strong>Branch prefixes</strong>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,806 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Widgets</title>
</head>
<body data-note-id="1pOWnHdGAuWR" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="3eTu21fjtZkj.html"
class="type-text">Scripting</a>
</nav>
<h1 id="title">Widgets</h1>
<div id="content" class="type-text ck-content">
<p>To create a basic widget, simply create a code note with type “JS frontend”. Add the <code>#widget</code> label in order for it to be loaded at startup.</p><pre><code class="language-text-plain">const template = `&lt;div id="my-widget"&gt;&lt;button&gt;Click Me!&lt;/button&gt;&lt;/div&gt;`;
class MyWidget extends api.BasicWidget {
get position() { return 1; }
get parentWidget() { return "left-pane" }
doRender() {
this.$widget = $(template);
return this.$widget;
}
}
module.exports = new MyWidget();</code></pre><p><code>parentWidget()</code> can be given the following values:</p><ul><li><code>left-pane</code> - This renders the widget on the left side of the screen where the note tree lives.</li><li><code>center-pane</code> - This renders the widget in the center of the layout in the same location that notes and splits appear.</li><li><code>note-detail-pane</code> - This renders the widget <i>with</i> the note in the center pane. This means it can appear multiple times with splits.</li><li><code>right-pane</code> - This renders the widget to the right of any opened notes.</li></ul><hr><p>Reference:</p><ul><li><a href="https://trilium.rocks/X7pxYpiu0lgU">https://trilium.rocks/X7pxYpiu0lgU</a>&nbsp;</li><li><a href="https://github.com/zadam/trilium/wiki/Widget-Basics">https://github.com/zadam/trilium/wiki/Widget-Basics</a>&nbsp;</li><li><a href="https://github.com/zadam/trilium/wiki/Frontend-Basics">https://github.com/zadam/trilium/wiki/Frontend-Basics</a>&nbsp;</li></ul>
</div>
<nav id="childLinks" class="list">
<hr>
<span>Child notes: </span>
<ul>
<li>
<a href="8jWguCtuKsAt.html"
class="type-text">Right pane widget</a>
</li>
<li>
<a href="4FXLAtcPhZFo.html"
class="type-text">CSS</a>
</li>
</ul>
</nav>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<strong>Widgets</strong>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,782 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Scripting</title>
</head>
<body data-note-id="3eTu21fjtZkj" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="4yYHqKbLovVX.html"
class="type-text">Developer&#39;s Guide</a>
</nav>
<h1 id="title">Scripting</h1>
<nav id="childLinks" class="grid">
<ul>
<li>
<a href="1pOWnHdGAuWR.html"
class="type-text">Widgets</a>
</li>
</ul>
</nav>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<strong>Scripting</strong>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,773 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Themes</title>
</head>
<body data-note-id="3jc1nUXyteo0" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="B8hxg4e66cVL.html"
class="type-text">Development and architecture</a>
</nav>
<h1 id="title">Themes</h1>
<div id="content" class="type-text ck-content">
<h2>Server-side</h2><ul><li>There are two themes embedded in the application:<ul><li><code>light</code>, located in <code>src\public\stylesheets\theme-light.css</code></li><li><code>dark</code>, located in <code>src\public\stylesheets\theme-dark.css</code></li></ul></li><li>The default theme is set only once, when the database is created and is managed by <code>options_init#initNotSyncedOptions</code>.<ul><li>On Electron, the choice between <code>light</code> and <code>dark</code> is done based on the OS preference.</li><li>Otherwise, the theme is always <code>dark</code>.</li></ul></li><li>The theme is served via <code>src\routes\index.ts</code>, in the <code>getThemeCssUrl</code> method.</li></ul><h2>Client-side</h2><ul><li>The two predefined themes are hard-coded in the client in <code>src\public\app\widgets\type_widgets\options\appearance\theme.js</code>.</li><li>The user-defined themes are obtained via a call to the server: <code>options/user-themes</code>.</li><li>The theme retrieval is done via a request</li></ul>
</div>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<strong>Themes</strong>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,778 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>CSS</title>
</head>
<body data-note-id="4FXLAtcPhZFo" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="1pOWnHdGAuWR.html"
class="type-text">Widgets</a>
</nav>
<h1 id="title">CSS</h1>
<div id="content" class="type-text ck-content">
<p>In <code>doRender()</code>:</p><pre><code class="language-text-plain">this.cssBlock(`#my-widget {
position: absolute;
bottom: 40px;
left: 60px;
z-index: 1;
}`)</code></pre><hr><p>Reference: <a href="https://trilium.rocks/X7pxYpiu0lgU">https://trilium.rocks/X7pxYpiu0lgU</a>&nbsp;</p>
</div>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<strong>CSS</strong>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,797 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Developer&#39;s Guide</title>
</head>
<body data-note-id="4yYHqKbLovVX" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<h1 id="title">Developer&#39;s Guide</h1>
<nav id="childLinks" class="grid">
<ul>
<li>
<a href="VS22Hq5PBFNf.html"
class="type-text">Dependency Management</a>
</li>
<li>
<a href="ZlxZh8NH5frM.html"
class="type-text">Building and deployment</a>
</li>
<li>
<a href="xtBYDVZPb0gr.html"
class="type-text">Project maintenance</a>
</li>
<li>
<a href="B8hxg4e66cVL.html"
class="type-text">Development and architecture</a>
</li>
<li>
<a href="3eTu21fjtZkj.html"
class="type-text">Scripting</a>
</li>
</ul>
</nav>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<strong>Developer&#39;s Guide</strong>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,773 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>blobs</title>
</head>
<body data-note-id="6x42mhlfLo0o" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="zCDxk5VFdsqg.html"
class="type-text">Database</a>
</nav>
<h1 id="title">blobs</h1>
<div id="content" class="type-text ck-content">
<figure class="table"><table><thead><tr><th>Column Name</th><th>Data Type</th><th>Nullity</th><th>Default value</th><th>Description</th></tr></thead><tbody><tr><th><code>blobId</code></th><td>Text</td><td>Non-null</td><td>&nbsp;</td><td>The unique ID of the blob (e.g. <code>XXbfAJXqWrYnSXcelLFA</code>).</td></tr><tr><th><code>content</code></th><td>Text</td><td>Nullable</td><td><code>null</code></td><td><p>The content of the blob, can be either:</p><ul><li>text (for plain text notes or HTML notes).</li><li>binary (for images and other types of attachments)</li></ul></td></tr><tr><th><code>dateModified</code></th><td>Text</td><td>Non-null</td><td>&nbsp;</td><td>Localized modification date (e.g. <code>2023-11-08 18:43:44.204+0200</code>)</td></tr><tr><th><code>utcDateModified</code></th><td>Text</td><td>Non-null</td><td>&nbsp;</td><td>Modification date in UTC format (e.g. <code>2023-11-08 16:43:44.204Z</code>)</td></tr></tbody></table></figure>
</div>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<strong>blobs</strong>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,795 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Right pane widget</title>
</head>
<body data-note-id="8jWguCtuKsAt" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="1pOWnHdGAuWR.html"
class="type-text">Widgets</a>
</nav>
<h1 id="title">Right pane widget</h1>
<div id="content" class="type-text ck-content">
<ul><li><code>doRender</code> must not be overridden, instead <code>doRenderBody()</code> has to be overridden.</li><li><code>parentWidget()</code> must be set to <code>“rightPane”</code>.</li><li><code>widgetTitle()</code> getter can optionally be overriden, otherwise the widget will be displayed as “Untitled widget”.</li></ul><pre><code class="language-text-plain">const template = `&lt;div&gt;Hi&lt;/div&gt;`;
class ToDoListWidget extends api.RightPanelWidget {
get widgetTitle() {
return "Title goes here";
}
get parentWidget() { return "right-pane" }
doRenderBody() {
this.$body.empty().append($(template));
}
async refreshWithNote(note) {
this.toggleInt(false);
this.triggerCommand("reEvaluateRightPaneVisibility");
this.toggleInt(true);
this.triggerCommand("reEvaluateRightPaneVisibility");
}
}
module.exports = new ToDoListWidget();</code></pre><p>The implementation is in <code>src/public/app/widgets/right_panel_widget.js</code>.</p>
</div>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<strong>Right pane widget</strong>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,847 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Development and architecture</title>
</head>
<body data-note-id="B8hxg4e66cVL" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="4yYHqKbLovVX.html"
class="type-text">Developer&#39;s Guide</a>
</nav>
<h1 id="title">Development and architecture</h1>
<nav id="childLinks" class="grid">
<ul>
<li>
<a href="hkrBX8KE1HQl.html"
class="type-text">Internationalisation / Translations</a>
</li>
<li>
<a href="XxqZW6JjkW2g.html"
class="type-text">Live reload</a>
</li>
<li>
<a href="3jc1nUXyteo0.html"
class="type-text">Themes</a>
</li>
<li>
<a href="U5RtMeGPeZ29.html"
class="type-text">Synchronisation</a>
</li>
<li>
<a href="mPGbEmYGitWe.html"
class="type-text">Build information</a>
</li>
<li>
<a href="zCDxk5VFdsqg.html"
class="type-text">Database</a>
</li>
<li>
<a href="KbwD5mDpD4CV.html"
class="type-text">Protected entities</a>
</li>
<li>
<a href="IuxV242YGaN5.html"
class="type-text">Deleted notes</a>
</li>
<li>
<a href="FJ4VR6G2M6VD.html"
class="type-text">Special notes</a>
</li>
<li>
<a href="1l1f6WZbaBEZ.html"
class="type-text">Branch prefixes</a>
</li>
<li>
<a href="QSkfVssHIngA.html"
class="type-text">Revisions</a>
</li>
<li>
<a href="cemIoFLfEGPO.html"
class="type-text">Backlinks</a>
</li>
<li>
<a href="VbDoDdiHEemi.html"
class="type-text">Note types</a>
</li>
<li>
<a href="UDBwK5Fhr2CT.html"
class="type-text">Safe mode</a>
</li>
</ul>
</nav>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="BhE2WFknKKHG.html">Main</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<strong>Development and architecture</strong>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

View File

@@ -1,773 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="./favicon.ico">
<script src="./assets/v0.63.6/app-dist/share.js"></script>
<link href="./assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet">
<link href="./assets/v0.63.6/stylesheets/share.css" rel="stylesheet">
<link href="./assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet">
<title>Main</title>
</head>
<body data-note-id="BhE2WFknKKHG" data-ancestor-note-id="4yYHqKbLovVX">
<div id="layout">
<div id="main">
<nav id="parentLink">
parent: <a href="rU1hxvgqlA9x.html"
class="type-text">CI</a>
</nav>
<h1 id="title">Main</h1>
<div id="content" class="type-text ck-content">
<p>The main workflow of the CI:</p><ul><li>Builds the Docker image and publishes in the GitHub Docker registry.</li><li>Builds using a portion of the <a href="UTB518X6X9Uh.html" class="type-text">delivery script</a> artifacts for the following platforms:<ul><li>Windows <code>x86_64</code> as .zip file</li><li>Windows <code>x86_64</code> installer (using Squirrel)</li><li>macOS <code>x86_64</code> and <code>aarch64</code>.</li><li>Linux <code>x86_64</code></li><li>Linux server <code>x86_64</code>.</li></ul></li></ul><p>The main workflow of the CI runs on <code>develop</code> branches as well as any branch that starts with <code>feature/update_</code>.</p><h2>Downloading the artifacts from the main branch</h2><p>Simply go to the <a href="https://github.com/TriliumNext/Notes"><code>develop</code> branch on GitHub</a> and look at the commit bar:</p><figure class="image"><img style="aspect-ratio:896/59;" src="api/attachments/XEUUvzBxh89z/image/image.png" width="896" height="59"></figure><p>Press the green checkmark (or red cross if something went bad). Then look at the list of jobs and their status:</p><figure class="image"><img style="aspect-ratio:616/445;" src="api/attachments/27Z989bSFWAc/image/image.png" width="616" height="445"></figure><p>Then look for any of the entires that starts with “Main” and press the “Details” link next to it. It doesn't really matter which platform you'll choose as the artifacts are available on the same page.</p><p>&nbsp;</p>
</div>
</div>
<button id="toggleMenuButton"></button>
<nav id="menu">
<p>
<a class="type-text" href="4yYHqKbLovVX.html">Developer&#39;s Guide</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="C09Dou56ffMe.html">Having a simpler packaging system</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="ZlxZh8NH5frM.html">Building and deployment</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="PHqgH8FCfcod.html">Documentation</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="btM6L9JtG301.html">Running a development build</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="biDJ9KgbWLgt.html">Releasing a version</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="rU1hxvgqlA9x.html">CI</a>
</p>
<ul>
<li>
<p>
<strong>Main</strong>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="xtBYDVZPb0gr.html">Project maintenance</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="s5gsYTbPQr6c.html">Updating dependencies</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="X4N03xLYEWnN.html">bettersqlite binaries</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="GMta9hBHsXHQ.html">Node.js, Electron and `better-sqlite3`</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="jvdjFBOCCrOa.html">Testing compatibility</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="B8hxg4e66cVL.html">Development and architecture</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation / Translations</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="Z9N9OKBXXLFW.html">Guidelines</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="KRC2O84LekPz.html">i18n-ally</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="XxqZW6JjkW2g.html">Live reload</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="3jc1nUXyteo0.html">Themes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="U5RtMeGPeZ29.html">Synchronisation</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="d3dnvVOhur16.html">Content hashing</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="mPGbEmYGitWe.html">Build information</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="zCDxk5VFdsqg.html">Database</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="wCxCJB3hhojs.html">attachments</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="wxCwZ1P2SGCx.html">attributes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="6x42mhlfLo0o.html">blobs</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="Vy1PbjSkUast.html">branches</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="inGKXCChkVYX.html">entity_changes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="y2ido6E6tZ0V.html">etapi_tokens</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="kAfgZERKtVhU.html">notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FSZoX3cJlJE7.html">options</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="bzQfhyzDo3Xz.html">recent_notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QYMncZf5Bu3D.html">revisions</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="KbwD5mDpD4CV.html">Protected entities</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="IuxV242YGaN5.html">Deleted notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="FJ4VR6G2M6VD.html">Special notes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="1l1f6WZbaBEZ.html">Branch prefixes</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="QSkfVssHIngA.html">Revisions</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="cemIoFLfEGPO.html">Backlinks</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="VbDoDdiHEemi.html">Note types</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="UDBwK5Fhr2CT.html">Safe mode</a>
</p>
</li>
</ul>
</li>
<li>
<p>
<a class="type-text" href="3eTu21fjtZkj.html">Scripting</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="1pOWnHdGAuWR.html">Widgets</a>
</p>
<ul>
<li>
<p>
<a class="type-text" href="8jWguCtuKsAt.html">Right pane widget</a>
</p>
</li>
<li>
<p>
<a class="type-text" href="4FXLAtcPhZFo.html">CSS</a>
</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More