mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	Compare commits
	
		
			27 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					25b49e1ca2 | ||
| 
						 | 
					c7f19e04fa | ||
| 
						 | 
					a2711cfb7b | ||
| 
						 | 
					f984b361ee | ||
| 
						 | 
					ac1e1ebe43 | ||
| 
						 | 
					499bfaea9b | ||
| 
						 | 
					fa4772b91e | ||
| 
						 | 
					fa7b190c6b | ||
| 
						 | 
					84feec2e7e | ||
| 
						 | 
					3035473751 | ||
| 
						 | 
					399458b52f | ||
| 
						 | 
					becac5fbad | ||
| 
						 | 
					1e26b31090 | ||
| 
						 | 
					0ebd03869d | ||
| 
						 | 
					a4a713f102 | ||
| 
						 | 
					83d5d6bbd8 | ||
| 
						 | 
					90f4c6b0d1 | ||
| 
						 | 
					bfb8aa6481 | ||
| 
						 | 
					2bb4cccd82 | ||
| 
						 | 
					6fad5f2b51 | ||
| 
						 | 
					36357bdf86 | ||
| 
						 | 
					80eaf10656 | ||
| 
						 | 
					f46ce0417d | ||
| 
						 | 
					6f1e6402f0 | ||
| 
						 | 
					bdfa13a8a0 | ||
| 
						 | 
					d5622dfbf7 | ||
| 
						 | 
					8199073342 | 
@@ -1,7 +0,0 @@
 | 
				
			|||||||
node_modules
 | 
					 | 
				
			||||||
dist
 | 
					 | 
				
			||||||
bin
 | 
					 | 
				
			||||||
docs
 | 
					 | 
				
			||||||
libraries
 | 
					 | 
				
			||||||
coverage
 | 
					 | 
				
			||||||
play
 | 
					 | 
				
			||||||
							
								
								
									
										212
									
								
								.eslintrc.js
									
									
									
									
									
								
							
							
						
						
									
										212
									
								
								.eslintrc.js
									
									
									
									
									
								
							@@ -1,212 +0,0 @@
 | 
				
			|||||||
