mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 05:28:59 +01:00 
			
		
		
		
	Merge remote-tracking branch 'origin/develop' into feature/i18n_first_steps
; Conflicts: ; package-lock.json ; package.json
This commit is contained in:
		
						commit
						2fb05ab37d
					
				
							
								
								
									
										10
									
								
								.github/workflows/dev.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/workflows/dev.yml
									
									
									
									
										vendored
									
									
								
							@ -1,6 +1,14 @@
 | 
				
			|||||||
name: Dev
 | 
					name: Dev
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  push:
 | 
					  push:
 | 
				
			||||||
 | 
					    branches-ignore:
 | 
				
			||||||
 | 
					      - 'develop'
 | 
				
			||||||
 | 
					      - 'feature/update**'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					concurrency:
 | 
				
			||||||
 | 
					  group: ${{ github.workflow }}-${{ github.ref }}
 | 
				
			||||||
 | 
					  cancel-in-progress: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  build_docker:
 | 
					  build_docker:
 | 
				
			||||||
    name: Build Docker image
 | 
					    name: Build Docker image
 | 
				
			||||||
@ -10,7 +18,7 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci    
 | 
					      - run: npm ci    
 | 
				
			||||||
      - name: Run the TypeScript build
 | 
					      - name: Run the TypeScript build
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										65
									
								
								.github/workflows/main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								.github/workflows/main.yml
									
									
									
									
										vendored
									
									
								
							@ -3,9 +3,18 @@ on:
 | 
				
			|||||||
  push:
 | 
					  push:
 | 
				
			||||||
    branches:
 | 
					    branches:
 | 
				
			||||||
      - 'develop'
 | 
					      - 'develop'
 | 
				
			||||||
 | 
					      - 'feature/update*'
 | 
				
			||||||
 | 
					    paths-ignore:
 | 
				
			||||||
 | 
					      - 'docs/**'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					concurrency:
 | 
				
			||||||
 | 
					  group: ${{ github.workflow }}-${{ github.ref }}
 | 
				
			||||||
 | 
					  cancel-in-progress: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
  REGISTRY: ghcr.io
 | 
					  REGISTRY: ghcr.io
 | 
				
			||||||
  IMAGE_NAME: ${{ github.repository }}
 | 
					  IMAGE_NAME: ${{ github.repository }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  build_darwin-x64:
 | 
					  build_darwin-x64:
 | 
				
			||||||
    name: Build macOS x86_64
 | 
					    name: Build macOS x86_64
 | 
				
			||||||
@ -15,10 +24,12 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci
 | 
					      - run: npm ci
 | 
				
			||||||
      - run: ./bin/build-mac-x64.sh
 | 
					      - run: |
 | 
				
			||||||
 | 
					          npm run update-build-info
 | 
				
			||||||
 | 
					          ./bin/build-mac-x64.sh
 | 
				
			||||||
      - uses: actions/upload-artifact@v4
 | 
					      - uses: actions/upload-artifact@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          name: trilium-mac-x64.zip
 | 
					          name: trilium-mac-x64.zip
 | 
				
			||||||
@ -31,10 +42,12 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci
 | 
					      - run: npm ci
 | 
				
			||||||
      - run: ./bin/build-mac-arm64.sh
 | 
					      - run: |
 | 
				
			||||||
 | 
					          npm run update-build-info
 | 
				
			||||||
 | 
					          ./bin/build-mac-arm64.sh
 | 
				
			||||||
      - uses: actions/upload-artifact@v4
 | 
					      - uses: actions/upload-artifact@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          name: trilium-mac-arm64.zip
 | 
					          name: trilium-mac-arm64.zip
 | 
				
			||||||
@ -47,10 +60,12 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci
 | 
					      - run: npm ci
 | 
				
			||||||
      - run: ./bin/build-linux-x64.sh
 | 
					      - run: |
 | 
				
			||||||
 | 
					          npm run update-build-info
 | 
				
			||||||
 | 
					          ./bin/build-linux-x64.sh
 | 
				
			||||||
      - uses: actions/upload-artifact@v4
 | 
					      - uses: actions/upload-artifact@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          name: trilium-linux-x64.tar.xz
 | 
					          name: trilium-linux-x64.tar.xz
 | 
				
			||||||
@ -67,10 +82,12 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci
 | 
					      - run: npm ci
 | 
				
			||||||
      - run: ./bin/build-server.sh
 | 
					      - run: |
 | 
				
			||||||
 | 
					          npm run update-build-info
 | 
				
			||||||
 | 
					          ./bin/build-server.sh
 | 
				
			||||||
      - uses: actions/upload-artifact@v4
 | 
					      - uses: actions/upload-artifact@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          name: trilium-linux-x64-server.tar.xz
 | 
					          name: trilium-linux-x64-server.tar.xz
 | 
				
			||||||
@ -90,14 +107,36 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci
 | 
					      - run: npm ci
 | 
				
			||||||
      - run: ./bin/build-win-x64.sh
 | 
					      - run: |
 | 
				
			||||||
 | 
					          npm run update-build-info
 | 
				
			||||||
 | 
					          ./bin/build-win-x64.sh DONTPACK
 | 
				
			||||||
      - uses: actions/upload-artifact@v4
 | 
					      - uses: actions/upload-artifact@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          name: trilium-windows-x64.zip
 | 
					          name: trilium-windows-x64
 | 
				
			||||||
          path: dist/trilium-windows-x64-*.zip
 | 
					          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:
 | 
					  build_docker:
 | 
				
			||||||
    name: Build Docker image
 | 
					    name: Build Docker image
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
@ -122,7 +161,7 @@ jobs:
 | 
				
			|||||||
      - name: Set up node & dependencies
 | 
					      - name: Set up node & dependencies
 | 
				
			||||||
        uses: actions/setup-node@v4
 | 
					        uses: actions/setup-node@v4
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 20
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
      - run: npm ci    
 | 
					      - run: npm ci    
 | 
				
			||||||
      - name: Run the TypeScript build
 | 
					      - name: Run the TypeScript build
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -15,3 +15,5 @@ data/
 | 
				
			|||||||
data-test/
 | 
					data-test/
 | 
				
			||||||
tmp/
 | 
					tmp/
 | 
				
			||||||
.eslintcache
 | 
					.eslintcache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out/
 | 
				
			||||||
@ -2,7 +2,7 @@ image:
 | 
				
			|||||||
  file: .gitpod.dockerfile
 | 
					  file: .gitpod.dockerfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tasks:
 | 
					tasks:
 | 
				
			||||||
    - before: nvm install 18.18.2 && nvm use 18.18.2
 | 
					    - before: nvm install 20.15.1 && nvm use 20.15.1
 | 
				
			||||||
      init: npm install
 | 
					      init: npm install
 | 
				
			||||||
      command: npm run start-server
 | 
					      command: npm run start-server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
 | 
					# !!! Don't try to build this Dockerfile directly, run it through bin/build-docker.sh script !!!
 | 
				
			||||||
FROM node:18.18.2-alpine
 | 
					FROM node:20.15.1-alpine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Configure system dependencies
 | 
					# Configure system dependencies
 | 
				
			||||||
RUN apk add --no-cache --virtual .build-dependencies \
 | 
					RUN apk add --no-cache --virtual .build-dependencies \
 | 
				
			||||||
 | 
				
			|||||||
@ -35,7 +35,7 @@ echo "Packaging linux x64 electron build"
 | 
				
			|||||||
BUILD_DIR=./dist/trilium-linux-x64
 | 
					BUILD_DIR=./dist/trilium-linux-x64
 | 
				
			||||||
rm -rf "$BUILD_DIR"
 | 
					rm -rf "$BUILD_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mv "./dist/Trilium Notes-linux-x64" "$BUILD_DIR"
 | 
					mv "./dist/TriliumNext Notes-linux-x64" "$BUILD_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp images/app-icons/png/128x128.png "$BUILD_DIR"/icon.png
 | 
					cp images/app-icons/png/128x128.png "$BUILD_DIR"/icon.png
 | 
				
			||||||
cp bin/tpl/anonymize-database.sql "$BUILD_DIR"/
 | 
					cp bin/tpl/anonymize-database.sql "$BUILD_DIR"/
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ BUILD_DIR=./dist/trilium-mac-arm64
 | 
				
			|||||||
rm -rf $BUILD_DIR
 | 
					rm -rf $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Mac build has by default useless directory level
 | 
					# Mac build has by default useless directory level
 | 
				
			||||||
mv "./dist/Trilium Notes-darwin-arm64" $BUILD_DIR
 | 
					mv "./dist/TriliumNext Notes-darwin-arm64" $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
					cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ BUILD_DIR=./dist/trilium-mac-x64
 | 
				
			|||||||
rm -rf $BUILD_DIR
 | 
					rm -rf $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Mac build has by default useless directory level
 | 
					# Mac build has by default useless directory level
 | 
				
			||||||
mv "./dist/Trilium Notes-darwin-x64" $BUILD_DIR
 | 
					mv "./dist/TriliumNext Notes-darwin-x64" $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
					cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PKG_DIR=dist/trilium-linux-x64-server
 | 
					PKG_DIR=dist/trilium-linux-x64-server
 | 
				
			||||||
NODE_VERSION=18.18.2
 | 
					NODE_VERSION=20.15.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "$1" != "DONTCOPY" ]
 | 
					if [ "$1" != "DONTCOPY" ]
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ echo "Packaging windows x64 electron build"
 | 
				
			|||||||
BUILD_DIR=./dist/trilium-windows-x64
 | 
					BUILD_DIR=./dist/trilium-windows-x64
 | 
				
			||||||
