mirror of
https://github.com/zadam/trilium.git
synced 2026-01-06 06:34:25 +01:00
Merge remote-tracking branch 'origin/main' into feature/pdfjs_sidebar_experiments
This commit is contained in:
commit
7a883c62df
@ -341,7 +341,7 @@ paths:
|
|||||||
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).
|
||||||
In case there is a branch between parent note and child note already,
|
In case there is a branch between parent note and child note already,
|
||||||
then this will update the existing branch with prefix, notePosition and isExpanded.
|
then this will update the existing branch with prefix, notePosition and isExpanded.
|
||||||
operationId: postBranch
|
operationId: postBranch
|
||||||
requestBody:
|
requestBody:
|
||||||
@ -416,7 +416,7 @@ paths:
|
|||||||
$ref: "#/components/schemas/Error"
|
$ref: "#/components/schemas/Error"
|
||||||
delete:
|
delete:
|
||||||
description: >
|
description: >
|
||||||
deletes a branch based on the branchId supplied. If this is the last branch of the (child) note,
|
deletes a branch based on the branchId supplied. If this is the last branch of the (child) note,
|
||||||
then the note is deleted as well.
|
then the note is deleted as well.
|
||||||
operationId: deleteBranchById
|
operationId: deleteBranchById
|
||||||
responses:
|
responses:
|
||||||
@ -627,8 +627,8 @@ paths:
|
|||||||
$ref: "#/components/schemas/EntityId"
|
$ref: "#/components/schemas/EntityId"
|
||||||
post:
|
post:
|
||||||
description: >
|
description: >
|
||||||
notePositions in branches are not automatically pushed to connected clients and need a specific instruction.
|
notePositions in branches are not automatically pushed to connected clients and need a specific instruction.
|
||||||
If you want your changes to be in effect immediately, call this service after setting branches' notePosition.
|
If you want your changes to be in effect immediately, call this service after setting branches' notePosition.
|
||||||
Note that you need to supply "parentNoteId" of branch(es) with changed positions.
|
Note that you need to supply "parentNoteId" of branch(es) with changed positions.
|
||||||
operationId: postRefreshNoteOrdering
|
operationId: postRefreshNoteOrdering
|
||||||
responses:
|
responses:
|
||||||
@ -692,18 +692,20 @@ paths:
|
|||||||
application/json; charset=utf-8:
|
application/json; charset=utf-8:
|
||||||
schema:
|
schema:
|
||||||
$ref: "#/components/schemas/Error"
|
$ref: "#/components/schemas/Error"
|
||||||
/calendar/weeks/{date}:
|
/calendar/weeks/{week}:
|
||||||
get:
|
get:
|
||||||
description: returns a week note for a given date. Gets created if doesn't exist.
|
summary: Get a week note
|
||||||
operationId: getWeekFirstDayNote
|
description: Returns a week note for a given ISO week (format YYYY-Www, e.g., 2025-W01). The note is created if it doesn't exist.
|
||||||
|
operationId: getWeekNote
|
||||||
parameters:
|
parameters:
|
||||||
- name: date
|
- name: week
|
||||||
in: path
|
in: path
|
||||||
required: true
|
required: true
|
||||||
|
description: The ISO 8601 week identifier (YYYY-Www).
|
||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
format: date
|
pattern: "[0-9]{4}-W[0-9]{2}"
|
||||||
example: 2022-02-22
|
example: "2025-W01"
|
||||||
responses:
|
responses:
|
||||||
"200":
|
"200":
|
||||||
description: week note
|
description: week note
|
||||||
@ -859,8 +861,8 @@ components:
|
|||||||
type: http
|
type: http
|
||||||
scheme: basic
|
scheme: basic
|
||||||
description: >
|
description: >
|
||||||
Basic Auth where username is arbitrary string (e.g. "trilium", not checked),
|
Basic Auth where username is arbitrary string (e.g. "trilium", not checked),
|
||||||
username is the ETAPI token.
|
username is the ETAPI token.
|
||||||
To emphasize, do not use Trilium password here (won't work), only the generated
|
To emphasize, do not use Trilium password here (won't work), only the generated
|
||||||
ETAPI token (from Options -> ETAPI)
|
ETAPI token (from Options -> ETAPI)
|
||||||
schemas:
|
schemas:
|
||||||
@ -897,13 +899,13 @@ components:
|
|||||||
notePosition:
|
notePosition:
|
||||||
type: integer
|
type: integer
|
||||||
description: >
|
description: >
|
||||||
Position of the note in the parent. Normal ordering is 10, 20, 30 ...
|
Position of the note in the parent. Normal ordering is 10, 20, 30 ...
|
||||||
So if you want to create a note on the first position, use e.g. 5, for second position 15, for last e.g. 1000000
|
So if you want to create a note on the first position, use e.g. 5, for second position 15, for last e.g. 1000000
|
||||||
prefix:
|
prefix:
|
||||||
type: string
|
type: string
|
||||||
description: >
|
description: >
|
||||||
Prefix is branch (placement) specific title prefix for the note.
|
Prefix is branch (placement) specific title prefix for the note.
|
||||||
Let's say you have your note placed into two different places in the tree,
|
Let's say you have your note placed into two different places in the tree,
|
||||||
but you want to change the title a bit in one of the placements. For this you can use prefix.
|
but you want to change the title a bit in one of the placements. For this you can use prefix.
|
||||||
isExpanded:
|
isExpanded:
|
||||||
type: boolean
|
type: boolean
|
||||||
@ -930,7 +932,24 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
type:
|
type:
|
||||||
type: string
|
type: string
|
||||||
enum: [text, code, render, file, image, search, relationMap, book, noteMap, mermaid, webView, shortcut, doc, contentWidget, launcher]
|
enum:
|
||||||
|
[
|
||||||
|
text,
|
||||||
|
code,
|
||||||
|
render,
|
||||||
|
file,
|
||||||
|
image,
|
||||||
|
search,
|
||||||
|
relationMap,
|
||||||
|
book,
|
||||||
|
noteMap,
|
||||||
|
mermaid,
|
||||||
|
webView,
|
||||||
|
shortcut,
|
||||||
|
doc,
|
||||||
|
contentWidget,
|
||||||
|
launcher,
|
||||||
|
]
|
||||||
mime:
|
mime:
|
||||||
type: string
|
type: string
|
||||||
isProtected:
|
isProtected:
|
||||||
|
|||||||
@ -74,6 +74,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider {
|
|||||||
whitespaceCharacters: "\t\r\n\f\u200b\u00a0\u2002"
|
whitespaceCharacters: "\t\r\n\f\u200b\u00a0\u2002"
|
||||||
}) : "";
|
}) : "";
|
||||||
|
|
||||||
|
// TODO: This will probably never match, but should it be exclude from running on code/jsFrontend notes?
|
||||||
content = renderNoteForExport(note, branch, basePath, noteMeta.notePath.slice(0, -1), this.iconPacks);
|
content = renderNoteForExport(note, branch, basePath, noteMeta.notePath.slice(0, -1), this.iconPacks);
|
||||||
if (typeof content === "string") {
|
if (typeof content === "string") {
|
||||||
// Rewrite attachment download links
|
// Rewrite attachment download links
|
||||||
@ -130,6 +131,10 @@ export default class ShareThemeExportProvider extends ZipExportProvider {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mime.startsWith("application/javascript")) {
|
||||||
|
return "js";
|
||||||
|
}
|
||||||
|
|
||||||
// Don't add .html if the file already has .zip extension (for attachments).
|
// Don't add .html if the file already has .zip extension (for attachments).
|
||||||
if (existingExtension === ".zip") {
|
if (existingExtension === ".zip") {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -165,6 +165,15 @@ interface RenderArgs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) {
|
function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) {
|
||||||
|
// When rendering static share, non-protected JavaScript notes should be rendered as-is.
|
||||||
|
if (renderArgs.isStatic && note.mime.startsWith("application/javascript")) {
|
||||||
|
if (note.isProtected) {
|
||||||
|
return `console.log("Protected note cannot be exported.");`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return note.getContent() ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
const { header, content, isEmpty } = getContent(note);
|
const { header, content, isEmpty } = getContent(note);
|
||||||
const showLoginInShareTheme = options.getOption("showLoginInShareTheme");
|
const showLoginInShareTheme = options.getOption("showLoginInShareTheme");
|
||||||
const opts = {
|
const opts = {
|
||||||
|
|||||||
@ -15,13 +15,17 @@
|
|||||||
// We are not the first child at this level so previous
|
// We are not the first child at this level so previous
|
||||||
// should go to the end of the previous tree
|
// should go to the end of the previous tree
|
||||||
let candidate = children[index - 1];
|
let candidate = children[index - 1];
|
||||||
while (candidate.hasVisibleChildren()) {
|
while (candidate?.hasVisibleChildren()) {
|
||||||
const children = candidate.getVisibleChildNotes();
|
const visibleChildren = candidate.getVisibleChildNotes();
|
||||||
const lastChild = children[children.length - 1];
|
|
||||||
candidate = lastChild;
|
if (visibleChildren.length === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
candidate = visibleChildren[visibleChildren.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return candidate;
|
return candidate ?? null;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
const nextNote = (() => {
|
const nextNote = (() => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user