Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/restyle-ckeditor
@ -1,10 +1,44 @@
|
|||||||
.git
|
# ignored Files
|
||||||
.idea
|
.dockerignore
|
||||||
|
.editorconfig
|
||||||
|
.git*
|
||||||
|
.prettier*
|
||||||
|
electron*
|
||||||
|
entitlements.plist
|
||||||
|
nodemon.json
|
||||||
|
renovate.json
|
||||||
|
trilium.iml
|
||||||
|
Dockerfile
|
||||||
|
Dockerfile.*
|
||||||
|
npm-debug.log
|
||||||
|
/src/**/*.spec.ts
|
||||||
|
|
||||||
|
# ignored folders
|
||||||
|
/.cache
|
||||||
|
/.git
|
||||||
|
/.github
|
||||||
|
/.idea
|
||||||
|
/.vscode
|
||||||
/bin
|
/bin
|
||||||
|
/build
|
||||||
/dist
|
/dist
|
||||||
/docs
|
/docs
|
||||||
/npm-debug.log
|
/dump-db
|
||||||
node_modules
|
/e2e
|
||||||
|
/integration-tests
|
||||||
|
/spec
|
||||||
|
/test
|
||||||
|
/test-etapi
|
||||||
|
/node_modules
|
||||||
|
|
||||||
src/**/*.ts
|
|
||||||
!src/services/asset_path.ts
|
# exceptions
|
||||||
|
!/bin/copy-dist.ts
|
||||||
|
!/bin/cleanupNodeModules.ts
|
||||||
|
|
||||||
|
# temporary exception to make copy-dist inside Docker build not fail
|
||||||
|
# TriliumNextTODO: make copy-dist *not* requiring to copy these file for builds other than electron-forge
|
||||||
|
!forge.config.cjs
|
||||||
|
!/bin/tpl
|
||||||
|
!/bin/electron-forge/desktop.ejs
|
||||||
|
!/bin/electron-forge/sign-windows.cjs
|
10
.gitattributes
vendored
@ -1,3 +1,13 @@
|
|||||||
package-lock.json linguist-generated=true
|
package-lock.json linguist-generated=true
|
||||||
**/package-lock.json linguist-generated=true
|
**/package-lock.json linguist-generated=true
|
||||||
|
src/public/app/doc_notes/en/User[[:space:]]Guide/** linguist-generated=true
|
||||||
|
src/public/app/doc_notes/en/User[[:space:]]Guide/**/*.md eol=lf
|
||||||
|
|
||||||
|
demo/**/*.html eol=lf
|
||||||
|
demo/**/*.json eol=lf
|
||||||
|
demo/**/*.svg eol=lf
|
||||||
|
demo/**/*.txt eol=lf
|
||||||
|
demo/**/*.js eol=lf
|
||||||
|
demo/**/*.css eol=lf
|
||||||
|
|
||||||
libraries/** linguist-vendored
|
libraries/** linguist-vendored
|
4
.github/FUNDING.yml
vendored
@ -1,4 +1,4 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: [zadam]
|
github: [eliandoran]
|
||||||
custom: ["https://paypal.me/za4am"]
|
custom: ["https://paypal.me/eliandoran"]
|
||||||
|
97
.github/actions/build-electron/action.yml
vendored
@ -8,8 +8,11 @@ inputs:
|
|||||||
arch:
|
arch:
|
||||||
description: "The architecture to build for: x64, arm64"
|
description: "The architecture to build for: x64, arm64"
|
||||||
required: true
|
required: true
|
||||||
extension:
|
shell:
|
||||||
description: "Platform specific extensions to copy in the output: dmg, deb, rpm, exe, zip"
|
description: "Which shell to use"
|
||||||
|
required: true
|
||||||
|
forge_platform:
|
||||||
|
description: "The --platform to pass to Electron Forge"
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
@ -18,7 +21,7 @@ runs:
|
|||||||
# Certificate setup
|
# Certificate setup
|
||||||
- name: Import Apple certificates
|
- name: Import Apple certificates
|
||||||
if: inputs.os == 'macos'
|
if: inputs.os == 'macos'
|
||||||
uses: apple-actions/import-codesign-certs@v2
|
uses: apple-actions/import-codesign-certs@v3
|
||||||
with:
|
with:
|
||||||
p12-file-base64: ${{ env.APPLE_APP_CERTIFICATE_BASE64 }}
|
p12-file-base64: ${{ env.APPLE_APP_CERTIFICATE_BASE64 }}
|
||||||
p12-password: ${{ env.APPLE_APP_CERTIFICATE_PASSWORD }}
|
p12-password: ${{ env.APPLE_APP_CERTIFICATE_PASSWORD }}
|
||||||
@ -27,7 +30,7 @@ runs:
|
|||||||
|
|
||||||
- name: Install Installer certificate
|
- name: Install Installer certificate
|
||||||
if: inputs.os == 'macos'
|
if: inputs.os == 'macos'
|
||||||
uses: apple-actions/import-codesign-certs@v2
|
uses: apple-actions/import-codesign-certs@v3
|
||||||
with:
|
with:
|
||||||
p12-file-base64: ${{ env.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
|
p12-file-base64: ${{ env.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
|
||||||
p12-password: ${{ env.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
|
p12-password: ${{ env.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
|
||||||
@ -38,21 +41,21 @@ runs:
|
|||||||
|
|
||||||
- name: Verify certificates
|
- name: Verify certificates
|
||||||
if: inputs.os == 'macos'
|
if: inputs.os == 'macos'
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: |
|
run: |
|
||||||
echo "Available signing identities:"
|
echo "Available signing identities:"
|
||||||
security find-identity -v -p codesigning build.keychain
|
security find-identity -v -p codesigning build.keychain
|
||||||
|
|
||||||
- name: Set up Python and other macOS dependencies
|
- name: Set up Python and other macOS dependencies
|
||||||
if: ${{ inputs.os == 'macos' }}
|
if: ${{ inputs.os == 'macos' }}
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: |
|
run: |
|
||||||
brew install python-setuptools
|
brew install python-setuptools
|
||||||
brew install create-dmg
|
brew install create-dmg
|
||||||
|
|
||||||
- name: Install dependencies for RPM and Flatpak package building
|
- name: Install dependencies for RPM and Flatpak package building
|
||||||
if: ${{ inputs.os == 'linux' }}
|
if: ${{ inputs.os == 'linux' }}
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils
|
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils
|
||||||
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||||
@ -62,42 +65,32 @@ runs:
|
|||||||
|
|
||||||
# Build setup
|
# Build setup
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
- name: Update build info
|
- name: Update build info
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: npm run chore:update-build-info
|
run: npm run chore:update-build-info
|
||||||
|
|
||||||
# Critical debugging configuration
|
# Critical debugging configuration
|
||||||
- name: Run electron-forge build with enhanced logging
|
- name: Run electron-forge build with enhanced logging
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
env:
|
env:
|
||||||
# Pass through required environment variables for signing and notarization
|
# Pass through required environment variables for signing and notarization
|
||||||
APPLE_TEAM_ID: ${{ env.APPLE_TEAM_ID }}
|
APPLE_TEAM_ID: ${{ env.APPLE_TEAM_ID }}
|
||||||
APPLE_ID: ${{ env.APPLE_ID }}
|
APPLE_ID: ${{ env.APPLE_ID }}
|
||||||
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
|
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
|
||||||
run: |
|
WINDOWS_SIGN_EXECUTABLE: ${{ env.WINDOWS_SIGN_EXECUTABLE }}
|
||||||
# Map OS names to Electron Forge platform names
|
TRILIUM_ARTIFACT_NAME_HINT: TriliumNextNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
|
||||||
if [ "${{ inputs.os }}" = "macos" ]; then
|
run: npm run electron-forge:make -- --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
|
||||||
PLATFORM="darwin"
|
|
||||||
elif [ "${{ inputs.os }}" = "windows" ]; then
|
|
||||||
PLATFORM="win32"
|
|
||||||
else
|
|
||||||
PLATFORM="${{ inputs.os }}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
npm run electron-forge:make -- \
|
|
||||||
--arch=${{ inputs.arch }} \
|
|
||||||
--platform=$PLATFORM
|
|
||||||
|
|
||||||
# Add DMG signing step
|
# Add DMG signing step
|
||||||
- name: Sign DMG
|
- name: Sign DMG
|
||||||
if: inputs.os == 'macos'
|
if: inputs.os == 'macos'
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: |
|
run: |
|
||||||
echo "Signing DMG file..."
|
echo "Signing DMG file..."
|
||||||
dmg_file=$(find out -name "*.dmg" -print -quit)
|
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
|
||||||
if [ -n "$dmg_file" ]; then
|
if [ -n "$dmg_file" ]; then
|
||||||
echo "Found DMG: $dmg_file"
|
echo "Found DMG: $dmg_file"
|
||||||
# Get the first valid signing identity from the keychain
|
# Get the first valid signing identity from the keychain
|
||||||
@ -119,13 +112,13 @@ runs:
|
|||||||
|
|
||||||
- name: Verify code signing
|
- name: Verify code signing
|
||||||
if: inputs.os == 'macos'
|
if: inputs.os == 'macos'
|
||||||
shell: bash
|
shell: ${{ inputs.shell }}
|
||||||
run: |
|
run: |
|
||||||
echo "Verifying code signing for all artifacts..."
|
echo "Verifying code signing for all artifacts..."
|
||||||
|
|
||||||
# First check the .app bundle
|
# First check the .app bundle
|
||||||
echo "Looking for .app bundle..."
|
echo "Looking for .app bundle..."
|
||||||
app_bundle=$(find out -name "*.app" -print -quit)
|
app_bundle=$(find ./dist -name "*.app" -print -quit)
|
||||||
if [ -n "$app_bundle" ]; then
|
if [ -n "$app_bundle" ]; then
|
||||||
echo "Found app bundle: $app_bundle"
|
echo "Found app bundle: $app_bundle"
|
||||||
echo "Verifying app bundle signing..."
|
echo "Verifying app bundle signing..."
|
||||||
@ -144,7 +137,7 @@ runs:
|
|||||||
|
|
||||||
# Then check DMG if it exists
|
# Then check DMG if it exists
|
||||||
echo "Looking for DMG..."
|
echo "Looking for DMG..."
|
||||||
dmg_file=$(find out -name "*.dmg" -print -quit)
|
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
|
||||||
if [ -n "$dmg_file" ]; then
|
if [ -n "$dmg_file" ]; then
|
||||||
echo "Found DMG: $dmg_file"
|
echo "Found DMG: $dmg_file"
|
||||||
echo "Verifying DMG signing..."
|
echo "Verifying DMG signing..."
|
||||||
@ -160,54 +153,8 @@ runs:
|
|||||||
|
|
||||||
# Finally check ZIP if it exists
|
# Finally check ZIP if it exists
|
||||||
echo "Looking for ZIP..."
|
echo "Looking for ZIP..."
|
||||||
zip_file=$(find out -name "*.zip" -print -quit)
|
zip_file=$(find ./dist -name "*.zip" -print -quit)
|
||||||
if [ -n "$zip_file" ]; then
|
if [ -n "$zip_file" ]; then
|
||||||
echo "Found ZIP: $zip_file"
|
echo "Found ZIP: $zip_file"
|
||||||
echo "Note: ZIP files are not code signed, but their contents should be"
|
echo "Note: ZIP files are not code signed, but their contents should be"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Prepare artifacts
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
mkdir -p upload
|
|
||||||
|
|
||||||
if [ "${{ inputs.os }}" = "macos" ]; then
|
|
||||||
# For macOS, we need to look in specific directories based on the maker
|
|
||||||
echo "Collecting macOS artifacts..."
|
|
||||||
|
|
||||||
# Look for DMG files recursively
|
|
||||||
echo "Looking for DMG files..."
|
|
||||||
dmg_file=$(find out -name "*.dmg" -print -quit)
|
|
||||||
if [ -n "$dmg_file" ]; then
|
|
||||||
echo "Found DMG: $dmg_file"
|
|
||||||
cp "$dmg_file" "upload/TriliumNextNotes-${{ github.ref_name }}-darwin-${{ inputs.arch }}.dmg"
|
|
||||||
else
|
|
||||||
echo "Warning: No DMG file found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Look for ZIP files recursively
|
|
||||||
echo "Looking for ZIP files..."
|
|
||||||
zip_file=$(find out -name "*.zip" -print -quit)
|
|
||||||
if [ -n "$zip_file" ]; then
|
|
||||||
echo "Found ZIP: $zip_file"
|
|
||||||
cp "$zip_file" "upload/TriliumNextNotes-${{ github.ref_name }}-darwin-${{ inputs.arch }}.zip"
|
|
||||||
else
|
|
||||||
echo "Warning: No ZIP file found"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# For other platforms, use the existing logic but with better error handling
|
|
||||||
echo "Collecting artifacts for ${{ inputs.os }}..."
|
|
||||||
for ext in ${{ inputs.extension }}; do
|
|
||||||
echo "Looking for .$ext files..."
|
|
||||||
file=$(find out -name "*.$ext" -print -quit)
|
|
||||||
if [ -n "$file" ]; then
|
|
||||||
echo "Found $file for extension $ext"
|
|
||||||
cp "$file" "upload/TriliumNextNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}.$ext"
|
|
||||||
else
|
|
||||||
echo "Warning: No file found with extension .$ext"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Final contents of upload directory:"
|
|
||||||
ls -la upload/
|
|
||||||
|
5
.github/actions/build-server/action.yml
vendored
@ -11,7 +11,7 @@ runs:
|
|||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -28,4 +28,5 @@ runs:
|
|||||||
run: |
|
run: |
|
||||||
mkdir -p upload
|
mkdir -p upload
|
||||||
file=$(find dist -name '*.tar.xz' -print -quit)
|
file=$(find dist -name '*.tar.xz' -print -quit)
|
||||||
cp "$file" "upload/TriliumNextNotes-Server-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}.tar.xz"
|
name=${{ github.ref_name }}
|
||||||
|
cp "$file" "upload/TriliumNextNotes-Server-${name//\//-}-${{ inputs.os }}-${{ inputs.arch }}.tar.xz"
|
||||||
|
79
.github/actions/report-size/action.yml
vendored
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
name: 'Bundle size reporter'
|
||||||
|
description: 'Post bundle size difference compared to another branch'
|
||||||
|
inputs:
|
||||||
|
branch:
|
||||||
|
description: 'Branch to compare to'
|
||||||
|
required: true
|
||||||
|
default: 'main'
|
||||||
|
paths:
|
||||||
|
description:
|
||||||
|
'Paths to json file bundle size report or folder containing bundles'
|
||||||
|
required: true
|
||||||
|
default: '/'
|
||||||
|
onlyDiff:
|
||||||
|
description: 'Report only different sizes'
|
||||||
|
required: false
|
||||||
|
default: 'false'
|
||||||
|
filter:
|
||||||
|
description: 'Regex filter based on file path'
|
||||||
|
required: false
|
||||||
|
unit:
|
||||||
|
description: 'Size unit'
|
||||||
|
required: false
|
||||||
|
default: 'KB'
|
||||||
|
|
||||||
|
# Comment inputs
|
||||||
|
comment:
|
||||||
|
description: 'Post comment'
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
|
header:
|
||||||
|
description: 'Comment header'
|
||||||
|
required: false
|
||||||
|
default: 'Bundle size report'
|
||||||
|
append:
|
||||||
|
description: 'Append comment'
|
||||||
|
required: false
|
||||||
|
default: 'false'
|
||||||
|
ghToken:
|
||||||
|
description: 'Github token'
|
||||||
|
required: false
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
# Checkout branch to compare to [required]
|
||||||
|
- name: Checkout base branch
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ inputs.branch }}
|
||||||
|
path: br-base
|
||||||
|
token: ${{ inputs.ghToken }}
|
||||||
|
|
||||||
|
# Generate the bundle size difference report [required]
|
||||||
|
- name: Generate report
|
||||||
|
id: bundleSize
|
||||||
|
uses: nejcm/bundle-size-reporter-action@v1.4.1
|
||||||
|
with:
|
||||||
|
paths: ${{ inputs.paths }}
|
||||||
|
onlyDiff: ${{ inputs.onlyDiff }}
|
||||||
|
filter: ${{ inputs.filter }}
|
||||||
|
unit: ${{ inputs.unit }}
|
||||||
|
|
||||||
|
# Post github action summary
|
||||||
|
- name: Post summary
|
||||||
|
if: ${{ steps.bundleSize.outputs.hasDifferences == 'true' }} # post only in case of changes
|
||||||
|
run: |
|
||||||
|
echo '${{ steps.bundleSize.outputs.summary }}' >> $GITHUB_STEP_SUMMARY
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
# Post github action comment
|
||||||
|
- name: Post comment
|
||||||
|
uses: marocchino/sticky-pull-request-comment@v2
|
||||||
|
if: ${{ steps.bundleSize.outputs.hasDifferences == 'true' }} # post only in case of changes
|
||||||
|
with:
|
||||||
|
number: ${{ github.event.pull_request.number }}
|
||||||
|
header: ${{ inputs.header }}
|
||||||
|
append: ${{ inputs.append }}
|
||||||
|
message: '${{ steps.bundleSize.outputs.summary }}'
|
||||||
|
GITHUB_TOKEN: ${{ inputs.ghToken }}
|
100
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL Advanced"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "develop" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "develop" ]
|
||||||
|
schedule:
|
||||||
|
- cron: '20 7 * * 0'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze (${{ matrix.language }})
|
||||||
|
# Runner size impacts CodeQL analysis time. To learn more, please see:
|
||||||
|
# - https://gh.io/recommended-hardware-resources-for-running-codeql
|
||||||
|
# - https://gh.io/supported-runners-and-hardware-resources
|
||||||
|
# - https://gh.io/using-larger-runners (GitHub.com only)
|
||||||
|
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
|
||||||
|
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
|
||||||
|
permissions:
|
||||||
|
# required for all workflows
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
# required to fetch internal or private CodeQL packs
|
||||||
|
packages: read
|
||||||
|
|
||||||
|
# only required for workflows in private repositories
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- language: actions
|
||||||
|
build-mode: none
|
||||||
|
- language: javascript-typescript
|
||||||
|
build-mode: none
|
||||||
|
# CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
|
||||||
|
# Use `c-cpp` to analyze code written in C, C++ or both
|
||||||
|
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
|
||||||
|
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
|
||||||
|
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
|
||||||
|
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
|
||||||
|
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
|
||||||
|
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Add any setup steps before running the `github/codeql-action/init` action.
|
||||||
|
# This includes steps like installing compilers or runtimes (`actions/setup-node`
|
||||||
|
# or others). This is typically only required for manual builds.
|
||||||
|
# - name: Setup runtime (example)
|
||||||
|
# uses: actions/setup-example@v1
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v3
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
build-mode: ${{ matrix.build-mode }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
|
||||||
|
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||||
|
# queries: security-extended,security-and-quality
|
||||||
|
|
||||||
|
# If the analyze step fails for one of the languages you are analyzing with
|
||||||
|
# "We were unable to automatically build your code", modify the matrix above
|
||||||
|
# to set the build mode to "manual" for that language. Then modify this step
|
||||||
|
# to build your code.
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||||
|
- if: matrix.build-mode == 'manual'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo 'If you are using a "manual" build mode for one or more of the' \
|
||||||
|
'languages you are analyzing, replace this with the commands to build' \
|
||||||
|
'your code, for example:'
|
||||||
|
echo ' make bootstrap'
|
||||||
|
echo ' make release'
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v3
|
||||||
|
with:
|
||||||
|
category: "/language:${{matrix.language}}"
|
112
.github/workflows/dev.yml
vendored
@ -1,9 +1,9 @@
|
|||||||
name: Dev
|
name: Dev
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches-ignore:
|
branches: [ develop ]
|
||||||
- 'develop'
|
pull_request:
|
||||||
- 'feature/update**'
|
branches: [ develop ]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
@ -15,7 +15,73 @@ env:
|
|||||||
IMAGE_NAME: ${{ github.repository_owner }}/notes
|
IMAGE_NAME: ${{ github.repository_owner }}/notes
|
||||||
TEST_TAG: ${{ github.repository_owner }}/notes:test
|
TEST_TAG: ${{ github.repository_owner }}/notes:test
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
pull-requests: write # for PR comments
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
report-electron-size:
|
||||||
|
name: Report Electron size
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout the repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up node & dependencies
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
cache: "npm"
|
||||||
|
|
||||||
|
- run: npm ci
|
||||||
|
|
||||||
|
- name: Run the build
|
||||||
|
uses: ./.github/actions/build-electron
|
||||||
|
with:
|
||||||
|
os: linux
|
||||||
|
arch: x64
|
||||||
|
shell: bash
|
||||||
|
forge_platform: linux
|
||||||
|
|
||||||
|
- name: Run the Electron size report
|
||||||
|
uses: ./.github/actions/report-size
|
||||||
|
with:
|
||||||
|
paths: 'upload/**/*'
|
||||||
|
onlyDiff: 'true'
|
||||||
|
branch: 'develop'
|
||||||
|
header: 'Electron size report'
|
||||||
|
unit: "MB"
|
||||||
|
ghToken: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
report-server-size:
|
||||||
|
name: Report server size
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout the repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up node & dependencies
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
cache: "npm"
|
||||||
|
|
||||||
|
- run: npm ci
|
||||||
|
|
||||||
|
- name: Run the build
|
||||||
|
uses: ./.github/actions/build-server
|
||||||
|
with:
|
||||||
|
os: linux
|
||||||
|
arch: x64
|
||||||
|
|
||||||
|
- name: Run the server size report
|
||||||
|
uses: ./.github/actions/report-size
|
||||||
|
with:
|
||||||
|
paths: 'upload/**/*'
|
||||||
|
onlyDiff: 'true'
|
||||||
|
branch: 'develop'
|
||||||
|
header: 'Server size report'
|
||||||
|
unit: "MB"
|
||||||
|
ghToken: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
test_dev:
|
test_dev:
|
||||||
name: Test development
|
name: Test development
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -26,13 +92,17 @@ 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: 20
|
node-version: 22
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
|
|
||||||
- name: Run the TypeScript build
|
- name: Run the TypeScript build
|
||||||
run: npx tsc
|
run: npx tsc
|
||||||
|
|
||||||
|
- name: Run the unit tests
|
||||||
|
run: npm run test
|
||||||
|
|
||||||
build_docker:
|
build_docker:
|
||||||
name: Build Docker image
|
name: Build Docker image
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -40,16 +110,10 @@ jobs:
|
|||||||
- test_dev
|
- test_dev
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Set up node & dependencies
|
- name: Install dependencies
|
||||||
uses: actions/setup-node@v4
|
run: npm ci
|
||||||
with:
|
- name: Update build info
|
||||||
node-version: 20
|
run: npm run chore:update-build-info
|
||||||
cache: "npm"
|
|
||||||
- run: npm ci
|
|
||||||
- name: Run the TypeScript build
|
|
||||||
run: npx tsc
|
|
||||||
- name: Create server-package.json
|
|
||||||
run: cat package.json | grep -v electron > server-package.json
|
|
||||||
- uses: docker/setup-buildx-action@v3
|
- uses: docker/setup-buildx-action@v3
|
||||||
- uses: docker/build-push-action@v6
|
- uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
@ -70,6 +134,12 @@ jobs:
|
|||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Update build info
|
||||||
|
run: npm run chore:update-build-info
|
||||||
|
|
||||||
- name: Set IMAGE_NAME to lowercase
|
- name: Set IMAGE_NAME to lowercase
|
||||||
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
|
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
|
||||||
- name: Set TEST_TAG to lowercase
|
- name: Set TEST_TAG to lowercase
|
||||||
@ -78,20 +148,6 @@ jobs:
|
|||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Set up node & dependencies
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
cache: "npm"
|
|
||||||
|
|
||||||
- run: npm ci
|
|
||||||
|
|
||||||
- name: Run the TypeScript build
|
|
||||||
run: npx tsc
|
|
||||||
|
|
||||||
- name: Create server-package.json
|
|
||||||
run: cat package.json | grep -v electron > server-package.json
|
|
||||||
|
|
||||||
- name: Build and export to Docker
|
- name: Build and export to Docker
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
|
24
.github/workflows/main-docker.yml
vendored
@ -45,7 +45,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: 20
|
node-version: 22
|
||||||
cache: "npm"
|
cache: "npm"
|
||||||
|
|
||||||
- name: Install npm dependencies
|
- name: Install npm dependencies
|
||||||
@ -57,9 +57,6 @@ jobs:
|
|||||||
- name: Run the TypeScript build
|
- name: Run the TypeScript build
|
||||||
run: npx tsc
|
run: npx tsc
|
||||||
|
|
||||||
- name: Create server-package.json
|
|
||||||
run: cat package.json | grep -v electron > server-package.json
|
|
||||||
|
|
||||||
- name: Build and export to Docker
|
- name: Build and export to Docker
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
@ -134,6 +131,13 @@ jobs:
|
|||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Update build info
|
||||||
|
run: npm run chore:update-build-info
|
||||||
|
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
@ -154,18 +158,6 @@ jobs:
|
|||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
|
||||||
- name: Set up node & dependencies
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
cache: "npm"
|
|
||||||
- run: npm ci
|
|
||||||
- name: Run the TypeScript build
|
|
||||||
run: npx tsc
|
|
||||||
- name: Create server-package.json
|
|
||||||
run: cat package.json | grep -v electron > server-package.json
|
|
||||||
|
|
||||||
- name: Login to GHCR
|
- name: Login to GHCR
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
|
119
.github/workflows/main.yml
vendored
@ -1,119 +0,0 @@
|
|||||||
name: Main
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- "feature/update**"
|
|
||||||
- "feature/server_esm**"
|
|
||||||
paths-ignore:
|
|
||||||
- "docs/**"
|
|
||||||
- ".github/workflows/main-docker.yml"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
make-electron:
|
|
||||||
name: Make Electron
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
arch: [x64, arm64]
|
|
||||||
os:
|
|
||||||
- name: macos
|
|
||||||
image: macos-latest
|
|
||||||
extension: [dmg, zip]
|
|
||||||
- name: linux
|
|
||||||
image: ubuntu-latest
|
|
||||||
extension: [deb, rpm, zip, flatpak]
|
|
||||||
- name: windows
|
|
||||||
image: windows-latest
|
|
||||||
extension: [exe, zip]
|
|
||||||
runs-on: ${{ matrix.os.image }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# Set up certificates and keychain for macOS
|
|
||||||
- name: Install Apple Certificates
|
|
||||||
if: matrix.os.name == 'macos'
|
|
||||||
env:
|
|
||||||
APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
|
||||||
APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
|
||||||
INSTALLER_CERTIFICATE_BASE64: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
|
|
||||||
INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
|
|
||||||
KEYCHAIN_PASSWORD: ${{ github.run_id }}
|
|
||||||
run: |
|
|
||||||
# Create keychain
|
|
||||||
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
|
|
||||||
security default-keychain -s build.keychain
|
|
||||||
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
|
|
||||||
security set-keychain-settings -t 3600 -u build.keychain
|
|
||||||
|
|
||||||
# Import application certificate
|
|
||||||
echo "$APP_CERTIFICATE_BASE64" | base64 --decode > application.p12
|
|
||||||
security import application.p12 -k build.keychain -P "$APP_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
|
|
||||||
rm application.p12
|
|
||||||
|
|
||||||
# Import installer certificate
|
|
||||||
echo "$INSTALLER_CERTIFICATE_BASE64" | base64 --decode > installer.p12
|
|
||||||
security import installer.p12 -k build.keychain -P "$INSTALLER_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
|
|
||||||
rm installer.p12
|
|
||||||
|
|
||||||
# Update keychain settings
|
|
||||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
|
|
||||||
|
|
||||||
- name: Set up node & dependencies
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
- name: Run the build
|
|
||||||
uses: ./.github/actions/build-electron
|
|
||||||
with:
|
|
||||||
os: ${{ matrix.os.name }}
|
|
||||||
arch: ${{ matrix.arch }}
|
|
||||||
extension: ${{ matrix.os.extension }}
|
|
||||||
env:
|
|
||||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
||||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
||||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
|
||||||
|
|
||||||
# Clean up keychain after build
|
|
||||||
- name: Clean up keychain
|
|
||||||
if: matrix.os.name == 'macos' && always()
|
|
||||||
run: |
|
|
||||||
security delete-keychain build.keychain
|
|
||||||
|
|
||||||
- name: Publish artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.zip
|
|
||||||
path: upload/*.zip
|
|
||||||
- name: Publish installer artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.${{matrix.os.extension}}
|
|
||||||
path: upload/*.${{ matrix.os.extension }}
|
|
||||||
|
|
||||||
build_linux_server:
|
|
||||||
name: Build Linux Server
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
arch: [x64, arm64]
|
|
||||||
include:
|
|
||||||
- arch: x64
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
- arch: arm64
|
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
runs-on: ${{ matrix.runs-on }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Run the build
|
|
||||||
uses: ./.github/actions/build-server
|
|
||||||
with:
|
|
||||||
arch: ${{ matrix.arch }}
|
|
||||||
- uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: TriliumNextNotes linux server ${{ matrix.arch }}
|
|
||||||
path: upload/TriliumNextNotes-linux-${{ matrix.arch }}-${{ github.ref_name }}.tar.xz
|
|
44
.github/workflows/nightly.yml
vendored
@ -2,9 +2,16 @@ name: Nightly Release
|
|||||||
on:
|
on:
|
||||||
# This can be used to automatically publish nightlies at UTC nighttime
|
# This can be used to automatically publish nightlies at UTC nighttime
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 2 * * *' # run at 2 AM UTC
|
- cron: "0 2 * * *" # run at 2 AM UTC
|
||||||
# This can be used to allow manually triggering nightlies from the web interface
|
# This can be used to allow manually triggering nightlies from the web interface
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- renovate/electron-forge*
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- .github/actions/build-electron/*
|
||||||
|
- forge.config.cjs
|
||||||
env:
|
env:
|
||||||
GITHUB_UPLOAD_URL: https://uploads.github.com/repos/TriliumNext/Notes/releases/179589950/assets{?name,label}
|
GITHUB_UPLOAD_URL: https://uploads.github.com/repos/TriliumNext/Notes/releases/179589950/assets{?name,label}
|
||||||
GITHUB_RELEASE_ID: 179589950
|
GITHUB_RELEASE_ID: 179589950
|
||||||
@ -20,22 +27,24 @@ jobs:
|
|||||||
os:
|
os:
|
||||||
- name: macos
|
- name: macos
|
||||||
image: macos-latest
|
image: macos-latest
|
||||||
extension: [dmg, zip]
|
shell: bash
|
||||||
|
forge_platform: darwin
|
||||||
- name: linux
|
- name: linux
|
||||||
image: ubuntu-latest
|
image: ubuntu-latest
|
||||||
extension: [deb, rpm, zip, flatpak]
|
shell: bash
|
||||||
|
forge_platform: linux
|
||||||
- name: windows
|
- name: windows
|
||||||
image: windows-latest
|
image: win-signing
|
||||||
extension: [exe, zip]
|
shell: cmd
|
||||||
|
forge_platform: win32
|
||||||
runs-on: ${{ matrix.os.image }}
|
runs-on: ${{ matrix.os.image }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
shell: bash
|
|
||||||
run: npm ci
|
run: npm ci
|
||||||
- name: Update nightly version
|
- name: Update nightly version
|
||||||
run: npm run chore:ci-update-nightly-version
|
run: npm run chore:ci-update-nightly-version
|
||||||
@ -44,10 +53,21 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
os: ${{ matrix.os.name }}
|
os: ${{ matrix.os.name }}
|
||||||
arch: ${{ matrix.arch }}
|
arch: ${{ matrix.arch }}
|
||||||
extension: ${{ join(matrix.os.extension, ' ') }}
|
shell: ${{ matrix.os.shell }}
|
||||||
|
forge_platform: ${{ matrix.os.forge_platform }}
|
||||||
|
env:
|
||||||
|
APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
||||||
|
APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
||||||
|
APPLE_INSTALLER_CERTIFICATE_BASE64: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
|
||||||
|
APPLE_INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
|
||||||
|
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||||
|
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||||
|
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||||
|
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
make_latest: false
|
make_latest: false
|
||||||
prerelease: true
|
prerelease: true
|
||||||
@ -57,6 +77,13 @@ jobs:
|
|||||||
tag_name: nightly
|
tag_name: nightly
|
||||||
name: Nightly Build
|
name: Nightly Build
|
||||||
|
|
||||||
|
- name: Publish artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ github.event_name == 'pull_request' }}
|
||||||
|
with:
|
||||||
|
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}
|
||||||
|
path: upload
|
||||||
|
|
||||||
nightly-server:
|
nightly-server:
|
||||||
name: Deploy server nightly
|
name: Deploy server nightly
|
||||||
strategy:
|
strategy:
|
||||||
@ -80,6 +107,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
make_latest: false
|
make_latest: false
|
||||||
prerelease: true
|
prerelease: true
|
||||||
|
20
.github/workflows/release-winget.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
name: Release to winget
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [ published ]
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
release_tag:
|
||||||
|
description: 'Git tag to release from'
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
jobs:
|
||||||
|
release-winget:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Publish to WinGet
|
||||||
|
uses: vedantmgoyal9/winget-releaser@main
|
||||||
|
with:
|
||||||
|
identifier: TriliumNext.Notes
|
||||||
|
token: ${{ secrets.token }}
|
||||||
|
release-tag: ${{ github.event.inputs.release_tag || github.event.release.tag_name }}
|
54
.github/workflows/release.yml
vendored
@ -3,7 +3,6 @@ on:
|
|||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- "v*"
|
- "v*"
|
||||||
workflow_dispatch:
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -20,26 +19,30 @@ jobs:
|
|||||||
os:
|
os:
|
||||||
- name: macos
|
- name: macos
|
||||||
image: macos-latest
|
image: macos-latest
|
||||||
extension: [dmg, zip]
|
shell: bash
|
||||||
|
forge_platform: darwin
|
||||||
- name: linux
|
- name: linux
|
||||||
image: ubuntu-latest
|
image: ubuntu-latest
|
||||||
extension: [deb, rpm, zip, flatpak]
|
shell: bash
|
||||||
|
forge_platform: linux
|
||||||
- name: windows
|
- name: windows
|
||||||
image: windows-latest
|
image: win-signing
|
||||||
extension: [exe, zip]
|
shell: cmd
|
||||||
|
forge_platform: win32
|
||||||
runs-on: ${{ matrix.os.image }}
|
runs-on: ${{ matrix.os.image }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Set up node & dependencies
|
- name: Set up node & dependencies
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 22
|
||||||
- name: Run the build
|
- name: Run the build
|
||||||
uses: ./.github/actions/build-electron
|
uses: ./.github/actions/build-electron
|
||||||
with:
|
with:
|
||||||
os: ${{ matrix.os.name }}
|
os: ${{ matrix.os.name }}
|
||||||
arch: ${{ matrix.arch }}
|
arch: ${{ matrix.arch }}
|
||||||
extension: ${{ join(matrix.os.extension, ' ') }}
|
shell: ${{ matrix.os.shell }}
|
||||||
|
forge_platform: ${{ matrix.os.forge_platform }}
|
||||||
env:
|
env:
|
||||||
APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
|
||||||
APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
|
||||||
@ -48,15 +51,15 @@ jobs:
|
|||||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||||
|
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
|
||||||
|
|
||||||
- name: Publish release
|
- name: Upload the artifact
|
||||||
uses: softprops/action-gh-release@v2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
draft: true
|
name: release-desktop-${{ matrix.os.name }}-${{ matrix.arch }}
|
||||||
fail_on_unmatched_files: true
|
path: upload/*.*
|
||||||
files: upload/*.*
|
|
||||||
|
|
||||||
build_linux_server-x64:
|
build_server:
|
||||||
name: Build Linux Server
|
name: Build Linux Server
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@ -77,9 +80,32 @@ jobs:
|
|||||||
os: linux
|
os: linux
|
||||||
arch: ${{ matrix.arch }}
|
arch: ${{ matrix.arch }}
|
||||||
|
|
||||||
|
- name: Upload the artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: release-server-linux-${{ matrix.arch }}
|
||||||
|
path: upload/*.*
|
||||||
|
|
||||||
|
publish_release:
|
||||||
|
name: Publish release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs:
|
||||||
|
- make-electron
|
||||||
|
- build_server
|
||||||
|
steps:
|
||||||
|
- run: mkdir upload
|
||||||
|
|
||||||
|
- name: Download all artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
merge-multiple: true
|
||||||
|
pattern: release-*
|
||||||
|
path: upload
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: false
|
||||||
|
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
files: upload/*.*
|
files: upload/*.*
|
||||||
|
12
.gitignore
vendored
@ -2,6 +2,7 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
node_modules/
|
node_modules/
|
||||||
dist/
|
dist/
|
||||||
|
upload/
|
||||||
build/
|
build/
|
||||||
coverage/
|
coverage/
|
||||||
src/public/app-dist/
|
src/public/app-dist/
|
||||||
@ -11,6 +12,7 @@ po-*/
|
|||||||
.flatpak-builder/
|
.flatpak-builder/
|
||||||
|
|
||||||
*.db
|
*.db
|
||||||
|
!test/**/*.db
|
||||||
!integration-tests/db/document.db
|
!integration-tests/db/document.db
|
||||||
!integration-tests/db/config.ini
|
!integration-tests/db/config.ini
|
||||||
integration-tests/db/log
|
integration-tests/db/log
|
||||||
@ -25,6 +27,7 @@ server-package.json
|
|||||||
.idea/shelf/
|
.idea/shelf/
|
||||||
data/
|
data/
|
||||||
data-test/
|
data-test/
|
||||||
|
data-demo/
|
||||||
tmp/
|
tmp/
|
||||||
.eslintcache
|
.eslintcache
|
||||||
|
|
||||||
@ -36,3 +39,12 @@ images/app-icons/mac/*.png
|
|||||||
/blob-report/
|
/blob-report/
|
||||||
/playwright/.cache/
|
/playwright/.cache/
|
||||||
/playwright/.auth/
|
/playwright/.auth/
|
||||||
|
|
||||||
|
data-docs/backup
|
||||||
|
data-docs/log
|
||||||
|
data-docs/session
|
||||||
|
data-docs/session_secret.txt
|
||||||
|
data-docs/document.*
|
||||||
|
|
||||||
|
# Webpack
|
||||||
|
webpack-stats.json
|
@ -1,5 +0,0 @@
|
|||||||
*.html
|
|
||||||
*.md
|
|
||||||
*.yml
|
|
||||||
libraries/*
|
|
||||||
docs/*
|
|
22
.prettierrc
@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"printWidth": 200,
|
|
||||||
"tabWidth": 4,
|
|
||||||
"useTabs": false,
|
|
||||||
"semi": true,
|
|
||||||
"singleQuote": false,
|
|
||||||
"quoteProps": "as-needed",
|
|
||||||
"trailingComma": "none",
|
|
||||||
"bracketSpacing": true,
|
|
||||||
"arrowParens": "always",
|
|
||||||
"proseWrap": "preserve",
|
|
||||||
"htmlWhitespaceSensitivity": "css",
|
|
||||||
"endOfLine": "lf",
|
|
||||||
"overrides": [
|
|
||||||
{
|
|
||||||
"files": ["*.json"],
|
|
||||||
"options": {
|
|
||||||
"tabWidth": 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
10
.vscode/extensions.json
vendored
@ -1,3 +1,11 @@
|
|||||||
{
|
{
|
||||||
"recommendations": ["lokalise.i18n-ally", "editorconfig.editorconfig"]
|
"recommendations": [
|
||||||
|
"lokalise.i18n-ally",
|
||||||
|
"editorconfig.editorconfig",
|
||||||
|
"vitest.explorer",
|
||||||
|
"ms-playwright.playwright",
|
||||||
|
"tobermory.es6-string-html",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"yzhang.markdown-all-in-one"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
4
.vscode/launch.json
vendored
@ -5,8 +5,8 @@
|
|||||||
{
|
{
|
||||||
"console": "integratedTerminal",
|
"console": "integratedTerminal",
|
||||||
"internalConsoleOptions": "neverOpen",
|
"internalConsoleOptions": "neverOpen",
|
||||||
"name": "nodemon server:start",
|
"name": "nodemon start-server",
|
||||||
"program": "${workspaceFolder}/src/main",
|
"program": "${workspaceFolder}/src/www",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"restart": true,
|
"restart": true,
|
||||||
"runtimeExecutable": "nodemon",
|
"runtimeExecutable": "nodemon",
|
||||||
|
9
.vscode/settings.json
vendored
@ -19,5 +19,12 @@
|
|||||||
"[css]": {
|
"[css]": {
|
||||||
"editor.defaultFormatter": "vscode.css-language-features"
|
"editor.defaultFormatter": "vscode.css-language-features"
|
||||||
},
|
},
|
||||||
"npm.exclude": ["**/build", "**/dist", "**/out/**"]
|
"npm.exclude": [
|
||||||
|
"**/build",
|
||||||
|
"**/dist",
|
||||||
|
"**/out/**"
|
||||||
|
],
|
||||||
|
"[xml]": {
|
||||||
|
"editor.defaultFormatter": "redhat.vscode-xml"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
75
Dockerfile
@ -1,62 +1,49 @@
|
|||||||
# Build stage
|
# Build stage
|
||||||
FROM node:22.14.0-bullseye-slim AS builder
|
FROM node:22.14.0-bullseye-slim AS builder
|
||||||
|
|
||||||
# Configure build dependencies in a single layer
|
WORKDIR /usr/src/app/build
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
g++ \
|
|
||||||
gcc \
|
|
||||||
libtool \
|
|
||||||
make \
|
|
||||||
nasm \
|
|
||||||
libpng-dev \
|
|
||||||
python3 \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
|
||||||
|
|
||||||
# Copy only necessary files for build
|
# Copy only necessary files for build
|
||||||
COPY . .
|
COPY . .
|
||||||
COPY server-package.json package.json
|
|
||||||
|
|
||||||
# Build and cleanup in a single layer
|
# Build and cleanup in a single layer
|
||||||
RUN cp -R build/src/* src/. && \
|
RUN npm ci && \
|
||||||
cp build/docker_healthcheck.js . && \
|
npm run build:prepare-dist && \
|
||||||
rm docker_healthcheck.ts && \
|
|
||||||
npm install && \
|
|
||||||
npm run build:webpack && \
|
|
||||||
npm prune --omit=dev && \
|
|
||||||
npm cache clean --force && \
|
npm cache clean --force && \
|
||||||
cp -r src/public/app/doc_notes src/public/app-dist/. && \
|
rm -rf build/node_modules && \
|
||||||
rm -rf src/public/app/* && \
|
mv build/* \
|
||||||
mkdir -p src/public/app/services && \
|
start-docker.sh \
|
||||||
cp -r build/src/public/app/services/mime_type_definitions.js src/public/app/services/mime_type_definitions.js && \
|
/usr/src/app/ && \
|
||||||
rm src/services/asset_path.ts && \
|
rm -rf \
|
||||||
rm -r build
|
/usr/src/app/build \
|
||||||
|
/tmp/node-compile-cache
|
||||||
|
|
||||||
|
#TODO: improve node_modules handling in copy-dist/Dockerfile -> remove duplicated work
|
||||||
|
# currently copy-dist will copy certain node_module folders, but in the Dockerfile we delete them again (to keep image size down),
|
||||||
|
# as we install necessary dependencies in runtime buildstage anyways
|
||||||
|
|
||||||
# Runtime stage
|
# Runtime stage
|
||||||
FROM node:22.14.0-bullseye-slim
|
FROM node:22.14.0-bullseye-slim
|
||||||
|
|
||||||
# Install only runtime dependencies
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
||||||
gosu \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* && \
|
|
||||||
rm -rf /var/cache/apt/*
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
# Copy only necessary files from builder
|
# Install only runtime dependencies
|
||||||
COPY --from=builder /usr/src/app/node_modules ./node_modules
|
RUN apt-get update && \
|
||||||
COPY --from=builder /usr/src/app/src ./src
|
apt-get install -y --no-install-recommends \
|
||||||
COPY --from=builder /usr/src/app/db ./db
|
gosu && \
|
||||||
COPY --from=builder /usr/src/app/docker_healthcheck.js .
|
rm -rf \
|
||||||
COPY --from=builder /usr/src/app/start-docker.sh .
|
/var/lib/apt/lists/* \
|
||||||
COPY --from=builder /usr/src/app/package.json .
|
/var/cache/apt/*
|
||||||
COPY --from=builder /usr/src/app/config-sample.ini .
|
|
||||||
COPY --from=builder /usr/src/app/images ./images
|
COPY --from=builder /usr/src/app ./
|
||||||
COPY --from=builder /usr/src/app/translations ./translations
|
|
||||||
COPY --from=builder /usr/src/app/libraries ./libraries
|
RUN sed -i "/electron/d" package.json && \
|
||||||
|
npm ci --omit=dev && \
|
||||||
|
node --experimental-strip-types ./bin/cleanupNodeModules.ts . --skip-prune-dev-deps && \
|
||||||
|
npm cache clean --force && \
|
||||||
|
rm -rf \
|
||||||
|
/tmp/node-compile-cache \
|
||||||
|
/usr/src/app/bin/cleanupNodeModules.ts
|
||||||
|
|
||||||
# Configure container
|
# Configure container
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
@ -1,38 +1,26 @@
|
|||||||
# Build stage
|
# Build stage
|
||||||
FROM node:22.14.0-alpine AS builder
|
FROM node:22.14.0-alpine AS builder
|
||||||
|
|
||||||
# Configure build dependencies
|
WORKDIR /usr/src/app/build
|
||||||
RUN apk add --no-cache --virtual .build-dependencies \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
g++ \
|
|
||||||
gcc \
|
|
||||||
libtool \
|
|
||||||
make \
|
|
||||||
nasm \
|
|
||||||
libpng-dev \
|
|
||||||
python3
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
|
||||||
|
|
||||||
# Copy only necessary files for build
|
# Copy only necessary files for build
|
||||||
COPY . .
|
COPY . .
|
||||||
COPY server-package.json package.json
|
|
||||||
|
|
||||||
# Build and cleanup in a single layer
|
# Build and cleanup in a single layer
|
||||||
RUN cp -R build/src/* src/. && \
|
RUN npm ci && \
|
||||||
cp build/docker_healthcheck.js . && \
|
npm run build:prepare-dist && \
|
||||||
rm docker_healthcheck.ts && \
|
|
||||||
npm install && \
|
|
||||||
npm run build:webpack && \
|
|
||||||
npm prune --omit=dev && \
|
|
||||||
npm cache clean --force && \
|
npm cache clean --force && \
|
||||||
cp -r src/public/app/doc_notes src/public/app-dist/. && \
|
rm -rf build/node_modules && \
|
||||||
rm -rf src/public/app && \
|
mv build/* \
|
||||||
mkdir -p src/public/app/services && \
|
start-docker.sh \
|
||||||
cp -r build/src/public/app/services/mime_type_definitions.js src/public/app/services/mime_type_definitions.js && \
|
/usr/src/app/ && \
|
||||||
rm src/services/asset_path.ts && \
|
rm -rf \
|
||||||
rm -r build
|
/usr/src/app/build \
|
||||||
|
/tmp/node-compile-cache
|
||||||
|
|
||||||
|
#TODO: improve node_modules handling in copy-dist/Dockerfile -> remove duplicated work
|
||||||
|
# currently copy-dist will copy certain node_module folders, but in the Dockerfile we delete them again (to keep image size down),
|
||||||
|
# as we install necessary dependencies in runtime buildstage anyways
|
||||||
|
|
||||||
# Runtime stage
|
# Runtime stage
|
||||||
FROM node:22.14.0-alpine
|
FROM node:22.14.0-alpine
|
||||||
@ -42,17 +30,15 @@ RUN apk add --no-cache su-exec shadow
|
|||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
# Copy only necessary files from builder
|
COPY --from=builder /usr/src/app ./
|
||||||
COPY --from=builder /usr/src/app/node_modules ./node_modules
|
|
||||||
COPY --from=builder /usr/src/app/src ./src
|
RUN sed -i "/electron/d" package.json && \
|
||||||
COPY --from=builder /usr/src/app/db ./db
|
npm ci --omit=dev && \
|
||||||
COPY --from=builder /usr/src/app/docker_healthcheck.js .
|
node --experimental-strip-types ./bin/cleanupNodeModules.ts . --skip-prune-dev-deps && \
|
||||||
COPY --from=builder /usr/src/app/start-docker.sh .
|
npm cache clean --force && \
|
||||||
COPY --from=builder /usr/src/app/package.json .
|
rm -rf \
|
||||||
COPY --from=builder /usr/src/app/config-sample.ini .
|
/tmp/node-compile-cache \
|
||||||
COPY --from=builder /usr/src/app/images ./images
|
/usr/src/app/bin/cleanupNodeModules.ts
|
||||||
COPY --from=builder /usr/src/app/translations ./translations
|
|
||||||
COPY --from=builder /usr/src/app/libraries ./libraries
|
|
||||||
|
|
||||||
# Add application user
|
# Add application user
|
||||||
RUN adduser -s /bin/false node; exit 0
|
RUN adduser -s /bin/false node; exit 0
|
||||||
|
28
README.md
@ -1,6 +1,6 @@
|
|||||||
# TriliumNext Notes
|
# TriliumNext Notes
|
||||||
|
|
||||||
 
|
  
|
||||||
|
|
||||||
[English](./README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README.ru.md) | [Japanese](./README.ja.md) | [Italian](./README.it.md) | [Spanish](./README.es.md)
|
[English](./README.md) | [Chinese](./README-ZH_CN.md) | [Russian](./README.ru.md) | [Japanese](./README.ja.md) | [Italian](./README.it.md) | [Spanish](./README.es.md)
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for q
|
|||||||
|
|
||||||
### Migrating from Trilium?
|
### Migrating from Trilium?
|
||||||
|
|
||||||
There are no special migration steps to migrate from a zadam/Trilium instance to a TriliumNext/Notes instance. Just upgrade your Trilium instance to the latest version and [install TriliumNext/Notes as usual](#-installation)
|
There are no special migration steps to migrate from a zadam/Trilium instance to a TriliumNext/Notes instance. Simply [install TriliumNext/Notes](#-installation) as usual and it will use your existing database.
|
||||||
|
|
||||||
Versions up to and including [v0.90.4](https://github.com/TriliumNext/Notes/releases/tag/v0.90.4) are compatible with the latest zadam/trilium version of [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later versions of TriliumNext have their sync versions incremented.
|
Versions up to and including [v0.90.4](https://github.com/TriliumNext/Notes/releases/tag/v0.90.4) are compatible with the latest zadam/trilium version of [v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later versions of TriliumNext have their sync versions incremented.
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ Feel free to join our official conversations. We would love to hear what feature
|
|||||||
* Fast and easy [navigation between notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text search and [note hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
|
* Fast and easy [navigation between notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text search and [note hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
|
||||||
* Seamless [note versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
|
* Seamless [note versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
|
||||||
* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be used for note organization, querying and advanced [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
|
* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be used for note organization, querying and advanced [scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
|
||||||
|
* Direct OpenID and TOTP integration for more secure login
|
||||||
* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) with self-hosted sync server
|
* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) with self-hosted sync server
|
||||||
* there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting)
|
* there's a [3rd party service for hosting synchronisation server](https://trilium.cc/paid-hosting)
|
||||||
* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes to public internet
|
* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes to public internet
|
||||||
@ -65,24 +66,15 @@ To use TriliumNext on your desktop machine (Linux, MacOS, and Windows) you have
|
|||||||
* Download the binary release for your platform from the [latest release page](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run the ```trilium``` executable.
|
* Download the binary release for your platform from the [latest release page](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run the ```trilium``` executable.
|
||||||
* Access TriliumNext via the web interface of a server installation (see below)
|
* Access TriliumNext via the web interface of a server installation (see below)
|
||||||
* Currently only the latest versions of Chrome & Firefox are supported (and tested).
|
* Currently only the latest versions of Chrome & Firefox are supported (and tested).
|
||||||
* (Coming Soon) TriliumNext will also be provided as a Flatpak
|
* TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
|
||||||
|
|
||||||
#### MacOS
|
|
||||||
Currently when running TriliumNext/Notes on MacOS, you may get the following error:
|
|
||||||
> Apple could not verify "TriliumNext Notes" is free of malware and may harm your Mac or compromise your privacy.
|
|
||||||
|
|
||||||
You will need to run the command on your shell to resolve the error (documented [here](https://github.com/TriliumNext/Notes/issues/329#issuecomment-2287164137)):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
xattr -c "/path/to/Trilium Next.app"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Mobile
|
### Mobile
|
||||||
|
|
||||||
To use TriliumNext on a mobile device:
|
To use TriliumNext on a mobile device, you can use a mobile web browser to access the mobile interface of a server installation (see below).
|
||||||
|
|
||||||
* Use a mobile web browser to access the mobile interface of a server installation (see below)
|
If you prefer a native Android app, you can use [TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid). Report bugs and missing features at [their repository](https://github.com/FliegendeWurst/TriliumDroid).
|
||||||
* Use of a mobile app is not yet supported ([see here](https://github.com/TriliumNext/Notes/issues/72)) to track mobile improvements.
|
|
||||||
|
See issue https://github.com/TriliumNext/Notes/issues/72 for more information on mobile app support.
|
||||||
|
|
||||||
### Server
|
### Server
|
||||||
|
|
||||||
@ -105,9 +97,11 @@ npm install
|
|||||||
npm run server:start
|
npm run server:start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For more details, see the [development docs](https://github.com/TriliumNext/Notes/blob/develop/docs/Developer%20Guide/Developer%20Guide/Building%20and%20deployment/Running%20a%20development%20build.md).
|
||||||
|
|
||||||
### Documentation
|
### Documentation
|
||||||
|
|
||||||
Head on over to our [Docs repo](https://github.com/TriliumNext/Docs)
|
See the [documentation guide](https://github.com/TriliumNext/Notes/blob/develop/docs/Developer%20Guide/Developer%20Guide/Documentation.md) for details.
|
||||||
|
|
||||||
## 👏 Shoutouts
|
## 👏 Shoutouts
|
||||||
|
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
cd src/public
|
|
||||||
echo Summary
|
|
||||||
cloc HEAD \
|
|
||||||
--git --md \
|
|
||||||
--include-lang=javascript,typescript
|
|
||||||
|
|
||||||
echo By file
|
|
||||||
cloc HEAD \
|
|
||||||
--git --md \
|
|
||||||
--include-lang=javascript,typescript \
|
|
||||||
--by-file | grep \.js\|
|
|
@ -5,11 +5,6 @@ set -e # Fail on any command error
|
|||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
SERIES=${VERSION:0:4}-latest
|
SERIES=${VERSION:0:4}-latest
|
||||||
|
|
||||||
cat package.json | grep -v electron > server-package.json
|
|
||||||
|
|
||||||
echo "Compiling typescript..."
|
|
||||||
npx tsc
|
|
||||||
|
|
||||||
sudo docker build -t triliumnext/notes:$VERSION --network host -t triliumnext/notes:$SERIES .
|
sudo docker build -t triliumnext/notes:$VERSION --network host -t triliumnext/notes:$SERIES .
|
||||||
|
|
||||||
if [[ $VERSION != *"beta"* ]]; then
|
if [[ $VERSION != *"beta"* ]]; then
|
||||||
|
@ -21,56 +21,53 @@ fi
|
|||||||
echo "Selected Arch: $ARCH"
|
echo "Selected Arch: $ARCH"
|
||||||
|
|
||||||
# Set Node.js version and architecture-specific filename
|
# Set Node.js version and architecture-specific filename
|
||||||
NODE_VERSION=20.15.1
|
NODE_VERSION=22.14.0
|
||||||
NODE_ARCH=$ARCH
|
|
||||||
|
|
||||||
# Debug output
|
BUILD_DIR="./build"
|
||||||
echo "Node arch: $NODE_ARCH"
|
DIST_DIR="./dist"
|
||||||
|
CLEANUP_SCRIPT="./bin/cleanupNodeModules.ts"
|
||||||
|
|
||||||
# Special case for x64 in Node.js downloads
|
|
||||||
if [ "$NODE_ARCH" = "x64" ]; then
|
|
||||||
NODE_FILENAME="x64"
|
|
||||||
elif [ "$NODE_ARCH" = "arm64" ]; then
|
|
||||||
NODE_FILENAME="arm64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Debug output
|
# Trigger the build
|
||||||
echo "Node filename: $NODE_FILENAME"
|
echo "Build start"
|
||||||
|
npm run build:prepare-dist
|
||||||
|
echo "Build finished"
|
||||||
|
|
||||||
PKG_DIR=dist/trilium-linux-${ARCH}-server
|
# pruning of unnecessary files and devDeps in node_modules
|
||||||
echo "Package directory: $PKG_DIR"
|
node --experimental-strip-types $CLEANUP_SCRIPT $BUILD_DIR
|
||||||
|
|
||||||
if [ "$1" != "DONTCOPY" ]
|
NODE_FILENAME=node-v${NODE_VERSION}-linux-${ARCH}
|
||||||
then
|
|
||||||
# Need to modify copy-trilium.sh to accept the target directory
|
|
||||||
./bin/copy-trilium.sh "$PKG_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd dist
|
echo "Downloading Node.js runtime $NODE_FILENAME..."
|
||||||
wget https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${NODE_FILENAME}.tar.xz
|
cd $BUILD_DIR
|
||||||
tar xfJ node-v${NODE_VERSION}-linux-${NODE_FILENAME}.tar.xz
|
wget -qO- https://nodejs.org/dist/v${NODE_VERSION}/${NODE_FILENAME}.tar.xz | tar xfJ -
|
||||||
rm node-v${NODE_VERSION}-linux-${NODE_FILENAME}.tar.xz
|
mv $NODE_FILENAME node
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
mv dist/node-v${NODE_VERSION}-linux-${NODE_FILENAME} $PKG_DIR/node
|
|
||||||
|
|
||||||
rm -r $PKG_DIR/node/lib/node_modules/npm
|
rm -r $BUILD_DIR/node/lib/node_modules/{npm,corepack} \
|
||||||
rm -r $PKG_DIR/node/include/node
|
$BUILD_DIR/node/bin/{npm,npx,corepack} \
|
||||||
|
$BUILD_DIR/node/CHANGELOG.md \
|
||||||
|
$BUILD_DIR/node/include/node \
|
||||||
|
$BUILD_DIR/node_modules/electron* \
|
||||||
|
$BUILD_DIR/electron*.{js,map}
|
||||||
|
|
||||||
rm -r $PKG_DIR/node_modules/electron*
|
printf "#!/bin/sh\n./node/bin/node src/main\n" > $BUILD_DIR/trilium.sh
|
||||||
rm -r $PKG_DIR/electron*.js
|
chmod 755 $BUILD_DIR/trilium.sh
|
||||||
|
|
||||||
printf "#!/bin/sh\n./node/bin/node src/main" > $PKG_DIR/trilium.sh
|
# TriliumNextTODO: is this still required? If yes → move to copy-dist/copy-trilium
|
||||||
chmod 755 $PKG_DIR/trilium.sh
|
cp bin/tpl/anonymize-database.sql $BUILD_DIR/
|
||||||
|
|
||||||
cp bin/tpl/anonymize-database.sql $PKG_DIR/
|
|
||||||
|
|
||||||
cp -r translations $PKG_DIR/
|
|
||||||
cp -r dump-db $PKG_DIR/
|
|
||||||
rm -rf $PKG_DIR/dump-db/node_modules
|
|
||||||
|
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|
||||||
cd dist
|
|
||||||
|
|
||||||
tar cJf trilium-linux-${ARCH}-server-${VERSION}.tar.xz trilium-linux-${ARCH}-server
|
ARCHIVE_NAME="TriliumNextNotes-Server-${VERSION}-linux-${ARCH}"
|
||||||
|
echo "Creating Archive $ARCHIVE_NAME..."
|
||||||
|
|
||||||
|
mkdir $DIST_DIR
|
||||||
|
cp -r "$BUILD_DIR" "$DIST_DIR/$ARCHIVE_NAME"
|
||||||
|
cd $DIST_DIR
|
||||||
|
tar cJf "$ARCHIVE_NAME.tar.xz" "$ARCHIVE_NAME"
|
||||||
|
rm -rf "$ARCHIVE_NAME"
|
||||||
|
|
||||||
|
echo "Server Build Completed!"
|
53
bin/build.sh
@ -1,53 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e # Fail on any command error
|
|
||||||
|
|
||||||
if ! command -v jq &> /dev/null; then
|
|
||||||
echo "Missing command: jq"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v fakeroot &> /dev/null; then
|
|
||||||
echo "Missing command: fakeroot"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v dpkg-deb &> /dev/null; then
|
|
||||||
echo "Missing command: dpkg-deb"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if dpkg-deb 2>&1 | grep BusyBox &> /dev/null; then
|
|
||||||
echo "The dpkg-deb binary provided by BusyBox is not compatible. The Debian tool needs to be used instead."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v wine &> /dev/null; then
|
|
||||||
echo "Missing command: wine"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Deleting existing builds"
|
|
||||||
|
|
||||||
rm -rf dist/*
|
|
||||||
|
|
||||||
SRC_DIR=dist/trilium-src
|
|
||||||
|
|
||||||
bin/copy-trilium.sh $SRC_DIR
|
|
||||||
|
|
||||||
# we'll just copy the same SRC dir to all the builds so we don't have to do npm install in each separately
|
|
||||||
cp -r $SRC_DIR ./dist/trilium-linux-x64-src
|
|
||||||
cp -r $SRC_DIR ./dist/trilium-linux-x64-server
|
|
||||||
cp -r $SRC_DIR ./dist/trilium-windows-x64-src
|
|
||||||
cp -r $SRC_DIR ./dist/trilium-mac-x64-src
|
|
||||||
cp -r $SRC_DIR ./dist/trilium-mac-arm64-src
|
|
||||||
|
|
||||||
bin/build-win-x64.sh DONTCOPY
|
|
||||||
|
|
||||||
bin/build-mac-x64.sh DONTCOPY
|
|
||||||
|
|
||||||
bin/build-mac-arm64.sh DONTCOPY
|
|
||||||
|
|
||||||
bin/build-linux-x64.sh DONTCOPY
|
|
||||||
|
|
||||||
bin/build-server.sh DONTCOPY
|
|
109
bin/cleanupNodeModules.ts
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
import fs from "fs-extra";
|
||||||
|
import path from "path";
|
||||||
|
import type { Dirent } from "fs-extra";
|
||||||
|
import { execSync } from "node:child_process";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example usage with node >= v22:
|
||||||
|
* node --experimental-strip-types bin/cleanupNodeModules.ts /path/to/build/folder [--skip-prune-dev-deps]
|
||||||
|
* Example usage with tsx:
|
||||||
|
* tsx bin/cleanupNodeModules.ts /path/to/build/folder [--skip-prune-dev-deps]
|
||||||
|
*/
|
||||||
|
function main() {
|
||||||
|
|
||||||
|
if (process.argv.length > 4 || process.argv.length < 3) {
|
||||||
|
console.error("Usage: cleanupNodeModules.ts [path-to-build-folder] [--skip-prune-dev-deps]");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const basePath = process.argv[2];
|
||||||
|
const pruneDevDeps = process.argv[3] !== "--skip-prune-dev-deps";
|
||||||
|
|
||||||
|
if (!fs.existsSync(basePath)) {
|
||||||
|
console.error(`Supplied path '${basePath}' does not exist. Aborting.`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Starting pruning of node_modules ${!pruneDevDeps ? '(skipping npm pruning)' : ''} in '${basePath}'...`);
|
||||||
|
cleanupNodeModules(basePath, pruneDevDeps);
|
||||||
|
console.log("Successfully pruned node_modules.");
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanupNodeModules(basePath: string, pruneDevDeps: boolean = true) {
|
||||||
|
|
||||||
|
// This needs to run for the server and Docker build,
|
||||||
|
// but needs to be skipped for electron-forge: its
|
||||||
|
// built-in pruning takes care of it already
|
||||||
|
if (pruneDevDeps) {
|
||||||
|
execSync(`npm ci --omit=dev --prefix ${basePath}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const nodeModulesDirPath = path.join(basePath, "node_modules");
|
||||||
|
const nodeModulesContent = fs.readdirSync(nodeModulesDirPath, { recursive: true, withFileTypes: true });
|
||||||
|
//const libDir = fs.readdirSync(path.join(basePath, "./libraries"), { recursive: true, withFileTypes: true });
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete unnecessary folders
|
||||||
|
*/
|
||||||
|
const filterableDirs = new Set([
|
||||||
|
"demo",
|
||||||
|
"demos",
|
||||||
|
"doc",
|
||||||
|
"docs",
|
||||||
|
"example",
|
||||||
|
"examples",
|
||||||
|
"test",
|
||||||
|
"tests"
|
||||||
|
]);
|
||||||
|
|
||||||
|
nodeModulesContent
|
||||||
|
.filter(el => el.isDirectory() && filterableDirs.has(el.name))
|
||||||
|
.forEach(dir => removeDirent(dir));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete unnecessary files based on file extension
|
||||||
|
* TODO filter out useless (README).md files
|
||||||
|
*/
|
||||||
|
const filterableFileExt = new Set([
|
||||||
|
"ts",
|
||||||
|
"map"
|
||||||
|
]);
|
||||||
|
|
||||||
|
nodeModulesContent
|
||||||
|
// TriliumNextTODO: check if we can improve this naive file ext matching, without introducing any additional dependency
|
||||||
|
.filter(el => el.isFile() && filterableFileExt.has(el.name.split(".").at(-1) || ""))
|
||||||
|
.forEach(dir => removeDirent(dir));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete specific unnecessary folders
|
||||||
|
* TODO: check if we want removeSync to throw an error, if path does not exist anymore -> currently it will silently fail
|
||||||
|
*/
|
||||||
|
const extraFoldersDelete = new Set([
|
||||||
|
path.join(nodeModulesDirPath, ".bin"),
|
||||||
|
path.join(nodeModulesDirPath, "@excalidraw", "excalidraw", "dist", "dev"),
|
||||||
|
path.join(nodeModulesDirPath, "boxicons", "svg"),
|
||||||
|
path.join(nodeModulesDirPath, "boxicons", "node_modules"),
|
||||||
|
path.join(nodeModulesDirPath, "boxicons", "src"),
|
||||||
|
path.join(nodeModulesDirPath, "boxicons", "iconjar"),
|
||||||
|
path.join(nodeModulesDirPath, "@jimp", "plugin-print", "fonts"),
|
||||||
|
path.join(nodeModulesDirPath, "jimp", "dist", "browser") // missing "@" in front of jimp is not a typo here
|
||||||
|
]);
|
||||||
|
|
||||||
|
nodeModulesContent
|
||||||
|
.filter(el => el.isDirectory() && extraFoldersDelete.has(path.join(el.parentPath, el.name)))
|
||||||
|
.forEach(dir => removeDirent(dir))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function removeDirent(el: Dirent) {
|
||||||
|
const elementToDelete = path.join(el.parentPath, el.name);
|
||||||
|
fs.removeSync(elementToDelete);
|
||||||
|
|
||||||
|
if (process.env.VERBOSE) {
|
||||||
|
console.log(`Deleted ${elementToDelete}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
125
bin/copy-dist.ts
@ -1,9 +1,7 @@
|
|||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
const DEST_DIR = "./dist";
|
const DEST_DIR = "./build";
|
||||||
const DEST_DIR_SRC = path.join(DEST_DIR, "src");
|
|
||||||
const DEST_DIR_NODE_MODULES = path.join(DEST_DIR, "node_modules");
|
|
||||||
|
|
||||||
const VERBOSE = process.env.VERBOSE;
|
const VERBOSE = process.env.VERBOSE;
|
||||||
|
|
||||||
@ -13,43 +11,40 @@ function log(...args: any[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function copyNodeModuleFileOrFolder(source: string) {
|
try {
|
||||||
const adjustedSource = source.substring(13);
|
|
||||||
const destination = path.join(DEST_DIR_NODE_MODULES, adjustedSource);
|
|
||||||
|
|
||||||
log(`Copying ${source} to ${destination}`);
|
const assetsToCopy = new Set([
|
||||||
await fs.ensureDir(path.dirname(destination));
|
// copy node_module, to avoid downloading packages a 2nd time during pruning
|
||||||
await fs.copy(source, destination);
|
"./node_modules",
|
||||||
}
|
"./images",
|
||||||
|
"./libraries",
|
||||||
const copy = async () => {
|
"./translations",
|
||||||
for (const srcFile of fs.readdirSync("build")) {
|
"./db",
|
||||||
const destFile = path.join(DEST_DIR, path.basename(srcFile));
|
"./config-sample.ini",
|
||||||
log(`Copying source ${srcFile} -> ${destFile}.`);
|
"./package-lock.json",
|
||||||
fs.copySync(path.join("build", srcFile), destFile, { recursive: true });
|
"./package.json",
|
||||||
}
|
"./LICENSE",
|
||||||
|
"./README.md",
|
||||||
const filesToCopy = [
|
"./forge.config.cjs",
|
||||||
"config-sample.ini",
|
"./bin/tpl/",
|
||||||
"tsconfig.webpack.json",
|
"./bin/cleanupNodeModules.ts",
|
||||||
|
"./bin/electron-forge/desktop.ejs",
|
||||||
|
"./bin/electron-forge/sign-windows.cjs",
|
||||||
|
"./src/views/",
|
||||||
"./src/etapi/etapi.openapi.yaml",
|
"./src/etapi/etapi.openapi.yaml",
|
||||||
"./src/routes/api/openapi.json"
|
"./src/routes/api/openapi.json",
|
||||||
];
|
"./src/public/icon.png",
|
||||||
for (const file of filesToCopy) {
|
"./src/public/manifest.webmanifest",
|
||||||
log(`Copying ${file}`);
|
"./src/public/robots.txt",
|
||||||
await fs.copy(file, path.join(DEST_DIR, file));
|
"./src/public/fonts",
|
||||||
}
|
"./src/public/stylesheets",
|
||||||
|
"./src/public/translations",
|
||||||
|
"./packages/turndown-plugin-gfm/src"
|
||||||
|
]);
|
||||||
|
|
||||||
const dirsToCopy = ["images", "libraries", "translations", "db"];
|
for (const asset of assetsToCopy) {
|
||||||
for (const dir of dirsToCopy) {
|
log(`Copying ${asset}`);
|
||||||
log(`Copying ${dir}`);
|
fs.copySync(asset, path.join(DEST_DIR, asset));
|
||||||
await fs.copy(dir, path.join(DEST_DIR, dir));
|
|
||||||
}
|
|
||||||
|
|
||||||
const srcDirsToCopy = ["./src/public", "./src/views", "./build"];
|
|
||||||
for (const dir of srcDirsToCopy) {
|
|
||||||
log(`Copying ${dir}`);
|
|
||||||
await fs.copy(dir, path.join(DEST_DIR_SRC, path.basename(dir)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,59 +53,13 @@ const copy = async () => {
|
|||||||
const publicDirsToCopy = ["./src/public/app/doc_notes"];
|
const publicDirsToCopy = ["./src/public/app/doc_notes"];
|
||||||
const PUBLIC_DIR = path.join(DEST_DIR, "src", "public", "app-dist");
|
const PUBLIC_DIR = path.join(DEST_DIR, "src", "public", "app-dist");
|
||||||
for (const dir of publicDirsToCopy) {
|
for (const dir of publicDirsToCopy) {
|
||||||
await fs.copy(dir, path.join(PUBLIC_DIR, path.basename(dir)));
|
fs.copySync(dir, path.join(PUBLIC_DIR, path.basename(dir)));
|
||||||
}
|
}
|
||||||
|
|
||||||
const nodeModulesFile = [
|
console.log("Copying complete!")
|
||||||
"node_modules/react/umd/react.production.min.js",
|
|
||||||
"node_modules/react/umd/react.development.js",
|
|
||||||
"node_modules/react-dom/umd/react-dom.production.min.js",
|
|
||||||
"node_modules/react-dom/umd/react-dom.development.js",
|
|
||||||
"node_modules/katex/dist/katex.min.js",
|
|
||||||
"node_modules/katex/dist/contrib/mhchem.min.js",
|
|
||||||
"node_modules/katex/dist/contrib/auto-render.min.js",
|
|
||||||
"node_modules/@highlightjs/cdn-assets/highlight.min.js",
|
|
||||||
"node_modules/@mind-elixir/node-menu/dist/node-menu.umd.cjs"
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const file of nodeModulesFile) {
|
} catch(err) {
|
||||||
await copyNodeModuleFileOrFolder(file);
|
console.error("Error during copy:", err)
|
||||||
|
process.exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
const nodeModulesFolder = [
|
|
||||||
"node_modules/@excalidraw/excalidraw/dist/",
|
|
||||||
"node_modules/katex/dist/",
|
|
||||||
"node_modules/dayjs/",
|
|
||||||
"node_modules/boxicons/css/",
|
|
||||||
"node_modules/boxicons/fonts/",
|
|
||||||
"node_modules/mermaid/dist/",
|
|
||||||
"node_modules/jquery/dist/",
|
|
||||||
"node_modules/jquery-hotkeys/",
|
|
||||||
"node_modules/split.js/dist/",
|
|
||||||
"node_modules/panzoom/dist/",
|
|
||||||
"node_modules/i18next/",
|
|
||||||
"node_modules/i18next-http-backend/",
|
|
||||||
"node_modules/jsplumb/dist/",
|
|
||||||
"node_modules/vanilla-js-wheel-zoom/dist/",
|
|
||||||
"node_modules/mark.js/dist/",
|
|
||||||
"node_modules/normalize.css/",
|
|
||||||
"node_modules/jquery.fancytree/dist/",
|
|
||||||
"node_modules/autocomplete.js/dist/",
|
|
||||||
"node_modules/codemirror/lib/",
|
|
||||||
"node_modules/codemirror/addon/",
|
|
||||||
"node_modules/codemirror/mode/",
|
|
||||||
"node_modules/codemirror/keymap/",
|
|
||||||
"node_modules/mind-elixir/dist/",
|
|
||||||
"node_modules/@highlightjs/cdn-assets/languages",
|
|
||||||
"node_modules/@highlightjs/cdn-assets/styles",
|
|
||||||
"node_modules/leaflet/dist"
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const folder of nodeModulesFolder) {
|
|
||||||
await copyNodeModuleFileOrFolder(folder);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
copy()
|
|
||||||
.then(() => console.log("Copying complete!"))
|
|
||||||
.catch((err) => console.error("Error during copy:", err));
|
|
||||||
|
@ -1,74 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e # Fail on any command error
|
|
||||||
shopt -s globstar
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]] ; then
|
|
||||||
echo "Missing argument of target directory"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if ! [[ $(which npm) ]]; then
|
|
||||||
echo "Missing npm"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Trigger the TypeScript build
|
|
||||||
echo TypeScript build start
|
|
||||||
npx tsc
|
|
||||||
echo TypeScript build finished
|
|
||||||
|
|
||||||
# Copy the TypeScript artifacts
|
|
||||||
DIR="$1"
|
|
||||||
rm -rf "$DIR"
|
|
||||||
mkdir -pv "$DIR"
|
|
||||||
|
|
||||||
echo Webpack start
|
|
||||||
npm run build:webpack
|
|
||||||
echo Webpack finish
|
|
||||||
|
|
||||||
echo "Copying Trilium to build directory $DIR"
|
|
||||||
|
|
||||||
for d in 'images' 'libraries' 'src' 'db'; do
|
|
||||||
cp -r "$d" "$DIR"/
|
|
||||||
done
|
|
||||||
|
|
||||||
for f in 'package.json' 'package-lock.json' 'README.md' 'LICENSE' 'config-sample.ini'; do
|
|
||||||
cp "$f" "$DIR"/
|
|
||||||
done
|
|
||||||
|
|
||||||
# Patch package.json main
|
|
||||||
sed -i 's/.\/dist\/electron-main.js/electron-main.js/g' "$DIR/package.json"
|
|
||||||
|
|
||||||
script_dir=$(realpath $(dirname $0))
|
|
||||||
cp -R "$script_dir/../build/src" "$DIR"
|
|
||||||
cp "$script_dir/../build/electron-main.js" "$DIR"
|
|
||||||
|
|
||||||
# run in subshell (so we return to original dir)
|
|
||||||
(cd $DIR && npm install --omit=dev --legacy-peer-deps)
|
|
||||||
|
|
||||||
if [[ -d "$DIR"/node_modules ]]; then
|
|
||||||
# cleanup of useless files in dependencies
|
|
||||||
for d in 'image-q/demo' \
|
|
||||||
'@excalidraw/excalidraw/dist/excalidraw-assets-dev' '@excalidraw/excalidraw/dist/excalidraw.development.js' '@excalidraw/excalidraw/dist/excalidraw-with-preact.development.js' \
|
|
||||||
'mermaid/dist/mermaid.js' \
|
|
||||||
'boxicons/svg' 'boxicons/node_modules/react'/* \
|
|
||||||
'@jimp/plugin-print/fonts' 'jimp/browser' 'jimp/fonts'; do
|
|
||||||
[[ -e "$DIR"/node_modules/"$d" ]] && rm -r "$DIR"/node_modules/"$d"
|
|
||||||
done
|
|
||||||
|
|
||||||
# delete all tests (there are often large images as test file for jimp etc.)
|
|
||||||
for d in 'test' 'docs' 'demo' 'example'; do
|
|
||||||
find "$DIR"/node_modules -name "$d" -exec rm -rf {} +
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
find $DIR/libraries -name "*.map" -type f -delete
|
|
||||||
find $DIR/node_modules -name "*.map" -type f -delete
|
|
||||||
find $DIR -name "*.ts" -type f -delete
|
|
||||||
|
|
||||||
d="$DIR"/src/public
|
|
||||||
[[ -d "$d"/app-dist ]] || mkdir -pv "$d"/app-dist
|
|
||||||
cp -r "$d"/app/doc_notes "$d"/app-dist/
|
|
||||||
|
|
||||||
rm -rf "$d"/app
|
|
||||||
unset f d DIR
|
|
@ -1,3 +0,0 @@
|
|||||||
SHARE_PROTOCOL=http
|
|
||||||
SHARE_HOST=notes.johnsmith.me
|
|
||||||
ROOT_NOTE_ID=4yYHqKbLovVX
|
|
2
bin/docs/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
output
|
|
||||||
.env
|
|
@ -1,27 +0,0 @@
|
|||||||
/**
|
|
||||||
* Fetch note with given ID from backend
|
|
||||||
*
|
|
||||||
* @param noteId of the given note to be fetched. If false, fetches current note.
|
|
||||||
*/
|
|
||||||
async function fetchNote(noteId = null) {
|
|
||||||
if (!noteId) {
|
|
||||||
noteId = document.body.getAttribute("data-note-id");
|
|
||||||
}
|
|
||||||
|
|
||||||
const resp = await fetch(`api/notes/${noteId}`);
|
|
||||||
|
|
||||||
return await resp.json();
|
|
||||||
}
|
|
||||||
|
|
||||||
document.addEventListener(
|
|
||||||
"DOMContentLoaded",
|
|
||||||
() => {
|
|
||||||
const toggleMenuButton = document.getElementById("toggleMenuButton");
|
|
||||||
const layout = document.getElementById("layout");
|
|
||||||
|
|
||||||
if (toggleMenuButton && layout) {
|
|
||||||
toggleMenuButton.addEventListener("click", () => layout.classList.toggle("showMenu"));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
@ -1,554 +0,0 @@
|
|||||||
/* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */
|
|
||||||
|
|
||||||
.printed-content .ck-widget__selection-handle,
|
|
||||||
.printed-content .ck-widget__type-around {
|
|
||||||
/* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* CKEditor 5 (v41.0.0) content styles.
|
|
||||||
* Generated on Fri, 26 Jan 2024 10:23:49 GMT.
|
|
||||||
* For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html
|
|
||||||
*/
|
|
||||||
|
|
||||||
:root {
|
|
||||||
--ck-color-image-caption-background: hsl(0, 0%, 97%);
|
|
||||||
--ck-color-image-caption-text: hsl(0, 0%, 20%);
|
|
||||||
--ck-color-mention-background: hsla(341, 100%, 30%, 0.1);
|
|
||||||
--ck-color-mention-text: hsl(341, 100%, 30%);
|
|
||||||
--ck-color-selector-caption-background: hsl(0, 0%, 97%);
|
|
||||||
--ck-color-selector-caption-text: hsl(0, 0%, 20%);
|
|
||||||
--ck-highlight-marker-blue: hsl(201, 97%, 72%);
|
|
||||||
--ck-highlight-marker-green: hsl(120, 93%, 68%);
|
|
||||||
--ck-highlight-marker-pink: hsl(345, 96%, 73%);
|
|
||||||
--ck-highlight-marker-yellow: hsl(60, 97%, 73%);
|
|
||||||
--ck-highlight-pen-green: hsl(112, 100%, 27%);
|
|
||||||
--ck-highlight-pen-red: hsl(0, 85%, 49%);
|
|
||||||
--ck-image-style-spacing: 1.5em;
|
|
||||||
--ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2);
|
|
||||||
--ck-todo-list-checkmark-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
|
|
||||||
.ck-content .table .ck-table-resized {
|
|
||||||
table-layout: fixed;
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
|
|
||||||
.ck-content .table table {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */
|
|
||||||
.ck-content .table td,
|
|
||||||
.ck-content .table th {
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-table/theme/table.css */
|
|
||||||
.ck-content .table {
|
|
||||||
margin: 0.9em auto;
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-table/theme/table.css */
|
|
||||||
.ck-content .table table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border: 1px double hsl(0, 0%, 70%);
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-table/theme/table.css */
|
|
||||||
.ck-content .table table td,
|
|
||||||
.ck-content .table table th {
|
|
||||||
min-width: 2em;
|
|
||||||
padding: 0.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: 0.6em;
|
|
||||||
font-size: 0.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: 0.3em 0.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: 0.6em;
|
|
||||||
font-size: 0.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: 0.15em;
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-font/theme/fontsize.css */
|
|
||||||
.ck-content .text-tiny {
|
|
||||||
font-size: 0.7em;
|
|
||||||
}
|
|
||||||
/* @ckeditor/ckeditor5-font/theme/fontsize.css */
|
|
||||||
.ck-content .text-small {
|
|
||||||
font-size: 0.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;
|
|
||||||
}
|
|
||||||
}
|
|
148
bin/docs/assets/v0.63.6/libraries/normalize.min.css
vendored
@ -1,148 +0,0 @@
|
|||||||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
|
||||||
html {
|
|
||||||
line-height: 1.15;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
main {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
h1 {
|
|
||||||
font-size: 2em;
|
|
||||||
margin: 0.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: -0.25em;
|
|
||||||
}
|
|
||||||
sup {
|
|
||||||
top: -0.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: 0.35em 0.75em 0.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 */
|
|
@ -1,165 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: "Lucida Grande", "Lucida Sans Unicode", arial, sans-serif;
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
#layout {
|
|
||||||
max-width: 1200px;
|
|
||||||
margin: 0 auto;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row-reverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
padding: 25px;
|
|
||||||
flex-basis: 0;
|
|
||||||
flex-grow: 1;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu p {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu > p {
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 110%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu ul {
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#main {
|
|
||||||
flex-basis: 0;
|
|
||||||
flex-grow: 3;
|
|
||||||
overflow: auto;
|
|
||||||
padding: 10px 20px 20px 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#parentLink {
|
|
||||||
float: right;
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#title {
|
|
||||||
margin: 0;
|
|
||||||
padding-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
white-space: pre-wrap;
|
|
||||||
word-wrap: anywhere;
|
|
||||||
}
|
|
||||||
|
|
||||||
iframe.pdf-view {
|
|
||||||
width: 100%;
|
|
||||||
height: 800px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toggleMenuButton {
|
|
||||||
display: none;
|
|
||||||
position: fixed;
|
|
||||||
top: 8px;
|
|
||||||
left: 5px;
|
|
||||||
width: 1.4em;
|
|
||||||
border-radius: 5px;
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
font-size: 2rem;
|
|
||||||
z-index: 10;
|
|
||||||
height: auto;
|
|
||||||
color: black;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#childLinks.grid ul {
|
|
||||||
list-style-type: none;
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#childLinks.grid ul li {
|
|
||||||
width: 180px;
|
|
||||||
height: 140px;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#childLinks.grid ul li a {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-radius: 5px;
|
|
||||||
justify-content: center;
|
|
||||||
align-content: center;
|
|
||||||
text-align: center;
|
|
||||||
font-size: large;
|
|
||||||
}
|
|
||||||
|
|
||||||
#childLinks.grid ul li a:hover {
|
|
||||||
background: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
#childLinks.list ul {
|
|
||||||
list-style-type: none;
|
|
||||||
display: inline-flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
padding: 0;
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#childLinks.list ul li {
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noteClippedFrom {
|
|
||||||
padding: 10px 0 10px 0;
|
|
||||||
margin: 20px 0 20px 0;
|
|
||||||
color: #666;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border-left: 0;
|
|
||||||
border-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toggleMenuButton::after {
|
|
||||||
position: relative;
|
|
||||||
top: -2px;
|
|
||||||
left: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 48em) {
|
|
||||||
#layout.showMenu #menu {
|
|
||||||
display: block;
|
|
||||||
margin-top: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toggleMenuButton {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
#layout.showMenu #main {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#title {
|
|
||||||
padding-left: 60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#layout.showMenu #toggleMenuButton::after {
|
|
||||||
content: "«";
|
|
||||||
}
|
|
||||||
|
|
||||||
#toggleMenuButton::after {
|
|
||||||
content: "»";
|
|
||||||
}
|
|
||||||
|
|
||||||
#menu {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="refresh" content="0; url=./{{ROOT_NOTE_ID}}.html" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,43 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
script_dir=$(realpath $(dirname $0))
|
|
||||||
|
|
||||||
cd "$script_dir"
|
|
||||||
|
|
||||||
env_file="$script_dir/.env"
|
|
||||||
|
|
||||||
if [ ! -f "$env_file" ]; then
|
|
||||||
echo "Missing .env file, cannot proceed."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
output_dir="$script_dir/../../docs"
|
|
||||||
mkdir -p "$output_dir"
|
|
||||||
rm -f "$output_dir"/*
|
|
||||||
rm -rf "$output_dir"/{assets,share}
|
|
||||||
|
|
||||||
source "$env_file"
|
|
||||||
|
|
||||||
# Download everything in output/notes.example.com/share/...
|
|
||||||
share_url="$SHARE_PROTOCOL://$SHARE_HOST/share/$ROOT_NOTE_ID"
|
|
||||||
wget -rpEk -e robots=off "$share_url" -P "$output_dir"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e \\nDownloading failed, make sure you are using the real wget package and not the busybox one.
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get rid of the domain in the output folder
|
|
||||||
mv "$output_dir/$SHARE_HOST"/* "$output_dir/"
|
|
||||||
rmdir "$output_dir/$SHARE_HOST"
|
|
||||||
|
|
||||||
# Create home page with redirect
|
|
||||||
index_dest_path="$output_dir/index.html"
|
|
||||||
cp index.template.html "$index_dest_path"
|
|
||||||
sed -i "s/{{ROOT_NOTE_ID}}/$ROOT_NOTE_ID/g" "$index_dest_path"
|
|
||||||
|
|
||||||
# Rewrite links to get rid of the share folder
|
|
||||||
sed -i "s/<link href=\"\\.\\./<link href=\"\\./g" "$output_dir/share"/*.html
|
|
||||||
sed -i "s/<script src=\"\\.\\./<script src=\"\\./g" "$output_dir/share"/*.html
|
|
||||||
sed -i "s/rel=\"shortcut icon\" href=\"\\.\\./rel=\"shortcut icon\" href=\"\\./g" "$output_dir/share"/*.html
|
|
||||||
cp -r "$output_dir/share"/* "$output_dir"
|
|
||||||
rm -r "$output_dir/share"
|
|
@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
LISTEN_ADDRESS=127.0.0.1:8088
|
|
||||||
|
|
||||||
script_dir=$(realpath $(dirname $0))
|
|
||||||
output_dir="$script_dir/../../docs"
|
|
||||||
echo "Preview the documentation at http://$LISTEN_ADDRESS"
|
|
||||||
httpd -fv -p "$LISTEN_ADDRESS" -h "$output_dir"
|
|
14
bin/electron-forge/sign-windows.cjs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
const child_process = require("child_process");
|
||||||
|
|
||||||
|
module.exports = function (filePath) {
|
||||||
|
const { WINDOWS_SIGN_EXECUTABLE } = process.env;
|
||||||
|
|
||||||
|
if (!WINDOWS_SIGN_EXECUTABLE) {
|
||||||
|
console.warn("[Sign] Skip signing due to missing environment variable.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const command = `${WINDOWS_SIGN_EXECUTABLE} --executable "${filePath}"`;
|
||||||
|
console.log(`[Sign] ${command}`);
|
||||||
|
child_process.execSync(command);
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import { fileURLToPath } from "url";
|
import { fileURLToPath } from "url";
|
||||||
import { dirname, join } from "path";
|
import { dirname, join } from "path";
|
||||||
import swaggerJsdoc from 'swagger-jsdoc';
|
import swaggerJsdoc from "swagger-jsdoc";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -12,27 +12,29 @@ import fs from "fs";
|
|||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
definition: {
|
definition: {
|
||||||
openapi: '3.1.1',
|
openapi: "3.1.1",
|
||||||
info: {
|
info: {
|
||||||
title: 'Trilium Notes - Sync server API',
|
title: "Trilium Notes - Sync server API",
|
||||||
version: '0.96.6',
|
version: "0.96.6",
|
||||||
description: "This is the internal sync server API used by Trilium Notes / TriliumNext Notes.\n\n_If you're looking for the officially supported External Trilium API, see [here](https://triliumnext.github.io/Docs/Wiki/etapi.html)._\n\nThis page does not yet list all routes. For a full list, see the [route controller](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/routes.ts).",
|
description:
|
||||||
|
"This is the internal sync server API used by Trilium Notes / TriliumNext Notes.\n\n_If you're looking for the officially supported External Trilium API, see [here](https://triliumnext.github.io/Docs/Wiki/etapi.html)._\n\nThis page does not yet list all routes. For a full list, see the [route controller](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/routes.ts).",
|
||||||
contact: {
|
contact: {
|
||||||
name: "TriliumNext issue tracker",
|
name: "TriliumNext issue tracker",
|
||||||
url: "https://github.com/TriliumNext/Notes/issues",
|
url: "https://github.com/TriliumNext/Notes/issues"
|
||||||
},
|
},
|
||||||
license: {
|
license: {
|
||||||
name: "GNU Free Documentation License 1.3 (or later)",
|
name: "GNU Free Documentation License 1.3 (or later)",
|
||||||
url: "https://www.gnu.org/licenses/fdl-1.3",
|
url: "https://www.gnu.org/licenses/fdl-1.3"
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
apis: [
|
apis: [
|
||||||
// Put individual files here to have them ordered first.
|
// Put individual files here to have them ordered first.
|
||||||
'./src/routes/api/setup.ts',
|
"./src/routes/api/setup.ts",
|
||||||
// all other files
|
// all other files
|
||||||
'./src/routes/api/*.ts', './bin/generate-openapi.js'
|
"./src/routes/api/*.ts",
|
||||||
],
|
"./bin/generate-openapi.js"
|
||||||
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
const openapiSpecification = swaggerJsdoc(options);
|
const openapiSpecification = swaggerJsdoc(options);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
if [[ $# -eq 0 ]] ; then
|
if [[ $# -eq 0 ]] ; then
|
||||||
echo "Missing argument of new version"
|
echo "Missing argument of new version"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -14,7 +14,8 @@ UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label'
|
|||||||
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||||
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||||
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'weekPattern', 'enableWeekNote', 'monthPattern',
|
||||||
|
'quarterPattern', 'yearPattern', 'enableQuarterNote', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||||
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||||
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||||
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||||
@ -31,7 +32,8 @@ UPDATE attributes SET name = 'name' WHERE type = 'relation'
|
|||||||
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||||
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||||
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'weekPattern', 'enableWeekNote', 'monthPattern',
|
||||||
|
'quarterPattern', 'yearPattern', 'enableQuarterNote', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||||
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||||
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||||
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||||
|
@ -16,7 +16,7 @@ chcp 65001
|
|||||||
:: Get Current Trilium executable directory and compute data directory
|
:: Get Current Trilium executable directory and compute data directory
|
||||||
SET DIR=%~dp0
|
SET DIR=%~dp0
|
||||||
set NODE_TLS_REJECT_UNAUTHORIZED=0
|
set NODE_TLS_REJECT_UNAUTHORIZED=0
|
||||||
cd %DIR%
|
cd "%DIR%"
|
||||||
start trilium.exe
|
start trilium.exe
|
||||||
GOTO END
|
GOTO END
|
||||||
|
|
||||||
|
@ -15,8 +15,9 @@ chcp 65001
|
|||||||
|
|
||||||
:: Get Current Trilium executable directory and compute data directory
|
:: Get Current Trilium executable directory and compute data directory
|
||||||
SET DIR=%~dp0
|
SET DIR=%~dp0
|
||||||
|
SET DIR=%DIR:~0,-1%
|
||||||
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
|
SET TRILIUM_DATA_DIR=%DIR%\trilium-data
|
||||||
cd %DIR%
|
cd "%DIR%"
|
||||||
start trilium.exe
|
start trilium.exe
|
||||||
GOTO END
|
GOTO END
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ chcp 65001
|
|||||||
:: Get Current Trilium executable directory and compute data directory
|
:: Get Current Trilium executable directory and compute data directory
|
||||||
SET DIR=%~dp0
|
SET DIR=%~dp0
|
||||||
SET TRILIUM_SAFE_MODE=1
|
SET TRILIUM_SAFE_MODE=1
|
||||||
cd %DIR%
|
cd "%DIR%"
|
||||||
start trilium.exe --disable-gpu
|
start trilium.exe --disable-gpu
|
||||||
GOTO END
|
GOTO END
|
||||||
|
|
||||||
|
@ -8,9 +8,6 @@ noAuthentication=false
|
|||||||
# set to true to disable backups (e.g. because of limited space on server)
|
# set to true to disable backups (e.g. because of limited space on server)
|
||||||
noBackup=false
|
noBackup=false
|
||||||
|
|
||||||
# Disable automatically generating desktop icon
|
|
||||||
# noDesktopIcon=true
|
|
||||||
|
|
||||||
[Network]
|
[Network]
|
||||||
# host setting is relevant only for web deployments - set the host on which the server will listen
|
# host setting is relevant only for web deployments - set the host on which the server will listen
|
||||||
# host=0.0.0.0
|
# host=0.0.0.0
|
||||||
@ -30,13 +27,6 @@ trustedReverseProxy=false
|
|||||||
|
|
||||||
|
|
||||||
[Session]
|
[Session]
|
||||||
# Use this setting to set a custom value for the "Path" Attribute value of the session cookie.
|
|
||||||
# This can be useful, when you have several instances running on the same domain, under different paths (e.g. by using a reverse proxy).
|
|
||||||
# It prevents your instances from overwriting each others' cookies, allowing you to stay logged in multiple instances simultanteously.
|
|
||||||
# E.g. if you have instances running under https://your-domain.com/triliumNext/instanceA and https://your-domain.com/triliumNext/instanceB
|
|
||||||
# you would want to set the cookiePath value to "/triliumNext/instanceA" for your first and "/triliumNext/instanceB" for your second instance
|
|
||||||
cookiePath=/
|
|
||||||
|
|
||||||
# Use this setting to set a custom value for the "Max-Age" Attribute of the session cookie.
|
# Use this setting to set a custom value for the "Max-Age" Attribute of the session cookie.
|
||||||
# This controls how long your session will be valid, before it expires and you need to log in again, when you use the "Remember Me" option.
|
# This controls how long your session will be valid, before it expires and you need to log in again, when you use the "Remember Me" option.
|
||||||
# Value needs to be entered in Seconds.
|
# Value needs to be entered in Seconds.
|
||||||
@ -47,3 +37,16 @@ cookieMaxAge=1814400
|
|||||||
#syncServerHost=
|
#syncServerHost=
|
||||||
#syncServerTimeout=
|
#syncServerTimeout=
|
||||||
#syncServerProxy=
|
#syncServerProxy=
|
||||||
|
|
||||||
|
[MultiFactorAuthentication]
|
||||||
|
# Set the base URL for OAuth/OpenID authentication
|
||||||
|
# This is the URL of the service that will be used to verify the user's identity
|
||||||
|
oauthBaseUrl=
|
||||||
|
|
||||||
|
# Set the client ID for OAuth/OpenID authentication
|
||||||
|
# This is the ID of the client that will be used to verify the user's identity
|
||||||
|
oauthClientId=
|
||||||
|
|
||||||
|
# Set the client secret for OAuth/OpenID authentication
|
||||||
|
# This is the secret of the client that will be used to verify the user's identity
|
||||||
|
oauthClientSecret=
|
||||||
|
42
data-docs/config.ini
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
[General]
|
||||||
|
# Instance name can be used to distinguish between different instances using backend api.getInstanceName()
|
||||||
|
instanceName=
|
||||||
|
|
||||||
|
# set to true to allow using Trilium without authentication (makes sense for server build only, desktop build doesn't need password)
|
||||||
|
noAuthentication=false
|
||||||
|
|
||||||
|
# set to true to disable backups (e.g. because of limited space on server)
|
||||||
|
noBackup=false
|
||||||
|
|
||||||
|
# Disable automatically generating desktop icon
|
||||||
|
# noDesktopIcon=true
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
# host setting is relevant only for web deployments - set the host on which the server will listen
|
||||||
|
# host=0.0.0.0
|
||||||
|
# port setting is relevant only for web deployments, desktop builds run on a fixed port (changeable with TRILIUM_PORT environment variable)
|
||||||
|
port=8080
|
||||||
|
# true for TLS/SSL/HTTPS (secure), false for HTTP (insecure).
|
||||||
|
https=false
|
||||||
|
# path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true
|
||||||
|
certPath=
|
||||||
|
keyPath=
|
||||||
|
# setting to give trust to reverse proxies, a comma-separated list of trusted rev. proxy IPs can be specified (CIDR notation is permitted),
|
||||||
|
# alternatively 'true' will make use of the leftmost IP in X-Forwarded-For, ultimately an integer can be used to tell about the number of hops between
|
||||||
|
# Trilium (which is hop 0) and the first trusted rev. proxy.
|
||||||
|
# once set, expressjs will use the X-Forwarded-For header set by the rev. proxy to determinate the real IPs of clients.
|
||||||
|
# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
|
||||||
|
trustedReverseProxy=false
|
||||||
|
|
||||||
|
|
||||||
|
[Session]
|
||||||
|
# Use this setting to set a custom value for the "Max-Age" Attribute of the session cookie.
|
||||||
|
# This controls how long your session will be valid, before it expires and you need to log in again, when you use the "Remember Me" option.
|
||||||
|
# Value needs to be entered in Seconds.
|
||||||
|
# Default value is 1814400 Seconds, which is 21 Days.
|
||||||
|
cookieMaxAge=1814400
|
||||||
|
|
||||||
|
[Sync]
|
||||||
|
#syncServerHost=
|
||||||
|
#syncServerTimeout=
|
||||||
|
#syncServerProxy=
|
BIN
db/demo.zip
@ -1,11 +1,24 @@
|
|||||||
module.exports = () => {
|
import sql from "../../src/services/sql";
|
||||||
const sql = require("../../src/services/sql");
|
import utils from "../../src/services/utils";
|
||||||
const utils = require("../../src/services/utils");
|
|
||||||
|
|
||||||
|
interface NoteContentsRow {
|
||||||
|
noteId: string;
|
||||||
|
content: string | Buffer;
|
||||||
|
dateModified: string;
|
||||||
|
utcDateModified: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NoteRevisionContents {
|
||||||
|
noteRevisionId: string;
|
||||||
|
content: string | Buffer;
|
||||||
|
utcDateModified: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default () => {
|
||||||
const existingBlobIds = new Set();
|
const existingBlobIds = new Set();
|
||||||
|
|
||||||
for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) {
|
for (const noteId of sql.getColumn<string>(/*sql*/`SELECT noteId FROM note_contents`)) {
|
||||||
const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]);
|
const row = sql.getRow<NoteContentsRow>(/*sql*/`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]);
|
||||||
const blobId = utils.hashedBlobId(row.content);
|
const blobId = utils.hashedBlobId(row.content);
|
||||||
|
|
||||||
if (!existingBlobIds.has(blobId)) {
|
if (!existingBlobIds.has(blobId)) {
|
||||||
@ -27,8 +40,8 @@ module.exports = () => {
|
|||||||
sql.execute("UPDATE notes SET blobId = ? WHERE noteId = ?", [blobId, row.noteId]);
|
sql.execute("UPDATE notes SET blobId = ? WHERE noteId = ?", [blobId, row.noteId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) {
|
for (const noteRevisionId of sql.getColumn(/*sql*/`SELECT noteRevisionId FROM note_revision_contents`)) {
|
||||||
const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]);
|
const row = sql.getRow<NoteRevisionContents>(/*sql*/`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]);
|
||||||
const blobId = utils.hashedBlobId(row.content);
|
const blobId = utils.hashedBlobId(row.content);
|
||||||
|
|
||||||
if (!existingBlobIds.has(blobId)) {
|
if (!existingBlobIds.has(blobId)) {
|
||||||
@ -44,7 +57,7 @@ module.exports = () => {
|
|||||||
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]);
|
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]);
|
||||||
} else {
|
} else {
|
||||||
// duplicates
|
// duplicates
|
||||||
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]);
|
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteRevisionId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.execute("UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?", [blobId, row.noteRevisionId]);
|
sql.execute("UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?", [blobId, row.noteRevisionId]);
|
@ -1,15 +1,15 @@
|
|||||||
module.exports = () => {
|
import becca from "../../src/becca/becca";
|
||||||
const beccaLoader = require("../../src/becca/becca_loader");
|
import becca_loader from "../../src/becca/becca_loader";
|
||||||
const becca = require("../../src/becca/becca");
|
import cls from "../../src/services/cls";
|
||||||
const cls = require("../../src/services/cls");
|
import log from "../../src/services/log";
|
||||||
const log = require("../../src/services/log");
|
import sql from "../../src/services/sql";
|
||||||
const sql = require("../../src/services/sql");
|
|
||||||
|
|
||||||
|
export default () => {
|
||||||
cls.init(() => {
|
cls.init(() => {
|
||||||
// emergency disabling of image compression since it appears to make problems in migration to 0.61
|
// emergency disabling of image compression since it appears to make problems in migration to 0.61
|
||||||
sql.execute(`UPDATE options SET value = 'false' WHERE name = 'compressImages'`);
|
sql.execute(/*sql*/`UPDATE options SET value = 'false' WHERE name = 'compressImages'`);
|
||||||
|
|
||||||
beccaLoader.load();
|
becca_loader.load();
|
||||||
|
|
||||||
for (const note of Object.values(becca.notes)) {
|
for (const note of Object.values(becca.notes)) {
|
||||||
try {
|
try {
|
14
db/migrations/0229__add_oauth_user_data_table.sql
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
-- Add the oauth user data table
|
||||||
|
CREATE TABLE IF NOT EXISTS "user_data"
|
||||||
|
(
|
||||||
|
tmpID INT,
|
||||||
|
username TEXT,
|
||||||
|
email TEXT,
|
||||||
|
userIDEncryptedDataKey TEXT,
|
||||||
|
userIDVerificationHash TEXT,
|
||||||
|
salt TEXT,
|
||||||
|
derivedKey TEXT,
|
||||||
|
isSetup TEXT DEFAULT "false",
|
||||||
|
UNIQUE (tmpID),
|
||||||
|
PRIMARY KEY (tmpID)
|
||||||
|
);
|
@ -1,10 +0,0 @@
|
|||||||
CREATE TABLE IF NOT EXISTS "tasks"
|
|
||||||
(
|
|
||||||
"taskId" TEXT NOT NULL PRIMARY KEY,
|
|
||||||
"parentNoteId" TEXT NOT NULL,
|
|
||||||
"title" TEXT NOT NULL DEFAULT "",
|
|
||||||
"dueDate" INTEGER,
|
|
||||||
"isDone" INTEGER NOT NULL DEFAULT 0,
|
|
||||||
"isDeleted" INTEGER NOT NULL DEFAULT 0,
|
|
||||||
"utcDateModified" TEXT NOT NULL
|
|
||||||
);
|
|
@ -126,20 +126,22 @@ CREATE TABLE IF NOT EXISTS "attachments"
|
|||||||
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
|
utcDateScheduledForErasureSince TEXT DEFAULT NULL,
|
||||||
isDeleted INT not null,
|
isDeleted INT not null,
|
||||||
deleteId TEXT DEFAULT NULL);
|
deleteId TEXT DEFAULT NULL);
|
||||||
|
CREATE TABLE IF NOT EXISTS "user_data"
|
||||||
|
(
|
||||||
|
tmpID INT,
|
||||||
|
username TEXT,
|
||||||
|
email TEXT,
|
||||||
|
userIDEncryptedDataKey TEXT,
|
||||||
|
userIDVerificationHash TEXT,
|
||||||
|
salt TEXT,
|
||||||
|
derivedKey TEXT,
|
||||||
|
isSetup TEXT DEFAULT "false",
|
||||||
|
UNIQUE (tmpID),
|
||||||
|
PRIMARY KEY (tmpID)
|
||||||
|
);
|
||||||
CREATE INDEX IDX_attachments_ownerId_role
|
CREATE INDEX IDX_attachments_ownerId_role
|
||||||
on attachments (ownerId, role);
|
on attachments (ownerId, role);
|
||||||
|
|
||||||
CREATE INDEX IDX_notes_blobId on notes (blobId);
|
CREATE INDEX IDX_notes_blobId on notes (blobId);
|
||||||
CREATE INDEX IDX_revisions_blobId on revisions (blobId);
|
CREATE INDEX IDX_revisions_blobId on revisions (blobId);
|
||||||
CREATE INDEX IDX_attachments_blobId on attachments (blobId);
|
CREATE INDEX IDX_attachments_blobId on attachments (blobId);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS "tasks"
|
|
||||||
(
|
|
||||||
"taskId" TEXT NOT NULL PRIMARY KEY,
|
|
||||||
"parentNoteId" TEXT NOT NULL,
|
|
||||||
"title" TEXT NOT NULL DEFAULT "",
|
|
||||||
"dueDate" INTEGER,
|
|
||||||
"isDone" INTEGER NOT NULL DEFAULT 0,
|
|
||||||
"isDeleted" INTEGER NOT NULL DEFAULT 0,
|
|
||||||
"utcDateModified" TEXT NOT NULL
|
|
||||||
);
|
|
6088
demo/!!!meta.json
Normal file
@ -6,6 +6,6 @@
|
|||||||
</head>
|
</head>
|
||||||
<frameset cols="25%,75%">
|
<frameset cols="25%,75%">
|
||||||
<frame name="navigation" src="navigation.html">
|
<frame name="navigation" src="navigation.html">
|
||||||
<frame name="detail" src="User%20Guide/Features/Export%20as%20PDF.html">
|
<frame name="detail" src="root/Journal.dat">
|
||||||
</frameset>
|
</frameset>
|
||||||
</html>
|
</html>
|
646
demo/navigation.html
Normal file
@ -0,0 +1,646 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li>root
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Journal.dat" target="detail">Journal</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo.html" target="detail">Trilium Demo</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Inbox.html" target="detail">Inbox</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Inbox/Grocery%20list%20for%20today.html"
|
||||||
|
target="detail">Grocery list for today</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Inbox/Book%20to%20read.html" target="detail">Book to read</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Inbox/The%20Last%20Question.html" target="detail">The Last Question</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Inbox/The%20Last%20Question/The%20Last%20Question%20by%20Issac.pdf"
|
||||||
|
target="detail">The Last Question by Issac Asimov.pdf</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Formatting examples
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Formatting%20examples/School%20schedule.html"
|
||||||
|
target="detail">School schedule</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Formatting%20examples/Checkbox%20lists.html"
|
||||||
|
target="detail">Checkbox lists</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Formatting%20examples/Highlighting.html"
|
||||||
|
target="detail">Highlighting</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Formatting%20examples/Code%20blocks.html"
|
||||||
|
target="detail">Code blocks</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Formatting%20examples/Math.html" target="detail">Math</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal.html" target="detail">Journal</a>
|
||||||
|
<ul>
|
||||||
|
<li>2021
|
||||||
|
<ul>
|
||||||
|
<li>11 - November
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/11%20-%20November/28%20-%20Tuesday.html"
|
||||||
|
target="detail">28 - Tuesday</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/11%20-%20November/28%20-%20Tuesday/Phone%20call%20about%20work%20project.html"
|
||||||
|
target="detail">Phone call about work project</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/11%20-%20November/28%20-%20Tuesday/Christmas%20gift%20ideas.html"
|
||||||
|
target="detail">Christmas gift ideas</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/11%20-%20November/28%20-%20Tuesday/Trusted%20timestamping.html"
|
||||||
|
target="detail">Trusted timestamping</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>12 - December
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday.html"
|
||||||
|
target="detail">18 - Monday</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Meeting%20minutes.html"
|
||||||
|
target="detail">Meeting minutes</a>
|
||||||
|
</li>
|
||||||
|
<li>Photos from the trip
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/01.jpeg"
|
||||||
|
target="detail">01.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/02.jpeg"
|
||||||
|
target="detail">02.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/03.jpeg"
|
||||||
|
target="detail">03.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/04.jpeg"
|
||||||
|
target="detail">04.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/05.jpeg"
|
||||||
|
target="detail">05.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/06.jpeg"
|
||||||
|
target="detail">06.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/07.jpeg"
|
||||||
|
target="detail">07.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/08.jpeg"
|
||||||
|
target="detail">08.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/09.jpeg"
|
||||||
|
target="detail">09.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/10.jpeg"
|
||||||
|
target="detail">10.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/11.jpeg"
|
||||||
|
target="detail">11.jpeg</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/Photos%20from%20the%20trip/12.jpeg"
|
||||||
|
target="detail">12.jpeg</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/18%20-%20Monday/TODO%20-%20Send%20invites%20for%20christ.html"
|
||||||
|
target="detail">TODO - Send invites for christmas party</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/19%20-%20Tuesday.html"
|
||||||
|
target="detail">19 - Tuesday</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/19%20-%20Tuesday/DONE%20-%20Dentist%20appointment.html"
|
||||||
|
target="detail">DONE - Dentist appointment</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/20%20-%20Wednesday.html"
|
||||||
|
target="detail">20 - Wednesday</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/21%20-%20Thursday.html"
|
||||||
|
target="detail">21 - Thursday</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/21%20-%20Thursday/Christmas%20shopping.html"
|
||||||
|
target="detail">Christmas shopping</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/21%20-%20Thursday/Office%20party.html"
|
||||||
|
target="detail">Office party</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/22%20-%20Friday.html"
|
||||||
|
target="detail">22 - Friday</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/22%20-%20Friday/Christmas%20shopping.html"
|
||||||
|
target="detail">Christmas shopping</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/22%20-%20Friday/The%20Mechanical.html"
|
||||||
|
target="detail">The Mechanical</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/22%20-%20Friday/The%20Mechanical/Highlights.html"
|
||||||
|
target="detail">Highlights</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/23%20-%20Saturday.html"
|
||||||
|
target="detail">23 - Saturday</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/24%20-%20Sunday%20-%20Christmas%20Eve!.html"
|
||||||
|
target="detail">24 - Sunday - Christmas Eve!</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/24%20-%20Sunday%20-%20Christmas%20Eve!/DONE%20-%20Buy%20a%20board%20game%20for%20Al.html"
|
||||||
|
target="detail">DONE - Buy a board game for Alice</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/24%20-%20Sunday%20-%20Christmas%20Eve!/TODO%20-%20Buy%20milk.html"
|
||||||
|
target="detail">TODO - Buy milk</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/30%20-%20Thursday.html"
|
||||||
|
target="detail">30 - Thursday</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/Epics.html" target="detail">Epics</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/Epics/Christmas.html" target="detail">Christmas</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/Epics/Christmas/Vacation%20days.html"
|
||||||
|
target="detail">Vacation days</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/Epics/Christmas/Christmas%20dinner.html"
|
||||||
|
target="detail">Christmas dinner</a>
|
||||||
|
</li>
|
||||||
|
<li>Shopping
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/11%20-%20November/28%20-%20Tuesday/Christmas%20gift%20ideas.html"
|
||||||
|
target="detail">28. 11. 2017 - Christmas gift ideas</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/Epics/Vacation.html" target="detail">Vacation</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/Day%20template.html" target="detail">Day template</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech.html" target="detail">Tech</a>
|
||||||
|
<ul>
|
||||||
|
<li>Security
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/11%20-%20November/28%20-%20Tuesday/Trusted%20timestamping.html"
|
||||||
|
target="detail">Trusted timestamping</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Linux
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/History.html" target="detail">History</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/Bash%20scripting.html" target="detail">Bash scripting</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/Bash%20scripting/While%20loop.html"
|
||||||
|
target="detail">While loop</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/Bash%20scripting/Bash%20startup%20modes.html"
|
||||||
|
target="detail">Bash startup modes</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/Ubuntu.html" target="detail">Ubuntu</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/Ubuntu/Unity%20shortcuts.html"
|
||||||
|
target="detail">Unity shortcuts</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Programming
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Programming/Java.html" target="detail">Java</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Linux/Bash%20scripting.html" target="detail">Bash scripting</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Node.js
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Node.js/Intro.html" target="detail">Intro</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Node.js/Overview.html" target="detail">Overview</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Node.js/Overview/History.html" target="detail">History</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Node.js/Overview/Platform%20architecture.html"
|
||||||
|
target="detail">Platform architecture</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Node.js/Overview/Industry%20support.html"
|
||||||
|
target="detail">Industry support</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Tech/Node.js/Releases.html" target="detail">Releases</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Note Types
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Canvas.json" target="detail">Canvas</a>
|
||||||
|
</li>
|
||||||
|
<li>Mermaid Diagrams
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Flow.txt"
|
||||||
|
target="detail">Flow</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Flow%20(ELK).txt"
|
||||||
|
target="detail">Flow (ELK)</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Sequence.txt"
|
||||||
|
target="detail">Sequence</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Gantt.txt"
|
||||||
|
target="detail">Gantt</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Class.txt"
|
||||||
|
target="detail">Class</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/State.txt"
|
||||||
|
target="detail">State</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Mind%20Map.txt"
|
||||||
|
target="detail">Mind Map</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Pie.txt"
|
||||||
|
target="detail">Pie</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Journey.txt"
|
||||||
|
target="detail">Journey</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Git.txt"
|
||||||
|
target="detail">Git</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Entity%20Relationship.txt"
|
||||||
|
target="detail">Entity Relationship</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/Bar%20chart.txt"
|
||||||
|
target="detail">Bar chart</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mermaid%20Diagrams/C4.txt" target="detail">C4</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Mind%20Map.json" target="detail">Mind Map</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20.json"
|
||||||
|
target="detail">Geo Map (The Seven Wonders of the World)</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/The%20Colosseum%2C%20Rome%2C%20Italy.html"
|
||||||
|
target="detail">The Colosseum, Rome, Italy</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/The%20Great%20Wall%20of%20China.html"
|
||||||
|
target="detail">The Great Wall of China</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/The%20Taj%20Mahal%2C%20India.html"
|
||||||
|
target="detail">The Taj Mahal, India</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/Christ%20the%20Redeemer%2C%20Brazil.html"
|
||||||
|
target="detail">Christ the Redeemer, Brazil</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/Machu%20Picchu%2C%20Peru.html"
|
||||||
|
target="detail">Machu Picchu, Peru</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/Chich%C3%A9n%20Itz%C3%A1%2C%20Mexico.html"
|
||||||
|
target="detail">Chichén Itzá, Mexico</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Note%20Types/Geo%20Map%20(The%20Seven%20Wonders%20of%20the%20World)/Petra%2C%20Jordan.html"
|
||||||
|
target="detail">Petra, Jordan</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Books
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Books/To%20read.html" target="detail">To read</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Books/Book%20template.html" target="detail">Book template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Books/Book%20template/Highlights.html" target="detail">Highlights</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Reviews
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Journal/2021/12%20-%20December/22%20-%20Friday/The%20Mechanical.html"
|
||||||
|
target="detail">The Mechanical</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Work
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Work/HR.html" target="detail">HR</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Work/Processes.html" target="detail">Processes</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Work/Projects.html" target="detail">Projects</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Steel%20Blue.css" target="detail">Steel Blue</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Steel%20Blue/eb-garamond-v9-latin-reg.woff2"
|
||||||
|
target="detail">eb-garamond-v9-latin-regular.woff2</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Steel%20Blue/raleway-v12-latin-regula.woff2"
|
||||||
|
target="detail">raleway-v12-latin-regular.woff2</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Scripting examples
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager.html"
|
||||||
|
target="detail">Task manager</a>
|
||||||
|
<ul>
|
||||||
|
<li>Locations
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/gym.html"
|
||||||
|
target="detail">gym</a>
|
||||||
|
</li>
|
||||||
|
<li>work
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/work/Send%20invites%20for%20christmas%20par.html"
|
||||||
|
target="detail">Send invites for christmas party</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>tesco
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/tesco/Buy%20milk.html"
|
||||||
|
target="detail">Buy milk</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>mall
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/mall/Buy%20some%20book%20for%20Bob.html"
|
||||||
|
target="detail">Buy some book for Bob</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/mall/Buy%20some%20book%20for%20Bob/Maybe%20Black%20Swan.html"
|
||||||
|
target="detail">Maybe Black Swan?</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Done
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Done/Buy%20a%20board%20game%20for%20Alice.html"
|
||||||
|
target="detail">Buy a board game for Alice</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Done/Dentist%20appointment.html"
|
||||||
|
target="detail">Dentist appointment</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Done/Get%20a%20gym%20membership.html"
|
||||||
|
target="detail">Get a gym membership</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>TODO
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/work/Send%20invites%20for%20christmas%20par.html"
|
||||||
|
target="detail">Send invites for christmas party</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/tesco/Buy%20milk.html"
|
||||||
|
target="detail">Buy milk</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/mall/Buy%20some%20book%20for%20Bob.html"
|
||||||
|
target="detail">Buy some book for Bob</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Implementation
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Implementation/attribute%20changed.js"
|
||||||
|
target="detail">attribute changed</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Implementation/attribute%20changed/reconcileAssignments.js"
|
||||||
|
target="detail">reconcileAssignments</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Implementation/CSS.css"
|
||||||
|
target="detail">CSS</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Implementation/task%20template.html"
|
||||||
|
target="detail">task template</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Implementation/createNewTask.js"
|
||||||
|
target="detail">createNewTask</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Tags
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Tags/health.html"
|
||||||
|
target="detail">health</a>
|
||||||
|
</li>
|
||||||
|
<li>shopping
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/mall/Buy%20some%20book%20for%20Bob.html"
|
||||||
|
target="detail">Buy some book for Bob</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/tesco/Buy%20milk.html"
|
||||||
|
target="detail">Buy milk</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>groceries
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/tesco/Buy%20milk.html"
|
||||||
|
target="detail">Buy milk</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>christmas
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Locations/mall/Buy%20some%20book%20for%20Bob.html"
|
||||||
|
target="detail">Buy some book for Bob</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Task%20manager/Create%20Launcher.js"
|
||||||
|
target="detail">Create Launcher</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Word%20count%20widget.js"
|
||||||
|
target="detail">Word count widget</a>
|
||||||
|
</li>
|
||||||
|
<li>Weight Tracker
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Weight%20Tracker/Implementation.html"
|
||||||
|
target="detail">Implementation</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Weight%20Tracker/Implementation/JS%20code.js"
|
||||||
|
target="detail">JS code</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Weight%20Tracker/Implementation/JS%20code/chart.js"
|
||||||
|
target="detail">chart.js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Statistics
|
||||||
|
<ul>
|
||||||
|
<li>Attribute count
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Attribute%20count/template.html"
|
||||||
|
target="detail">template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Attribute%20count/template/js.js"
|
||||||
|
target="detail">js</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Attribute%20count/template/js/renderPieChart.js"
|
||||||
|
target="detail">renderPieChart</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Attribute%20count/template/js/renderPieChart/chartjs-plugin-datalabe.min.js"
|
||||||
|
target="detail">chartjs-plugin-datalabels.min.js</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Weight%20Tracker/Implementation/JS%20code/chart.js"
|
||||||
|
target="detail">chart.js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Weight%20Tracker/Implementation/JS%20code/chart.js"
|
||||||
|
target="detail">chart.js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Attribute%20count/template/js/renderTable.js"
|
||||||
|
target="detail">renderTable</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Largest notes
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Largest%20notes/template.html"
|
||||||
|
target="detail">template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Largest%20notes/template/js.js"
|
||||||
|
target="detail">js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Most edited notes
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Most%20edited%20notes/template.html"
|
||||||
|
target="detail">template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Most%20edited%20notes/template/js.js"
|
||||||
|
target="detail">js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Most linked notes
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Most%20linked%20notes/template.html"
|
||||||
|
target="detail">template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Most%20linked%20notes/template/js.js"
|
||||||
|
target="detail">js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Note type count
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Note%20type%20count/template.html"
|
||||||
|
target="detail">template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Note%20type%20count/template/js.js"
|
||||||
|
target="detail">js</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Note%20type%20count/template/js/renderTable.js"
|
||||||
|
target="detail">renderTable</a>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Attribute%20count/template/js/renderPieChart.js"
|
||||||
|
target="detail">renderPieChart</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>Most cloned notes
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Most%20cloned%20notes/template.html"
|
||||||
|
target="detail">template</a>
|
||||||
|
<ul>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Statistics/Most%20cloned%20notes/template/js.js"
|
||||||
|
target="detail">js</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="root/Trilium%20Demo/Scripting%20examples/Custom%20request%20handler.js"
|
||||||
|
target="detail">Custom request handler</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
81
demo/root/Trilium Demo.html
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Trilium Demo</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Trilium Demo</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<figure class="image image-style-align-right image_resized" style="width:29.84%;">
|
||||||
|
<img style="aspect-ratio:150/150;" src="Trilium Demo_icon-color.svg" width="150"
|
||||||
|
height="150">
|
||||||
|
</figure>
|
||||||
|
<p><strong>Welcome to TriliumNext Notes!</strong>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p>This is initial "demo" document provided by TriliumNext by default to
|
||||||
|
showcase some of its features and also give you some ideas how you might
|
||||||
|
structure your notes. You can play with it, modify note content and tree
|
||||||
|
structure as you wish.</p>
|
||||||
|
<p>If you need any help, visit TriliumNext website: <a href="https://github.com/TriliumNext">https://github.com/TriliumNext</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<h3>Cleanup</h3>
|
||||||
|
|
||||||
|
<p>Once you're finished with experimenting and want to cleanup these pages,
|
||||||
|
you can simply delete them all.</p>
|
||||||
|
<h3>Formatting</h3>
|
||||||
|
|
||||||
|
<p>TriliumNext supports classic formatting like <em>italic</em>, <strong>bold</strong>, <em><strong>bold and italic</strong></em>.
|
||||||
|
Of course you can add links like this one pointing to <a href="http://www.google.com">google.com</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p>Lists</p>
|
||||||
|
<p><strong>Ordered:</strong>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<ol>
|
||||||
|
<li>First Item</li>
|
||||||
|
<li>Second item
|
||||||
|
<ol>
|
||||||
|
<li>First sub-item
|
||||||
|
<ol>
|
||||||
|
<li>sub-sub-item</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
<p><strong>Unordered:</strong>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Item</li>
|
||||||
|
<li>Another item
|
||||||
|
<ul>
|
||||||
|
<li>Sub-item</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>Block quotes</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Whereof one cannot speak, thereof one must be silent”</p>
|
||||||
|
<p>– Ludwig Wittgenstein</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>Checkout also other examples like <a href="Trilium%20Demo/Formatting%20examples/School%20schedule.html">tables</a>,
|
||||||
|
<a
|
||||||
|
href="Trilium%20Demo/Formatting%20examples/Checkbox%20lists.html">checkbox lists,</a> <a href="Trilium%20Demo/Formatting%20examples/Highlighting.html">highlighting</a>,
|
||||||
|
<a
|
||||||
|
href="Trilium%20Demo/Formatting%20examples/Code%20blocks.html">code blocks</a>and <a href="Trilium%20Demo/Formatting%20examples/Math.html">math examples</a>.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
40
demo/root/Trilium Demo/Books/Book template.html
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Book template</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Book template</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<h2>Main characters</h2>
|
||||||
|
|
||||||
|
<p>… here put main characters …</p>
|
||||||
|
<p> </p>
|
||||||
|
<h2>Plot</h2>
|
||||||
|
|
||||||
|
<p>… describe main plot lines …</p>
|
||||||
|
<p> </p>
|
||||||
|
<h2>Tone</h2>
|
||||||
|
|
||||||
|
<p> </p>
|
||||||
|
<h2>Genre</h2>
|
||||||
|
|
||||||
|
<p>scifi / drama / romance</p>
|
||||||
|
<p> </p>
|
||||||
|
<h2>Similar books</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>…</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
24
demo/root/Trilium Demo/Books/Book template/Highlights.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Highlights</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Highlights</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<blockquote>
|
||||||
|
<p>highlght 1</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>my comment</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>The Mechanical</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>The Mechanical</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>This is a clone of a note. Go to its <a href="../../Journal/2021/12%20-%20December/22%20-%20Friday/The%20Mechanical.html">primary location</a>.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
31
demo/root/Trilium Demo/Books/To read.html
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>To read</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>To read</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Checkout Kindle daily deals: <a href="https://www.amazon.com/gp/feature.html?docId=1000677541">https://www.amazon.com/gp/feature.html?docId=1000677541</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Cixin Liu - <a href="https://www.amazon.com/Dark-Forest-Remembrance-Earths-Past/dp/0765386690/ref=pd_bxgy_14_img_2?_encoding=UTF8&pd_rd_i=0765386690&pd_rd_r=AB0J179TM9NTEAMHE240&pd_rd_w=FAhxX&pd_rd_wg=pLGK7&psc=1&refRID=AB0J179TM9NTEAMHE240">The Dark Forest</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li>Ann Leckie - <a href="https://www.amazon.com/Ancillary-Sword-Imperial-Radch-Leckie/dp/0316246654/ref=pd_sim_14_1?_encoding=UTF8&pd_rd_i=0316246654&pd_rd_r=D7KDTGZFP7YM1YSYVY4G&pd_rd_w=jkn28&pd_rd_wg=JVhtw&psc=1&refRID=D7KDTGZFP7YM1YSYVY4G">Ancillary Sword</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,47 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Checkbox lists</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Checkbox lists</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Create easy TODO-lists with checkboxes:</p>
|
||||||
|
<ul class="todo-list">
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description">buy milk </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description">do the laundry </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description">watch TV </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description">eat ice cream </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
33
demo/root/Trilium Demo/Formatting examples/Code blocks.html
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Code blocks</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Code blocks</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Code blocks are useful to add short snippets of code blocks inside text
|
||||||
|
notes. Depending on your preference, it's possible to enable or disable
|
||||||
|
word wrapping for these code blocks.</p>
|
||||||
|
<p>We added syntax highlighting to code blocks as well. When a code block
|
||||||
|
is first created it will try to automatically determine the programming
|
||||||
|
language, should that fail it is possible to manually adjust it. The color
|
||||||
|
scheme for the syntax highlighting is adjustable in settings. </p><pre><code class="language-application-javascript-env-frontend">function helloWorld() {
|
||||||
|
alert("Hello world");
|
||||||
|
}</code></pre>
|
||||||
|
|
||||||
|
<p>For larger pieces of code it is better to use a code note, which uses
|
||||||
|
a fully-fledged code editor (CodeMirror). For an example of a code note,
|
||||||
|
see <a class="reference-link" href="../Scripting%20examples/Custom%20request%20handler.js">Custom request handler</a>.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
35
demo/root/Trilium Demo/Formatting examples/Highlighting.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Highlighting</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Highlighting</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p><span class="text-big">Space Shuttle Discovery</span> (Orbiter Vehicle
|
||||||
|
Designation: <code>OV-103</code>) is one of the orbiters from NASA's Space
|
||||||
|
Shuttle program and the third of five fully operational orbiters to be
|
||||||
|
built. Its first mission, STS-41-D, flew from August 30 to September 5,
|
||||||
|
1984. Over 27 years of service it launched and landed <span style="background-color:hsl(60,75%,60%);">39 times</span>,
|
||||||
|
gathering more spaceflights than any other spacecraft to date. The shuttle
|
||||||
|
has three main components: the Space Shuttle orbiter, a central fuel tank,
|
||||||
|
and two rocket boosters. Nearly <span style="background-color:hsl(120,75%,60%);">25,000 heat resistant tiles</span> cover
|
||||||
|
the orbiter to protect it from high temperatures on re-entry.</p>
|
||||||
|
<p>Discovery became the third operational orbiter to enter service, preceded
|
||||||
|
by Columbia and Challenger. <span style="color:hsl(270,75%,60%);">It embarked on its last mission, STS-133, on February 24, 2011</span> and
|
||||||
|
touched down for the final time at Kennedy Space Center on March 9, having
|
||||||
|
spent a cumulative total of almost a full year in space. Discovery performed
|
||||||
|
both research and International Space Station (ISS) assembly missions,
|
||||||
|
and also carried the Hubble Space Telescope into orbit.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
27
demo/root/Trilium Demo/Formatting examples/Math.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Math</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Math</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p><span class="math-tex">\(% \f is defined as #1f(#2) using the macro \f\relax{x} = \int_{-\infty}^\infty \f\hat\xi\,e^{2 \pi i \xi x} \,d\xi\)</span>Some
|
||||||
|
math examples:</p><span class="math-tex">\[\displaystyle \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\cdots} } } }\]</span>
|
||||||
|
|
||||||
|
<p>Another:</p><span class="math-tex">\[\displaystyle \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)\]</span>
|
||||||
|
|
||||||
|
<p>Inline math is also possible: <span class="math-tex">\(c^2 = a^2 + b^2\)</span> </p>
|
||||||
|
<p> </p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,69 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>School schedule</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>School schedule</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<figure class="table">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th> </th>
|
||||||
|
<th>Monday</th>
|
||||||
|
<th>Tuesday</th>
|
||||||
|
<th>Wednesday</th>
|
||||||
|
<th>Thursday</th>
|
||||||
|
<th>Friday</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th>9:00-10:30</th>
|
||||||
|
<td>P.E.</td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Math</td>
|
||||||
|
<td>Computer Science</td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>11:00-12:30</th>
|
||||||
|
<td>History</td>
|
||||||
|
<td>English</td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Physics</td>
|
||||||
|
<td>Math</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>13:00-14:30</th>
|
||||||
|
<td> </td>
|
||||||
|
<td>Computer Science</td>
|
||||||
|
<td>Chemistry</td>
|
||||||
|
<td>Physics Lab</td>
|
||||||
|
<td>Geography</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>15:00-16:30</th>
|
||||||
|
<td>Computer Science</td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Latin</td>
|
||||||
|
<td> </td>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<figcaption>School schedule</figcaption>
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
25
demo/root/Trilium Demo/Inbox.html
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Inbox</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Inbox</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<div>
|
||||||
|
<div>
|
||||||
|
<p>This is a place I use to put notes waiting for better categorization</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
22
demo/root/Trilium Demo/Inbox/Book to read.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Book to read</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Book to read</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>How to be a stoic from Massimo Pigliuci:</p>
|
||||||
|
<p><a href="https://www.amazon.com/gp/product/B01K3WN1BY?pf_rd_m=A2R2RITDJNW1Q6&storeType=ebooks&pageType=STOREFRONT&pf_rd_p=8e2a96d9-c848-435b-92bd-0856850ad544&pf_rd_r=4J6CT15BS4X8062XNGDF&pf_rd_s=merchandised-search-5&pf_rd_t=40901&ref_=dbs_f_ebk_rwt_scns_mwl_ms5_kmw_8e2a96d9-c848-435b-92bd-0856850ad544_2&pf_rd_i=154606011">https://www.amazon.com/gp/product/B01K3WN1BY?pf_rd_m=A2R2RITDJNW1Q6&storeType=ebooks&pageType=STOREFRONT&pf_rd_p=8e2a96d9-c848-435b-92bd-0856850ad544&pf_rd_r=4J6CT15BS4X8062XNGDF&pf_rd_s=merchandised-search-5&pf_rd_t=40901&ref_=dbs_f_ebk_rwt_scns_mwl_ms5_kmw_8e2a96d9-c848-435b-92bd-0856850ad544_2&pf_rd_i=154606011</a> </p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
25
demo/root/Trilium Demo/Inbox/Grocery list for today.html
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Grocery list for today</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Grocery list for today</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<ul>
|
||||||
|
<li>cucumber</li>
|
||||||
|
<li>cheese</li>
|
||||||
|
<li>beer</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
32
demo/root/Trilium Demo/Inbox/The Last Question.html
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>The Last Question</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>The Last Question</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>"<strong>The Last Question</strong>" is a <a href="https://en.wikipedia.org/wiki/Science_fiction">science fiction</a>
|
||||||
|
<a
|
||||||
|
href="https://en.wikipedia.org/wiki/Short_story">short story</a>by American writer <a href="https://en.wikipedia.org/wiki/Isaac_Asimov">Isaac Asimov</a>.
|
||||||
|
It first appeared in the November 1956 issue of <a href="https://en.wikipedia.org/wiki/Science_Fiction_Quarterly"><em>Science Fiction Quarterly</em></a>.</p>
|
||||||
|
<section
|
||||||
|
class="include-note" data-note-id="ZWCYra81yOFO" data-box-size="medium"> </section>
|
||||||
|
<p>This page demonstrates two things:</p>
|
||||||
|
<ul>
|
||||||
|
<li>possibility to <a href="#root/_hidden/_help/_help_KSZ04uQ2D1St/_help_iPIMuisry3hd/_help_nBAXQFj20hS1">include one note into another</a>
|
||||||
|
</li>
|
||||||
|
<li>PDF preview - you can read PDFs directly in Trilium!</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
23
demo/root/Trilium Demo/Journal.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Journal</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Journal</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>You can read some explanation on how this journal works here: <a href="https://github.com/zadam/trilium/wiki/Day-notes">https://github.com/zadam/trilium/wiki/Day-notes</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,29 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>28 - Tuesday</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>28 - Tuesday</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>TODO:</p>
|
||||||
|
<ul class="todo-list">
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,28 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Christmas gift ideas</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Christmas gift ideas</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<ul>
|
||||||
|
<li>XBox</li>
|
||||||
|
<li>Candles</li>
|
||||||
|
<li><a href="https://www.amazon.ca/Anker-SoundCore-Portable-Bluetooth-Resistance/dp/B01MTB55WH?pd_rd_wg=honW8&pd_rd_r=c9bb7c0f-0051-4da7-991f-4ca711a1b3e3&pd_rd_w=ciUpR&ref_=pd_gw_simh&pf_rd_r=K10XKX0NGPDNTYYP4BS4&pf_rd_p=5f1b460b-78c1-580e-929e-2878fe4859e8">Portable speakers</a>
|
||||||
|
|
||||||
|
</li>
|
||||||
|
<li>...?</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Phone call about work project</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Phone call about work project</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Bla bla bla ...</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,33 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Trusted timestamping</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Trusted timestamping</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Wiki: <a href="https://en.wikipedia.org/wiki/Trusted_timestamping">https://en.wikipedia.org/wiki/Trusted_timestamping</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p>Bozho: <a href="https://techblog.bozho.net/using-trusted-timestamping-java/">https://techblog.bozho.net/using-trusted-timestamping-java/</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p><strong>Trusted timestamping</strong> is the process of <a href="https://en.wikipedia.org/wiki/Computer_security">securely</a> keeping
|
||||||
|
track of the creation and modification time of a document. Security here
|
||||||
|
means that no one—not even the owner of the document—should be able to
|
||||||
|
change it once it has been recorded provided that the timestamper's integrity
|
||||||
|
is never compromised.</p>
|
||||||
|
<p>The administrative aspect involves setting up a publicly available, trusted
|
||||||
|
timestamp management infrastructure to collect, process and renew timestamps.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,27 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>18 - Monday</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>18 - Monday</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Miscellaneous notes done on monday ...</p>
|
||||||
|
<p> </p>
|
||||||
|
<p>Interesting video: <a href="https://www.youtube.com/watch?v=_eSAF_qT_FY&feature=youtu.be">https://www.youtube.com/watch?v=_eSAF_qT_FY&feature=youtu.be</a>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p> </p>
|
||||||
|
<p> </p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Meeting minutes</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Meeting minutes</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>bla bla bla...</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 43 KiB |
@ -0,0 +1,19 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Send invites for christmas party</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Send invites for christmas party</h1>
|
||||||
|
|
||||||
|
<div class="ck-content"></div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,29 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>19 - Tuesday</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>19 - Tuesday</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>TODO:</p>
|
||||||
|
<ul class="todo-list">
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,19 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Dentist appointment</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Dentist appointment</h1>
|
||||||
|
|
||||||
|
<div class="ck-content"></div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,29 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>20 - Wednesday</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>20 - Wednesday</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>TODO:</p>
|
||||||
|
<ul class="todo-list">
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,29 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>21 - Thursday</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>21 - Thursday</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>TODO:</p>
|
||||||
|
<ul class="todo-list">
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Christmas shopping</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Christmas shopping</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>Bought a book!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Office party</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Office party</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>That was fun!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,29 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>22 - Friday</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>22 - Friday</h1>
|
||||||
|
|
||||||
|
<div class="ck-content">
|
||||||
|
<p>TODO:</p>
|
||||||
|
<ul class="todo-list">
|
||||||
|
<li>
|
||||||
|
<label class="todo-list__label">
|
||||||
|
<input type="checkbox" disabled="disabled"><span class="todo-list__label__description"> </span>
|
||||||
|
|
||||||
|
</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -0,0 +1,19 @@
|
|||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="../../../../../../style.css">
|
||||||
|
<base target="_parent">
|
||||||
|
<title data-trilium-title>Christmas shopping</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="content">
|
||||||
|
<h1 data-trilium-h1>Christmas shopping</h1>
|
||||||
|
|
||||||
|
<div class="ck-content"></div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|