rm -rf $BUILD_DIR
 | 
					rm -rf $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
 | 
					mv "./dist/TriliumNext Notes-win32-x64" $BUILD_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
					cp bin/tpl/anonymize-database.sql $BUILD_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -34,9 +34,11 @@ rm -rf $BUILD_DIR/dump-db/node_modules
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/
 | 
					cp bin/tpl/trilium-{portable,no-cert-check,safe-mode}.bat $BUILD_DIR/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Zipping windows x64 electron distribution..."
 | 
					if [ "$1" != "DONTPACK" ]
 | 
				
			||||||
VERSION=`jq -r ".version" package.json`
 | 
					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
 | 
				
			||||||
zip -r9 trilium-windows-x64-${VERSION}.zip trilium-windows-x64
 | 
					fi
 | 
				
			||||||
@ -35,26 +35,36 @@ for f in 'package.json' 'package-lock.json' 'README.md' 'LICENSE' 'config-sample
 | 
				
			|||||||
    cp "$f" "$DIR"/
 | 
					    cp "$f" "$DIR"/
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Patch package.json main
 | 
				
			||||||
 | 
					sed -i 's/.\/dist\/electron.js/electron.js/g' "$DIR/package.json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
script_dir=$(realpath $(dirname $0))
 | 
					script_dir=$(realpath $(dirname $0))
 | 
				
			||||||
cp -Rv "$script_dir/../build/src" "$DIR"
 | 
					cp -R "$script_dir/../build/src" "$DIR"
 | 
				
			||||||
cp "$script_dir/../build/electron.js" "$DIR"
 | 
					cp "$script_dir/../build/electron.js" "$DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# run in subshell (so we return to original dir)
 | 
					# run in subshell (so we return to original dir)
 | 
				
			||||||
(cd $DIR && npm install --only=prod)
 | 
					(cd $DIR && npm install --omit=dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ -d "$DIR"/node_modules ]]; then
 | 
					if [[ -d "$DIR"/node_modules ]]; then
 | 
				
			||||||
# cleanup of useless files in dependencies
 | 
					    # cleanup of useless files in dependencies
 | 
				
			||||||
    for d in 'image-q/demo' 'better-sqlite3/Release' 'better-sqlite3/deps/sqlite3.tar.gz' '@jimp/plugin-print/fonts' 'jimp/browser' 'jimp/fonts'; do
 | 
					    for d in 'image-q/demo' \
 | 
				
			||||||
        [[ -e "$DIR"/node_modules/"$d" ]] && rm -rv "$DIR"/node_modules/"$d"
 | 
					        '@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
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# delete all tests (there are often large images as test file for jimp etc.)
 | 
					    # delete all tests (there are often large images as test file for jimp etc.)
 | 
				
			||||||
    for d in 'test' 'docs' 'demo'; do
 | 
					    for d in 'test' 'docs' 'demo' 'example'; do
 | 
				
			||||||
        find "$DIR"/node_modules -name "$d" -exec rm -rf {} \;
 | 
					        find "$DIR"/node_modules -name "$d" -exec rm -rf {} +
 | 
				
			||||||
    done
 | 
					    done
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
find $DIR/libraries -name "*.map" -type f -delete
 | 
					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="$DIR"/src/public
 | 
				
			||||||
