This commit is contained in:
tevenfeng 2023-05-13 14:03:15 +00:00
commit 691f39833c
12 changed files with 221 additions and 103 deletions

View File

@ -17,7 +17,8 @@ function register(router) {
'type': [v.mandatory, v.notNull, v.isAttributeType], 'type': [v.mandatory, v.notNull, v.isAttributeType],
'name': [v.mandatory, v.notNull, v.isString], 'name': [v.mandatory, v.notNull, v.isString],
'value': [v.notNull, v.isString], 'value': [v.notNull, v.isString],
'isInheritable': [v.notNull, v.isBoolean] 'isInheritable': [v.notNull, v.isBoolean],
'position': [v.notNull, v.isInteger]
}; };
eu.route(router, 'post' ,'/etapi/attributes', (req, res, next) => { eu.route(router, 'post' ,'/etapi/attributes', (req, res, next) => {
@ -40,7 +41,8 @@ function register(router) {
}); });
const ALLOWED_PROPERTIES_FOR_PATCH = { const ALLOWED_PROPERTIES_FOR_PATCH = {
'value': [v.notNull, v.isString] 'value': [v.notNull, v.isString],
'position': [v.notNull, v.isInteger]
}; };
eu.route(router, 'patch' ,'/etapi/attributes/:attributeId', (req, res, next) => { eu.route(router, 'patch' ,'/etapi/attributes/:attributeId', (req, res, next) => {

View File

@ -31,7 +31,7 @@ paths:
'201': '201':
description: note created description: note created
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
properties: properties:
note: note:
@ -43,7 +43,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/notes: /notes:
@ -163,13 +163,13 @@ paths:
'200': '200':
description: search response description: search response
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/SearchResponse' $ref: '#/components/schemas/SearchResponse'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/notes/{noteId}: /notes/{noteId}:
@ -186,13 +186,13 @@ paths:
'200': '200':
description: note response description: note response
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
patch: patch:
@ -208,13 +208,13 @@ paths:
'200': '200':
description: note updated description: note updated
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
delete: delete:
@ -226,7 +226,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/notes/{noteId}/content: /notes/{noteId}/content:
@ -288,7 +288,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/notes/{noteId}/note-revision: /notes/{noteId}/note-revision:
@ -315,32 +315,10 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/Error'
/branches/{branchId}:
parameters:
- name: branchId
in: path
required: true
schema:
$ref: '#/components/schemas/EntityId'
get:
description: Returns a branch identified by its ID
operationId: getBranchById
responses:
'200':
description: branch response
content:
application/json:
schema:
$ref: '#/components/schemas/Branch'
default:
description: unexpected error
content:
application/json:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/branches:
post: post:
description: > description: >
Create a branch (clone a note to a different location in the tree). Create a branch (clone a note to a different location in the tree).
@ -357,19 +335,42 @@ paths:
'200': '200':
description: branch updated (branch between parent note and child note already existed) description: branch updated (branch between parent note and child note already existed)
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Branch' $ref: '#/components/schemas/Branch'
'201': '201':
description: branch created description: branch created
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Branch' $ref: '#/components/schemas/Branch'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/Error'
/branches/{branchId}:
parameters:
- name: branchId
in: path
required: true
schema:
$ref: '#/components/schemas/EntityId'
get:
description: Returns a branch identified by its ID
operationId: getBranchById
responses:
'200':
description: branch response
content:
application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/Branch'
default:
description: unexpected error
content:
application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
patch: patch:
@ -385,13 +386,13 @@ paths:
'200': '200':
description: branch updated description: branch updated
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Branch' $ref: '#/components/schemas/Branch'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
delete: delete:
@ -405,7 +406,30 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/Error'
/attributes:
post:
description: create an attribute for a given note
operationId: postAttribute
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Attribute'
responses:
'201':
description: attribute created
content:
application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/Attribute'
default:
description: unexpected error
content:
application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/attributes/{attributeId}: /attributes/{attributeId}:
@ -422,35 +446,13 @@ paths:
'200': '200':
description: attribute response description: attribute response
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Attribute' $ref: '#/components/schemas/Attribute'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema:
$ref: '#/components/schemas/Error'
post:
description: create an attribute for a given note
operationId: postAttribute
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Attribute'
responses:
'201':
description: attribute created
content:
application/json:
schema:
$ref: '#/components/schemas/Attribute'
default:
description: unexpected error
content:
application/json:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
patch: patch:
@ -466,13 +468,13 @@ paths:
'200': '200':
description: attribute updated description: attribute updated
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Attribute' $ref: '#/components/schemas/Attribute'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
delete: delete:
@ -484,7 +486,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/refresh-note-ordering/{parentNoteId}: /refresh-note-ordering/{parentNoteId}:
@ -506,7 +508,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/inbox/{date}: /inbox/{date}:
@ -527,13 +529,13 @@ paths:
'200': '200':
description: inbox note description: inbox note
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/calendar/days/{date}: /calendar/days/{date}:
@ -552,13 +554,13 @@ paths:
'200': '200':
description: day note description: day note
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/calendar/weeks/{date}: /calendar/weeks/{date}:
@ -577,13 +579,13 @@ paths:
'200': '200':
description: week note description: week note
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/calendar/months/{month}: /calendar/months/{month}:
@ -602,13 +604,13 @@ paths:
'200': '200':
description: month note description: month note
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/calendar/years/{year}: /calendar/years/{year}:
@ -627,13 +629,13 @@ paths:
'200': '200':
description: year note description: year note
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Note' $ref: '#/components/schemas/Note'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/auth/login: /auth/login:
@ -654,7 +656,7 @@ paths:
'201': '201':
description: auth token description: auth token
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
properties: properties:
authToken: authToken:
@ -665,7 +667,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/auth/logout: /auth/logout:
@ -678,7 +680,7 @@ paths:
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
/app-info: /app-info:
@ -689,13 +691,13 @@ paths:
'200': '200':
description: app info description: app info
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/AppInfo' $ref: '#/components/schemas/AppInfo'
default: default:
description: unexpected error description: unexpected error
content: content:
application/json: application/json; charset=utf-8:
schema: schema:
$ref: '#/components/schemas/Error' $ref: '#/components/schemas/Error'
@ -774,7 +776,7 @@ components:
type: string type: string
type: type:
type: string type: string
enum: [text, code, render, file, image, search, relationMap, book, noteMap, mermaid, webView, shortcut] enum: [text, code, render, file, image, search, relationMap, book, noteMap, mermaid, webView, shortcut, doc, contentWidget, launcher]
mime: mime:
type: string type: string
isProtected: isProtected:
@ -810,9 +812,6 @@ components:
Branch: Branch:
type: object type: object
description: Branch places the note into the tree, it represents the relationship between a parent note and child note description: Branch places the note into the tree, it represents the relationship between a parent note and child note
required:
- noteId
- parentNoteId
properties: properties:
branchId: branchId:
$ref: '#/components/schemas/EntityId' $ref: '#/components/schemas/EntityId'
@ -837,8 +836,6 @@ components:
Attribute: Attribute:
type: object type: object
description: Attribute (Label, Relation) is a key-value record attached to a note. description: Attribute (Label, Relation) is a key-value record attached to a note.
required:
- noteId
properties: properties:
attributeId: attributeId:
$ref: '#/components/schemas/EntityId' $ref: '#/components/schemas/EntityId'
@ -851,7 +848,7 @@ components:
enum: [label, relation] enum: [label, relation]
name: name:
type: string type: string
pattern: '^[\p{L}\p{N}_:]+' pattern: '^[^\s]+'
example: shareCss example: shareCss
value: value:
type: string type: string
@ -881,7 +878,7 @@ components:
description: debugging info on parsing the search query enabled with &debug=true parameter description: debugging info on parsing the search query enabled with &debug=true parameter
EntityId: EntityId:
type: string type: string
pattern: '[a-zA-Z0-9]{4,32}' pattern: '[a-zA-Z0-9_]{4,32}'
example: evnnmvHTCgIn example: evnnmvHTCgIn
EntityIdList: EntityIdList:
type: array type: array
@ -889,7 +886,7 @@ components:
$ref: '#/components/schemas/EntityId' $ref: '#/components/schemas/EntityId'
LocalDateTime: LocalDateTime:
type: string type: string
pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}\+[0-9]{4}' pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{3}[\+\-][0-9]{4}'
example: 2021-12-31 20:18:11.939+0100 example: 2021-12-31 20:18:11.939+0100
UtcDateTime: UtcDateTime:
type: string type: string
@ -897,10 +894,6 @@ components:
example: 2021-12-31 19:18:11.939Z example: 2021-12-31 19:18:11.939Z
AppInfo: AppInfo:
type: object type: object
required:
- statu
- code
- message
properties: properties:
appVersion: appVersion:
type: string type: string

View File

@ -8,6 +8,7 @@ import contextMenu from "./menus/context_menu.js";
import DesktopLayout from "./layouts/desktop_layout.js"; import DesktopLayout from "./layouts/desktop_layout.js";
import glob from "./services/glob.js"; import glob from "./services/glob.js";
import zoomService from './components/zoom.js'; import zoomService from './components/zoom.js';
import options from "./services/options.js";
bundleService.getWidgetBundlesByParent().then(widgetBundles => { bundleService.getWidgetBundlesByParent().then(widgetBundles => {
appContext.setLayout(new DesktopLayout(widgetBundles)); appContext.setLayout(new DesktopLayout(widgetBundles));
@ -115,11 +116,27 @@ if (utils.isElectron()) {
? (`${params.selectionText.substr(0, 13)}`) ? (`${params.selectionText.substr(0, 13)}`)
: params.selectionText; : params.selectionText;
// Read the search engine from the options and fallback to DuckDuckGo if the option is not set.
const customSearchEngineName = options.get("customSearchEngineName");
const customSearchEngineUrl = options.get("customSearchEngineUrl");
let searchEngineName;
let searchEngineUrl;
if (customSearchEngineName && customSearchEngineUrl) {
searchEngineName = customSearchEngineName;
searchEngineUrl = customSearchEngineUrl;
} else {
searchEngineName = "Duckduckgo";
searchEngineUrl = "https://duckduckgo.com/?q={keyword}";
}
// Replace the placeholder with the real search keyword.
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
items.push({ items.push({
enabled: editFlags.canPaste, enabled: editFlags.canPaste,
title: `Search for "${shortenedSelection}" with DuckDuckGo`, title: `Search for "${shortenedSelection}" with ${searchEngineName}`,
uiIcon: "bx bx-search-alt", uiIcon: "bx bx-search-alt",
handler: () => electron.shell.openExternal(`https://duckduckgo.com/?q=${encodeURIComponent(params.selectionText)}`) handler: () => electron.shell.openExternal(searchUrl)
}); });
} }

View File

@ -39,7 +39,7 @@ const TPL = `
.ribbon-tab-title.active { .ribbon-tab-title.active {
color: var(--main-text-color); color: var(--main-text-color);
border-bottom: 1px solid var(--main-text-color); border-bottom: 3px solid var(--main-text-color);
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;

View File

@ -18,6 +18,7 @@ import PasswordOptions from "./options/password.js";
import EtapiOptions from "./options/etapi.js"; import EtapiOptions from "./options/etapi.js";
import BackupOptions from "./options/backup.js"; import BackupOptions from "./options/backup.js";
import SyncOptions from "./options/sync.js"; import SyncOptions from "./options/sync.js";
import SearchEngineOptions from "./options/other/search_engine.js";
import TrayOptions from "./options/other/tray.js"; import TrayOptions from "./options/other/tray.js";
import OpenNoteInOptions from "./options/other/open_note_in.js" import OpenNoteInOptions from "./options/other/open_note_in.js"
import NoteErasureTimeoutOptions from "./options/other/note_erasure_timeout.js"; import NoteErasureTimeoutOptions from "./options/other/note_erasure_timeout.js";
@ -76,6 +77,7 @@ const CONTENT_WIDGETS = {
_optionsBackup: [ BackupOptions ], _optionsBackup: [ BackupOptions ],
_optionsSync: [ SyncOptions ], _optionsSync: [ SyncOptions ],
_optionsOther: [ _optionsOther: [
SearchEngineOptions,
TrayOptions, TrayOptions,
NoteErasureTimeoutOptions, NoteErasureTimeoutOptions,
NoteRevisionsSnapshotIntervalOptions, NoteRevisionsSnapshotIntervalOptions,

View File

@ -186,6 +186,11 @@ export default class EditableTextTypeWidget extends AbstractTextTypeWidget {
const noteComplement = await froca.getNoteComplement(note.noteId); const noteComplement = await froca.getNoteComplement(note.noteId);
await this.spacedUpdate.allowUpdateWithoutChange(() => { await this.spacedUpdate.allowUpdateWithoutChange(() => {
// https://github.com/zadam/trilium/issues/3914
// todo: quite hacky, but it works. remove it if ckeditor has fixed it.
this.$editor.trigger('focus');
this.$editor.trigger('blur')
this.watchdog.editor.setData(noteComplement.content || ""); this.watchdog.editor.setData(noteComplement.content || "");
}); });
} }

View File

@ -0,0 +1,78 @@
import OptionsWidget from "../options_widget.js";
import utils from "../../../../services/utils.js";
const TPL = `
<div class="options-section">
<h4>Search Engine</h4>
<p>Custom search engine requires both a name and a URL to be set. If either of these is not set, DuckDuckGo will be used as the default search engine.</p>
<form class="sync-setup-form">
<div class="form-group">
<label>Predefined search engine templates</label>
<select class="predefined-search-engine-select form-control">
<option value="Bing">Bing</option>
<option value="Baidu">Baidu</option>
<option value="Duckduckgo">Duckduckgo</option>
<option value="Google">Google</option>
</select>
</div>
<div class="form-group">
<label>Custom search engine name</label>
<input type="text" class="custom-search-engine-name form-control" placeholder="Customize search engine name">
</div>
<div class="form-group">
<label>Custom search engine URL should include <code>{keyword}</code> as a placeholder for the search term.</label>
<input type="text" class="custom-search-engine-url form-control" placeholder="Customize search engine url">
</div>
<div style="display: flex; justify-content: space-between;">
<button class="btn btn-primary">Save</button>
</div>
</form>
</div>`;
const SEARCH_ENGINES = {
"Bing": "https://www.bing.com/search?q={keyword}",
"Baidu": "https://www.baidu.com/s?wd={keyword}",
"Duckduckgo": "https://duckduckgo.com/?q={keyword}",
"Google": "https://www.google.com/search?q={keyword}",
}
export default class SearchEngineOptions extends OptionsWidget {
isEnabled() {
return super.isEnabled() && utils.isElectron();
}
doRender() {
this.$widget = $(TPL);
this.$form = this.$widget.find(".sync-setup-form");
this.$predefinedSearchEngineSelect = this.$widget.find(".predefined-search-engine-select");
this.$customSearchEngineName = this.$widget.find(".custom-search-engine-name");
this.$customSearchEngineUrl = this.$widget.find(".custom-search-engine-url");
this.$predefinedSearchEngineSelect.on('change', () => {
const predefinedSearchEngine = this.$predefinedSearchEngineSelect.val();
this.$customSearchEngineName[0].value = predefinedSearchEngine;
this.$customSearchEngineUrl[0].value = SEARCH_ENGINES[predefinedSearchEngine];
});
this.$form.on('submit', () => {
this.updateMultipleOptions({
'customSearchEngineName': this.$customSearchEngineName.val(),
'customSearchEngineUrl': this.$customSearchEngineUrl.val()
});
});
}
async optionsLoaded(options) {
this.$predefinedSearchEngineSelect.val("");
this.$customSearchEngineName[0].value = options.customSearchEngineName;
this.$customSearchEngineUrl[0].value = options.customSearchEngineUrl;
}
}

View File

@ -11,6 +11,7 @@ span.fancytree-node.fancytree-hide {
} }
.fancytree-title { .fancytree-title {
flex: auto;
margin-left: 7px; margin-left: 7px;
outline: none; outline: none;
position: relative; position: relative;

View File

@ -62,6 +62,8 @@ const ALLOWED_OPTIONS = new Set([
'minTocHeadings', 'minTocHeadings',
'checkForUpdates', 'checkForUpdates',
'disableTray', 'disableTray',
'customSearchEngineName',
'customSearchEngineUrl',,
'openNoteIn' 'openNoteIn'
]); ]);

View File

@ -248,6 +248,7 @@ async function exportToZip(taskContext, branch, format, res, setHeaders = true)
if (noteMeta.format === 'html') { if (noteMeta.format === 'html') {
if (!content.substr(0, 100).toLowerCase().includes("<html")) { if (!content.substr(0, 100).toLowerCase().includes("<html")) {
const cssUrl = `${"../".repeat(noteMeta.notePath.length - 1)}style.css`; const cssUrl = `${"../".repeat(noteMeta.notePath.length - 1)}style.css`;
const htmlTitle = utils.escapeHtml(title);
// <base> element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809 // <base> element will make sure external links are openable - https://github.com/zadam/trilium/issues/1289#issuecomment-704066809
content = `<html> content = `<html>
@ -256,10 +257,11 @@ async function exportToZip(taskContext, branch, format, res, setHeaders = true)
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="${cssUrl}"> <link rel="stylesheet" href="${cssUrl}">
<base target="_parent"> <base target="_parent">
<title data-trilium-title>${htmlTitle}</title>
</head> </head>
<body> <body>
<div class="content"> <div class="content">
<h1>${utils.escapeHtml(title)}</h1> <h1 data-trilium-h1>${htmlTitle}</h1>
<div class="ck-content">${content}</div> <div class="ck-content">${content}</div>
</div> </div>
@ -415,7 +417,7 @@ ${markdownContent}`;
const rootMeta = getNoteMeta(branch, { notePath: [] }, existingFileNames); const rootMeta = getNoteMeta(branch, { notePath: [] }, existingFileNames);
const metaFile = { const metaFile = {
formatVersion: 1, formatVersion: 2,
appVersion: packageInfo.version, appVersion: packageInfo.version,
files: [ rootMeta ] files: [ rootMeta ]
}; };

View File

@ -240,6 +240,8 @@ async function importZip(taskContext, fileBuffer, importRootNote) {
return /^(?:[a-z]+:)?\/\//i.test(url); return /^(?:[a-z]+:)?\/\//i.test(url);
} }
content = removeTrilumTags(content);
content = content.replace(/<h1>([^<]*)<\/h1>/gi, (match, text) => { content = content.replace(/<h1>([^<]*)<\/h1>/gi, (match, text) => {
if (noteTitle.trim() === text.trim()) { if (noteTitle.trim() === text.trim()) {
return ""; // remove whole H1 tag return ""; // remove whole H1 tag
@ -325,6 +327,18 @@ async function importZip(taskContext, fileBuffer, importRootNote) {
return content; return content;
} }
function removeTrilumTags(content) {
const tagsToRemove = [
'<h1 data-trilium-h1>([^<]*)<\/h1>',
'<title data-trilium-title>([^<]*)<\/title>'
]
for (const tag of tagsToRemove) {
let re = new RegExp(tag, "gi");
content = content.replace(re, '');
}
return content;
}
function processNoteContent(noteMeta, type, mime, content, noteTitle, filePath) { function processNoteContent(noteMeta, type, mime, content, noteTitle, filePath) {
if (noteMeta?.format === 'markdown' if (noteMeta?.format === 'markdown'
|| (!noteMeta && taskContext.data.textImportedAsText && ['text/markdown', 'text/x-markdown'].includes(mime))) { || (!noteMeta && taskContext.data.textImportedAsText && ['text/markdown', 'text/x-markdown'].includes(mime))) {

View File

@ -89,6 +89,8 @@ const defaultOptions = [
{ name: 'minTocHeadings', value: '5', isSynced: true }, { name: 'minTocHeadings', value: '5', isSynced: true },
{ name: 'checkForUpdates', value: 'true', isSynced: true }, { name: 'checkForUpdates', value: 'true', isSynced: true },
{ name: 'disableTray', value: 'false', isSynced: false }, { name: 'disableTray', value: 'false', isSynced: false },
{ name: 'customSearchEngineName', value: 'Duckduckgo', isSynced: false },
{ name: 'customSearchEngineUrl', value: 'https://duckduckgo.com/?q={keyword}', isSynced: false },
{ name: 'openNoteIn', value: 'curtab', isSynced: true }, { name: 'openNoteIn', value: 'curtab', isSynced: true },
]; ];