module.exports = {
 | 
					 | 
				
			||||||
    env: {
 | 
					 | 
				
			||||||
        browser: true,
 | 
					 | 
				
			||||||
        commonjs: true,
 | 
					 | 
				
			||||||
        es2021: true,
 | 
					 | 
				
			||||||
        node: true,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    // plugins: ['prettier'], // to be activated
 | 
					 | 
				
			||||||
    extends: ['eslint:recommended', 'airbnb-base', 'plugin:jsonc/recommended-with-jsonc', 'prettier'],
 | 
					 | 
				
			||||||
    overrides: [
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            files: ['*.json', '*.json5', '*.jsonc'],
 | 
					 | 
				
			||||||
            parser: 'jsonc-eslint-parser',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            files: ['package.json'],
 | 
					 | 
				
			||||||
            parser: 'jsonc-eslint-parser',
 | 
					 | 
				
			||||||
            rules: {
 | 
					 | 
				
			||||||
                'jsonc/sort-keys': [
 | 
					 | 
				
			||||||
                    'off',
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        pathPattern: '^$',
 | 
					 | 
				
			||||||
                        order: [
 | 
					 | 
				
			||||||
                            'name',
 | 
					 | 
				
			||||||
                            'version',
 | 
					 | 
				
			||||||
                            'private',
 | 
					 | 
				
			||||||
                            'packageManager',
 | 
					 | 
				
			||||||
                            'description',
 | 
					 | 
				
			||||||
                            'type',
 | 
					 | 
				
			||||||
                            'keywords',
 | 
					 | 
				
			||||||
                            'homepage',
 | 
					 | 
				
			||||||
                            'bugs',
 | 
					 | 
				
			||||||
                            'license',
 | 
					 | 
				
			||||||
                            'author',
 | 
					 | 
				
			||||||
                            'contributors',
 | 
					 | 
				
			||||||
                            'funding',
 | 
					 | 
				
			||||||
                            'files',
 | 
					 | 
				
			||||||
                            'main',
 | 
					 | 
				
			||||||
                            'module',
 | 
					 | 
				
			||||||
                            'exports',
 | 
					 | 
				
			||||||
                            'unpkg',
 | 
					 | 
				
			||||||
                            'jsdelivr',
 | 
					 | 
				
			||||||
                            'browser',
 | 
					 | 
				
			||||||
                            'bin',
 | 
					 | 
				
			||||||
                            'man',
 | 
					 | 
				
			||||||
                            'directories',
 | 
					 | 
				
			||||||
                            'repository',
 | 
					 | 
				
			||||||
                            'publishConfig',
 | 
					 | 
				
			||||||
                            'scripts',
 | 
					 | 
				
			||||||
                            'peerDependencies',
 | 
					 | 
				
			||||||
                            'peerDependenciesMeta',
 | 
					 | 
				
			||||||
                            'optionalDependencies',
 | 
					 | 
				
			||||||
                            'dependencies',
 | 
					 | 
				
			||||||
                            'devDependencies',
 | 
					 | 
				
			||||||
                            'engines',
 | 
					 | 
				
			||||||
                            'config',
 | 
					 | 
				
			||||||
                            'overrides',
 | 
					 | 
				
			||||||
                            'pnpm',
 | 
					 | 
				
			||||||
                            'husky',
 | 
					 | 
				
			||||||
                            'lint-staged',
 | 
					 | 
				
			||||||
                            'eslintConfig',
 | 
					 | 
				
			||||||
                        ],
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        pathPattern: '^(?:dev|peer|optional|bundled)?[Dd]ependencies$',
 | 
					 | 
				
			||||||
                        order: { type: 'asc' },
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    globals: {
 | 
					 | 
				
			||||||
        $: true,
 | 
					 | 
				
			||||||
        jQuery: true,
 | 
					 | 
				
			||||||
        glob: true,
 | 
					 | 
				
			||||||
        log: true,
 | 
					 | 
				
			||||||
        EditorWatchdog: true,
 | 
					 | 
				
			||||||
        React: true,
 | 
					 | 
				
			||||||
        appState: true,
 | 
					 | 
				
			||||||
        ExcalidrawLib: true,
 | 
					 | 
				
			||||||
        elements: true,
 | 
					 | 
				
			||||||
        files: true,
 | 
					 | 
				
			||||||
        ReactDOM: true,
 | 
					 | 
				
			||||||
        // src\public\app\widgets\type_widgets\relation_map.js
 | 
					 | 
				
			||||||
        jsPlumb: true,
 | 
					 | 
				
			||||||
        panzoom: true,
 | 
					 | 
				
			||||||
        logError: true,
 | 
					 | 
				
			||||||
        // src\public\app\widgets\type_widgets\image.js
 | 
					 | 
				
			||||||
        WZoom: true,
 | 
					 | 
				
			||||||
        // \src\public\app\widgets\type_widgets\read_only_text.js
 | 
					 | 
				
			||||||
        renderMathInElement: true,
 | 
					 | 
				
			||||||
        // \src\public\app\widgets\type_widgets\editable_text.js
 | 
					 | 
				
			||||||
        BalloonEditor: true,
 | 
					 | 
				
			||||||
        FancytreeNode: true,
 | 
					 | 
				
			||||||
        CKEditorInspector: true,
 | 
					 | 
				
			||||||
        // \src\public\app\widgets\type_widgets\editable_code.js
 | 
					 | 
				
			||||||
        CodeMirror: true,
 | 
					 | 
				
			||||||
        // \src\public\app\services\resizer.js
 | 
					 | 
				
			||||||
        Split: true,
 | 
					 | 
				
			||||||
        // \src\public\app\services\content_renderer.js
 | 
					 | 
				
			||||||
        mermaid: true,
 | 
					 | 
				
			||||||
        // src\public\app\services\frontend_script_api.js
 | 
					 | 
				
			||||||
        dayjs: true,
 | 
					 | 
				
			||||||
        // \src\public\app\widgets\note_map.js
 | 
					 | 
				
			||||||
        ForceGraph: true,
 | 
					 | 
				
			||||||
        // \src\public\app\setup.js
 | 
					 | 
				
			||||||
        ko: true,
 | 
					 | 
				
			||||||
        syncInProgress: true,
 | 
					 | 
				
			||||||
        // src\public\app\services\utils.js
 | 
					 | 
				
			||||||
        logInfo: true,
 | 
					 | 
				
			||||||
        __non_webpack_require__: true,
 | 
					 | 
				
			||||||
        describe: true,
 | 
					 | 
				
			||||||
        it: true,
 | 
					 | 
				
			||||||
        expect: true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    parserOptions: {
 | 
					 | 
				
			||||||
        ecmaVersion: 'latest',
 | 
					 | 
				
			||||||
        sourceType: 'module',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    rules: {
 | 
					 | 
				
			||||||
        // eslint:recommended
 | 
					 | 
				
			||||||
        'no-unused-vars': 'off',
 | 
					 | 
				
			||||||
        'linebreak-style': 'off',
 | 
					 | 
				
			||||||
        'no-useless-escape': 'off',
 | 
					 | 
				
			||||||
        'no-empty': 'off',
 | 
					 | 
				
			||||||
        'no-constant-condition': 'off',
 | 
					 | 
				
			||||||
        'getter-return': 'off',
 | 
					 | 
				
			||||||
        'no-cond-assign': 'off',
 | 
					 | 
				
			||||||
        'no-async-promise-executor': 'off',
 | 
					 | 
				
			||||||
        'no-extra-semi': 'off',
 | 
					 | 
				
			||||||
        'no-inner-declarations': 'off',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // prettier
 | 
					 | 
				
			||||||
        'prettier/prettier': ['off', { endOfLine: 'auto' }],
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // airbnb-base
 | 
					 | 
				
			||||||
        'no-console': 'off',
 | 
					 | 
				
			||||||
        'no-plusplus': 'off',
 | 
					 | 
				
			||||||
        'no-param-reassign': 'off',
 | 
					 | 
				
			||||||
        'global-require': 'off',
 | 
					 | 
				
			||||||
        'no-use-before-define': 'off',
 | 
					 | 
				
			||||||
        'no-await-in-loop': 'off',
 | 
					 | 
				
			||||||
        radix: 'off',
 | 
					 | 
				
			||||||
        'import/order': 'off',
 | 
					 | 
				
			||||||
        'import/no-extraneous-dependencies': 'off',
 | 
					 | 
				
			||||||
        'prefer-destructuring': 'off',
 | 
					 | 
				
			||||||
        'no-shadow': 'off',
 | 
					 | 
				
			||||||
        'no-new': 'off',
 | 
					 | 
				
			||||||
        'no-restricted-syntax': 'off',
 | 
					 | 
				
			||||||
        strict: 'off',
 | 
					 | 
				
			||||||
        'class-methods-use-this': 'off',
 | 
					 | 
				
			||||||
        'no-else-return': 'off',
 | 
					 | 
				
			||||||
        'import/no-dynamic-require': 'off',
 | 
					 | 
				
			||||||
        'no-underscore-dangle': 'off',
 | 
					 | 
				
			||||||
        'prefer-template': 'off',
 | 
					 | 
				
			||||||
        'consistent-return': 'off',
 | 
					 | 
				
			||||||
        'no-continue': 'off',
 | 
					 | 
				
			||||||
        'object-shorthand': 'off',
 | 
					 | 
				
			||||||
        'one-var': 'off',
 | 
					 | 
				
			||||||
        'prefer-const': 'off',
 | 
					 | 
				
			||||||
        'spaced-comment': 'off',
 | 
					 | 
				
			||||||
        'no-loop-func': 'off',
 | 
					 | 
				
			||||||
        'arrow-body-style': 'off',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        'guard-for-in': 'off',
 | 
					 | 
				
			||||||
        'no-return-assign': 'off',
 | 
					 | 
				
			||||||
        'dot-notation': 'off',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        'func-names': 'off',
 | 
					 | 
				
			||||||
        'import/no-useless-path-segments': 'off',
 | 
					 | 
				
			||||||
        'default-param-last': 'off',
 | 
					 | 
				
			||||||
        'prefer-arrow-callback': 'off',
 | 
					 | 
				
			||||||
        'no-unneeded-ternary': 'off',
 | 
					 | 
				
			||||||
        'no-return-await': 'off',
 | 
					 | 
				
			||||||
        'import/extensions': 'off',
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        'no-var': 'off',
 | 
					 | 
				
			||||||
        'import/newline-after-import': 'off',
 | 
					 | 
				
			||||||
        'no-restricted-globals': 'off',
 | 
					 | 
				
			||||||
        'operator-assignment': 'off',
 | 
					 | 
				
			||||||
        'no-eval': 'off',
 | 
					 | 
				
			||||||
        'max-classes-per-file': 'off',
 | 
					 | 
				
			||||||
        'vars-on-top': 'off',
 | 
					 | 
				
			||||||
        'no-bitwise': 'off',
 | 
					 | 
				
			||||||
        'no-lonely-if': 'off',
 | 
					 | 
				
			||||||
        'no-multi-assign': 'off',
 | 
					 | 
				
			||||||
        'no-promise-executor-return': 'off',
 | 
					 | 
				
			||||||
        'no-empty-function': 'off',
 | 
					 | 
				
			||||||
        'import/no-unresolved': 'off',
 | 
					 | 
				
			||||||
        camelcase: 'off',
 | 
					 | 
				
			||||||
        eqeqeq: 'off',
 | 
					 | 
				
			||||||
        'lines-between-class-members': 'off',
 | 
					 | 
				
			||||||
        'import/no-cycle': 'off',
 | 
					 | 
				
			||||||
        'new-cap': 'off',
 | 
					 | 
				
			||||||
        'prefer-object-spread': 'off',
 | 
					 | 
				
			||||||
        'no-new-func': 'off',
 | 
					 | 
				
			||||||
        'no-unused-expressions': 'off',
 | 
					 | 
				
			||||||
        'lines-around-directive': 'off',
 | 
					 | 
				
			||||||
        'prefer-exponentiation-operator': 'off',
 | 
					 | 
				
			||||||
        'no-restricted-properties': 'off',
 | 
					 | 
				
			||||||
        'prefer-rest-params': 'off',
 | 
					 | 
				
			||||||
        'no-unreachable-loop': 'off',
 | 
					 | 
				
			||||||
        'no-alert': 'off',
 | 
					 | 
				
			||||||
        'no-useless-return': 'off',
 | 
					 | 
				
			||||||
        'no-nested-ternary': 'off',
 | 
					 | 
				
			||||||
        'prefer-regex-literals': 'off',
 | 
					 | 
				
			||||||
        'import/no-named-as-default-member': 'off',
 | 
					 | 
				
			||||||
        yoda: 'off',
 | 
					 | 
				
			||||||
        'no-script-url': 'off',
 | 
					 | 
				
			||||||
        'no-prototype-builtins':'off'
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.husky/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +0,0 @@
 | 
				
			|||||||
_
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
. "$(dirname "$0")/_/husky.sh"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#npx lint-staged
 | 
					 | 
				
			||||||
							
								
								
									
										6
									
								
								.idea/jsLinters/eslint.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								.idea/jsLinters/eslint.xml
									
									
									
										generated
									
									
									
								
							@@ -1,6 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<project version="4">
 | 
					 | 
				
			||||||
  <component name="EslintConfiguration">
 | 
					 | 
				
			||||||
    <option name="fix-on-save" value="true" />
 | 
					 | 
				
			||||||
  </component>
 | 
					 | 
				
			||||||
</project>
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
//https://prettier.io/docs/en/options.html
 | 
					 | 
				
			||||||
module.exports = {
 | 
					 | 
				
			||||||
	semi: true,
 | 
					 | 
				
			||||||
	trailingComma: 'none',
 | 
					 | 
				
			||||||
	singleQuote: true,
 | 
					 | 
				
			||||||
	printWidth: 100,
 | 
					 | 
				
			||||||
	tabWidth: 4,
 | 
					 | 
				
			||||||
	useTabs: false,
 | 
					 | 
				
			||||||
	quoteProps: "as-needed",
 | 
					 | 
				
			||||||
	bracketSpacing: true,
 | 
					 | 
				
			||||||
	arrowParens: "avoid"
 | 
					 | 
				
			||||||
	// htmlWhitespaceSensitivity: 'ignore',
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										6
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.vscode/extensions.json
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "recommendations": [
 | 
					 | 
				
			||||||
    "dbaeumer.vscode-eslint",
 | 
					 | 
				
			||||||
    "esbenp.prettier-vscode",
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										31
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							@@ -1,33 +1,4 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "[javascript]": {
 | 
					 | 
				
			||||||
    "editor.defaultFormatter": "dbaeumer.vscode-eslint"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "[json]": {
 | 
					 | 
				
			||||||
    "editor.defaultFormatter": "dbaeumer.vscode-eslint"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "editor.formatOnSave": true,
 | 
					  "editor.formatOnSave": true,
 | 
				
			||||||
  "eslint.format.enable": true,
 | 
					  "files.eol": "\n"
 | 
				
			||||||
  "eslint.probe": [
 | 
					 | 
				
			||||||
    "javascript",
 | 
					 | 
				
			||||||
    "javascriptreact",
 | 
					 | 
				
			||||||
    "typescript",
 | 
					 | 
				
			||||||
    "typescriptreact",
 | 
					 | 
				
			||||||
    "html",
 | 
					 | 
				
			||||||
    "vue",
 | 
					 | 
				
			||||||
    "markdown",
 | 
					 | 
				
			||||||
    "json",
 | 
					 | 
				
			||||||
    "jsonc"
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "eslint.validate": [
 | 
					 | 
				
			||||||
    "javascript",
 | 
					 | 
				
			||||||
    "javascriptreact",
 | 
					 | 
				
			||||||
    "typescript",
 | 
					 | 
				
			||||||
    "typescriptreact",
 | 
					 | 
				
			||||||
    "html",
 | 
					 | 
				
			||||||
    "vue",
 | 
					 | 
				
			||||||
    "markdown",
 | 
					 | 
				
			||||||
    "json",
 | 
					 | 
				
			||||||
    "jsonc"
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "files.eol": "\n",
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# Trilium Notes
 | 
					# Trilium Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
 | 
					[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 | 
					[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 | 
				
			||||||
Trilium Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:
 | 
					Trilium Notes 是一个层次化的笔记应用程序,专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										93
									
								
								README.it.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								README.it.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					# Trilium Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Trilium è in manutenzione - vedi i dettagli in https://github.com/zadam/trilium/issues/4620
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le discussioni preliminari sull'organizzazione si stanno svolgendo in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions). 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Trilium Notes è un'applicazione per appunti ad organizzazione gerarchica, studiata per la costruzione di archivi di conoscenza personali di grandi dimensioni.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vedi [fotografie](https://github.com/zadam/trilium/wiki/Screenshot-tour) per una panoramica veloce:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<a href="https://github.com/zadam/trilium/wiki/Screenshot-tour"><img src="https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png" alt="Trilium Screenshot" width="1000"></a>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					L'Ucraina si sta difendendo dall'aggressione russa, considera [donare all'esercito ucraino o a organizzazioni umanitarie](https://standforukraine.com/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p float="left">
 | 
				
			||||||
 | 
					  <img src="https://upload.wikimedia.org/wikipedia/commons/4/49/Flag_of_Ukraine.svg" alt="drawing" width="400"/>
 | 
				
			||||||
 | 
					  <img src="https://signmyrocket.com//uploads/2b2a523cd0c0e76cdbba95a89a9636b2_1676971281.jpg" alt="Trilium Notes supports Ukraine!" width="570"/>
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🎁 Funzionalità
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Gli appunti possono essere organizzati in un albero di profondità arbitraria. Un singolo appunto può essere collocato in più posti nell'albero (vedi [clonazione](https://github.com/zadam/trilium/wiki/Cloning-notes))
 | 
				
			||||||
 | 
					* Ricco editor visuale (WYSIWYG), con supporto -tra l'altro- per tabelle, immagini ed [espressioni matematiche](https://github.com/zadam/trilium/wiki/Text-notes#math-support) e con [formattazione automatica](https://github.com/zadam/trilium/wiki/Text-notes#autoformat) per markdown
 | 
				
			||||||
 | 
					* Supporto per la modifica di [appunti con codice sorgente](https://github.com/zadam/trilium/wiki/Code-notes), con evidenziazione della sintassi
 | 
				
			||||||
 | 
					* [Navigazione veloce](https://github.com/zadam/trilium/wiki/Note-navigation) tra gli appunti, ricerca testuale completa e [fissaggio degli appunti](https://github.com/zadam/trilium/wiki/Note-hoisting)
 | 
				
			||||||
 | 
					* Supporto integrato ed automatico per le [revisioni degli appunti](https://github.com/zadam/trilium/wiki/Note-revisions)
 | 
				
			||||||
 | 
					* Gli [attributi](https://github.com/zadam/trilium/wiki/Attributes) degli appunti possono essere utilizzati per l'organizzazione, per l'interrogazione e per lo scripting avanzato (prorgrammazione).
 | 
				
			||||||
 | 
					* [Sincronizzazione](https://github.com/zadam/trilium/wiki/Synchronization) con un server di sincronizzazione auto-ospitato
 | 
				
			||||||
 | 
					  * c'è un [servizio di terze parti per ospitare server di sincronizzazione](https://trilium.cc/paid-hosting)
 | 
				
			||||||
 | 
					* [Condivisione](https://github.com/zadam/trilium/wiki/Sharing)  (pubblicazione) di appunti sull'internet pubblico
 | 
				
			||||||
 | 
					* Robusta [crittografia](https://github.com/zadam/trilium/wiki/Protected-notes) configurabile singolarmente per ogni appunto
 | 
				
			||||||
 | 
					* Disegno di diagrammi con Excalidraw (tipo di appunto "canvas")
 | 
				
			||||||
 | 
					* [Mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map) per visualizzare gli appunti e le loro relazioni
 | 
				
			||||||
 | 
					* [Scripting](https://github.com/zadam/trilium/wiki/Scripts) - vedi [Esempi avanzati](https://github.com/zadam/trilium/wiki/Advanced-showcases)
 | 
				
			||||||
 | 
					* [API REST](https://github.com/zadam/trilium/wiki/ETAPI) per l'automazione
 | 
				
			||||||
 | 
					* Si adatta bene sia in termini di usabilità che di prestazioni fino ad oltre 100 000 appunti
 | 
				
			||||||
 | 
					* Interfaccia utente ottimizzata per il [mobile](https://github.com/zadam/trilium/wiki/Mobile-frontend) (smartphone e tablet)
 | 
				
			||||||
 | 
					* [Tema Notturno](https://github.com/zadam/trilium/wiki/Themes)
 | 
				
			||||||
 | 
					* Supporto per importazione ed esportazione da e per [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) e [Markdown import](https://github.com/zadam/trilium/wiki/Markdown)
 | 
				
			||||||
 | 
					* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) per il salvataggio facile di contenuti web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Dai un'occhiata a [awesome-trilium](https://github.com/Nriver/awesome-trilium) per temi, script, plugin e altro di terze parti.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🏗 Rilasci
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Trilium è fornito come applicazione desktop (Linux e Windows) o come applicazione web ospitata sul tuo server (Linux). La versione desktop per Mac OS è disponibile, ma [non è supportata](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Se vuoi usare Trilium sul tuo desktop, scarica il rilascio binario per la tua piattaforma dall'[ultimo rilascio](https://github.com/zadam/trilium/releases/latest), decomprimi l'archivio e avvia l'eseguibile ```trilium```.
 | 
				
			||||||
 | 
					* Se vuoi installare Trilium su un server, segui [questa pagina](https://github.com/zadam/trilium/wiki/Server-installation).
 | 
				
			||||||
 | 
					  * Per ora solo Chrome e Firefox sono i browser supportati (testati).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Trilium è anche disponibile su Flatpak:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[<img width="240" src="https://flathub.org/assets/badges/flathub-badge-en.png">](https://flathub.org/apps/details/com.github.zadam.trilium)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 📝 Documentazione
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Vedi la wiki per una lista completa delle pagine di documentazione.](https://github.com/zadam/trilium/wiki/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Puoi anche leggere ["Patterns of personal knowledge base"](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base) per avere un'ispirazione su come potresti utilizzare Trilium.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 💻 Contribuire
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Usa un ambiente di sviluppo basato su browser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[](https://gitpod.io/#https://github.com/zadam/trilium)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					O clona localmente ed esegui
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					npm install
 | 
				
			||||||
 | 
					npm run start-server
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 📢 Riconoscimenti
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - miglior editor visuale (WYSIWYG) sul mercato, squadra di sviluppo attenta e reattiva
 | 
				
			||||||
 | 
					* [FancyTree](https://github.com/mar10/fancytree) -  libreria per alberi molto ricca di funzionalità, senza pari. Trilium Notes non sarebbe lo stesso senza di essa.
 | 
				
			||||||
 | 
					* [CodeMirror](https://github.com/codemirror/CodeMirror) - editor di codice con supporto per un'enorme quantità di linguaggi.
 | 
				
			||||||
 | 
					* [jsPlumb](https://github.com/jsplumb/jsplumb) - libreria per la  connettività visuale senza pari. Utilizzata per [mappe relazionali](https://github.com/zadam/trilium/wiki/Relation-map) e [mappe di collegamenti](https://github.com/zadam/trilium/wiki/Link-map).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🤝 Supporto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					È possibile supportare Trilium attraverso Github Sponsors, [PayPal](https://paypal.me/za4am) o Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🔑 Licenza
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Questo programma è software libero: è possibile redistribuirlo e/o modificarlo nei termini della GNU Affero General Public License come pubblicata dalla Free Software Foundation, sia la versione 3 della Licenza, o (a propria scelta) qualsiasi versione successiva.
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# Trilium Notes
 | 
					# Trilium Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
 | 
					[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://github.com/zadam/trilium/wiki/Screenshot-tour)をご覧ください:
 | 
					Trilium Notes は、大規模な個人知識ベースの構築に焦点を当てた、階層型ノートアプリケーションです。概要は[スクリーンショット](https://github.com/zadam/trilium/wiki/Screenshot-tour)をご覧ください:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Preliminary disccusions on the successor organization are taking place in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions). 
 | 
					Preliminary disccusions on the successor organization are taking place in [Trilium Next discussions](https://github.com/orgs/TriliumNext/discussions). 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
 | 
					[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. 
 | 
					Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# Trilium Notes
 | 
					# Trilium Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md)
 | 
					[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md) | [Japanese](https://github.com/zadam/trilium/blob/master/README.ja.md) | [Italian](https://github.com/zadam/trilium/blob/master/README.it.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 | 
					[](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 | 
				
			||||||
Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour):
 | 
					Trilium Notes – это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour):
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										7858
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7858
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										73
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								package.json
									
									
									
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
  "name": "trilium",
 | 
					  "name": "trilium",
 | 
				
			||||||
  "productName": "Trilium Notes",
 | 
					  "productName": "Trilium Notes",
 | 
				
			||||||
  "description": "Trilium Notes",
 | 
					  "description": "Trilium Notes",
 | 
				
			||||||
  "version": "0.63.3",
 | 
					  "version": "0.63.6",
 | 
				
			||||||
  "license": "AGPL-3.0-only",
 | 
					  "license": "AGPL-3.0-only",
 | 
				
			||||||
  "main": "electron.js",
 | 
					  "main": "electron.js",
 | 
				
			||||||
  "bin": {
 | 
					  "bin": {
 | 
				
			||||||
@@ -31,20 +31,18 @@
 | 
				
			|||||||
    "test-jasmine": "TRILIUM_DATA_DIR=~/trilium/data-test jasmine",
 | 
					    "test-jasmine": "TRILIUM_DATA_DIR=~/trilium/data-test jasmine",
 | 
				
			||||||
    "test-es6": "node -r esm spec-es6/attribute_parser.spec.js ",
 | 
					    "test-es6": "node -r esm spec-es6/attribute_parser.spec.js ",
 | 
				
			||||||
    "test": "npm run test-jasmine && npm run test-es6",
 | 
					    "test": "npm run test-jasmine && npm run test-es6",
 | 
				
			||||||
    "postinstall": "rimraf ./node_modules/canvas",
 | 
					    "postinstall": "rimraf ./node_modules/canvas"
 | 
				
			||||||
    "lint": "eslint .  --cache",
 | 
					 | 
				
			||||||
    "prepare": "husky install || echo 'Husky install failed, expected on flatpak build'"
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@braintree/sanitize-url": "6.0.4",
 | 
					    "@braintree/sanitize-url": "6.0.4",
 | 
				
			||||||
    "@electron/remote": "2.1.0",
 | 
					    "@electron/remote": "2.1.2",
 | 
				
			||||||
    "@excalidraw/excalidraw": "0.16.1",
 | 
					    "@excalidraw/excalidraw": "0.17.3",
 | 
				
			||||||
    "archiver": "6.0.1",
 | 
					    "archiver": "7.0.0",
 | 
				
			||||||
    "async-mutex": "0.4.0",
 | 
					    "async-mutex": "0.4.1",
 | 
				
			||||||
    "axios": "1.6.2",
 | 
					    "axios": "1.6.7",
 | 
				
			||||||
    "better-sqlite3": "8.4.0",
 | 
					    "better-sqlite3": "8.4.0",
 | 
				
			||||||
    "boxicons": "2.1.4",
 | 
					    "boxicons": "2.1.4",
 | 
				
			||||||
    "chokidar": "3.5.3",
 | 
					    "chokidar": "3.6.0",
 | 
				
			||||||
    "cls-hooked": "4.2.2",
 | 
					    "cls-hooked": "4.2.2",
 | 
				
			||||||
    "compression": "1.7.4",
 | 
					    "compression": "1.7.4",
 | 
				
			||||||
    "cookie-parser": "1.4.6",
 | 
					    "cookie-parser": "1.4.6",
 | 
				
			||||||
@@ -54,35 +52,35 @@
 | 
				
			|||||||
    "debounce": "1.2.1",
 | 
					    "debounce": "1.2.1",
 | 
				
			||||||
    "ejs": "3.1.9",
 | 
					    "ejs": "3.1.9",
 | 
				
			||||||
    "electron-debug": "3.2.0",
 | 
					    "electron-debug": "3.2.0",
 | 
				
			||||||
    "electron-dl": "3.5.1",
 | 
					    "electron-dl": "3.5.2",
 | 
				
			||||||
    "electron-window-state": "5.0.3",
 | 
					    "electron-window-state": "5.0.3",
 | 
				
			||||||
    "escape-html": "1.0.3",
 | 
					    "escape-html": "1.0.3",
 | 
				
			||||||
    "express": "4.18.2",
 | 
					    "express": "4.18.3",
 | 
				
			||||||
    "express-partial-content": "1.0.2",
 | 
					    "express-partial-content": "1.0.2",
 | 
				
			||||||
    "express-rate-limit": "7.1.4",
 | 
					    "express-rate-limit": "7.2.0",
 | 
				
			||||||
    "express-session": "1.17.3",
 | 
					    "express-session": "1.18.0",
 | 
				
			||||||
    "force-graph": "1.43.4",
 | 
					    "force-graph": "1.43.5",
 | 
				
			||||||
    "fs-extra": "11.1.1",
 | 
					    "fs-extra": "11.2.0",
 | 
				
			||||||
    "helmet": "7.1.0",
 | 
					    "helmet": "7.1.0",
 | 
				
			||||||
    "html": "1.0.0",
 | 
					    "html": "1.0.0",
 | 
				
			||||||
    "html2plaintext": "2.1.4",
 | 
					    "html2plaintext": "2.1.4",
 | 
				
			||||||
    "http-proxy-agent": "7.0.0",
 | 
					    "http-proxy-agent": "7.0.2",
 | 
				
			||||||
    "https-proxy-agent": "7.0.2",
 | 
					    "https-proxy-agent": "7.0.4",
 | 
				
			||||||
    "image-type": "4.1.0",
 | 
					    "image-type": "4.1.0",
 | 
				
			||||||
    "ini": "3.0.1",
 | 
					    "ini": "3.0.1",
 | 
				
			||||||
    "is-animated": "2.0.2",
 | 
					    "is-animated": "2.0.2",
 | 
				
			||||||
    "is-svg": "4.3.2",
 | 
					    "is-svg": "4.3.2",
 | 
				
			||||||
    "jimp": "0.22.10",
 | 
					    "jimp": "0.22.12",
 | 
				
			||||||
    "joplin-turndown-plugin-gfm": "1.0.12",
 | 
					    "joplin-turndown-plugin-gfm": "1.0.12",
 | 
				
			||||||
    "jquery": "3.7.1",
 | 
					    "jquery": "3.7.1",
 | 
				
			||||||
    "jquery-hotkeys": "0.2.2",
 | 
					    "jquery-hotkeys": "0.2.2",
 | 
				
			||||||
    "jsdom": "22.1.0",
 | 
					    "jsdom": "24.0.0",
 | 
				
			||||||
    "katex": "0.16.9",
 | 
					    "katex": "0.16.9",
 | 
				
			||||||
    "marked": "9.1.6",
 | 
					    "marked": "12.0.0",
 | 
				
			||||||
    "mermaid": "10.6.1",
 | 
					    "mermaid": "10.9.0",
 | 
				
			||||||
    "mime-types": "2.1.35",
 | 
					    "mime-types": "2.1.35",
 | 
				
			||||||
    "multer": "1.4.5-lts.1",
 | 
					    "multer": "1.4.5-lts.1",
 | 
				
			||||||
    "node-abi": "3.51.0",
 | 
					    "node-abi": "3.56.0",
 | 
				
			||||||
    "normalize-strings": "1.1.1",
 | 
					    "normalize-strings": "1.1.1",
 | 
				
			||||||
    "open": "8.4.1",
 | 
					    "open": "8.4.1",
 | 
				
			||||||
    "panzoom": "9.4.3",
 | 
					    "panzoom": "9.4.3",
 | 
				
			||||||
@@ -94,51 +92,38 @@
 | 
				
			|||||||
    "rimraf": "5.0.5",
 | 
					    "rimraf": "5.0.5",
 | 
				
			||||||
    "safe-compare": "1.1.4",
 | 
					    "safe-compare": "1.1.4",
 | 
				
			||||||
    "sanitize-filename": "1.6.3",
 | 
					    "sanitize-filename": "1.6.3",
 | 
				
			||||||
    "sanitize-html": "2.11.0",
 | 
					    "sanitize-html": "2.12.1",
 | 
				
			||||||
    "sax": "1.3.0",
 | 
					    "sax": "1.3.0",
 | 
				
			||||||
    "semver": "7.5.4",
 | 
					    "semver": "7.6.0",
 | 
				
			||||||
    "serve-favicon": "2.5.0",
 | 
					    "serve-favicon": "2.5.0",
 | 
				
			||||||
    "session-file-store": "1.5.0",
 | 
					    "session-file-store": "1.5.0",
 | 
				
			||||||
    "split.js": "1.6.5",
 | 
					    "split.js": "1.6.5",
 | 
				
			||||||
    "stream-throttle": "0.1.3",
 | 
					    "stream-throttle": "0.1.3",
 | 
				
			||||||
    "striptags": "3.2.0",
 | 
					    "striptags": "3.2.0",
 | 
				
			||||||
    "tmp": "0.2.1",
 | 
					    "tmp": "0.2.3",
 | 
				
			||||||
    "tree-kill": "1.2.2",
 | 
					    "tree-kill": "1.2.2",
 | 
				
			||||||
    "turndown": "7.1.2",
 | 
					    "turndown": "7.1.2",
 | 
				
			||||||
    "unescape": "1.0.1",
 | 
					    "unescape": "1.0.1",
 | 
				
			||||||
    "ws": "8.14.2",
 | 
					    "ws": "8.16.0",
 | 
				
			||||||
    "xml2js": "0.6.2",
 | 
					    "xml2js": "0.6.2",
 | 
				
			||||||
    "yauzl": "2.10.0"
 | 
					    "yauzl": "3.1.2"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "cross-env": "7.0.3",
 | 
					    "cross-env": "7.0.3",
 | 
				
			||||||
    "electron": "25.9.8",
 | 
					    "electron": "25.9.8",
 | 
				
			||||||
    "electron-builder": "24.6.4",
 | 
					    "electron-builder": "24.13.3",
 | 
				
			||||||
    "electron-packager": "17.1.2",
 | 
					    "electron-packager": "17.1.2",
 | 
				
			||||||
    "electron-rebuild": "3.2.9",
 | 
					    "electron-rebuild": "3.2.9",
 | 
				
			||||||
    "eslint": "8.54.0",
 | 
					 | 
				
			||||||
    "eslint-config-airbnb-base": "15.0.0",
 | 
					 | 
				
			||||||
    "eslint-config-prettier": "9.0.0",
 | 
					 | 
				
			||||||
    "eslint-plugin-import": "2.29.0",
 | 
					 | 
				
			||||||
    "eslint-plugin-jsonc": "2.10.0",
 | 
					 | 
				
			||||||
    "eslint-plugin-prettier": "5.0.1",
 | 
					 | 
				
			||||||
    "esm": "3.2.25",
 | 
					    "esm": "3.2.25",
 | 
				
			||||||
    "husky": "8.0.3",
 | 
					 | 
				
			||||||
    "jasmine": "5.1.0",
 | 
					    "jasmine": "5.1.0",
 | 
				
			||||||
    "jsdoc": "4.0.2",
 | 
					    "jsdoc": "4.0.2",
 | 
				
			||||||
    "jsonc-eslint-parser": "2.4.0",
 | 
					 | 
				
			||||||
    "lint-staged": "15.1.0",
 | 
					 | 
				
			||||||
    "lorem-ipsum": "2.0.8",
 | 
					    "lorem-ipsum": "2.0.8",
 | 
				
			||||||
    "nodemon": "3.0.1",
 | 
					    "nodemon": "3.1.0",
 | 
				
			||||||
    "prettier": "3.1.0",
 | 
					 | 
				
			||||||
    "rcedit": "4.0.1",
 | 
					    "rcedit": "4.0.1",
 | 
				
			||||||
    "webpack": "5.89.0",
 | 
					    "webpack": "5.90.3",
 | 
				
			||||||
    "webpack-cli": "5.1.4"
 | 
					    "webpack-cli": "5.1.4"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "optionalDependencies": {
 | 
					  "optionalDependencies": {
 | 
				
			||||||
    "electron-installer-debian": "3.2.0"
 | 
					    "electron-installer-debian": "3.2.0"
 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "lint-staged": {
 | 
					 | 
				
			||||||
    "*.js": "eslint --cache --fix"
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,8 @@ const protectedSessionService = require('../../services/protected_session.js');
 | 
				
			|||||||
const log = require('../../services/log.js');
 | 
					const log = require('../../services/log.js');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const attachmentRoleToNoteTypeMapping = {
 | 
					const attachmentRoleToNoteTypeMapping = {
 | 
				
			||||||
    'image': 'image'
 | 
					    'image': 'image',
 | 
				
			||||||
 | 
					    'file': 'file'
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -487,12 +487,14 @@ function areObjectsEqual () {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function copyHtmlToClipboard(content) {
 | 
					function copyHtmlToClipboard(content) {
 | 
				
			||||||
    const clipboardItem = new ClipboardItem({
 | 
					    function listener(e) {
 | 
				
			||||||
        'text/html': new Blob([content], {type: 'text/html'}),
 | 
					        e.clipboardData.setData("text/html", content);
 | 
				
			||||||
        'text/plain': new Blob([content], {type: 'text/plain'})
 | 
					        e.clipboardData.setData("text/plain", content);
 | 
				
			||||||
    });
 | 
					        e.preventDefault();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    navigator.clipboard.write([clipboardItem]);
 | 
					    document.addEventListener("copy", listener);
 | 
				
			||||||
 | 
					    document.execCommand("copy");
 | 
				
			||||||
 | 
					    document.removeEventListener("copy", listener);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,8 @@
 | 
				
			|||||||
import libraryLoader from "../../services/library_loader.js";
 | 
					import libraryLoader from '../../services/library_loader.js';
 | 
				
			||||||
import TypeWidget from "./type_widget.js";
 | 
					import TypeWidget from './type_widget.js';
 | 
				
			||||||
import utils from '../../services/utils.js';
 | 
					import utils from '../../services/utils.js';
 | 
				
			||||||
import linkService from '../../services/link.js';
 | 
					import linkService from '../../services/link.js';
 | 
				
			||||||
import debounce from "../../services/debounce.js";
 | 
					import debounce from '../../services/debounce.js';
 | 
				
			||||||
 | 
					 | 
				
			||||||
const {sleep} = utils;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TPL = `
 | 
					const TPL = `
 | 
				
			||||||
    <div class="canvas-widget note-detail-canvas note-detail-printable note-detail">
 | 
					    <div class="canvas-widget note-detail-canvas note-detail-printable note-detail">
 | 
				
			||||||
@@ -115,7 +113,6 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
        this.currentSceneVersion = this.SCENE_VERSION_INITIAL;
 | 
					        this.currentSceneVersion = this.SCENE_VERSION_INITIAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // will be overwritten
 | 
					        // will be overwritten
 | 
				
			||||||
        this.excalidrawRef;
 | 
					 | 
				
			||||||
        this.$render;
 | 
					        this.$render;
 | 
				
			||||||
        this.$widget;
 | 
					        this.$widget;
 | 
				
			||||||
        this.reactHandlers; // used to control react state
 | 
					        this.reactHandlers; // used to control react state
 | 
				
			||||||
@@ -155,7 +152,8 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
                const renderElement = this.$render.get(0);
 | 
					                const renderElement = this.$render.get(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ReactDOM.unmountComponentAtNode(renderElement);
 | 
					                ReactDOM.unmountComponentAtNode(renderElement);
 | 
				
			||||||
                ReactDOM.render(React.createElement(this.createExcalidrawReactApp), renderElement);
 | 
					                const root = ReactDOM.createRoot(renderElement);
 | 
				
			||||||
 | 
					                root.render(React.createElement(this.createExcalidrawReactApp));
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return this.$widget;
 | 
					        return this.$widget;
 | 
				
			||||||
@@ -179,9 +177,9 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
        const blob = await note.getBlob();
 | 
					        const blob = await note.getBlob();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // before we load content into excalidraw, make sure excalidraw has loaded
 | 
					        // before we load content into excalidraw, make sure excalidraw has loaded
 | 
				
			||||||
        while (!this.excalidrawRef?.current) {
 | 
					        while (!this.excalidrawApi) {
 | 
				
			||||||
            console.log("excalidrawRef not yet loaded, sleep 200ms...");
 | 
					            console.log("excalidrawApi not yet loaded, sleep 200ms...");
 | 
				
			||||||
            await sleep(200);
 | 
					            await utils.sleep(200);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
@@ -199,7 +197,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
                collaborators: []
 | 
					                collaborators: []
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.excalidrawRef.current.updateScene(sceneData);
 | 
					            this.excalidrawApi.updateScene(sceneData);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (blob.content) {
 | 
					        else if (blob.content) {
 | 
				
			||||||
            // load saved content into excalidraw canvas
 | 
					            // load saved content into excalidraw canvas
 | 
				
			||||||
@@ -246,9 +244,9 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
                fileArray.push(file);
 | 
					                fileArray.push(file);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.excalidrawRef.current.updateScene(sceneData);
 | 
					            this.excalidrawApi.updateScene(sceneData);
 | 
				
			||||||
            this.excalidrawRef.current.addFiles(fileArray);
 | 
					            this.excalidrawApi.addFiles(fileArray);
 | 
				
			||||||
            this.excalidrawRef.current.history.clear();
 | 
					            this.excalidrawApi.history.clear();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Promise.all(
 | 
					        Promise.all(
 | 
				
			||||||
@@ -261,7 +259,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const libraryItems = blobs.map(blob => blob.getJsonContentSafely()).filter(item => !!item);
 | 
					            const libraryItems = blobs.map(blob => blob.getJsonContentSafely()).filter(item => !!item);
 | 
				
			||||||
            this.excalidrawRef.current.updateLibrary({libraryItems, merge: false});
 | 
					            this.excalidrawApi.updateLibrary({libraryItems, merge: false});
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // set initial scene version
 | 
					        // set initial scene version
 | 
				
			||||||
@@ -275,17 +273,17 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
     * this is automatically called after this.saveData();
 | 
					     * this is automatically called after this.saveData();
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async getData() {
 | 
					    async getData() {
 | 
				
			||||||
        const elements = this.excalidrawRef.current.getSceneElements();
 | 
					        const elements = this.excalidrawApi.getSceneElements();
 | 
				
			||||||
        const appState = this.excalidrawRef.current.getAppState();
 | 
					        const appState = this.excalidrawApi.getAppState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
         * A file is not deleted, even though removed from canvas. Therefore, we only keep
 | 
					         * A file is not deleted, even though removed from canvas. Therefore, we only keep
 | 
				
			||||||
         * files that are referenced by an element. Maybe this will change with a new excalidraw version?
 | 
					         * files that are referenced by an element. Maybe this will change with a new excalidraw version?
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        const files = this.excalidrawRef.current.getFiles();
 | 
					        const files = this.excalidrawApi.getFiles();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // parallel svg export to combat bitrot and enable rendering image for note inclusion, preview, and share
 | 
					        // parallel svg export to combat bitrot and enable rendering image for note inclusion, preview, and share
 | 
				
			||||||
        const svg = await window.ExcalidrawLib.exportToSvg({
 | 
					        const svg = await ExcalidrawLib.exportToSvg({
 | 
				
			||||||
            elements,
 | 
					            elements,
 | 
				
			||||||
            appState,
 | 
					            appState,
 | 
				
			||||||
            exportPadding: 5, // 5 px padding
 | 
					            exportPadding: 5, // 5 px padding
 | 
				
			||||||
@@ -321,7 +319,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
            // this.libraryChanged is unset in dataSaved()
 | 
					            // this.libraryChanged is unset in dataSaved()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // there's no separate method to get library items, so have to abuse this one
 | 
					            // there's no separate method to get library items, so have to abuse this one
 | 
				
			||||||
            const libraryItems = await this.excalidrawRef.current.updateLibrary({merge: true});
 | 
					            const libraryItems = await this.excalidrawApi.updateLibrary({merge: true});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let position = 10;
 | 
					            let position = 10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -379,9 +377,6 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
    createExcalidrawReactApp() {
 | 
					    createExcalidrawReactApp() {
 | 
				
			||||||
        const React = window.React;
 | 
					        const React = window.React;
 | 
				
			||||||
        const { Excalidraw } = window.ExcalidrawLib;
 | 
					        const { Excalidraw } = window.ExcalidrawLib;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        const excalidrawRef = React.useRef(null);
 | 
					 | 
				
			||||||
        this.excalidrawRef = excalidrawRef;
 | 
					 | 
				
			||||||
        const excalidrawWrapperRef = React.useRef(null);
 | 
					        const excalidrawWrapperRef = React.useRef(null);
 | 
				
			||||||
        this.excalidrawWrapperRef = excalidrawWrapperRef;
 | 
					        this.excalidrawWrapperRef = excalidrawWrapperRef;
 | 
				
			||||||
        const [dimensions, setDimensions] = React.useState({
 | 
					        const [dimensions, setDimensions] = React.useState({
 | 
				
			||||||
@@ -439,7 +434,7 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
                React.createElement(Excalidraw, {
 | 
					                React.createElement(Excalidraw, {
 | 
				
			||||||
                    // this makes sure that 1) manual theme switch button is hidden 2) theme stays as it should after opening menu
 | 
					                    // this makes sure that 1) manual theme switch button is hidden 2) theme stays as it should after opening menu
 | 
				
			||||||
                    theme: this.themeStyle,
 | 
					                    theme: this.themeStyle,
 | 
				
			||||||
                    ref: excalidrawRef,
 | 
					                    excalidrawAPI: api => { this.excalidrawApi = api; },
 | 
				
			||||||
                    width: dimensions.width,
 | 
					                    width: dimensions.width,
 | 
				
			||||||
                    height: dimensions.height,
 | 
					                    height: dimensions.height,
 | 
				
			||||||
                    onPaste: (data, event) => {
 | 
					                    onPaste: (data, event) => {
 | 
				
			||||||
@@ -483,8 +478,8 @@ export default class ExcalidrawTypeWidget extends TypeWidget {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    getSceneVersion() {
 | 
					    getSceneVersion() {
 | 
				
			||||||
        if (this.excalidrawRef) {
 | 
					        if (this.excalidrawApi) {
 | 
				
			||||||
            const elements = this.excalidrawRef.current.getSceneElements();
 | 
					            const elements = this.excalidrawApi.getSceneElements();
 | 
				
			||||||
            return window.ExcalidrawLib.getSceneVersion(elements);
 | 
					            return window.ExcalidrawLib.getSceneVersion(elements);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            return this.SCENE_VERSION_ERROR;
 | 
					            return this.SCENE_VERSION_ERROR;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -88,3 +88,7 @@ body .CodeMirror {
 | 
				
			|||||||
.excalidraw.theme--dark {
 | 
					.excalidraw.theme--dark {
 | 
				
			||||||
    --theme-filter: invert(80%) hue-rotate(180deg) !important;
 | 
					    --theme-filter: invert(80%) hue-rotate(180deg) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body .todo-list input[type="checkbox"]:not(:checked):before {
 | 
				
			||||||
 | 
					    border-color: var(--muted-text-color) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -154,12 +154,16 @@ function saveAttachmentToTmpDir(req) {
 | 
				
			|||||||
    return saveToTmpDir(fileName, content, 'attachments', attachment.attachmentId);
 | 
					    return saveToTmpDir(fileName, content, 'attachments', attachment.attachmentId);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const createdTemporaryFiles = new Set();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function saveToTmpDir(fileName, content, entityType, entityId) {
 | 
					function saveToTmpDir(fileName, content, entityType, entityId) {
 | 
				
			||||||
    const tmpObj = tmp.fileSync({ postfix: fileName });
 | 
					    const tmpObj = tmp.fileSync({ postfix: fileName });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fs.writeSync(tmpObj.fd, content);
 | 
					    fs.writeSync(tmpObj.fd, content);
 | 
				
			||||||
    fs.closeSync(tmpObj.fd);
 | 
					    fs.closeSync(tmpObj.fd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    createdTemporaryFiles.add(tmpObj.name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log.info(`Saved temporary file ${tmpObj.name}`);
 | 
					    log.info(`Saved temporary file ${tmpObj.name}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (utils.isElectron()) {
 | 
					    if (utils.isElectron()) {
 | 
				
			||||||
@@ -183,6 +187,10 @@ function uploadModifiedFileToNote(req) {
 | 
				
			|||||||
    const noteId = req.params.noteId;
 | 
					    const noteId = req.params.noteId;
 | 
				
			||||||
    const {filePath} = req.body;
 | 
					    const {filePath} = req.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!createdTemporaryFiles.has(filePath)) {
 | 
				
			||||||
 | 
					        throw new ValidationError(`File '${filePath}' is not a temporary file.`);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const note = becca.getNoteOrThrow(noteId);
 | 
					    const note = becca.getNoteOrThrow(noteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    log.info(`Updating note '${noteId}' with content from '${filePath}'`);
 | 
					    log.info(`Updating note '${noteId}' with content from '${filePath}'`);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1 @@
 | 
				
			|||||||
module.exports = { buildDate:"2024-03-03T06:58:18+01:00", buildRevision: "0ad337c8e806ba84d48d7b97aa46df52d9f236a8" };
 | 
					module.exports = { buildDate:"2024-05-18T06:17:21+02:00", buildRevision: "c7f19e04fafc031910f6f9a45d2015387618e902" };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,10 +105,10 @@ function renderText(result, note) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (result.content.includes(`<span class="math-tex">`)) {
 | 
					        if (result.content.includes(`<span class="math-tex">`)) {
 | 
				
			||||||
            result.header += `
 | 
					            result.header += `
 | 
				
			||||||
<script src="../../${assetPath}/node_modules/katex/dist/katex.min.js"></script>
 | 
					<script src="../${assetPath}/node_modules/katex/dist/katex.min.js"></script>
 | 
				
			||||||
<link rel="stylesheet" href="../../${assetPath}/node_modules/katex/dist/katex.min.css">
 | 
					<link rel="stylesheet" href="../${assetPath}/node_modules/katex/dist/katex.min.css">
 | 
				
			||||||
<script src="../../${assetPath}/node_modules/katex/dist/contrib/auto-render.min.js"></script>
 | 
					<script src="../${assetPath}/node_modules/katex/dist/contrib/auto-render.min.js"></script>
 | 
				
			||||||
<script src="../../${assetPath}/node_modules/katex/dist/contrib/mhchem.min.js"></script>
 | 
					<script src="../${assetPath}/node_modules/katex/dist/contrib/mhchem.min.js"></script>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
document.addEventListener("DOMContentLoaded", function() {
 | 
					document.addEventListener("DOMContentLoaded", function() {
 | 
				
			||||||
    renderMathInElement(document.getElementById('content'));
 | 
					    renderMathInElement(document.getElementById('content'));
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user