[[ -d "$d"/app-dist ]] || mkdir -pv "$d"/app-dist
 | 
					[[ -d "$d"/app-dist ]] || mkdir -pv "$d"/app-dist
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								bin/docs/.env.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								bin/docs/.env.example
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					SHARE_URL=https://notes.example.com/share/4yYHqKbLovVY
 | 
				
			||||||
							
								
								
									
										2
									
								
								bin/docs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								bin/docs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					output
 | 
				
			||||||
 | 
					.env
 | 
				
			||||||
							
								
								
									
										10
									
								
								bin/docs/index.template.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								bin/docs/index.template.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					    <head>
 | 
				
			||||||
 | 
					        <meta http-equiv="refresh" content="0; url=./{{ROOT_NOTE_ID}}.html" />
 | 
				
			||||||
 | 
					    </head>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <body>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										34
									
								
								bin/docs/prepare.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								bin/docs/prepare.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ ! -f .env ]; then
 | 
				
			||||||
 | 
					    echo "Missing .env file, cannot proceed."
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					script_dir=$(realpath $(dirname $0))
 | 
				
			||||||
 | 
					output_dir="$script_dir/../docs"
 | 
				
			||||||
 | 
					mkdir -p "$output_dir"
 | 
				
			||||||
 | 
					rm -f "$output_dir"/*
 | 
				
			||||||
 | 
					rm -rf "$output_dir"/{assets,share}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source ./.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
					mv "$output_dir/share"/* "$output_dir"
 | 
				
			||||||
 | 
					rmdir "$output_dir/share"
 | 
				
			||||||
							
								
								
									
										5
									
								
								bin/docs/preview.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								bin/docs/preview.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					script_dir=$(realpath $(dirname $0))
 | 
				
			||||||
 | 
					output_dir="$script_dir/../docs"
 | 
				
			||||||
 | 
					httpd -fv -p 127.0.0.1:8089 -h "$output_dir"
 | 
				
			||||||
@ -32,7 +32,7 @@ mv package.json.tmp package.json
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
git add package.json
 | 
					git add package.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo 'export = { buildDate:"'`date --iso-8601=seconds`'", buildRevision: "'`git log -1 --format="%H"`'" };' > src/services/build.ts
 | 
					npm run update-build-info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
git add src/services/build.ts
 | 
					git add src/services/build.ts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -65,7 +65,9 @@ if [[ $TAG == *"beta"* ]]; then
 | 
				
			|||||||
  EXTRA=--prerelease
 | 
					  EXTRA=--prerelease
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
 | 
					if [ ! -z "$GITHUB_CLI_AUTH_TOKEN" ]; then
 | 
				
			||||||
 | 
					  echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gh release create "$TAG" \
 | 
					gh release create "$TAG" \
 | 
				
			||||||
    --title "$TAG release" \
 | 
					    --title "$TAG release" \
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								bin/update-build-info.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								bin/update-build-info.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					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 = {
 | 
				
			||||||
 | 
					    buildDate: "${getBuildDate()}",
 | 
				
			||||||
 | 
					    buildRevision: "${getGitRevision()}"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fs.writeFileSync("src/services/build.ts", output);
 | 
				
			||||||
							
								
								
									
										126
									
								
								docs/4yYHqKbLovVX.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								docs/4yYHqKbLovVX.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,126 @@
 | 
				
			|||||||
 | 
					<!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's Guide</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body data-note-id="4yYHqKbLovVX" data-ancestor-note-id="4yYHqKbLovVX">
 | 
				
			||||||
 | 
					<div id="layout">
 | 
				
			||||||
 | 
					    <div id="main">
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <h1 id="title">Developer's Guide</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <nav id="childLinks" class="grid">
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <ul>
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="hkrBX8KE1HQl.html" 
 | 
				
			||||||
 | 
					                               class="type-text">Internationalisation</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="VS22Hq5PBFNf.html" 
 | 
				
			||||||
 | 
					                               class="type-text">Dependency Management</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                </ul>
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <button id="toggleMenuButton"></button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <nav id="menu">
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <strong>Developer's Guide</strong>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <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>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </nav>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										165
									
								
								docs/QXCi6Y1SYulw.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								docs/QXCi6Y1SYulw.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,165 @@
 | 
				
			|||||||
 | 
					<!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>Adding a new client library</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body data-note-id="QXCi6Y1SYulw" data-ancestor-note-id="4yYHqKbLovVX">
 | 
				
			||||||
 | 
					<div id="layout">
 | 
				
			||||||
 | 
					    <div id="main">
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <nav id="parentLink">
 | 
				
			||||||
 | 
					                parent: <a href="VS22Hq5PBFNf.html"
 | 
				
			||||||
 | 
					                           class="type-text">Dependency Management</a>
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <h1 id="title">Adding a new client library</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <div id="content" class="type-text ck-content">
 | 
				
			||||||
 | 
					                <p>In the past some libraries have been copy-pasted (and adapted if needed) to the repository. However, new libraries must be obtained exclusively through npm.</p><p>The first step is to install the desired library. As an example we are going to install <code>i18next</code>:</p><pre><code class="language-text-plain">npm i i18next</code></pre><h3>Step 1. Understanding the structure of the import</h3><p>After installing the dependency, it's important to know how it's structured. You can do this by looking at the directory structure of the newly imported dependency:</p><pre><code class="language-text-plain">$ tree node_modules/i18next
 | 
				
			||||||
 | 
					node_modules/i18next
 | 
				
			||||||
 | 
					├── dist
 | 
				
			||||||
 | 
					│   ├── cjs
 | 
				
			||||||
 | 
					│   │   └── i18next.js
 | 
				
			||||||
 | 
					│   ├── esm
 | 
				
			||||||
 | 
					│   │   ├── i18next.bundled.js
 | 
				
			||||||
 | 
					│   │   ├── i18next.js
 | 
				
			||||||
 | 
					│   │   └── package.json
 | 
				
			||||||
 | 
					│   └── umd
 | 
				
			||||||
 | 
					│       ├── i18next.js
 | 
				
			||||||
 | 
					│       └── i18next.min.js
 | 
				
			||||||
 | 
					├── i18next.js
 | 
				
			||||||
 | 
					├── i18next.min.js
 | 
				
			||||||
 | 
					├── index.d.mts
 | 
				
			||||||
 | 
					├── index.d.ts
 | 
				
			||||||
 | 
					├── index.js
 | 
				
			||||||
 | 
					├── index.v4.d.ts
 | 
				
			||||||
 | 
					├── LICENSE
 | 
				
			||||||
 | 
					├── package.json
 | 
				
			||||||
 | 
					├── README.md
 | 
				
			||||||
 | 
					└── typescript
 | 
				
			||||||
 | 
					    ├── helpers.d.ts
 | 
				
			||||||
 | 
					    ├── options.d.ts
 | 
				
			||||||
 | 
					    ├── t.d.ts
 | 
				
			||||||
 | 
					    └── t.v4.d.ts</code></pre><p>Generally you should be looking for a <code>.min.js</code> file. Note that the <code>esm</code> and <code>cjs</code> variants generally don't work, we are looking for the classic, no module dependency.</p><h3>Step 2. Exposing the library from the server</h3><p>The library must be delivered by the server and this is done via <code>src/routes/assets.ts</code>. In the <code>register</code> function, add a new entry near the bottom of the function:</p><pre><code class="language-application-javascript-env-frontend">app.use(`/${assetPath}/node_modules/i18next/`, persistentCacheStatic(path.join(srcRoot, "..", 'node_modules/i18next/')));</code></pre><h3>Step 3. Adding it to the library loader</h3><p>The library loader is a client module which is in charge of downloading the library from the server and importing it. The loader is located in <code>src/public/app/services/library_loader.js</code>.</p><p>To add a new library, start by creating a constant for it, with the value pointing to the minified JS identified at the first step:</p><pre><code class="language-application-javascript-env-frontend">const I18NEXT = {
 | 
				
			||||||
 | 
					    js: [
 | 
				
			||||||
 | 
					        "node_modules/i18next/i18next.min.js"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					};</code></pre><p>Then add it to the <code>export default</code> section:</p><pre><code class="language-text-x-diff"> export default {
 | 
				
			||||||
 | 
					     requireCss,
 | 
				
			||||||
 | 
					     requireLibrary,
 | 
				
			||||||
 | 
					     CKEDITOR,
 | 
				
			||||||
 | 
					     CODE_MIRROR,
 | 
				
			||||||
 | 
					     ESLINT,
 | 
				
			||||||
 | 
					     RELATION_MAP,
 | 
				
			||||||
 | 
					     PRINT_THIS,
 | 
				
			||||||
 | 
					     CALENDAR_WIDGET,
 | 
				
			||||||
 | 
					     KATEX,
 | 
				
			||||||
 | 
					     WHEEL_ZOOM,
 | 
				
			||||||
 | 
					     FORCE_GRAPH,
 | 
				
			||||||
 | 
					     MERMAID,
 | 
				
			||||||
 | 
					     EXCALIDRAW,
 | 
				
			||||||
 | 
					-    MARKJS
 | 
				
			||||||
 | 
					+    MARKJS,
 | 
				
			||||||
 | 
					+    I18NEXT
 | 
				
			||||||
 | 
					 }</code></pre><h3>Step 4. Using the library</h3><p>To import the library, simply use the following mechanism:</p><pre><code class="language-text-x-diff">import library_loader from "./library_loader.js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					await library_loader.requireLibrary(library_loader.I18NEXT);</code></pre><p>Make sure to replace <code>I18NEXT</code> with the library that was created at the previous steps.</p><p>Note that because we are not using a module management mechanism such as ES Modules or Common.js modules, the <code>requireLibrary</code> method does not actually return anything. </p><p>To benefit from the library, it must export on its own an object in <code>window</code>.</p><p>In the case of <code>i18next</code>, it sets <code>window.i18next</code> and that can be used directly:</p><pre><code class="language-text-x-diff">i18next.init({});</code></pre>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <button id="toggleMenuButton"></button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <nav id="menu">
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="4yYHqKbLovVX.html">Developer's Guide</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="VS22Hq5PBFNf.html">Dependency Management</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <strong>Adding a new client library</strong>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </nav>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										126
									
								
								docs/VS22Hq5PBFNf.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								docs/VS22Hq5PBFNf.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,126 @@
 | 
				
			|||||||
 | 
					<!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>Dependency Management</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body data-note-id="VS22Hq5PBFNf" data-ancestor-note-id="4yYHqKbLovVX">
 | 
				
			||||||
 | 
					<div id="layout">
 | 
				
			||||||
 | 
					    <div id="main">
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <nav id="parentLink">
 | 
				
			||||||
 | 
					                parent: <a href="4yYHqKbLovVX.html"
 | 
				
			||||||
 | 
					                           class="type-text">Developer's Guide</a>
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <h1 id="title">Dependency Management</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <nav id="childLinks" class="grid">
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <ul>
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="QXCi6Y1SYulw.html" 
 | 
				
			||||||
 | 
					                               class="type-text">Adding a new client library</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                </ul>
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <button id="toggleMenuButton"></button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <nav id="menu">
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="4yYHqKbLovVX.html">Developer's Guide</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="hkrBX8KE1HQl.html">Internationalisation</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <strong>Dependency Management</strong>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="QXCi6Y1SYulw.html">Adding a new client library</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </nav>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										23
									
								
								docs/assets/v0.63.6/app-dist/share.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								docs/assets/v0.63.6/app-dist/share.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Fetch note with given ID from backend
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param noteId of the given note to be fetched. If false, fetches current note.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					async function fetchNote(noteId = null) {
 | 
				
			||||||
 | 
					    if (!noteId) {
 | 
				
			||||||
 | 
					        noteId = document.body.getAttribute("data-note-id");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const resp = await fetch(`api/notes/${noteId}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return await resp.json();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					    const toggleMenuButton = document.getElementById('toggleMenuButton');
 | 
				
			||||||
 | 
					    const layout = document.getElementById('layout');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (toggleMenuButton && layout) {
 | 
				
			||||||
 | 
					        toggleMenuButton.addEventListener('click', () => layout.classList.toggle('showMenu'));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}, false);
 | 
				
			||||||
							
								
								
									
										551
									
								
								docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										551
									
								
								docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,551 @@
 | 
				
			|||||||
 | 
					/* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.printed-content .ck-widget__selection-handle, .printed-content .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * CKEditor 5 (v41.0.0) content styles.
 | 
				
			||||||
 | 
					 * Generated on Fri, 26 Jan 2024 10:23:49 GMT.
 | 
				
			||||||
 | 
					 * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:root {
 | 
				
			||||||
 | 
					    --ck-color-image-caption-background: hsl(0, 0%, 97%);
 | 
				
			||||||
 | 
					    --ck-color-image-caption-text: hsl(0, 0%, 20%);
 | 
				
			||||||
 | 
					    --ck-color-mention-background: hsla(341, 100%, 30%, 0.1);
 | 
				
			||||||
 | 
					    --ck-color-mention-text: hsl(341, 100%, 30%);
 | 
				
			||||||
 | 
					    --ck-color-selector-caption-background: hsl(0, 0%, 97%);
 | 
				
			||||||
 | 
					    --ck-color-selector-caption-text: hsl(0, 0%, 20%);
 | 
				
			||||||
 | 
					    --ck-highlight-marker-blue: hsl(201, 97%, 72%);
 | 
				
			||||||
 | 
					    --ck-highlight-marker-green: hsl(120, 93%, 68%);
 | 
				
			||||||
 | 
					    --ck-highlight-marker-pink: hsl(345, 96%, 73%);
 | 
				
			||||||
 | 
					    --ck-highlight-marker-yellow: hsl(60, 97%, 73%);
 | 
				
			||||||
 | 
					    --ck-highlight-pen-green: hsl(112, 100%, 27%);
 | 
				
			||||||
 | 
					    --ck-highlight-pen-red: hsl(0, 85%, 49%);
 | 
				
			||||||
 | 
					    --ck-image-style-spacing: 1.5em;
 | 
				
			||||||
 | 
					    --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2);
 | 
				
			||||||
 | 
					    --ck-todo-list-checkmark-size: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
 | 
				
			||||||
 | 
					.ck-content .table .ck-table-resized {
 | 
				
			||||||
 | 
					    table-layout: fixed;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
 | 
				
			||||||
 | 
					.ck-content .table table {
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
 | 
				
			||||||
 | 
					.ck-content .table td,
 | 
				
			||||||
 | 
					.ck-content .table th {
 | 
				
			||||||
 | 
					    overflow-wrap: break-word;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/table.css */
 | 
				
			||||||
 | 
					.ck-content .table {
 | 
				
			||||||
 | 
					    margin: 0.9em auto;
 | 
				
			||||||
 | 
					    display: table;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/table.css */
 | 
				
			||||||
 | 
					.ck-content .table table {
 | 
				
			||||||
 | 
					    border-collapse: collapse;
 | 
				
			||||||
 | 
					    border-spacing: 0;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    border: 1px double hsl(0, 0%, 70%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/table.css */
 | 
				
			||||||
 | 
					.ck-content .table table td,
 | 
				
			||||||
 | 
					.ck-content .table table th {
 | 
				
			||||||
 | 
					    min-width: 2em;
 | 
				
			||||||
 | 
					    padding: .4em;
 | 
				
			||||||
 | 
					    border: 1px solid hsl(0, 0%, 75%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/table.css */
 | 
				
			||||||
 | 
					.ck-content .table table th {
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    background: hsla(0, 0%, 0%, 5%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/table.css */
 | 
				
			||||||
 | 
					.ck-content[dir="rtl"] .table th {
 | 
				
			||||||
 | 
					    text-align: right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/table.css */
 | 
				
			||||||
 | 
					.ck-content[dir="ltr"] .table th {
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-table/theme/tablecaption.css */
 | 
				
			||||||
 | 
					.ck-content .table > figcaption {
 | 
				
			||||||
 | 
					    display: table-caption;
 | 
				
			||||||
 | 
					    caption-side: top;
 | 
				
			||||||
 | 
					    word-break: break-word;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    color: var(--ck-color-selector-caption-text);
 | 
				
			||||||
 | 
					    background-color: var(--ck-color-selector-caption-background);
 | 
				
			||||||
 | 
					    padding: .6em;
 | 
				
			||||||
 | 
					    font-size: .75em;
 | 
				
			||||||
 | 
					    outline-offset: -1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
 | 
				
			||||||
 | 
					.ck-content .page-break {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    clear: both;
 | 
				
			||||||
 | 
					    padding: 5px 0;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
 | 
				
			||||||
 | 
					.ck-content .page-break::after {
 | 
				
			||||||
 | 
					    content: '';
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    border-bottom: 2px dashed hsl(0, 0%, 77%);
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
 | 
				
			||||||
 | 
					.ck-content .page-break__label {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    z-index: 1;
 | 
				
			||||||
 | 
					    padding: .3em .6em;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    text-transform: uppercase;
 | 
				
			||||||
 | 
					    border: 1px solid hsl(0, 0%, 77%);
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;
 | 
				
			||||||
 | 
					    font-size: 0.75em;
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    color: hsl(0, 0%, 20%);
 | 
				
			||||||
 | 
					    background: hsl(0, 0%, 100%);
 | 
				
			||||||
 | 
					    box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15);
 | 
				
			||||||
 | 
					    -webkit-user-select: none;
 | 
				
			||||||
 | 
					    -moz-user-select: none;
 | 
				
			||||||
 | 
					    -ms-user-select: none;
 | 
				
			||||||
 | 
					    user-select: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */
 | 
				
			||||||
 | 
					.ck-content .media {
 | 
				
			||||||
 | 
					    clear: both;
 | 
				
			||||||
 | 
					    margin: 0.9em 0;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    min-width: 15em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list {
 | 
				
			||||||
 | 
					    list-style: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list li {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    margin-bottom: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list li .todo-list {
 | 
				
			||||||
 | 
					    margin-top: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label > input {
 | 
				
			||||||
 | 
					    -webkit-appearance: none;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    width: var(--ck-todo-list-checkmark-size);
 | 
				
			||||||
 | 
					    height: var(--ck-todo-list-checkmark-size);
 | 
				
			||||||
 | 
					    vertical-align: middle;
 | 
				
			||||||
 | 
					    border: 0;
 | 
				
			||||||
 | 
					    left: -25px;
 | 
				
			||||||
 | 
					    margin-right: -15px;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    margin-left: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content[dir=rtl] .todo-list .todo-list__label > input {
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    margin-right: 0;
 | 
				
			||||||
 | 
					    right: -25px;
 | 
				
			||||||
 | 
					    margin-left: -15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label > input::before {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    content: '';
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    border: 1px solid hsl(0, 0%, 20%);
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    transition: 250ms ease-in-out box-shadow;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label > input::after {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    box-sizing: content-box;
 | 
				
			||||||
 | 
					    pointer-events: none;
 | 
				
			||||||
 | 
					    content: '';
 | 
				
			||||||
 | 
					    left: calc( var(--ck-todo-list-checkmark-size) / 3 );
 | 
				
			||||||
 | 
					    top: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
 | 
				
			||||||
 | 
					    width: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
 | 
				
			||||||
 | 
					    height: calc( var(--ck-todo-list-checkmark-size) / 2.6 );
 | 
				
			||||||
 | 
					    border-style: solid;
 | 
				
			||||||
 | 
					    border-color: transparent;
 | 
				
			||||||
 | 
					    border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0;
 | 
				
			||||||
 | 
					    transform: rotate(45deg);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label > input[checked]::before {
 | 
				
			||||||
 | 
					    background: hsl(126, 64%, 41%);
 | 
				
			||||||
 | 
					    border-color: hsl(126, 64%, 41%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label > input[checked]::after {
 | 
				
			||||||
 | 
					    border-color: hsl(0, 0%, 100%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label .todo-list__label__description {
 | 
				
			||||||
 | 
					    vertical-align: middle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > input,
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > input:hover::before, .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input:hover::before {
 | 
				
			||||||
 | 
					    box-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input {
 | 
				
			||||||
 | 
					    -webkit-appearance: none;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    width: var(--ck-todo-list-checkmark-size);
 | 
				
			||||||
 | 
					    height: var(--ck-todo-list-checkmark-size);
 | 
				
			||||||
 | 
					    vertical-align: middle;
 | 
				
			||||||
 | 
					    border: 0;
 | 
				
			||||||
 | 
					    left: -25px;
 | 
				
			||||||
 | 
					    margin-right: -15px;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    margin-left: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content[dir=rtl] .todo-list .todo-list__label > span[contenteditable=false] > input {
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    margin-right: 0;
 | 
				
			||||||
 | 
					    right: -25px;
 | 
				
			||||||
 | 
					    margin-left: -15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::before {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    content: '';
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    border: 1px solid hsl(0, 0%, 20%);
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    transition: 250ms ease-in-out box-shadow;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::after {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    box-sizing: content-box;
 | 
				
			||||||
 | 
					    pointer-events: none;
 | 
				
			||||||
 | 
					    content: '';
 | 
				
			||||||
 | 
					    left: calc( var(--ck-todo-list-checkmark-size) / 3 );
 | 
				
			||||||
 | 
					    top: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
 | 
				
			||||||
 | 
					    width: calc( var(--ck-todo-list-checkmark-size) / 5.3 );
 | 
				
			||||||
 | 
					    height: calc( var(--ck-todo-list-checkmark-size) / 2.6 );
 | 
				
			||||||
 | 
					    border-style: solid;
 | 
				
			||||||
 | 
					    border-color: transparent;
 | 
				
			||||||
 | 
					    border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0;
 | 
				
			||||||
 | 
					    transform: rotate(45deg);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::before {
 | 
				
			||||||
 | 
					    background: hsl(126, 64%, 41%);
 | 
				
			||||||
 | 
					    border-color: hsl(126, 64%, 41%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::after {
 | 
				
			||||||
 | 
					    border-color: hsl(0, 0%, 100%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/todolist.css */
 | 
				
			||||||
 | 
					.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ol {
 | 
				
			||||||
 | 
					    list-style-type: decimal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ol ol {
 | 
				
			||||||
 | 
					    list-style-type: lower-latin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ol ol ol {
 | 
				
			||||||
 | 
					    list-style-type: lower-roman;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ol ol ol ol {
 | 
				
			||||||
 | 
					    list-style-type: upper-latin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ol ol ol ol ol {
 | 
				
			||||||
 | 
					    list-style-type: upper-roman;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ul {
 | 
				
			||||||
 | 
					    list-style-type: disc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ul ul {
 | 
				
			||||||
 | 
					    list-style-type: circle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ul ul ul {
 | 
				
			||||||
 | 
					    list-style-type: square;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-list/theme/list.css */
 | 
				
			||||||
 | 
					.ck-content ul ul ul ul {
 | 
				
			||||||
 | 
					    list-style-type: square;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/image.css */
 | 
				
			||||||
 | 
					.ck-content .image {
 | 
				
			||||||
 | 
					    display: table;
 | 
				
			||||||
 | 
					    clear: both;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    margin: 0.9em auto;
 | 
				
			||||||
 | 
					    min-width: 50px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/image.css */
 | 
				
			||||||
 | 
					.ck-content .image img {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					    min-width: 100%;
 | 
				
			||||||
 | 
					    height: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/image.css */
 | 
				
			||||||
 | 
					.ck-content .image-inline {
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).;
 | 
				
			||||||
 | 
					     * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root.
 | 
				
			||||||
 | 
					     * This strange behavior does not happen with inline-flex.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    display: inline-flex;
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					    align-items: flex-start;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/image.css */
 | 
				
			||||||
 | 
					.ck-content .image-inline picture {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/image.css */
 | 
				
			||||||
 | 
					.ck-content .image-inline picture,
 | 
				
			||||||
 | 
					.ck-content .image-inline img {
 | 
				
			||||||
 | 
					    flex-grow: 1;
 | 
				
			||||||
 | 
					    flex-shrink: 1;
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imageresize.css */
 | 
				
			||||||
 | 
					.ck-content img.image_resized {
 | 
				
			||||||
 | 
					    height: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imageresize.css */
 | 
				
			||||||
 | 
					.ck-content .image.image_resized {
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imageresize.css */
 | 
				
			||||||
 | 
					.ck-content .image.image_resized img {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imageresize.css */
 | 
				
			||||||
 | 
					.ck-content .image.image_resized > figcaption {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagecaption.css */
 | 
				
			||||||
 | 
					.ck-content .image > figcaption {
 | 
				
			||||||
 | 
					    display: table-caption;
 | 
				
			||||||
 | 
					    caption-side: bottom;
 | 
				
			||||||
 | 
					    word-break: break-word;
 | 
				
			||||||
 | 
					    color: var(--ck-color-image-caption-text);
 | 
				
			||||||
 | 
					    background-color: var(--ck-color-image-caption-background);
 | 
				
			||||||
 | 
					    padding: .6em;
 | 
				
			||||||
 | 
					    font-size: .75em;
 | 
				
			||||||
 | 
					    outline-offset: -1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-block-align-left,
 | 
				
			||||||
 | 
					.ck-content .image-style-block-align-right {
 | 
				
			||||||
 | 
					    max-width: calc(100% - var(--ck-image-style-spacing));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-align-left,
 | 
				
			||||||
 | 
					.ck-content .image-style-align-right {
 | 
				
			||||||
 | 
					    clear: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-side {
 | 
				
			||||||
 | 
					    float: right;
 | 
				
			||||||
 | 
					    margin-left: var(--ck-image-style-spacing);
 | 
				
			||||||
 | 
					    max-width: 50%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-align-left {
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					    margin-right: var(--ck-image-style-spacing);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-align-center {
 | 
				
			||||||
 | 
					    margin-left: auto;
 | 
				
			||||||
 | 
					    margin-right: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-align-right {
 | 
				
			||||||
 | 
					    float: right;
 | 
				
			||||||
 | 
					    margin-left: var(--ck-image-style-spacing);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-block-align-right {
 | 
				
			||||||
 | 
					    margin-right: 0;
 | 
				
			||||||
 | 
					    margin-left: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-style-block-align-left {
 | 
				
			||||||
 | 
					    margin-left: 0;
 | 
				
			||||||
 | 
					    margin-right: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content p + .image-style-align-left,
 | 
				
			||||||
 | 
					.ck-content p + .image-style-align-right,
 | 
				
			||||||
 | 
					.ck-content p + .image-style-side {
 | 
				
			||||||
 | 
					    margin-top: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-inline.image-style-align-left,
 | 
				
			||||||
 | 
					.ck-content .image-inline.image-style-align-right {
 | 
				
			||||||
 | 
					    margin-top: var(--ck-inline-image-style-spacing);
 | 
				
			||||||
 | 
					    margin-bottom: var(--ck-inline-image-style-spacing);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-inline.image-style-align-left {
 | 
				
			||||||
 | 
					    margin-right: var(--ck-inline-image-style-spacing);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-image/theme/imagestyle.css */
 | 
				
			||||||
 | 
					.ck-content .image-inline.image-style-align-right {
 | 
				
			||||||
 | 
					    margin-left: var(--ck-inline-image-style-spacing);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
 | 
				
			||||||
 | 
					.ck-content .marker-yellow {
 | 
				
			||||||
 | 
					    background-color: var(--ck-highlight-marker-yellow);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
 | 
				
			||||||
 | 
					.ck-content .marker-green {
 | 
				
			||||||
 | 
					    background-color: var(--ck-highlight-marker-green);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
 | 
				
			||||||
 | 
					.ck-content .marker-pink {
 | 
				
			||||||
 | 
					    background-color: var(--ck-highlight-marker-pink);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
 | 
				
			||||||
 | 
					.ck-content .marker-blue {
 | 
				
			||||||
 | 
					    background-color: var(--ck-highlight-marker-blue);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
 | 
				
			||||||
 | 
					.ck-content .pen-red {
 | 
				
			||||||
 | 
					    color: var(--ck-highlight-pen-red);
 | 
				
			||||||
 | 
					    background-color: transparent;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-highlight/theme/highlight.css */
 | 
				
			||||||
 | 
					.ck-content .pen-green {
 | 
				
			||||||
 | 
					    color: var(--ck-highlight-pen-green);
 | 
				
			||||||
 | 
					    background-color: transparent;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */
 | 
				
			||||||
 | 
					.ck-content blockquote {
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    padding-right: 1.5em;
 | 
				
			||||||
 | 
					    padding-left: 1.5em;
 | 
				
			||||||
 | 
					    margin-left: 0;
 | 
				
			||||||
 | 
					    margin-right: 0;
 | 
				
			||||||
 | 
					    font-style: italic;
 | 
				
			||||||
 | 
					    border-left: solid 5px hsl(0, 0%, 80%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */
 | 
				
			||||||
 | 
					.ck-content[dir="rtl"] blockquote {
 | 
				
			||||||
 | 
					    border-left: 0;
 | 
				
			||||||
 | 
					    border-right: solid 5px hsl(0, 0%, 80%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-basic-styles/theme/code.css */
 | 
				
			||||||
 | 
					.ck-content code {
 | 
				
			||||||
 | 
					    background-color: hsla(0, 0%, 78%, 0.3);
 | 
				
			||||||
 | 
					    padding: .15em;
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-font/theme/fontsize.css */
 | 
				
			||||||
 | 
					.ck-content .text-tiny {
 | 
				
			||||||
 | 
					    font-size: .7em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-font/theme/fontsize.css */
 | 
				
			||||||
 | 
					.ck-content .text-small {
 | 
				
			||||||
 | 
					    font-size: .85em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-font/theme/fontsize.css */
 | 
				
			||||||
 | 
					.ck-content .text-big {
 | 
				
			||||||
 | 
					    font-size: 1.4em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-font/theme/fontsize.css */
 | 
				
			||||||
 | 
					.ck-content .text-huge {
 | 
				
			||||||
 | 
					    font-size: 1.8em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-mention/theme/mention.css */
 | 
				
			||||||
 | 
					.ck-content .mention {
 | 
				
			||||||
 | 
					    background: var(--ck-color-mention-background);
 | 
				
			||||||
 | 
					    color: var(--ck-color-mention-text);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */
 | 
				
			||||||
 | 
					.ck-content hr {
 | 
				
			||||||
 | 
					    margin: 15px 0;
 | 
				
			||||||
 | 
					    height: 4px;
 | 
				
			||||||
 | 
					    background: hsl(0, 0%, 87%);
 | 
				
			||||||
 | 
					    border: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */
 | 
				
			||||||
 | 
					.ck-content pre {
 | 
				
			||||||
 | 
					    padding: 1em;
 | 
				
			||||||
 | 
					    color: hsl(0, 0%, 20.8%);
 | 
				
			||||||
 | 
					    background: hsla(0, 0%, 78%, 0.3);
 | 
				
			||||||
 | 
					    border: 1px solid hsl(0, 0%, 77%);
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					    direction: ltr;
 | 
				
			||||||
 | 
					    tab-size: 4;
 | 
				
			||||||
 | 
					    white-space: pre-wrap;
 | 
				
			||||||
 | 
					    font-style: normal;
 | 
				
			||||||
 | 
					    min-width: 200px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */
 | 
				
			||||||
 | 
					.ck-content pre code {
 | 
				
			||||||
 | 
					    background: unset;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    border-radius: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					@media print {
 | 
				
			||||||
 | 
					    /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
 | 
				
			||||||
 | 
					    .ck-content .page-break {
 | 
				
			||||||
 | 
					        padding: 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */
 | 
				
			||||||
 | 
					    .ck-content .page-break::after {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								docs/assets/v0.63.6/libraries/normalize.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								docs/assets/v0.63.6/libraries/normalize.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}
 | 
				
			||||||
 | 
					/*# sourceMappingURL=normalize.min.css.map */
 | 
				
			||||||
							
								
								
									
										165
									
								
								docs/assets/v0.63.6/stylesheets/share.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								docs/assets/v0.63.6/stylesheets/share.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,165 @@
 | 
				
			|||||||
 | 
					body {
 | 
				
			||||||
 | 
					    font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
 | 
				
			||||||
 | 
					    line-height: 1.5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#layout {
 | 
				
			||||||
 | 
					    max-width: 1200px;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: row-reverse;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#menu {
 | 
				
			||||||
 | 
					    padding: 25px;
 | 
				
			||||||
 | 
					    flex-basis: 0;
 | 
				
			||||||
 | 
					    flex-grow: 1;
 | 
				
			||||||
 | 
					    overflow: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#menu p {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#menu > p {
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    font-size: 110%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#menu ul {
 | 
				
			||||||
 | 
					    padding-left: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#main {
 | 
				
			||||||
 | 
					    flex-basis: 0;
 | 
				
			||||||
 | 
					    flex-grow: 3;
 | 
				
			||||||
 | 
					    overflow: auto;
 | 
				
			||||||
 | 
					    padding: 10px 20px 20px 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#parentLink {
 | 
				
			||||||
 | 
					    float: right;
 | 
				
			||||||
 | 
					    margin-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#title {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding-top: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img {
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
					    white-space: pre-wrap;
 | 
				
			||||||
 | 
					    word-wrap: anywhere;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iframe.pdf-view {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 800px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#toggleMenuButton {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					    position: fixed;
 | 
				
			||||||
 | 
					    top: 8px;
 | 
				
			||||||
 | 
					    left: 5px;
 | 
				
			||||||
 | 
					    width: 1.4em;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    border: 1px solid #aaa;
 | 
				
			||||||
 | 
					    font-size: 2rem;
 | 
				
			||||||
 | 
					    z-index: 10;
 | 
				
			||||||
 | 
					    height: auto;
 | 
				
			||||||
 | 
					    color: black;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#childLinks.grid ul {
 | 
				
			||||||
 | 
					    list-style-type: none;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-wrap: wrap;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#childLinks.grid ul li {
 | 
				
			||||||
 | 
					    width: 180px;
 | 
				
			||||||
 | 
					    height: 140px;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#childLinks.grid ul li a {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: column;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    border: 1px solid #ddd;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    align-content: center;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-size: large;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#childLinks.grid ul li a:hover {
 | 
				
			||||||
 | 
					    background: #eee;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#childLinks.list ul {
 | 
				
			||||||
 | 
					    list-style-type: none;
 | 
				
			||||||
 | 
					    display: inline-flex;
 | 
				
			||||||
 | 
					    flex-wrap: wrap;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    margin-top: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#childLinks.list ul li {
 | 
				
			||||||
 | 
					    margin-right: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#noteClippedFrom {
 | 
				
			||||||
 | 
					    padding: 10px 0 10px 0;
 | 
				
			||||||
 | 
					    margin: 20px 0 20px 0;
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					    border: 1px solid #ddd;
 | 
				
			||||||
 | 
					    border-left: 0;
 | 
				
			||||||
 | 
					    border-right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#toggleMenuButton::after {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    top: -2px;
 | 
				
			||||||
 | 
					    left: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (max-width: 48em) {
 | 
				
			||||||
 | 
					    #layout.showMenu #menu {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					        margin-top: 40px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #toggleMenuButton {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #layout.showMenu #main {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #title {
 | 
				
			||||||
 | 
					        padding-left: 60px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #layout.showMenu #toggleMenuButton::after {
 | 
				
			||||||
 | 
					        content: "«";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #toggleMenuButton::after {
 | 
				
			||||||
 | 
					        content: "»";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #menu {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								docs/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 111 KiB  | 
							
								
								
									
										121
									
								
								docs/hkrBX8KE1HQl.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								docs/hkrBX8KE1HQl.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,121 @@
 | 
				
			|||||||
 | 
					<!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>Internationalisation</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body data-note-id="hkrBX8KE1HQl" data-ancestor-note-id="4yYHqKbLovVX">
 | 
				
			||||||
 | 
					<div id="layout">
 | 
				
			||||||
 | 
					    <div id="main">
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <nav id="parentLink">
 | 
				
			||||||
 | 
					                parent: <a href="4yYHqKbLovVX.html"
 | 
				
			||||||
 | 
					                           class="type-text">Developer's Guide</a>
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <h1 id="title">Internationalisation</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					            <div id="content" class="type-text ck-content">
 | 
				
			||||||
 | 
					                <p>During the initial development of Trilium Notes, internationalisation was not considered as it was meant to be an English-only product.</p><p>As the application and the user base grows, it makes sense to be able to reach out as many people as possible by providing translations in their native language.</p><p>The library used is <a href="https://www.i18next.com/">i18next</a>.</p><h2>What has been implemented so far</h2><ul class="todo-list"><li><label class="todo-list__label"><input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description">Client component-level translations: <a href="https://github.com/TriliumNext/Notes/pull/248/files">#248</a></span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Client template-level translations</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Server-side translations</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Electron translations</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Allowing the user to switch the language via options</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Integrate with a translation service</span></label></li></ul><h2>Where are the translations?</h2><p>The translations are formatted as JSON files and they are located in <code>src/public/translations</code>. For every supported locale, there is a subdirectory in which there is a <code>translation.json</code> file (e.g. <code>src/public/translations/en/translation.json</code>).</p><h3>Message keys</h3><p>One important aspect is the fact that we are using a key-based approach. This means that each message is identified by an ID rather than a natural-language message (such as the default approach in gettext).</p><p>The key-based approach allows a hierarchical structure. For example, a key of <code>about.title</code> would be added in <code>translation.json</code> as follows:</p><pre><code class="language-application-json">{
 | 
				
			||||||
 | 
						"about": {
 | 
				
			||||||
 | 
							"title": "About TriliumNext Notes"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					} </code></pre><h3>Adding a new locale</h3><p>To add a new locale, go to <code>src/public/translations</code> with your favorite text editor and copy the <code>en</code> directory.</p><p>Rename the copy to the ISO code (e.g. <code>fr</code>, <code>ro</code>) of the language being translated.</p><p>Translations with a country-language combination, using their corresponding ISO code (e.g. <code>fr_FR</code>, <code>fr_BE</code>), has not been tested yet.</p><h3>Changing the language</h3><p>Since the internationalisation process is in its early stages, there is no user-facing way to switch the language.</p><p>To change the language manually, edit <code>src/public/app/services/i18n.js</code> and look for the line containing <code>lng: "en"</code>. Replace <code>en</code> with the desired language code (from the ones available in <code>src/public/translations</code>).</p><h2>Recommendations</h2><ul><li>Use hierarchy whenever appropriate, try to group the messages by:<ul><li>Modals (e.g. <code>about.foo</code>, <code>jump_to_note.foo</code>)</li></ul></li><li>Don't duplicate messages that are very widely used.<ul><li>One such example is <code>aria-label="Close"</code> which should go to a single message such as <code>modal.close</code> instead of being duplicated in every modal.</li></ul></li><li>On the other hand, don't overly generalise messages. A <code>close</code> message that is used whenever the “Close” word is encountered is not a good approach since it can potentially cause issues due to lack of context.</li><li>Use <a href="https://www.i18next.com/translation-function/interpolation">variable interpolation</a> whenever appropriate.<ul><li>If you see multiple messages joined together only to apply add a variable such as a user-inputted value, try to join those messages together into a single message containing a variable.</li><li>So instead of <code>“Number of updates: “ + numUpdates + “.”</code> use <code>$(t("number_updates", { numUpdates }))</code> where the message translation would appear as <code>Number of updates: {{numUpdates}}.</code></li></ul></li></ul><h2>Client-side translations</h2><h3>Component-level translations</h3><p>Most of the client translations are present in the various widgets and layouts.</p><p>Translation support has to be added manually for every file.</p><p>The first step is to add the translation import with a relative import. For example, if we are in the <code>src/public/app/widgets/dialogs</code> directory, the import would look as follows:</p><pre><code class="language-application-javascript-env-frontend">import { t } from "../../services/i18n.js";</code></pre><p>Afterwards, simply replace the hard-coded message with:</p><pre><code class="language-application-javascript-env-frontend">${t("msgid")}</code></pre><p>where <code>msgid</code> is the key of the message being translated.</p><h3>Template-level translations</h3><p>Templates are <code>.ejs</code> files present in <code>src/views</code>, these are used to prepare the root layout for desktop, mobile applications as well as setup (onboarding) and the shared notes view.</p><p>Due to using a different approach, it is not possible yet to translate those files.</p><h2>Server-side translations</h2><p>Currently the server-side messages are not translatable. They will be added as a separate step.</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <button id="toggleMenuButton"></button>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <nav id="menu">
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <a class="type-text" href="4yYHqKbLovVX.html">Developer's Guide</a>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <li>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <strong>Internationalisation</strong>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        <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>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </li>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </nav>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										10
									
								
								docs/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					    <head>
 | 
				
			||||||
 | 
					        <meta http-equiv="refresh" content="0; url=./4yYHqKbLovVX.html" />
 | 
				
			||||||
 | 
					    </head>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <body>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@ -6,6 +6,11 @@ import appIconService = require("./src/services/app_icon");
 | 
				
			|||||||
import windowService = require("./src/services/window");
 | 
					import windowService = require("./src/services/window");
 | 
				
			||||||
import tray = require("./src/services/tray");
 | 
					import tray = require("./src/services/tray");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Prevent Trilium starting twice on first install and on uninstall for the Windows installer.
 | 
				
			||||||
 | 
					if (require('electron-squirrel-startup')) {
 | 
				
			||||||
 | 
					  process.exit(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Adds debug features like hotkeys for triggering dev tools and reload
 | 
					// Adds debug features like hotkeys for triggering dev tools and reload
 | 
				
			||||||
require("electron-debug")();
 | 
					require("electron-debug")();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										23
									
								
								forge.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								forge.config.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  packagerConfig: {
 | 
				
			||||||
 | 
					    asar: true,
 | 
				
			||||||
 | 
					    // icon will break once we add .dmg support, since the .ico & .icns have to be in same dir (see https://www.electronforge.io/guides/create-and-add-icons#windows-and-macos)
 | 
				
			||||||
 | 
					    icon: "./images/app-icons/win/icon"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  rebuildConfig: {},
 | 
				
			||||||
 | 
					  makers: [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: '@electron-forge/maker-squirrel',
 | 
				
			||||||
 | 
					      config: {
 | 
				
			||||||
 | 
					        setupIcon: "./images/app-icons/win/icon.ico",
 | 
				
			||||||
 | 
					        loadingGif: "./images/app-icons/win/setup-banner.gif"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  plugins: [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      name: '@electron-forge/plugin-auto-unpack-natives',
 | 
				
			||||||
 | 
					      config: {},
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								images/app-icons/win/setup-banner.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								images/app-icons/win/setup-banner.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 8.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								images/app-icons/win/setup-banner.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								images/app-icons/win/setup-banner.xcf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										13797
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										13797
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										94
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								package.json
									
									
									
									
									
								
							@ -1,63 +1,74 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "trilium",
 | 
					  "name": "trilium",
 | 
				
			||||||
  "productName": "Trilium Notes",
 | 
					  "productName": "TriliumNext Notes",
 | 
				
			||||||
  "description": "Trilium Notes",
 | 
					  "description": "Build your personal knowledge base with TriliumNext Notes",
 | 
				
			||||||
  "version": "0.90.0-beta",
 | 
					  "version": "0.90.1-beta",
 | 
				
			||||||
  "license": "AGPL-3.0-only",
 | 
					  "license": "AGPL-3.0-only",
 | 
				
			||||||
  "main": "electron.js",
 | 
					  "main": "./dist/electron.js",
 | 
				
			||||||
 | 
					  "author": {
 | 
				
			||||||
 | 
					    "name": "TriliumNext Notes Teams",
 | 
				
			||||||
 | 
					    "email": "contact@eliandoran.me",
 | 
				
			||||||
 | 
					    "url": "https://github.com/TriliumNext/Notes"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "copyright": "",
 | 
				
			||||||
  "bin": {
 | 
					  "bin": {
 | 
				
			||||||
    "trilium": "src/www.js"
 | 
					    "trilium": "src/www.js"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
    "url": "https://github.com/zadam/trilium.git"
 | 
					    "url": "https://github.com/TriliumNext/Notes.git"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "start-server": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts",
 | 
					    "start-server": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts",
 | 
				
			||||||
    "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts",
 | 
					    "start-server-no-dir": "cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts",
 | 
				
			||||||
    "qstart-server": "npm run qswitch-server && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts",
 | 
					    "qstart-server": "npm run qswitch-server && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_ENV=dev TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 nodemon src/www.ts",
 | 
				
			||||||
    "start-electron": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .",
 | 
					    "start-electron": "npm run prepare-dist && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .",
 | 
				
			||||||
    "start-electron-no-dir": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .",
 | 
					    "start-electron-no-dir": "npm run prepare-dist && cross-env TRILIUM_SAFE_MODE=1 TRILIUM_ENV=dev electron ./dist/electron.js --inspect=5858 .",
 | 
				
			||||||
    "qstart-electron": "npm run qswitch-electron && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .",
 | 
					    "qstart-electron": "npm run qswitch-electron && TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev electron --inspect=5858 .",
 | 
				
			||||||
    "start-test-server": "npm run qswitch-server; rm -rf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 ts-node src/www.ts",
 | 
					    "start-test-server": "npm run qswitch-server; rimraf ./data-test; cross-env TRILIUM_SAFE_MODE=1 TRILIUM_DATA_DIR=./data-test TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_ENV=dev TRILIUM_PORT=9999 ts-node src/www.ts",
 | 
				
			||||||
    "switch-server": "rm -rf ./node_modules/better-sqlite3 && npm install",
 | 
					    "switch-server": "rimraf ./node_modules/better-sqlite3 && npm install",
 | 
				
			||||||
    "switch-electron": "electron-rebuild",
 | 
					    "switch-electron": "npx electron-rebuild",
 | 
				
			||||||
    "qswitch-server": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-server-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node",
 | 
					    "qswitch-server": "rimraf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-server-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node",
 | 
				
			||||||
    "qswitch-electron": "rm -rf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-desktop-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node",
 | 
					    "qswitch-electron": "rimraf ./node_modules/better-sqlite3/bin ; mkdir -p ./node_modules/better-sqlite3/build ; cp ./bin/better-sqlite3/linux-desktop-better_sqlite3.node ./node_modules/better-sqlite3/build/better_sqlite3.node",
 | 
				
			||||||
    "build-backend-docs": "rm -rf ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js",
 | 
					    "build-backend-docs": "rimraf ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js",
 | 
				
			||||||
    "build-frontend-docs": "rm -rf ./docs/frontend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js",
 | 
					    "build-frontend-docs": "rimraf ./docs/frontend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js",
 | 
				
			||||||
    "build-docs": "npm run build-backend-docs && npm run build-frontend-docs",
 | 
					    "build-docs": "npm run build-backend-docs && npm run build-frontend-docs",
 | 
				
			||||||
    "webpack": "webpack -c webpack.config.ts",
 | 
					    "webpack": "webpack -c webpack.config.ts",
 | 
				
			||||||
    "test-jasmine": "cross-env TRILIUM_DATA_DIR=./data-test ts-node ./node_modules/jasmine/bin/jasmine",
 | 
					    "test-jasmine": "cross-env TRILIUM_DATA_DIR=./data-test ts-node ./node_modules/jasmine/bin/jasmine",
 | 
				
			||||||
    "test-es6": "ts-node -r esm spec-es6/attribute_parser.spec.ts",
 | 
					    "test-es6": "ts-node -r esm spec-es6/attribute_parser.spec.ts",
 | 
				
			||||||
    "test": "npm run test-jasmine && npm run test-es6",
 | 
					    "test": "npm run test-jasmine && npm run test-es6",
 | 
				
			||||||
    "postinstall": "rimraf ./node_modules/canvas"
 | 
					    "start-electron-forge": "npm run prepare-dist && electron-forge start",
 | 
				
			||||||
 | 
					    "make-electron": "npm run webpack && npm run prepare-dist && electron-forge make",
 | 
				
			||||||
 | 
					    "package-electron": "electron-forge package",
 | 
				
			||||||
 | 
					    "prepare-dist": "rimraf ./dist && tsc && ts-node ./bin/copy-dist.ts",
 | 
				
			||||||
 | 
					    "update-build-info": "ts-node bin/update-build-info.ts"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@braintree/sanitize-url": "6.0.4",
 | 
					    "@braintree/sanitize-url": "^7.1.0",
 | 
				
			||||||
    "@electron/remote": "2.1.2",
 | 
					    "@electron/remote": "2.1.2",
 | 
				
			||||||
    "@excalidraw/excalidraw": "^0.17.6",
 | 
					    "@excalidraw/excalidraw": "^0.17.6",
 | 
				
			||||||
    "archiver": "7.0.0",
 | 
					    "archiver": "^7.0.1",
 | 
				
			||||||
    "async-mutex": "0.4.1",
 | 
					    "async-mutex": "^0.5.0",
 | 
				
			||||||
    "axios": "1.6.7",
 | 
					    "axios": "^1.7.2",
 | 
				
			||||||
    "better-sqlite3": "8.4.0",
 | 
					    "better-sqlite3": "8.5.0",
 | 
				
			||||||
    "boxicons": "2.1.4",
 | 
					    "boxicons": "2.1.4",
 | 
				
			||||||
    "chokidar": "3.6.0",
 | 
					    "chokidar": "3.6.0",
 | 
				
			||||||
    "cls-hooked": "4.2.2",
 | 
					    "cls-hooked": "4.2.2",
 | 
				
			||||||
    "compression": "1.7.4",
 | 
					    "compression": "1.7.4",
 | 
				
			||||||
    "cookie-parser": "1.4.6",
 | 
					    "cookie-parser": "1.4.6",
 | 
				
			||||||
    "csurf": "1.11.0",
 | 
					    "csurf": "1.11.0",
 | 
				
			||||||
    "dayjs": "1.11.10",
 | 
					    "dayjs": "^1.11.12",
 | 
				
			||||||
    "dayjs-plugin-utc": "0.1.2",
 | 
					    "dayjs-plugin-utc": "0.1.2",
 | 
				
			||||||
    "debounce": "1.2.1",
 | 
					    "debounce": "^2.1.0",
 | 
				
			||||||
    "ejs": "3.1.9",
 | 
					    "ejs": "^3.1.10",
 | 
				
			||||||
    "electron-debug": "3.2.0",
 | 
					    "electron-debug": "3.2.0",
 | 
				
			||||||
    "electron-dl": "3.5.2",
 | 
					    "electron-dl": "3.5.2",
 | 
				
			||||||
 | 
					    "electron-squirrel-startup": "^1.0.0",
 | 
				
			||||||
    "electron-window-state": "5.0.3",
 | 
					    "electron-window-state": "5.0.3",
 | 
				
			||||||
    "escape-html": "1.0.3",
 | 
					    "escape-html": "1.0.3",
 | 
				
			||||||
    "express": "4.18.3",
 | 
					    "express": "^4.19.2",
 | 
				
			||||||
    "express-partial-content": "1.0.2",
 | 
					    "express-partial-content": "1.0.2",
 | 
				
			||||||
    "express-rate-limit": "7.2.0",
 | 
					    "express-rate-limit": "^7.3.1",
 | 
				
			||||||
    "express-session": "1.18.0",
 | 
					    "express-session": "1.18.0",
 | 
				
			||||||
    "force-graph": "1.43.5",
 | 
					    "force-graph": "1.43.5",
 | 
				
			||||||
    "fs-extra": "11.2.0",
 | 
					    "fs-extra": "11.2.0",
 | 
				
			||||||
@ -65,38 +76,36 @@
 | 
				
			|||||||
    "html": "1.0.0",
 | 
					    "html": "1.0.0",
 | 
				
			||||||
    "html2plaintext": "2.1.4",
 | 
					    "html2plaintext": "2.1.4",
 | 
				
			||||||
    "http-proxy-agent": "7.0.2",
 | 
					    "http-proxy-agent": "7.0.2",
 | 
				
			||||||
    "https-proxy-agent": "7.0.4",
 | 
					    "https-proxy-agent": "^7.0.5",
 | 
				
			||||||
    "i18next": "^23.12.2",
 | 
					    "i18next": "^23.12.2",
 | 
				
			||||||
    "i18next-http-backend": "^2.5.2",
 | 
					    "i18next-http-backend": "^2.5.2",
 | 
				
			||||||
    "image-type": "4.1.0",
 | 
					    "image-type": "4.1.0",
 | 
				
			||||||
    "ini": "3.0.1",
 | 
					    "ini": "^4.1.3",
 | 
				
			||||||
    "is-animated": "2.0.2",
 | 
					    "is-animated": "2.0.2",
 | 
				
			||||||
    "is-svg": "4.3.2",
 | 
					    "is-svg": "4.3.2",
 | 
				
			||||||
    "jimp": "0.22.12",
 | 
					    "jimp": "0.22.12",
 | 
				
			||||||
    "joplin-turndown-plugin-gfm": "1.0.12",
 | 
					    "joplin-turndown-plugin-gfm": "1.0.12",
 | 
				
			||||||
    "jquery": "3.7.1",
 | 
					    "jquery": "3.7.1",
 | 
				
			||||||
    "jquery-hotkeys": "0.2.2",
 | 
					    "jquery-hotkeys": "0.2.2",
 | 
				
			||||||
    "jsdom": "24.0.0",
 | 
					    "jsdom": "^24.1.0",
 | 
				
			||||||
    "katex": "^0.16.11",
 | 
					    "katex": "^0.16.11",
 | 
				
			||||||
    "marked": "12.0.0",
 | 
					    "marked": "^13.0.2",
 | 
				
			||||||
    "mermaid": "^10.9.1",
 | 
					    "mermaid": "^10.9.1",
 | 
				
			||||||
    "mime-types": "2.1.35",
 | 
					    "mime-types": "2.1.35",
 | 
				
			||||||
    "multer": "1.4.5-lts.1",
 | 
					    "multer": "1.4.5-lts.1",
 | 
				
			||||||
    "node-abi": "3.56.0",
 | 
					    "node-abi": "3.56.0",
 | 
				
			||||||
    "normalize-strings": "1.1.1",
 | 
					    "normalize-strings": "1.1.1",
 | 
				
			||||||
    "open": "8.4.1",
 | 
					 | 
				
			||||||
    "panzoom": "9.4.3",
 | 
					    "panzoom": "9.4.3",
 | 
				
			||||||
    "print-this": "2.0.0",
 | 
					    "print-this": "2.0.0",
 | 
				
			||||||
    "rand-token": "1.0.1",
 | 
					    "rand-token": "1.0.1",
 | 
				
			||||||
    "react": "^18.3.1",
 | 
					    "react": "^18.3.1",
 | 
				
			||||||
    "react-dom": "^18.3.1",
 | 
					    "react-dom": "^18.3.1",
 | 
				
			||||||
    "request": "2.88.2",
 | 
					    "request": "2.88.2",
 | 
				
			||||||
    "rimraf": "5.0.5",
 | 
					 | 
				
			||||||
    "safe-compare": "1.1.4",
 | 
					    "safe-compare": "1.1.4",
 | 
				
			||||||
    "sanitize-filename": "1.6.3",
 | 
					    "sanitize-filename": "1.6.3",
 | 
				
			||||||
    "sanitize-html": "2.12.1",
 | 
					    "sanitize-html": "^2.13.0",
 | 
				
			||||||
    "sax": "1.3.0",
 | 
					    "sax": "^1.4.1",
 | 
				
			||||||
    "semver": "7.6.0",
 | 
					    "semver": "^7.6.3",
 | 
				
			||||||
    "serve-favicon": "2.5.0",
 | 
					    "serve-favicon": "2.5.0",
 | 
				
			||||||
    "session-file-store": "1.5.0",
 | 
					    "session-file-store": "1.5.0",
 | 
				
			||||||
    "split.js": "1.6.5",
 | 
					    "split.js": "1.6.5",
 | 
				
			||||||
@ -104,13 +113,16 @@
 | 
				
			|||||||
    "striptags": "3.2.0",
 | 
					    "striptags": "3.2.0",
 | 
				
			||||||
    "tmp": "0.2.3",
 | 
					    "tmp": "0.2.3",
 | 
				
			||||||
    "tree-kill": "1.2.2",
 | 
					    "tree-kill": "1.2.2",
 | 
				
			||||||
    "turndown": "7.1.2",
 | 
					    "turndown": "^7.2.0",
 | 
				
			||||||
    "unescape": "1.0.1",
 | 
					    "unescape": "1.0.1",
 | 
				
			||||||
    "ws": "8.16.0",
 | 
					    "ws": "^8.18.0",
 | 
				
			||||||
    "xml2js": "0.6.2",
 | 
					    "xml2js": "0.6.2",
 | 
				
			||||||
    "yauzl": "3.1.2"
 | 
					    "yauzl": "^3.1.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@electron-forge/cli": "^6.4.2",
 | 
				
			||||||
 | 
					    "@electron-forge/maker-squirrel": "^6.4.2",
 | 
				
			||||||
 | 
					    "@electron-forge/plugin-auto-unpack-natives": "^6.4.2",
 | 
				
			||||||
    "@types/archiver": "^6.0.2",
 | 
					    "@types/archiver": "^6.0.2",
 | 
				
			||||||
    "@types/better-sqlite3": "^7.6.9",
 | 
					    "@types/better-sqlite3": "^7.6.9",
 | 
				
			||||||
    "@types/cls-hooked": "^4.3.8",
 | 
					    "@types/cls-hooked": "^4.3.8",
 | 
				
			||||||
@ -140,19 +152,19 @@
 | 
				
			|||||||
    "@types/xml2js": "^0.4.14",
 | 
					    "@types/xml2js": "^0.4.14",
 | 
				
			||||||
    "cross-env": "7.0.3",
 | 
					    "cross-env": "7.0.3",
 | 
				
			||||||
    "electron": "25.9.8",
 | 
					    "electron": "25.9.8",
 | 
				
			||||||
    "electron-builder": "24.13.3",
 | 
					 | 
				
			||||||
    "electron-packager": "17.1.2",
 | 
					    "electron-packager": "17.1.2",
 | 
				
			||||||
    "electron-rebuild": "3.2.9",
 | 
					    "electron-rebuild": "3.2.9",
 | 
				
			||||||
    "esm": "3.2.25",
 | 
					    "esm": "3.2.25",
 | 
				
			||||||
    "jasmine": "5.1.0",
 | 
					    "jasmine": "5.1.0",
 | 
				
			||||||
    "jsdoc": "4.0.2",
 | 
					    "jsdoc": "^4.0.3",
 | 
				
			||||||
    "lorem-ipsum": "2.0.8",
 | 
					    "lorem-ipsum": "2.0.8",
 | 
				
			||||||
    "nodemon": "3.1.0",
 | 
					    "nodemon": "^3.1.4",
 | 
				
			||||||
    "rcedit": "4.0.1",
 | 
					    "rcedit": "4.0.1",
 | 
				
			||||||
 | 
					    "rimraf": "^6.0.1",
 | 
				
			||||||
    "ts-node": "^10.9.2",
 | 
					    "ts-node": "^10.9.2",
 | 
				
			||||||
    "tslib": "^2.6.2",
 | 
					    "tslib": "^2.6.2",
 | 
				
			||||||
    "typescript": "^5.3.3",
 | 
					    "typescript": "^5.3.3",
 | 
				
			||||||
    "webpack": "5.90.3",
 | 
					    "webpack": "^5.93.0",
 | 
				
			||||||
    "webpack-cli": "5.1.4"
 | 
					    "webpack-cli": "5.1.4"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "optionalDependencies": {
 | 
					  "optionalDependencies": {
 | 
				
			||||||
 | 
				
			|||||||
@ -301,7 +301,7 @@ export default class GlobalMenuWidget extends BasicWidget {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async fetchLatestVersion() {
 | 
					    async fetchLatestVersion() {
 | 
				
			||||||
        const RELEASES_API_URL = "https://api.github.com/repos/zadam/trilium/releases/latest";
 | 
					        const RELEASES_API_URL = "https://api.github.com/repos/TriliumNext/Notes/releases/latest";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const resp = await fetch(RELEASES_API_URL);
 | 
					        const resp = await fetch(RELEASES_API_URL);
 | 
				
			||||||
        const data = await resp.json();
 | 
					        const data = await resp.json();
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ import { JSDOM } from "jsdom";
 | 
				
			|||||||
import BNote = require('../../becca/entities/bnote');
 | 
					import BNote = require('../../becca/entities/bnote');
 | 
				
			||||||
import BAttribute = require('../../becca/entities/battribute');
 | 
					import BAttribute = require('../../becca/entities/battribute');
 | 
				
			||||||
import { Request } from 'express';
 | 
					import { Request } from 'express';
 | 
				
			||||||
import ValidationError = require('../../errors/validation_error');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
function buildDescendantCountMap(noteIdsToCount: string[]) {
 | 
					function buildDescendantCountMap(noteIdsToCount: string[]) {
 | 
				
			||||||
    if (!Array.isArray(noteIdsToCount)) {
 | 
					    if (!Array.isArray(noteIdsToCount)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1,4 @@
 | 
				
			|||||||
export = { buildDate:"2024-07-14T22:32:45+03:00", buildRevision: "b811f3d399aed7e740bd8e92ef7edc7d15de7038" };
 | 
					export = {
 | 
				
			||||||
 | 
					    buildDate: "2024-07-21T10:25:01Z",
 | 
				
			||||||
 | 
					    buildRevision: "715a952148ae6e83fda0886f5ceec8dc329972ae"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -41,15 +41,13 @@ function updateEntities(entityChanges: EntityChangeRecord[], instanceId: string)
 | 
				
			|||||||
            atLeastOnePullApplied = true;
 | 
					            atLeastOnePullApplied = true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (entity) {
 | 
					        updateEntity(entityChange, entity, instanceId, updateContext);
 | 
				
			||||||
            updateEntity(entityChange, entity, instanceId, updateContext);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    logUpdateContext(updateContext);
 | 
					    logUpdateContext(updateContext);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string, updateContext: UpdateContext) {
 | 
					function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow | undefined, instanceId: string, updateContext: UpdateContext) {
 | 
				
			||||||
    if (!remoteEntityRow && remoteEC.entityName === 'options') {
 | 
					    if (!remoteEntityRow && remoteEC.entityName === 'options') {
 | 
				
			||||||
        return; // can be undefined for options with isSynced=false
 | 
					        return; // can be undefined for options with isSynced=false
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -74,7 +72,7 @@ function updateEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instan
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string, updateContext: UpdateContext) {
 | 
					function updateNormalEntity(remoteEC: EntityChange, remoteEntityRow: EntityRow | undefined, instanceId: string, updateContext: UpdateContext) {
 | 
				
			||||||
    const localEC = sql.getRow<EntityChange | undefined>(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]);
 | 
					    const localEC = sql.getRow<EntityChange | undefined>(`SELECT * FROM entity_changes WHERE entityName = ? AND entityId = ?`, [remoteEC.entityName, remoteEC.entityId]);
 | 
				
			||||||
    const localECIsOlderOrSameAsRemote = (
 | 
					    const localECIsOlderOrSameAsRemote = (
 | 
				
			||||||
            localEC && localEC.utcDateChanged && remoteEC.utcDateChanged &&
 | 
					            localEC && localEC.utcDateChanged && remoteEC.utcDateChanged &&
 | 
				
			||||||
@ -139,7 +137,7 @@ function preProcessContent(remoteEC: EntityChange, remoteEntityRow: EntityRow) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function updateNoteReordering(remoteEC: EntityChange, remoteEntityRow: EntityRow, instanceId: string) {
 | 
					function updateNoteReordering(remoteEC: EntityChange, remoteEntityRow: EntityRow | undefined, instanceId: string) {
 | 
				
			||||||
    if (!remoteEntityRow) {
 | 
					    if (!remoteEntityRow) {
 | 
				
			||||||
        throw new Error(`Empty note_reordering body for: ${JSON.stringify(remoteEC)}`);
 | 
					        throw new Error(`Empty note_reordering body for: ${JSON.stringify(remoteEC)}`);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user