Merge remote-tracking branch 'origin/main' into react/type_widgets

This commit is contained in:
Elian Doran
2025-09-25 11:12:28 +03:00
98 changed files with 3564 additions and 2104 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@triliumnext/client",
"version": "0.98.1",
"version": "0.99.0",
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
"private": true,
"license": "AGPL-3.0-only",
@@ -15,7 +15,7 @@
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
},
"dependencies": {
"@eslint/js": "9.35.0",
"@eslint/js": "9.36.0",
"@excalidraw/excalidraw": "0.18.0",
"@fullcalendar/core": "6.1.19",
"@fullcalendar/daygrid": "6.1.19",
@@ -53,7 +53,7 @@
"mark.js": "8.11.1",
"marked": "16.3.0",
"mermaid": "11.12.0",
"mind-elixir": "5.1.1",
"mind-elixir": "5.2.1",
"normalize.css": "8.0.1",
"panzoom": "9.4.3",
"preact": "10.27.2",

View File

@@ -2,6 +2,7 @@ import { KeyboardActionNames } from "@triliumnext/commons";
import keyboardActionService, { getActionSync } from "../services/keyboard_actions.js";
import note_tooltip from "../services/note_tooltip.js";
import utils from "../services/utils.js";
import { should } from "vitest";
export interface ContextMenuOptions<T> {
x: number;
@@ -14,8 +15,13 @@ export interface ContextMenuOptions<T> {
onHide?: () => void;
}
interface MenuSeparatorItem {
title: "----";
export interface MenuSeparatorItem {
kind: "separator";
}
export interface MenuHeader {
title: string;
kind: "header";
}
export interface MenuItemBadge {
@@ -45,7 +51,7 @@ export interface MenuCommandItem<T> {
columns?: number;
}
export type MenuItem<T> = MenuCommandItem<T> | MenuSeparatorItem;
export type MenuItem<T> = MenuCommandItem<T> | MenuSeparatorItem | MenuHeader;
export type MenuHandler<T> = (item: MenuCommandItem<T>, e: JQuery.MouseDownEvent<HTMLElement, undefined, HTMLElement, HTMLElement>) => void;
export type ContextMenuEvent = PointerEvent | MouseEvent | JQuery.ContextMenuEvent;
@@ -150,14 +156,51 @@ class ContextMenu {
.addClass("show");
}
addItems($parent: JQuery<HTMLElement>, items: MenuItem<any>[]) {
for (const item of items) {
addItems($parent: JQuery<HTMLElement>, items: MenuItem<any>[], multicolumn = false) {
let $group = $parent; // The current group or parent element to which items are being appended
let shouldStartNewGroup = false; // If true, the next item will start a new group
let shouldResetGroup = false; // If true, the next item will be the last one from the group
for (let index = 0; index < items.length; index++) {
const item = items[index];
if (!item) {
continue;
}
if (item.title === "----") {
$parent.append($("<div>").addClass("dropdown-divider"));
// If the current item is a header, start a new group. This group will contain the
// header and the next item that follows the header.
if ("kind" in item && item.kind === "header") {
if (multicolumn && !shouldResetGroup) {
shouldStartNewGroup = true;
}
}
// If the next item is a separator, start a new group. This group will contain the
// current item, the separator, and the next item after the separator.
const nextItem = (index < items.length - 1) ? items[index + 1] : null;
if (multicolumn && nextItem && "kind" in nextItem && nextItem.kind === "separator") {
if (!shouldResetGroup) {
shouldStartNewGroup = true;
} else {
shouldResetGroup = true; // Continue the current group
}
}
// Create a new group to avoid column breaks before and after the seaparator / header.
// This is a workaround for Firefox not supporting break-before / break-after: avoid
// for columns.
if (shouldStartNewGroup) {
$group = $("<div class='dropdown-no-break'>");
$parent.append($group);
shouldStartNewGroup = false;
}
if ("kind" in item && item.kind === "separator") {
$group.append($("<div>").addClass("dropdown-divider"));
shouldResetGroup = true; // End the group after the next item
} else if ("kind" in item && item.kind === "header") {
$group.append($("<h6>").addClass("dropdown-header").text(item.title));
shouldResetGroup = true;
} else {
const $icon = $("<span>");
@@ -259,16 +302,24 @@ class ContextMenu {
$link.addClass("dropdown-toggle");
const $subMenu = $("<ul>").addClass("dropdown-menu");
if (!this.isMobile && item.columns) {
$subMenu.css("column-count", item.columns);
const hasColumns = !!item.columns && item.columns > 1;
if (!this.isMobile && hasColumns) {
$subMenu.css("column-count", item.columns!);
}
this.addItems($subMenu, item.items);
this.addItems($subMenu, item.items, hasColumns);
$item.append($subMenu);
}
$parent.append($item);
$group.append($item);
// After adding a menu item, if the previous item was a separator or header,
// reset the group so that the next item will be appended directly to the parent.
if (shouldResetGroup) {
$group = $parent;
shouldResetGroup = false;
};
}
}
}

View File

@@ -37,7 +37,7 @@ function setupContextMenu() {
handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)
});
items.push({ title: `----` });
items.push({ kind: "separator" });
}
if (params.isEditable) {
@@ -112,7 +112,7 @@ function setupContextMenu() {
// Replace the placeholder with the real search keyword.
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
items.push({ title: "----" });
items.push({ kind: "separator" });
items.push({
title: t("electron_context_menu.search_online", { term: shortenedSelection, searchEngine: searchEngineName }),

View File

@@ -45,16 +45,16 @@ export default class LauncherContextMenu implements SelectMenuItemEventListener<
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-script-launcher"), command: "addScriptLauncher", uiIcon: "bx bx-code-curly" } : null,
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-custom-widget"), command: "addWidgetLauncher", uiIcon: "bx bx-customize" } : null,
isVisibleRoot || isAvailableRoot ? { title: t("launcher_context_menu.add-spacer"), command: "addSpacerLauncher", uiIcon: "bx bx-dots-horizontal" } : null,
isVisibleRoot || isAvailableRoot ? { title: "----" } : null,
isVisibleRoot || isAvailableRoot ? { kind: "separator" } : null,
isAvailableItem ? { title: t("launcher_context_menu.move-to-visible-launchers"), command: "moveLauncherToVisible", uiIcon: "bx bx-show", enabled: true } : null,
isVisibleItem ? { title: t("launcher_context_menu.move-to-available-launchers"), command: "moveLauncherToAvailable", uiIcon: "bx bx-hide", enabled: true } : null,
isVisibleItem || isAvailableItem ? { title: "----" } : null,
isVisibleItem || isAvailableItem ? { kind: "separator" } : null,
{ title: `${t("launcher_context_menu.duplicate-launcher")}`, command: "duplicateSubtree", uiIcon: "bx bx-outline", enabled: isItem },
{ title: `${t("launcher_context_menu.delete")}`, command: "deleteNotes", uiIcon: "bx bx-trash destructive-action-icon", enabled: canBeDeleted },
{ title: "----" },
{ kind: "separator" },
{ title: t("launcher_context_menu.reset"), command: "resetLauncher", uiIcon: "bx bx-reset destructive-action-icon", enabled: canBeReset }
];

View File

@@ -93,7 +93,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
? null
: { title: t("tree-context-menu.unhoist-note"), command: "toggleNoteHoisting", keyboardShortcut: "toggleNoteHoisting", uiIcon: "bx bx-door-open" },
{ title: "----" },
{ kind: "separator" },
{
title: t("tree-context-menu.insert-note-after"),
@@ -115,13 +115,13 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
columns: 2
},
{ title: "----" },
{ kind: "separator" },
{ title: t("tree-context-menu.protect-subtree"), command: "protectSubtree", uiIcon: "bx bx-check-shield", enabled: noSelectedNotes },
{ title: t("tree-context-menu.unprotect-subtree"), command: "unprotectSubtree", uiIcon: "bx bx-shield", enabled: noSelectedNotes },
{ title: "----" },
{ kind: "separator" },
{
title: t("tree-context-menu.advanced"),
@@ -130,7 +130,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
items: [
{ title: t("tree-context-menu.apply-bulk-actions"), command: "openBulkActionsDialog", uiIcon: "bx bx-list-plus", enabled: true },
{ title: "----" },
{ kind: "separator" },
{
title: t("tree-context-menu.edit-branch-prefix"),
@@ -141,7 +141,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
},
{ title: t("tree-context-menu.convert-to-attachment"), command: "convertNoteToAttachment", uiIcon: "bx bx-paperclip", enabled: isNotRoot && !isHoisted && notOptionsOrHelp },
{ title: "----" },
{ kind: "separator" },
{ title: t("tree-context-menu.expand-subtree"), command: "expandSubtree", keyboardShortcut: "expandSubtree", uiIcon: "bx bx-expand", enabled: noSelectedNotes },
{ title: t("tree-context-menu.collapse-subtree"), command: "collapseSubtree", keyboardShortcut: "collapseSubtree", uiIcon: "bx bx-collapse", enabled: noSelectedNotes },
@@ -153,14 +153,14 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
enabled: noSelectedNotes && notSearch
},
{ title: "----" },
{ kind: "separator" },
{ title: t("tree-context-menu.copy-note-path-to-clipboard"), command: "copyNotePathToClipboard", uiIcon: "bx bx-directions", enabled: true },
{ title: t("tree-context-menu.recent-changes-in-subtree"), command: "recentChangesInSubtree", uiIcon: "bx bx-history", enabled: noSelectedNotes && notOptionsOrHelp }
]
},
{ title: "----" },
{ kind: "separator" },
{
title: t("tree-context-menu.cut"),
@@ -241,13 +241,13 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
enabled: isNotRoot && !isHoisted && parentNotSearch && notOptionsOrHelp
},
{ title: "----" },
{ kind: "separator" },
{ title: t("tree-context-menu.import-into-note"), command: "importIntoNote", uiIcon: "bx bx-import", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
{ title: t("tree-context-menu.export"), command: "exportNote", uiIcon: "bx bx-export", enabled: notSearch && noSelectedNotes && notOptionsOrHelp },
{ title: "----" },
{ kind: "separator" },
{
title: t("tree-context-menu.search-in-subtree"),

View File

@@ -8,6 +8,7 @@ import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
import FAttachment, { type FAttachmentRow } from "../entities/fattachment.js";
import type { default as FNote, FNoteRow } from "../entities/fnote.js";
import type { EntityChange } from "../server_types.js";
import type { OptionNames } from "@triliumnext/commons";
async function processEntityChanges(entityChanges: EntityChange[]) {
const loadResults = new LoadResults(entityChanges);
@@ -30,9 +31,8 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
continue; // only noise
}
options.set(attributeEntity.name, attributeEntity.value);
loadResults.addOption(attributeEntity.name);
options.set(attributeEntity.name as OptionNames, attributeEntity.value);
loadResults.addOption(attributeEntity.name as OptionNames);
} else if (ec.entityName === "attachments") {
processAttachment(loadResults, ec);
} else if (ec.entityName === "blobs") {

View File

@@ -1,4 +1,4 @@
import type { AttachmentRow, EtapiTokenRow } from "@triliumnext/commons";
import type { AttachmentRow, EtapiTokenRow, OptionNames } from "@triliumnext/commons";
import type { AttributeType } from "../entities/fattribute.js";
import type { EntityChange } from "../server_types.js";
@@ -67,7 +67,7 @@ export default class LoadResults {
private revisionRows: RevisionRow[];
private noteReorderings: string[];
private contentNoteIdToComponentId: ContentNoteIdToComponentIdRow[];
private optionNames: string[];
private optionNames: OptionNames[];
private attachmentRows: AttachmentRow[];
public hasEtapiTokenChanges: boolean = false;
@@ -180,11 +180,11 @@ export default class LoadResults {
return this.contentNoteIdToComponentId.find((l) => l.noteId === noteId && l.componentId !== componentId);
}
addOption(name: string) {
addOption(name: OptionNames) {
this.optionNames.push(name);
}
isOptionReloaded(name: string) {
isOptionReloaded(name: OptionNames) {
return this.optionNames.includes(name);
}

View File

@@ -1,7 +1,7 @@
import { t } from "./i18n.js";
import froca from "./froca.js";
import server from "./server.js";
import type { MenuCommandItem, MenuItem, MenuItemBadge } from "../menus/context_menu.js";
import type { MenuCommandItem, MenuItem, MenuItemBadge, MenuSeparatorItem } from "../menus/context_menu.js";
import type { NoteType } from "../entities/fnote.js";
import type { TreeCommandNames } from "../menus/tree_context_menu.js";
@@ -73,7 +73,7 @@ const BETA_BADGE = {
title: t("note_types.beta-feature")
};
const SEPARATOR = { title: "----" };
const SEPARATOR: MenuSeparatorItem = { kind: "separator" };
const creationDateCache = new Map<string, Date>();
let rootCreationDate: Date | undefined;
@@ -81,8 +81,8 @@ let rootCreationDate: Date | undefined;
async function getNoteTypeItems(command?: TreeCommandNames) {
const items: MenuItem<TreeCommandNames>[] = [
...getBlankNoteTypes(command),
...await getBuiltInTemplates(t("note_types.collections"), command, true),
...await getBuiltInTemplates(null, command, false),
...await getBuiltInTemplates(t("note_types.collections"), command, true),
...await getUserTemplates(command)
];
@@ -121,7 +121,10 @@ async function getUserTemplates(command?: TreeCommandNames) {
}
const items: MenuItem<TreeCommandNames>[] = [
SEPARATOR
{
title: t("note_type_chooser.templates"),
kind: "header"
}
];
for (const templateNote of templateNotes) {
@@ -158,8 +161,7 @@ async function getBuiltInTemplates(title: string | null, command: TreeCommandNam
if (title) {
items.push({
title: title,
enabled: false,
uiIcon: "bx bx-empty"
kind: "header"
});
} else {
items.push(SEPARATOR);

View File

@@ -20,7 +20,7 @@ class Options {
this.arr = arr;
}
get(key: string) {
get(key: OptionNames) {
return this.arr?.[key] as string;
}
@@ -40,7 +40,7 @@ class Options {
}
}
getInt(key: string) {
getInt(key: OptionNames) {
const value = this.arr?.[key];
if (typeof value === "number") {
return value;
@@ -52,7 +52,7 @@ class Options {
return null;
}
getFloat(key: string) {
getFloat(key: OptionNames) {
const value = this.arr?.[key];
if (typeof value !== "string") {
return null;
@@ -60,15 +60,15 @@ class Options {
return parseFloat(value);
}
is(key: string) {
is(key: OptionNames) {
return this.arr[key] === "true";
}
set(key: string, value: OptionValue) {
set(key: OptionNames, value: OptionValue) {
this.arr[key] = value;
}
async save(key: string, value: OptionValue) {
async save(key: OptionNames, value: OptionValue) {
this.set(key, value);
const payload: Record<string, OptionValue> = {};
@@ -85,7 +85,7 @@ class Options {
await server.put<void>("options", newValues);
}
async toggle(key: string) {
async toggle(key: OptionNames) {
await this.save(key, (!this.is(key)).toString());
}
}

View File

@@ -1,10 +1,9 @@
import ws from "./ws.js";
import utils from "./utils.js";
export interface ToastOptions {
id?: string;
icon: string;
title: string;
title?: string;
message: string;
delay?: number;
autohide?: boolean;
@@ -12,20 +11,32 @@ export interface ToastOptions {
}
function toast(options: ToastOptions) {
const $toast = $(
`<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<strong class="me-auto">
const $toast = $(options.title
? `\
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-header">
<strong class="me-auto">
<span class="bx bx-${options.icon}"></span>
<span class="toast-title"></span>
</strong>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body"></div>
</div>`
: `
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
<div class="toast-icon">
<span class="bx bx-${options.icon}"></span>
<span class="toast-title"></span>
</strong>
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
<div class="toast-body"></div>
</div>`
</div>
<div class="toast-body"></div>
<div class="toast-header">
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
</div>
</div>`
);
$toast.find(".toast-title").text(options.title);
$toast.toggleClass("no-title", !options.title);
$toast.find(".toast-title").text(options.title ?? "");
$toast.find(".toast-body").html(options.message);
if (options.id) {
@@ -70,7 +81,6 @@ function showMessage(message: string, delay = 2000) {
console.debug(utils.now(), "message:", message);
toast({
title: "Info",
icon: "check",
message: message,
autohide: true,
@@ -82,7 +92,6 @@ export function showError(message: string, delay = 10000) {
console.log(utils.now(), "error: ", message);
toast({
title: "Error",
icon: "alert",
message: message,
autohide: true,

View File

@@ -7,6 +7,7 @@ import appContext from "../components/app_context.js";
import { t } from "./i18n.js";
import type { EntityChange } from "../server_types.js";
import { WebSocketMessage } from "@triliumnext/commons";
import toast from "./toast.js";
type MessageHandler = (message: WebSocketMessage) => void;
let messageHandlers: MessageHandler[] = [];
@@ -278,13 +279,17 @@ function connectWebSocket() {
async function sendPing() {
if (Date.now() - lastPingTs > 30000) {
console.log(
utils.now(),
"Lost websocket connection to the backend. If you keep having this issue repeatedly, you might want to check your reverse proxy (nginx, apache) configuration and allow/unblock WebSocket."
);
console.warn(utils.now(), "Lost websocket connection to the backend");
toast.showPersistent({
id: "lost-websocket-connection",
title: t("ws.lost-websocket-connection-title"),
message: t("ws.lost-websocket-connection-message"),
icon: "no-signal"
});
}
if (ws.readyState === ws.OPEN) {
toast.closePersistent("lost-websocket-connection");
ws.send(
JSON.stringify({
type: "ping",

View File

@@ -363,21 +363,17 @@ button kbd {
.tabulator-popup-container {
color: var(--menu-text-color) !important;
font-size: inherit;
background-color: var(--menu-background-color) !important;
background: var(--menu-background-color) !important;
user-select: none;
-webkit-user-select: none;
--bs-dropdown-zindex: 999;
--bs-dropdown-link-active-bg: var(--active-item-background-color) !important;
}
.dropdown-menu .dropdown-divider {
break-before: avoid;
break-after: avoid;
}
body.desktop .dropdown-menu,
body.desktop .tabulator-popup-container {
border: 1px solid var(--dropdown-border-color);
column-rule: 1px solid var(--dropdown-border-color);
box-shadow: 0px 10px 20px rgba(0, 0, 0, var(--dropdown-shadow-opacity));
animation: dropdown-menu-opening 100ms ease-in;
}
@@ -419,7 +415,7 @@ body.desktop .tabulator-popup-container {
}
.dropdown-menu a:hover:not(.disabled),
.dropdown-item:hover:not(.disabled, .dropdown-item-container),
.dropdown-item:hover:not(.disabled, .dropdown-container-item),
.tabulator-menu-item:hover {
color: var(--hover-item-text-color) !important;
background-color: var(--hover-item-background-color) !important;
@@ -427,9 +423,9 @@ body.desktop .tabulator-popup-container {
cursor: pointer;
}
.dropdown-item-container,
.dropdown-item-container:hover,
.dropdown-item-container:active {
.dropdown-container-item,
.dropdown-item.dropdown-container-item:hover,
.dropdown-container-item:active {
background: transparent;
cursor: default;
}
@@ -444,9 +440,11 @@ body #context-menu-container .dropdown-item > span {
align-items: center;
}
.dropdown-item span.keyboard-shortcut {
.dropdown-item span.keyboard-shortcut,
.dropdown-item *:not(.keyboard-shortcut) > kbd {
flex-grow: 1;
text-align: right;
padding-inline-start: 12px;
}
.dropdown-menu kbd {
@@ -456,8 +454,6 @@ body #context-menu-container .dropdown-item > span {
box-shadow: none;
padding-bottom: 0;
padding: 0;
flex-grow: 1;
text-align: right;
}
.dropdown-item,
@@ -466,6 +462,12 @@ body #context-menu-container .dropdown-item > span {
border: 1px solid transparent !important;
}
/* This is a workaround for Firefox not supporting break-before / break-after: avoid on columns.
* It usually wraps a menu item followed by a separator / header and another menu item. */
.dropdown-no-break {
break-inside: avoid;
}
.dropdown-item.disabled,
.dropdown-item.disabled kbd {
color: #aaa !important;
@@ -473,9 +475,9 @@ body #context-menu-container .dropdown-item > span {
.dropdown-item.active,
.dropdown-item:focus {
color: var(--active-item-text-color) !important;
background-color: var(--active-item-background-color) !important;
border-color: var(--active-item-border-color) !important;
color: var(--active-item-text-color);
background-color: var(--active-item-background-color);
border-color: var(--active-item-border-color);
outline: none;
}
@@ -1139,6 +1141,26 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
overflow: hidden;
}
.toast.no-title {
display: flex;
flex-direction: row;
}
.toast.no-title .toast-icon {
display: flex;
align-items: center;
padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);
}
.toast.no-title .toast-body {
padding-left: 0;
padding-right: 0;
}
.toast.no-title .toast-header {
background-color: unset !important;
}
.ck-mentions .ck-button {
font-size: var(--detail-font-size) !important;
padding: 5px;
@@ -1874,11 +1896,6 @@ textarea {
width: 100%;
}
.jump-to-note-results .aa-dropdown-menu .aa-suggestion:hover,
.jump-to-note-results .aa-dropdown-menu .aa-cursor {
background-color: var(--hover-item-background-color, #f8f9fa);
}
/* Command palette styling */
.jump-to-note-dialog .command-suggestion {
display: flex;

View File

@@ -152,7 +152,7 @@
--launcher-pane-horiz-border-color: rgb(22, 22, 22);
--launcher-pane-horiz-background-color: #282828;
--launcher-pane-horiz-text-color: #909090;
--launcher-pane-horiz-text-color: #b8b8b8;
--launcher-pane-horiz-button-hover-color: #ffffff;
--launcher-pane-horiz-button-hover-background: #ffffff1c;
--launcher-pane-horiz-button-hover-shadow: unset;
@@ -172,9 +172,10 @@
--tab-close-button-hover-background: #a45353;
--tab-close-button-hover-color: white;
--active-tab-background-color: #ffffff1c;
--active-tab-hover-background-color: var(--active-tab-background-color);
--active-tab-icon-color: #a9a9a9;
--active-tab-text-color: #ffffffcd;
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.2), -1px -1px 3px rgba(0, 0, 0, 0.4);
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.4);

View File

@@ -165,9 +165,10 @@
--tab-close-button-hover-background: #c95a5a;
--tab-close-button-hover-color: white;
--active-tab-background-color: white;
--active-tab-hover-background-color: var(--active-tab-background-color);
--active-tab-icon-color: gray;
--active-tab-text-color: black;
--active-tab-shadow: 3px 3px 6px rgba(0, 0, 0, 0.1), -1px -1px 3px rgba(0, 0, 0, 0.05);
--active-tab-dragging-shadow: var(--active-tab-shadow), 0 0 20px rgba(0, 0, 0, 0.1);

View File

@@ -102,10 +102,6 @@ body.backdrop-effects-disabled {
font-size: 0.9rem !important;
}
.dropdown-menu {
--scrollbar-background-color: var(--menu-background-color);
}
body.mobile .dropdown-menu {
backdrop-filter: var(--dropdown-backdrop-filter);
border-radius: var(--dropdown-border-radius);
@@ -154,12 +150,22 @@ body.desktop .dropdown-submenu .dropdown-menu {
.dropdown-item,
body.mobile .dropdown-submenu .dropdown-toggle {
padding: 2px 2px 2px 8px !important;
padding-inline-end: 16px !important;
padding-inline-end: 22px !important;
/* Note: the right padding should also accommodate the submenu arrow. */
border-radius: 6px;
cursor: default !important;
}
:root .dropdown-item:focus-visible {
outline: 2px solid var(--input-focus-outline-color) !important;
background-color: transparent;
color: unset;
}
:root .dropdown-item:active {
background: unset;
}
body.mobile .dropdown-submenu {
padding: 0 !important;
}
@@ -289,6 +295,20 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
transform: rotate(270deg);
}
/* Dropdown item button (used in zoom buttons in global menu) */
li.dropdown-item a.dropdown-item-button {
border: unset;
}
li.dropdown-item a.dropdown-item-button.bx {
color: var(--menu-text-color) !important;
}
li.dropdown-item a.dropdown-item-button:focus-visible {
outline: 2px solid var(--input-focus-outline-color) !important;
}
/*
* TOASTS
*/
@@ -307,30 +327,48 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
--modal-control-button-color: var(--bs-toast-color);
display: flex;
flex-direction: row-reverse;
flex-direction: column;
backdrop-filter: blur(6px);
}
#toast-container .toast .toast-header {
padding: 0 !important;
background: transparent !important;
border-bottom: none;
}
#toast-container .toast .toast-header strong {
/* The title of the toast is no longer displayed */
display: none;
#toast-container .toast .toast-header strong > * {
vertical-align: middle;
}
#toast-container .toast .toast-header .btn-close {
margin: 0 var(--bs-toast-padding-x) 0 12px;
margin: 0 0 0 12px;
}
#toast-container .toast.no-title {
flex-direction: row;
}
#toast-container .toast .toast-body {
flex-grow: 1;
overflow: hidden;
text-overflow: ellipsis;
padding-top: 0;
color: var(--muted-text-color);
}
#toast-container .toast:not(.no-title) .bx {
margin-right: 0.5em;
font-size: 1.1em;
}
#toast-container .toast.no-title .bx {
margin-right: 0;
font-size: 1.3em;
}
#toast-container .toast.no-title .toast-body {
padding-top: var(--bs-toast-padding-x);
color: var(--toast-text-color);
}
/*

View File

@@ -84,7 +84,7 @@ button.btn.btn-success kbd {
*/
:root .icon-action:not(.global-menu-button),
:root .btn.tn-tool-button,
:root .tn-tool-button,
:root .btn-group .tn-tool-button:not(:last-child),
:root .btn-group .tn-tool-button:last-child {
width: var(--icon-button-size);
@@ -197,8 +197,8 @@ input[type="password"]:focus,
input[type="date"]:focus,
input[type="time"]:focus,
input[type="datetime-local"]:focus,
:root input.ck.ck-input-text:focus,
:root input.ck.ck-input-number:focus,
:root input.ck.ck-input-text:not([readonly="true"]):focus,
:root input.ck.ck-input-number:not([readonly="true"]):focus,
textarea.form-control:focus,
textarea:focus,
:root textarea.ck.ck-textarea:focus,

View File

@@ -109,6 +109,11 @@
* NOTE MAP
*/
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button,
.note-map-widget .fixnodes-type-switcher .tn-tool-button {
padding: unset;
}
.note-detail-note-map .fixnodes-type-switcher .tn-tool-button.toggled {
color: var(--tab-close-button-hover-background);
}

View File

@@ -94,18 +94,17 @@ div.promoted-attributes-container {
/* Note type dropdown */
div.note-type-dropdown .check {
ul.note-type-dropdown .check {
margin-right: 6px;
}
ul.note-type-dropdown li.dropdown-item {
--menu-item-icon-vert-offset: 0;
}
/* Editability dropdown */
div.editability-dropdown a.dropdown-item {
padding: 4px 16px 4px 0;
align-items: start !important;
}
.editability-dropdown .dropdown-item .check {
ul.editability-dropdown li.dropdown-item > div {
margin-left: 4px;
}

View File

@@ -304,18 +304,6 @@ body.layout-horizontal > .horizontal {
color: var(--tooltip-foreground-color) !important;
}
/*
* Global menu
*/
.global-menu div.zoom-buttons a {
border: unset;
}
.global-menu div.zoom-buttons a.bx {
color: var(--menu-text-color) !important;
}
/*
* Calendar
*/
@@ -348,6 +336,21 @@ body.layout-horizontal > .horizontal {
--select-arrow-svg: initial; /* Disable the dropdown arrow */
}
/* Week number column */
.calendar-dropdown-widget .calendar-week-number {
transform: rotate(270deg);
justify-content: center;
padding: 0;
opacity: 0.5;
font-size: 1em;
font-weight: 700;
letter-spacing: .5pt;
}
.calendar-dropdown-widget .calendar-week-number::after {
display: none;
}
@media (max-width: 992px) {
.calendar-dropdown-widget .calendar-header button {
margin: 0 !important;
@@ -562,15 +565,21 @@ div.quick-search .search-button.show {
transition: background-color 100ms ease-out !important;
}
/*
* Quick search results
*/
div.quick-search .dropdown-menu {
--quick-search-item-delimiter-color: transparent;
--menu-item-icon-vert-offset: -.065em;
}
/*
* TO FIX: The quick search results dropdown has a backdrop issue with the tree panel
* when background effects are enabled in Electron.
* As a temporary workaround, the backdrop and transparency are disabled for the
* vertical layout.
*/
body.layout-vertical.background-effects div.quick-search .dropdown-menu {
--menu-background-color: var(--menu-background-color-no-backdrop) !important;
}
/* Item */
.quick-search .dropdown-menu *.dropdown-item {
padding: 8px 12px !important;
@@ -866,7 +875,10 @@ body.mobile .fancytree-node > span {
}
.tab-row-container .toggle-button {
margin: 6px 10px !important;
--icon-button-size: 30px;
--icon-button-icon-ratio: .6;
margin: 3px 6px auto 8px !important;
}
.tab-row-container {
@@ -896,7 +908,7 @@ body.electron.background-effects.layout-horizontal .tab-row-container .toggle-bu
bottom: 0;
left: -10px;
right: -10px;
top: 29px;
top: 32px;
height: 1px;
border-bottom: 1px solid var(--launcher-pane-horiz-border-color);
}
@@ -1043,6 +1055,14 @@ body.layout-horizontal .tab-row-widget .note-tab .note-tab-wrapper {
transform: translate3d(var(--tab-first-item-horiz-offset), 0, 0);
}
:root .tab-row-widget .note-tab .note-tab-icon {
padding-right: 5px; /* The gap between the icon and the title */
}
.tab-row-widget .note-tab[active] .note-tab-icon {
color: var(--active-tab-icon-color);
}
.tab-row-widget .note-tab .note-tab-title {
text-overflow: ellipsis;
}
@@ -1390,6 +1410,13 @@ div.promoted-attribute-cell .multiplicity:has(span) {
margin-left: 8px;
margin-right: calc(var(--pa-card-padding-left) - var(--pa-card-padding-right));
font-size: 0; /* Prevent whitespaces creating a gap between buttons */
display: flex;
}
div.promoted-attribute-cell .multiplicity:has(span) span {
display: flex;
align-items: center;
justify-content: center;
}
/*

View File

@@ -1353,7 +1353,7 @@
"oauth_title": "OAuth/OpenID 认证",
"oauth_description": "OpenID 是一种标准化方式,允许您使用其他服务(如 Google的账号登录网站来验证您的身份。默认的身份提供者是 Google但您可以更改为任何其他 OpenID 提供者。点击<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">这里</a>了解更多信息。请参阅这些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指南</a> 通过 Google 设置 OpenID 服务。",
"oauth_description_warning": "要启用 OAuth/OpenID您需要设置 config.ini 文件中的 OAuth/OpenID 基础 URL、客户端 ID 和客户端密钥,并重新启动应用程序。如果要从环境变量设置,请设置 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 环境变量。",
"oauth_missing_vars": "缺少以下设置项:{{variables}}",
"oauth_missing_vars": "缺少以下设置项:{{-variables}}",
"oauth_user_account": "用户账号: ",
"oauth_user_email": "用户邮箱: ",
"oauth_user_not_logged_in": "未登录!"

View File

@@ -1 +1,21 @@
{}
{
"about": {
"title": "O Trilium Notes",
"homepage": "Domovská stránka:",
"app_version": "Verze aplikace:",
"db_version": "Verze DB:",
"sync_version": "Verze sync:",
"build_date": "Datum sestavení:",
"build_revision": "Revize sestavení:",
"data_directory": "Datový adresář:"
},
"toast": {
"critical-error": {
"title": "Kritická chyba",
"message": "Nastala kritická chyba která aplikaci brání ve spuštění:\n\n{{message}}\n\nPravděpodobně neočekávaným způsobem selhal skript. Pokuste se restartovat aplikaci v safe módu a problém napravit."
},
"widget-error": {
"title": "Nepodařilo se inicializovat widget"
}
}
}

View File

@@ -1901,7 +1901,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID ist ein standardisiertes Verfahren, mit dem Sie sich über ein Konto eines anderen Dienstes, beispielsweise Google, bei Websites anmelden können, um Ihre Identität zu bestätigen. Der Standardaussteller ist Google, Sie können jedoch jeden anderen OpenID-Anbieter auswählen. Weitere Informationen finden Sie <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">hier</a>. Befolgen Sie diese <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">Anweisungen</a>, um einen OpenID-Dienst über Google einzurichten.",
"oauth_description_warning": "Um OAuth/OpenID zu aktivieren, müssen Sie die OAuth/OpenID-Basis-URL, die Client-ID und den Client-Secret in der Datei config.ini festlegen und die Anwendung neu starten. Wenn Sie die Einstellungen über Umgebungsvariablen vornehmen möchten, legen Sie bitte TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID und TRILIUM_OAUTH_CLIENT_SECRET fest.",
"oauth_missing_vars": "Fehlende Einstellung: {{variables}}",
"oauth_missing_vars": "Fehlende Einstellung: {{-variables}}",
"oauth_user_account": "Benutzerkonto: ",
"oauth_user_email": "Benutzer E-Mail: ",
"oauth_user_not_logged_in": "Nicht eingeloggt!"

View File

@@ -1517,7 +1517,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
"oauth_description_warning": "To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Missing settings: {{variables}}",
"oauth_missing_vars": "Missing settings: {{-variables}}",
"oauth_user_account": "User Account: ",
"oauth_user_email": "User Email: ",
"oauth_user_not_logged_in": "Not logged in!"
@@ -1787,7 +1787,9 @@
"ws": {
"sync-check-failed": "Sync check failed!",
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
"encountered-error": "Encountered error \"{{message}}\", check out the console."
"encountered-error": "Encountered error \"{{message}}\", check out the console.",
"lost-websocket-connection-title": "Lost connection to the server",
"lost-websocket-connection-message": "Check your reverse proxy (e.g. nginx or Apache) configuration to ensure WebSocket connections are properly allowed and not being blocked."
},
"hoisted_note": {
"confirm_unhoisting": "Requested note '{{requestedNote}}' is outside of hoisted note '{{hoistedNote}}' subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?"
@@ -1962,7 +1964,11 @@
"editorfeatures": {
"title": "Features",
"emoji_completion_enabled": "Enable Emoji auto-completion",
"note_completion_enabled": "Enable note auto-completion"
"emoji_completion_description": "If enabled, emojis can be easily inserted into text by typing `:`, followed by the name of an emoji.",
"note_completion_enabled": "Enable note auto-completion",
"note_completion_description": "If enabled, links to notes can be created by typing `@` followed by the title of a note.",
"slash_commands_enabled": "Enable slash commands",
"slash_commands_description": "If enabled, editing commands such as inserting line breaks or headings can be toggled by typing `/`."
},
"table_view": {
"new-row": "New row",

View File

@@ -1490,7 +1490,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
"oauth_description_warning": "Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Ajustes faltantes: {{variables}}",
"oauth_missing_vars": "Ajustes faltantes: {{-variables}}",
"oauth_user_account": "Cuenta de usuario: ",
"oauth_user_email": "Correo electrónico de usuario: ",
"oauth_user_not_logged_in": "¡No ha iniciado sesión!"

View File

@@ -66,7 +66,8 @@
"toggle-zen-mode": "禅モード",
"switch_to_mobile_version": "モバイル版に切り替え",
"switch_to_desktop_version": "デスクトップ版に切り替え",
"configure_launchbar": "ランチャーバーの設定"
"configure_launchbar": "ランチャーバーの設定",
"show_shared_notes_subtree": "共有ノートのサブツリーを表示"
},
"left_pane_toggle": {
"show_panel": "パネルを表示",
@@ -120,7 +121,9 @@
"september": "9月",
"october": "10月",
"november": "11月",
"december": "12月"
"december": "12月",
"cannot_find_day_note": "dayートが見つかりません",
"cannot_find_week_note": "weekートが見つかりません"
},
"note_icon": {
"change_note_icon": "ノートアイコンの変更",
@@ -191,7 +194,8 @@
"search_parameters": "検索パラメータ",
"unknown_search_option": "不明な検索オプション {{searchOptionName}}",
"search_note_saved": "検索ノートが {{- notePathTitle}} に保存されました",
"actions_executed": "アクションが実行されました。"
"actions_executed": "アクションが実行されました。",
"ancestor": "祖先:"
},
"shortcuts": {
"multiple_shortcuts": "同じアクションに対して複数のショートカットを設定する場合、カンマで区切ることができます。",
@@ -309,7 +313,8 @@
},
"import-status": "インポート状況",
"in-progress": "インポート中: {{progress}}",
"successful": "インポートは正常に終了しました。"
"successful": "インポートは正常に終了しました。",
"explodeArchives": "<code>.zip</code>, <code>.enex</code> および <code>.opml</code> アーカイブの内容を読み取ります。"
},
"password_not_set": {
"title": "パスワードが設定されていない",
@@ -391,7 +396,10 @@
"converted-to-attachments": "{{count}}ノートが添付ファイルに変換されました。",
"convert-to-attachment": "添付ファイルに変換",
"convert-to-attachment-confirm": "選択したノートを親ノートの添付ファイルに変換しますか?",
"open-in-popup": "クイックエディット"
"open-in-popup": "クイックエディット",
"hoist-note": "ホイストノート",
"unhoist-note": "ノートをホイストしない",
"edit-branch-prefix": "ブランチの接頭辞を編集"
},
"zen_mode": {
"button_exit": "禅モードを退出"
@@ -432,10 +440,16 @@
"search_notes_description": "高度な検索を開く",
"search_subtree_description": "現在のサブツリー内を検索",
"search_history_title": "検索履歴を表示",
"search_history_description": "過去の検索結果を見る"
"search_history_description": "過去の検索結果を見る",
"show_attachments_title": "添付ファイルを表示",
"show_attachments_description": "ノートの添付ファイルを表示",
"configure_launch_bar_title": "ランチャーバーの設定",
"configure_launch_bar_description": "ランチャーバーの構成を開き、項目を追加または削除します。"
},
"delete_note": {
"delete_note": "ノートを削除"
"delete_note": "ノートを削除",
"delete_matched_notes": "一致したノートを削除",
"delete_matched_notes_description": "これにより、一致したノートが削除されます。"
},
"board_view": {
"delete-note": "ノートを削除",
@@ -444,7 +458,15 @@
"delete-column": "列を削除",
"delete-column-confirmation": "本当にこの列を削除しますか?対応する属性は、この列の下のノートでも削除されます。",
"new-item": "新しいアイテム",
"add-column": "列を追加"
"add-column": "列を追加",
"remove-from-board": "ボードから削除",
"archive-note": "アーカイブノート",
"unarchive-note": "ノートのアーカイブを解除",
"move-to": "移動先",
"new-item-placeholder": "ノートのタイトルを入力...",
"add-column-placeholder": "列名を入力...",
"edit-note-title": "クリックしてノートのタイトルを編集",
"edit-column-title": "クリックして列のタイトルを編集"
},
"code_buttons": {
"execute_button_title": "スクリプトを実行",
@@ -454,7 +476,9 @@
"sql_console_saved_message": "SQLコンソールが {{note_path}} に保存されました"
},
"execute_script": {
"execute_script": "スクリプトを実行"
"execute_script": "スクリプトを実行",
"help_text": "一致したノートに対して簡単なスクリプトを実行できます。",
"example_2": "より複雑な例としては、一致したノートの属性をすべて削除することが挙げられます:"
},
"script_executor": {
"execute_script": "スクリプトを実行",
@@ -484,7 +508,8 @@
"calendar": "カレンダー",
"table": "テーブル",
"geo-map": "ジオマップ",
"board": "ボード"
"board": "ボード",
"include_archived_notes": "アーカイブされたノートを表示"
},
"note_types": {
"geo-map": "ジオマップ",
@@ -493,7 +518,7 @@
"text": "テキスト",
"code": "コード",
"saved-search": "検索の保存",
"relation-map": "関係マップ",
"relation-map": "リレーションマップ",
"note-map": "ノートマップ",
"render-note": "レンダリングノート",
"book": "コレクション",
@@ -563,7 +588,14 @@
"settings": "ノートの変更履歴の設定",
"file_size": "ファイルサイズ:",
"preview": "プレビュー:",
"preview_not_available": "このノートタイプではプレビューは利用できません。"
"preview_not_available": "このノートタイプではプレビューは利用できません。",
"diff_on": "差分を表示",
"diff_off": "内容を表示",
"diff_on_hint": "クリックしてノートソースとの差分を表示",
"diff_off_hint": "クリックしてノートの内容を表示",
"diff_not_available": "差分は利用できません。",
"snapshot_interval": "ノートの変更履歴の記録間隔: {{seconds}} 秒。",
"maximum_revisions": "ノートの変更履歴の記録制限: {{number}}."
},
"attachments_actions": {
"download": "ダウンロード",
@@ -613,7 +645,8 @@
"intro_placed": "このノートは以下のパスに置かれる:",
"intro_not_placed": "このノートはまだノートツリーに配置されていません。",
"archived": "アーカイブされた",
"search": "検索"
"search": "検索",
"outside_hoisted": "このパスはホイストされたノートの外側にあるため、ホイストを解除する必要があります。"
},
"note_properties": {
"info": "情報"
@@ -693,13 +726,29 @@
"dialog_title": "埋め込みノート",
"box_size_prompt": "埋め込みノート枠のサイズ:",
"button_include": "埋め込みノート",
"label_note": "ノート"
"label_note": "ノート",
"box_size_small": "スモール (~ 10 行)",
"box_size_medium": "ミディアム (~ 30 行)",
"box_size_full": "フル (ボックスに全文が表示されます)"
},
"ancestor": {
"placeholder": "ノート名で検索"
"placeholder": "ノート名で検索",
"label": "祖先",
"depth_label": "深さ",
"depth_doesnt_matter": "関係ない",
"depth_eq": "ちょうど {{count}} つ下の階層",
"direct_children": "直接の子",
"depth_gt": "{{count}} より下の階層",
"depth_lt": "{{count}} より上の階層"
},
"move_to": {
"search_placeholder": "ノート名で検索"
"search_placeholder": "ノート名で検索",
"dialog_title": "ノートを移動...",
"notes_to_move": "移動させるノート",
"target_parent_note": "対象の親ノート",
"move_button": "選択したノートに移動",
"error_no_path": "移動するパスがありません。",
"move_success_message": "選択したノートは以下に移動されました "
},
"web_view": {
"web_view": "Web ビュー",
@@ -740,7 +789,8 @@
"default_description": "Triliumは、ワイドスクリーンで最大化された画面での可読性を向上させるために、デフォルトでコンテンツの最大幅を制限しています。",
"max_width_label": "最大コンテンツ幅",
"max_width_unit": "ピクセル",
"apply_changes_description": "コンテンツ幅の変更を適用するには、クリックしてください"
"apply_changes_description": "コンテンツ幅の変更を適用するには、クリックしてください",
"reload_description": "外観オプションからの変更"
},
"theme": {
"title": "アプリのテーマ",
@@ -906,10 +956,16 @@
"close": "閉じる"
},
"info": {
"closeButton": "閉じる"
"closeButton": "閉じる",
"modalTitle": "情報メッセージ",
"okButton": "OK"
},
"protected_session_password": {
"close_label": "閉じる"
"close_label": "閉じる",
"modal_title": "保護されたセッション",
"help_title": "保護されたノートに関するヘルプ",
"form_label": "リクエストされたアクションを続行するには、パスワードを入力して保護されたセッションを開始する必要があります:",
"start_button": "保護されたセッションを開始"
},
"modal": {
"close": "閉じる",
@@ -947,7 +1003,81 @@
"digits": "桁",
"inheritable_title": "継承属性は、このツリー配下のすべての子孫に継承されます。",
"inheritable": "継承",
"related_notes_title": "このラベルが付いた他のノート"
"related_notes_title": "このラベルが付いた他のノート",
"attr_detail_title": "属性の詳細なタイトル",
"target_note_title": "リレーションは、ソースノートとターゲットノート間の名前付き接続です。",
"target_note": "対象のノート",
"promoted_title": "プロモート属性はノートに目立つように表示されます。",
"promoted": "プロモート",
"promoted_alias_title": "プロモート属性のUIに表示される名前。",
"inverse_relation_title": "このリレーションがどのリレーションの反対であるかを定義するオプション設定。例:父と息子は互いに逆のリレーションです。",
"inverse_relation": "逆リレーション",
"more_notes": "その他のノート",
"label": "ラベルの詳細",
"label_definition": "ラベル定義の詳細",
"relation": "リレーションの詳細",
"relation_definition": "リレーション定義の詳細",
"disable_versioning": "自動バージョン管理を無効にします。例えば、スクリプト用の大きなJSライブラリなど、重要ではない大きなートに便利です",
"calendar_root": "dayートのルートとして使用するートをマークします。このようにマークできるのは 1 つだけです。",
"archived": "このラベルの付いたノートは、デフォルトでは検索結果に表示されません (ジャンプ先、リンクの追加ダイアログなどにも表示されません)。",
"exclude_from_export": "ノート(サブツリーを含む)はノートのエクスポートには含まれません",
"run": "どのイベントでスクリプトを実行するかを定義します。可能な値は次の通り:\n<ul>\n<li>frontendStartup - Trilium フロントエンドが起動(または更新)されたとき。モバイルは除く</li>\n<li>mobileStartup - モバイルで Trilium フロントエンドが起動(または更新)されたとき。</li>\n<li>backendStartup - Trilium バックエンドが起動したとき</li>\n<li>hourly - 1時間に1回実行します。 <code>runAtHour</code> というラベルを追加して、実行時刻を指定できます。</li>\n<li>daily - 1日に1回実行</li>\n</ul>",
"run_on_instance": "どの Trilium インスタンスでこれを実行するかを定義します。デフォルトはすべてのインスタンスです。",
"run_at_hour": "何時に実行するかを指定します。 <code>#run=hourly</code> と併用してください。1日に複数回実行したい場合は、複数回定義できます。",
"disable_inclusion": "このラベルが付いたスクリプトは親スクリプトの実行には含まれません。",
"sorted": "子ノートをアルファベット順に並べ替える",
"sort_direction": "ASCデフォルトまたは DESC",
"sort_folders_first": "フォルダ(子を持つノート)を上にして並べる",
"top": "指定されたノートをその親ノートの一番上に表示します(ソートされた親ノートにのみ適用されます)",
"hide_promoted_attributes": "このノートのプロモート属性を非表示にする",
"read_only": "エディターは読み取り専用モードです。テキストとコードノートのみ機能します。",
"auto_read_only_disabled": "テキスト/コードノートは、サイズが大きすぎる場合、自動的に読み取りモードに設定されます。このラベルをノートに追加することで、ノートごとにこの動作を無効にすることができます",
"app_css": "Trilium アプリケーションに読み込まれ、Trilium の外観を変更するために使用できる CSS ノートをマークします。",
"app_theme": "Trilium のフルテーマである CSS ートをマークし、Trilium オプションで利用できるようにします。",
"app_theme_base": "「next」、「next-light」、または「next-dark」に設定すると、従来のテーマではなく、対応する TriliumNext テーマ (auto、light、または dark) がカスタム テーマのベースとして使用されます。",
"css_class": "このラベルの値は、ツリー内の特定のートを表すードにCSSクラスとして追加されます。これは高度なテーマ設定に役立ちます。テンプレートートで使用できます。",
"icon_class": "このラベルの値は、ツリー上のアイコンにCSSクラスとして追加され、ツリー内のートを視覚的に区別するのに役立ちます。例えば、bx bx-home のように、アイコンは boxicons から取得されます。テンプレートノートで使用できます。",
"page_size": "ートリストの1ページあたりの項目数",
"custom_request_handler": "<a href=\"javascript:\" data-help-page=\"custom-request-handler.html\">カスタムリクエストハンドラー</a>を参照してください",
"custom_resource_provider": "<a href=\"javascript:\" data-help-page=\"custom-request-handler.html\">カスタムリクエストハンドラー</a>を参照してください",
"widget": "このートをカスタムウィジェットとしてマークし、Trilium コンポーネントツリーに追加します",
"workspace": "このノートをワークスペースとしてマークし、簡単にホイストできるようにします",
"workspace_icon_class": "このートにホイストされたときにタブで使用されるボックスアイコンのCSSクラスを定義します",
"workspace_tab_background_color": "このートにホイストされたときにートタブで使用されるCSSでの色",
"workspace_calendar_root": "ワークスペースごとのカレンダールートを定義する",
"workspace_template": "このノートは、新しいノートを作成するときに利用可能なテンプレートの選択肢に表示されますが、このテンプレートを含むワークスペースにホイストされた場合にのみ表示されます",
"search_home": "新しい検索ノートはこのノートの子として作成されます",
"workspace_search_home": "このワークスペースノートの祖先にホイストされた新しい検索ノートは、このノートの子として作成されます",
"inbox": "新しいートのデフォルトのinboxの場所 - サイドバーの「新しいノート」ボタンを使用してノートを作成すると、ノートは <code>#inbox</code> ラベルでマークされたノートの子ノートとして作成されます。",
"workspace_inbox": "このワークスペースートの祖先にホイストされた場合、新規ートのデフォルトのinboxの場所",
"sql_console_home": "SQLコンソールートのデフォルトの場所",
"bookmark_folder": "このラベルの付いたノートは、ブックマークにフォルダとして表示されます(子フォルダへのアクセスを許可します)",
"share_hidden_from_tree": "このートは左側のナビゲーションツリーには表示されていませんが、URL からアクセスできます",
"share_external_link": "ノートは共有ツリー内で外部ウェブサイトへのリンクとして機能します",
"share_alias": "https://your_trilium_host/share/[your_alias] でノートを利用できるようにエイリアスを定義します",
"share_omit_default_css": "デフォルトの共有ページのCSSは省略されます。スタイルを大幅に変更する場合に使用してください。",
"share_root": "/share root で提供されるノートをマークする。",
"share_raw": "ートはHTMLラッパーなしでそのままの形式で提供されます",
"share_disallow_robot_indexing": "<code>X-Robots-Tag: noindex</code> ヘッダーにより、このノートのロボットによるインデックス作成を禁止します",
"share_credentials": "この共有ノートにアクセスするには認証情報が必要です。値は「ユーザー名:パスワード」の形式である必要があります。子ノート/画像に適用するには、これを継承可能にすることを忘れないでください。",
"share_index": "このラベルの付いたノートには、共有ノートのルートがすべてリストされます",
"display_relations": "表示するリレーション名をカンマで区切って指定します。それ以外のリレーション名は非表示になります。",
"hide_relations": "非表示にするリレーション名をカンマで区切って指定します。それ以外のリレーションは表示されます。",
"template": "このノートは、新しいノートを作成するときに利用可能なテンプレートの選択肢に表示されます",
"toc": "<code>#toc</code> または <code>#toc=show</code><code> は目次を強制的に表示し、<code>#toc=hide</code> は目次を強制的に非表示にします。ラベルが存在しない場合は、グローバル設定が適用されます",
"color": "ノートツリー、リンクなどのノートの色を定義します。 'red' や #a13d5f などの有効な CSS カラー値を使用します",
"keyboard_shortcut": "このノートにすぐにジャンプするキーボードショートカットを定義します。例: 「ctrl+alt+e」。変更を有効にするには、フロントエンドをリロードする必要があります。",
"keep_current_hoisting": "このリンクを開いても、ノートが現在のホイストされたサブツリーに表示できない場合でも、ホイストは変更されません。",
"execute_button": "現在のコードノートを実行するボタンのタイトル",
"execute_description": "実行ボタンと一緒に表示される現在のコードノートの詳細な説明",
"exclude_from_note_map": "このラベルの付いたノートはノートマップから非表示になります",
"new_notes_on_top": "新しいノートは親ノートの下部ではなく上部に作成されます。",
"hide_highlight_widget": "ハイライトリスト ウィジェットを非表示にする",
"run_on_note_creation": "バックエンドでノートが作成された際に実行されます。特定のサブツリー配下に作成されたすべてのノートに対してスクリプトを実行したい場合は、このリレーションを使用してください。その場合は、サブツリーのルートノートにスクリプトを作成し、継承可能にしてください。サブツリー内(任意の深さ)に新しいノートが作成されると、スクリプトが実行されます。",
"run_on_child_note_creation": "このリレーションが定義されているノートの下に新しいノートが作成されたときに実行されます",
"render_note": "「HTMLートをレンダリング」タイプのートは、コードートHTMLまたはスクリプトを使用してレンダリングされます。このリレーションを使用して、どのートをレンダリングするかを指定する必要があります",
"other_notes_with_name": "{{attributeType}} の名前が「{{attributeName}}」であるその他のノート",
"color_type": "色"
},
"link_context_menu": {
"open_note_in_popup": "クイックエディット",
@@ -956,7 +1086,8 @@
"open_note_in_new_window": "新しいウィンドウでノートを開く"
},
"note_tooltip": {
"quick-edit": "クイックエディット"
"quick-edit": "クイックエディット",
"note-has-been-deleted": "ノートは削除されました。"
},
"protect_note": {
"toggle-on": "ノートを保護",
@@ -999,7 +1130,9 @@
"automatically-collapse-notes-title": "一定期間使用されないと、ツリーを整理するためにノートは折りたたまれます。",
"save-changes": "変更を保存して適用",
"auto-collapsing-notes-after-inactivity": "非アクティブ状態が続いたためノートが自動で折りたたまれます...",
"create-child-note": "子ノートを作成"
"create-child-note": "子ノートを作成",
"hoist-this-note-workspace": "このノートをホイストする(ワークスペース)",
"unhoist": "ホイスト解除"
},
"bulk_actions": {
"bulk_actions": "一括操作",
@@ -1049,7 +1182,8 @@
"reset": "リセット",
"move-to-visible-launchers": "可視ランチャーに移動",
"move-to-available-launchers": "利用可能なランチャーに移動",
"duplicate-launcher": "ランチャーの複製 <kbd data-command=\"duplicateSubtree\">"
"duplicate-launcher": "ランチャーの複製 <kbd data-command=\"duplicateSubtree\">",
"reset_launcher_confirm": "本当に「{{title}}」をリセットしますか? このノート(およびその子ノート)のすべてのデータと設定が失われ、ランチャーは元の場所に戻ります。"
},
"editable-text": {
"auto-detect-language": "自動検出"
@@ -1073,7 +1207,8 @@
"editor_type": {
"label": "書式設定ツールバー",
"floating": {
"description": "編集ツールがカーソル付近に表示されます;"
"description": "編集ツールがカーソル付近に表示されます;",
"title": "フローティング"
},
"fixed": {
"title": "固定",
@@ -1104,7 +1239,9 @@
"show_login_link_description": "共有ページの下部にログインリンクを追加",
"share_root_found": "共有ルートノート '{{noteTitle}}' の準備が完了",
"share_root_not_found": "#shareRoot のラベルが付いたノートが見つかりません",
"share_root_not_shared": "ノート '{{noteTitle}}' は #shareRoot のラベルを持っていますが、共有されていません"
"share_root_not_shared": "ノート '{{noteTitle}}' は #shareRoot のラベルを持っていますが、共有されていません",
"show_login_link": "共有テーマにログインリンクを表示する",
"check_share_root": "共有ルートのステータスを確認"
},
"time_selector": {
"invalid_input": "入力された時間値が有効な数値ではありません。",
@@ -1132,7 +1269,10 @@
"cpu_arch_warning": {
"title": "ARM64版をダウンロードしてください",
"dont_show_again": "この警告を二度と表示しない",
"continue_anyway": "とにかく続ける"
"continue_anyway": "とにかく続ける",
"message_windows": "TriliumNext は現在エミュレーションを実行しています。つまり、ARM版WindowsデバイスでIntelx64版を使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。",
"recommendation": "最適なエクスペリエンスを得るには、リリース ページから TriliumNext のネイティブ ARM64 バージョンをダウンロードしてください。",
"download_link": "ネイティブ版をダウンロード"
},
"editorfeatures": {
"emoji_completion_enabled": "絵文字のオートコンプリートを有効",
@@ -1228,7 +1368,9 @@
"add_label": "ラベルを追加",
"label_name_placeholder": "ラベル名",
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
"new_value_placeholder": "新しい値"
"new_value_placeholder": "新しい値",
"help_text": "一致したすべてのノートに:",
"help_text_note": "このメソッドを値なしで呼び出すこともできます。その場合、ラベルは値なしでノートに割り当てられます。"
},
"delete_label": {
"delete_label": "ラベルを削除",
@@ -1248,12 +1390,14 @@
"label_name_placeholder": "ラベル名",
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
"new_value_placeholder": "新しい値",
"help_text_note": "このメソッドは値なしで呼び出すこともできます。その場合、値なしでラベルがノートに割り当てられます。"
"help_text_note": "このメソッドは値なしで呼び出すこともできます。その場合、値なしでラベルがノートに割り当てられます。",
"help_text": "一致したすべてのノートで、既存のラベルの値を変更する。"
},
"add_relation": {
"add_relation": "関係を追加",
"relation_name": "関係の名前",
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
"create_relation_on_all_matched_notes": "一致したすべてのノートに対して、指定されたリレーションを作成します。"
},
"delete_relation": {
"delete_relation": "関係を削除",
@@ -1271,7 +1415,8 @@
"update_relation_target": {
"update_relation": "関係の更新",
"relation_name": "関係の名前",
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
"on_all_matched_notes": "一致したすべてのノートに"
},
"revisions_button": {
"note_revisions": "ノートの変更履歴"
@@ -1321,7 +1466,9 @@
"specify_new_relation_name": "新しい関係の名前(使用可能な文字: 英数字、コロン、アンダースコア)を指定:",
"note_not_found": "ノート {{noteId}} が見つかりません!",
"enter_title_of_new_note": "新しいノートのタイトルを入力",
"default_new_note_title": "新しいノート"
"default_new_note_title": "新しいノート",
"cannot_match_transform": "変換を一致させることができません: {{transform}}",
"click_on_canvas_to_place_new_note": "キャンバスをクリックして新しいノートを配置"
},
"database_anonymization": {
"title": "データベースの匿名化",
@@ -1364,7 +1511,8 @@
"label_year_comparison": "数値比較(>、>=、<も含む)。",
"label_date_created": "過去1ヶ月以内に作成されたート",
"error": "検索エラー: {{error}}",
"search_prefix": "検索:"
"search_prefix": "検索:",
"placeholder": "全文 キーワード、#tag = value..."
},
"delete_revisions": {
"delete_note_revisions": "ノートの変更履歴を削除",
@@ -1378,7 +1526,8 @@
"example_new_title": "<code>NEW: ${note.title}</code> - 一致したノートの名前の前に 'NEW: ' を付ける",
"example_date_prefix": "<code>${note.dateCreatedObj.format('MM-DD:')}: ${note.title}</code> - マッチしたノートの前にノートの作成月日を付ける",
"api_docs": "詳細については、 <a href='https://zadam.github.io/trilium/backend_api/Note.html'>note</a> および <a href='https://day.js.org/docs/en/display/format'>dateCreatedObj / utcDateCreatedObj properties</a> の API ドキュメントを参照してください。",
"evaluated_as_js_string": "与えられた値はJavaScript文字列として評価されるため、注入された<code>note</code>変数noteは名前が変更されますを介して動的なコンテンツで強化できます。例:"
"evaluated_as_js_string": "与えられた値はJavaScript文字列として評価されるため、注入された<code>note</code>変数noteは名前が変更されますを介して動的なコンテンツで強化できます。例:",
"click_help_icon": "右側のヘルプアイコンをクリックすると、すべてのオプションが表示されます"
},
"electron_integration": {
"desktop-application": "デスクトップアプリケーション",
@@ -1392,5 +1541,243 @@
"zoom_factor": {
"description": "ズームは CTRL+- と CTRL+= のショートカットでも操作可能。",
"title": "ズーム倍率(デスクトップビルドのみ)"
},
"jump_to_note": {
"search_placeholder": "名前またはタイプでノートを検索 > コマンドを検索...",
"search_button": "全文検索"
},
"markdown_import": {
"dialog_title": "Markdownをインポート",
"modal_body_text": "ブラウザサンドボックスのため、JavaScriptからクリップボードの内容を直接読み込むことはできません。インポートするMarkdownを以下のテキストエリアに貼り付け、インポートボタンをクリックしてください",
"import_button": "インポート",
"import_success": "Markdown コンテンツがドキュメントにインポートされました。"
},
"note_type_chooser": {
"change_path_prompt": "新しいノートを作成する場所を変更する:",
"search_placeholder": "名前によるパスの検索 (空の場合はデフォルト)",
"modal_title": "ノートタイプを選択",
"modal_body": "新しいノートのノートタイプ / テンプレートを選択してください:",
"templates": "テンプレート",
"builtin_templates": "組み込みテンプレート"
},
"prompt": {
"title": "プロンプト",
"ok": "OK",
"defaultTitle": "プロンプト"
},
"upload_attachments": {
"upload_attachments_to_note": "ノートに添付ファイルをアップロード",
"choose_files": "ファイルを選択",
"files_will_be_uploaded": "ファイルは {{noteTitle}} に添付ファイルとしてアップロードされます",
"options": "オプション",
"shrink_images": "画像を縮小",
"upload": "アップロード",
"tooltip": "このオプションにチェックを入れると、Trilium はアップロードされた画像をスケーリングと最適化によって縮小しようとします。これにより、画質が多少変化する可能性があります。チェックを外すと、画像は変更されずにアップロードされます。"
},
"attribute_editor": {
"help_text_body1": "ラベルを追加するには、例 <code>#rock</code> と入力します。値も追加したい場合は、例 <code>#year = 2020</code> と入力します",
"help_text_body2": "リレーションについては、<code>~author = @</code> と入力すると、オートコンプリートが表示され、目的のノートを検索できるようになります。",
"placeholder": "ここにラベルとリレーションを入力"
},
"move_note": {
"on_all_matched_notes": "一致したすべてのノートに"
},
"onclick_button": {
"no_click_handler": "ボタン ウィジェット '{{componentId}}' にはクリック ハンドラーが定義されていません"
},
"protected_session_status": {
"active": "保護されたセッションが有効です。クリックして保護されたセッションを終了します。",
"inactive": "クリックして保護されたセッションに入る"
},
"editable_code": {
"placeholder": "ここにコードノートの内容を入力..."
},
"editable_text": {
"placeholder": "ここにノートの内容を入力..."
},
"empty": {
"open_note_instruction": "以下の入力欄にノートのタイトルを入力するか、ツリー内のノートを選択してノートを開きます。"
},
"file": {
"too_big": "パフォーマンス上の理由により、プレビューではファイルの最初の {{maxNumChars}} 文字のみが表示されます。ファイル全体を表示するには、ファイルをダウンロードして外部で開いてください。"
},
"protected_session": {
"enter_password_instruction": "保護されたノートを表示するにはパスワードを入力する必要があります:"
},
"render": {
"note_detail_render_help_1": "このヘルプートが表示されるのは、このートの「HTML のレンダリング」タイプには、正常に機能するために必要なリレーションがないためです。"
},
"consistency_checks": {
"find_and_fix_button": "一貫性の問題を見つけて修正する",
"finding_and_fixing_message": "一貫性の問題を見つけて修正中…"
},
"vacuum_database": {
"title": "データベースのバキューム",
"description": "これによりデータベースが再構築され、通常はデータベースファイルのサイズが小さくなります。実際のデータは変更されません。",
"button_text": "データベースをバキューム",
"vacuuming_database": "データベースのバキュームを実行中...",
"database_vacuumed": "データベースのバキューム処理が完了しました"
},
"ribbon": {
"promoted_attributes_message": "プロモート属性がノートに存在する場合、プロモート属性のリボンタブが自動的に開きます",
"edited_notes_message": "編集したートのリボンタブは、dayートで自動的に開きます"
},
"ui-performance": {
"enable-motion": "トランジションとアニメーションを有効にする",
"enable-shadows": "影を有効にする",
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果を有効にする"
},
"code_mime_types": {
"title": "ドロップダウンで利用可能なMIMEタイプ"
},
"attachment_erasure_timeout": {
"attachment_erasure_timeout": "添付ファイル消去のタイムアウト",
"attachment_auto_deletion_description": "定義されたタイムアウト後にノートによって参照されなくなった場合、添付ファイルは自動的に削除 (および消去) されます。",
"erase_attachments_after": "使用されていない添付ファイルを消去する期間:",
"manual_erasing_description": "手動で消去をトリガーすることもできます (上記で定義したタイムアウトを考慮せずに):",
"erase_unused_attachments_now": "使用されていない添付ノートを今すぐ消去",
"unused_attachments_erased": "使用されていない添付ファイルは削除されました。"
},
"network_connections": {
"network_connections_title": "ネットワーク接続",
"check_for_updates": "アップデートを自動的に確認する"
},
"note_erasure_timeout": {
"note_erasure_timeout_title": "ノート消去のタイムアウト",
"note_erasure_description": "削除されたノート(および属性、変更履歴など)最初は削除済みとしてマークされるだけで、「最近の変更」ダイアログから復元できます。一定期間が経過すると、削除されたノートは「消去」され、内容は復元できなくなります。この設定では、ノートを削除してから消去するまでの期間を設定できます。",
"erase_notes_after": "ノートを消去する間隔:",
"manual_erasing_description": "手動で消去をトリガーすることもできます (上記で定義したタイムアウトを考慮せずに):",
"erase_deleted_notes_now": "削除したノートを今すぐ消去",
"deleted_notes_erased": "削除されたノートは消去されました。"
},
"revisions_snapshot_interval": {
"note_revisions_snapshot_interval_title": "ノートの変更履歴の記録間隔",
"note_revisions_snapshot_description": "ノートの変更履歴の記録間隔は、そのノートに対して新しい変更が作成されるまでの時間です。詳細については、<doc>wiki</doc> をご覧ください。",
"snapshot_time_interval_label": "ノートの変更履歴が記憶される時間:"
},
"revisions_snapshot_limit": {
"note_revisions_snapshot_limit_title": "ノートの変更履歴の記録制限",
"note_revisions_snapshot_limit_description": "ノートの変更履歴の記録制限とは、各ノートに保存できる変更履歴の最大数を指します。-1 は制限なし、0 はすべての変更履歴を削除することを意味します。#versioningLimit ラベルを使用して、1 つのノートの最大変更数を設定できます。",
"snapshot_number_limit_label": "ノートの変更履歴の記録数の制限:",
"snapshot_number_limit_unit": "スナップショット",
"erase_excess_revision_snapshots": "余分な変更履歴を今すぐ消去",
"erase_excess_revision_snapshots_prompt": "余分な変更履歴が消去されました。"
},
"editability_select": {
"note_is_read_only": "ノートは読み取り専用ですが、ボタンをクリックすると編集できます。"
},
"find": {
"case_sensitive": "大文字と小文字を区別",
"match_words": "単語が一致",
"find_placeholder": "テキスト内を検索...",
"replace_placeholder": "置換対象...",
"replace": "置換",
"replace_all": "すべて置換"
},
"title_bar_buttons": {
"window-on-top": "ウィンドウを最前面に維持"
},
"note_detail": {
"could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした"
},
"watched_file_update_status": {
"ignore_this_change": "この変更を無視する"
},
"image": {
"copied-to-clipboard": "画像への参照がクリップボードにコピーされました。これは任意のテキストノートに貼り付けることができます。",
"cannot-copy": "画像参照をクリップボードにコピーできませんでした。"
},
"entrypoints": {
"note-revision-created": "ノートの改訂版が作成されました。",
"sql-error": "SQL クエリの実行中にエラーが発生しました: {{message}}"
},
"branches": {
"cannot-move-notes-here": "ここにノートを移動することはできません。",
"delete-status": "ステータスを削除",
"delete-notes-in-progress": "削除進行中のノート: {{count}}",
"delete-finished-successfully": "削除が正常に完了しました。",
"undeleting-notes-in-progress": "削除済みのノートを復元中: {{count}}",
"undeleting-notes-finished-successfully": "ノートの復元が正常に完了しました。"
},
"frontend_script_api": {
"async_warning": "`api.runOnBackend()` に非同期関数を渡していますが、これは意図したとおりに動作しない可能性があります。\\n関数を同期させる(`async` キーワードを削除する)か、`api.runAsyncOnBackendWithManualTransactionHandling()` を使用してください。",
"sync_warning": "`api.runAsyncOnBackendWithManualTransactionHandling()` に同期関数を渡していますが、\\n代わりに `api.runOnBackend()` を使用する必要がある可能性があります。"
},
"ws": {
"sync-check-failed": "同期チェックに失敗しました!",
"consistency-checks-failed": "整合性チェックに失敗しました! 詳細はログを参照してください。",
"encountered-error": "エラー「{{message}}」が発生しました。コンソールを確認してください。"
},
"hoisted_note": {
"confirm_unhoisting": "要求されたノート「{{requestedNote}}」は、ホイストされたノート「{{hoistedNote}}」サブツリーの外部にあるため、ノートにアクセスするにはホイストを解除する必要があります。ホイスト解除を続行しますか?"
},
"image_context_menu": {
"copy_reference_to_clipboard": "参照をクリップボードにコピー",
"copy_image_to_clipboard": "画像をクリップボードにコピー"
},
"note_autocomplete": {
"search-for": "「{{term}}」を検索",
"create-note": "子ノート「{{term}}」を作成してリンクする",
"insert-external-link": "「{{term}}」への外部リンクを挿入",
"clear-text-field": "テキストフィールドを消去",
"show-recent-notes": "最近のノートを表示",
"full-text-search": "全文検索"
},
"geo-map": {
"create-child-note-title": "新しい子ノートを作成し、マップに追加する",
"create-child-note-instruction": "地図をクリックしてその場所に新しいートを作成するか、Esc キーを押して閉じます。",
"unable-to-load-map": "マップを読み込めません。"
},
"geo-map-context": {
"open-location": "現在位置を表示",
"remove-from-map": "マップから削除",
"add-note": "この場所にマーカーを追加"
},
"help-button": {
"title": "関連するヘルプページを開く"
},
"content_widget": {
"unknown_widget": "「{{id}}」のウィジェットは不明です。"
},
"switch_layout_button": {
"title_vertical": "編集パネルを下に移動",
"title_horizontal": "編集パネルを左に移動"
},
"toggle_read_only_button": {
"unlock-editing": "編集のロックを解除",
"lock-editing": "編集をロック"
},
"book_properties_config": {
"hide-weekends": "週末を非表示",
"display-week-numbers": "週番号を表示",
"map-style": "マップスタイル:",
"max-nesting-depth": "最大階層の深さ:",
"show-scale": "スケールを表示"
},
"call_to_action": {
"next_theme_title": "新しいTriliumテーマをお試しください",
"next_theme_message": "現在、レガシーテーマを使用しています。新しいテーマを試してみませんか?",
"next_theme_button": "新しいテーマを試す",
"background_effects_title": "背景効果が安定しました",
"background_effects_message": "Windowsデバイスでは、背景効果が完全に安定しました。背景効果は、背景をぼかすことでユーザーインターフェースに彩りを添えます。この技術は、Windowsエクスプローラーなどの他のアプリケーションでも使用されています。",
"background_effects_button": "背景効果を有効にする",
"dismiss": "却下"
},
"settings": {
"related_settings": "関連設定"
},
"settings_appearance": {
"related_code_blocks": "テキストノート内のコードブロックの配色",
"related_code_notes": "コードノートの配色"
},
"units": {
"percentage": "%"
},
"pagination": {
"page_title": "{{startIndex}} - {{endIndex}} ページ",
"total_notes": "{{count}} ノート"
},
"collections": {
"rendering_error": "エラーのためコンテンツを表示できません。"
}
}

View File

@@ -52,7 +52,8 @@
"chosen_actions": "Wybrane działania",
"execute_bulk_actions": "Wykonaj zbiór działań",
"bulk_actions_executed": "Zbiór działań został wykonany prawidłowo.",
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej."
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej.",
"affected_notes": "Dotyczy notatek"
},
"confirm": {
"ok": "OK",
@@ -102,7 +103,8 @@
"clone_to_selected_note": "Sklonuj do wybranej notatki",
"no_path_to_clone_to": "Brak ścieżki do sklonowania.",
"note_cloned": "Notatka \"{{clonedTitle}}\" została sklonowana do \"{{targetTitle}}\"",
"help_on_links": "Pomoc dotycząca linków"
"help_on_links": "Pomoc dotycząca linków",
"target_parent_note": "Docelowa główna notatka"
},
"help": {
"title": "Ściągawka",
@@ -138,6 +140,495 @@
"cutNotes": "przytnij obecną notatkę (lub obecną sekcję) do schowka (zastosowanie dla przenoszenia notatek)",
"pasteNotes": "wklej notatkę jako podnotatka w obecnej notatce (rozumiane jako przenieś lub skopiuj, w zależności czy notatka była skopiowana czy wycięta)",
"deleteNotes": "usuń notatkę / gałąź",
"editingNotes": "Edytowanie notatek"
"editingNotes": "Edytowanie notatek",
"other": "Inne",
"editNoteTitle": "W panelu drzewa nastąpi przejście z panelu drzewa do tytułu notatki. Naciśnięcie klawisza Enter w tytule notatki spowoduje przejście do edytora tekstu. <kbd>Ctrl+.</kbd> spowoduje powrót z edytora do panelu drzewa.",
"createEditLink": "stwórz / edytuj zewnętrzny link",
"createInternalLink": "stwórz wewnętrzny link",
"followLink": "kliknij link pod kursorem",
"insertDateTime": "wstaw aktualną datę i godzinę w pozycji kursora",
"markdownAutoformat": "Autoformatowanie w stylu Markdown",
"headings": "<code>##</code>, <code>###</code>, <code>####</code> itd., po których następuje miejsce na nagłówki",
"bulletList": "<code>*</code> lub <code>-</code>, a następnie spacja, aby utworzyć listę",
"jumpToTreePane": "przejdź do panelu drzewa i przewiń do aktywnej notatki",
"numberedList": "<code>1.</code> or <code>1)</code> po którym następuje miejsce na listę numerowaną",
"blockQuote": "zacznij linijkę od <code></code> aby po kliknięciu spacji dodać blok cytatu",
"troubleshooting": "Rozwiązywanie błędów",
"reloadFrontend": "Załaduj ponownie Frontend Trilium",
"showDevTools": "pokaż narzędzia deweloperskie",
"showSQLConsole": "pokaż konsolę SQL",
"quickSearch": "skup się na szybkim wyszukiwaniu",
"inPageSearch": "wyszukiwanie wewnątrz strony"
},
"book_properties": {
"list": "Lista"
},
"board_view": {
"move-to": "Przenieś do",
"insert-above": "Umieść nad",
"insert-below": "Umieść pod",
"delete-column": "Usuń kolumnę",
"delete-column-confirmation": "Czy na pewno chcesz usunąć tę kolumnę? Odpowiedni atrybut zostanie również usunięty w notatkach pod tą kolumną.",
"new-item": "Nowy element",
"new-item-placeholder": "Wpisz tytuł notatki...",
"add-column": "Dodaj kolumnę",
"add-column-placeholder": "Wpisz tytuł kolumny...",
"edit-note-title": "Naciśnij aby edytować tytuł notatki",
"edit-column-title": "Naciśnij aby edytować tytuł kolumny",
"delete-note": "Usuń notatkę...",
"remove-from-board": "Usuń z tablicy",
"archive-note": "Archiwalna notatka",
"unarchive-note": "Usuń notatkę z archiwum"
},
"command_palette": {
"tree-action-name": "Drzewo: {{name}}",
"export_note_title": "Wyeksportuj notatkę",
"export_note_description": "Wyeksportuj aktualną notatkę",
"show_attachments_title": "Pokaż załączniki",
"show_attachments_description": "Zobacz załączniki notatki",
"search_notes_title": "Szukaj notatek",
"search_notes_description": "Otwórz zaawansowane wyszukiwanie",
"search_subtree_title": "Poszukaj w poddrzewie",
"search_subtree_description": "poszukaj wewnątrz poddrzewa",
"search_history_title": "Pokaż historię wyszukiwania",
"search_history_description": "Pokaż poprzednie wyszukiwania",
"configure_launch_bar_title": "Ustaw Launch Bar",
"configure_launch_bar_description": "Otwórz konfigurację Launch Bar, aby dodać lub usunąć elementy."
},
"content_renderer": {
"open_externally": "Otwórz zewnętrznie"
},
"modal": {
"close": "Zamknij",
"help_title": "Pokaż więcej informacji na temat tego ekranu"
},
"call_to_action": {
"next_theme_title": "Spróbuj nowy motyw Trilium",
"next_theme_message": "Obecnie używasz starszego motywu. Czy chcesz wypróbować nowy motyw?",
"next_theme_button": "Spróbuj nowego motywu",
"background_effects_title": "Efekty w tle są już stabilne",
"dismiss": "Odrzuć",
"background_effects_button": "Włącz efekty w tle"
},
"settings": {
"related_settings": "Powiązane ustawienia"
},
"settings_appearance": {
"related_code_blocks": "Schemat kolorów dla bloków kodu w notatkach tekstowych",
"related_code_notes": "Schemat kolorów dla kodu"
},
"units": {
"percentage": "%"
},
"pagination": {
"page_title": "Strony:{{startIndex}}-{{endIndex}}",
"total_notes": "{{count}}notatek"
},
"collections": {
"rendering_error": "Błąd - Nie można pokazać treści."
},
"add_label": {
"add_label": "Dodaj etykietę",
"label_name_placeholder": "Nazwa etykiety",
"label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.",
"to_value": "do wartości",
"new_value_placeholder": "nowa wartość",
"help_text": "We wszystkich dopasowanych notatkach:",
"help_text_item2": "albo zmień wartość istniejącej etykiety"
},
"attribute_detail": {
"delete": "Usuń",
"related_notes_title": "Inne notatki z tą etykietą",
"more_notes": "Więcej notatek",
"label": "Szczegóły etykiety",
"label_definition": "Szczegóły definicji etykiety",
"relation": "Szczegóły powiązania",
"relation_definition": "Szczegóły definicji powiązania",
"disable_versioning": "Wyłącza automatyczne wersjonowanie. Przydatne np. w przypadku dużych, ale nieistotnych notatek np. dużych bibliotek JS używanych do skryptów",
"precision": "Prezycja",
"digits": "znaki",
"inverse_relation_title": "Opcjonalne ustawienie definiujące, do której relacji jest ta relacja przeciwna. Przykład: Główna - podnotatka są relacjami odwrotnymi do siebie.",
"inverse_relation": "Odwrócone powiązanie"
},
"import": {
"importIntoNote": "Importuj do notatki",
"chooseImportFile": "Wybierz plik do zaimportowania",
"importDescription": "Zawartość wybranego pliku(ów) zostanie zaimportowana jako notatka(i) podrzędna(e) do",
"options": "Opcje",
"shrinkImages": "Zmniejsz obrazy",
"safeImport": "Bezpieczny import",
"import-status": "Status importu",
"in-progress": "Import w trakcie: {{progress}}",
"successful": "Importowanie zakończone sukcesem.",
"safeImportTooltip": "Pliki eksportu Trilium <code>.zip</code> mogą zawierać skrypty wykonywalne, które mogą powodować szkodliwe zachowania. Bezpieczny import dezaktywuje automatyczne wykonywanie wszystkich importowanych skryptów. Odznacz opcję „Bezpieczny import” tylko wtedy, gdy importowane archiwum ma zawierać skrypty wykonywalne i masz pełne zaufanie do zawartości importowanego pliku.",
"import": "Import",
"failed": "Błąd importu: {{message}}.",
"html_import_tags": {
"title": "Tagi importu HTML",
"description": "Skonfiguruj, które tagi HTML mają zostać zachowane podczas importowania notatek. Tagi spoza tej listy zostaną usunięte podczas importu. Niektóre tagi (np. „script”) są zawsze usuwane ze względów bezpieczeństwa.",
"placeholder": "Wpisz tagi HTML, jedna na linijkę",
"reset_button": "Zresetuj do domyślnej listy"
}
},
"image_properties": {
"title": "Obraz",
"original_file_name": "Oryginalna nazwa pliku",
"file_type": "Typ pliku",
"file_size": "Rozmiar pliku",
"download": "Pobierz",
"open": "Otwórz",
"copy_reference_to_clipboard": "Kopiuj odniesienie do schowka",
"upload_new_revision": "Wgraj nową wersję",
"upload_success": "Nowa wersja obrazu została wysłana.",
"upload_failed": "Wysyłanie nowej wersji obrazu nie powiodło się: {{message}}"
},
"inherited_attribute_list": {
"title": "Odziedziczone atrybuty",
"no_inherited_attributes": "Brak odziedziczonych atrybutów."
},
"note_info_widget": {
"note_id": "ID notatki",
"created": "Stworzona",
"modified": "Zmodyfikowano",
"type": "Typ",
"note_size": "Rozmiar notatki",
"note_size_info": "Rozmiar notatki pozwala oszacować przybliżoną ilość miejsca potrzebnego na przechowanie jej. Uwzględnia ona jej treść oraz treść jej poprawek.",
"calculate": "oblicz",
"subtree_size": "(rozmiar poddrzewa: {{size}} w {{count}} notatkach)",
"title": "Informacje o notatce"
},
"note_map": {
"open_full": "Pełne rozszerzenie",
"collapse": "Zmniejsz do normalnego rozmiaru",
"title": "Mapa notatki",
"fix-nodes": "Napraw węzły",
"link-distance": "Odległość linku"
},
"note_paths": {
"title": "Ścieżki notatki",
"clone_button": "Sklonuj notatkę do nowej lokalizacji...",
"intro_placed": "Ta notatka jest umieszczona w następujących lokalizacjach:",
"intro_not_placed": "Ta notatka nie została jeszcze umieszczona w drzewie.",
"outside_hoisted": "Ta ścieżka znajduje się poza podniesioną notatką i trzeba ją odwiesić.",
"archived": "Zarchiwizowane",
"search": "Szukaj"
},
"note_properties": {
"this_note_was_originally_taken_from": "Ta notatka oryginalnie została wzięta z:",
"info": "Info"
},
"owned_attribute_list": {
"owned_attributes": "Posiadane atrybuty"
},
"promoted_attributes": {
"promoted_attributes": "Promowane atrybuty",
"unset-field-placeholder": "nie ustawione",
"url_placeholder": "http://strona...",
"open_external_link": "Otwórz link zewnętrzny",
"unknown_label_type": "Nieznany typ etykiety \"{{type}}\"",
"unknown_attribute_type": "Nieznany typ atrybutu \"{{type}}\"",
"add_new_attribute": "Dodaj nowy atrybut",
"remove_this_attribute": "Usuń ten atrybut",
"remove_color": "Usuń ten kolor etykiety"
},
"script_executor": {
"query": "Zapytanie",
"script": "Skrypt",
"execute_query": "Wykonaj zapytanie",
"execute_script": "Wykonaj skrypt"
},
"search_definition": {
"add_search_option": "Dodaj opcje wyszukiwania:",
"search_string": "ciąg wyszukiwania",
"search_script": "skrypt wyszukiwania",
"ancestor": "przodek",
"fast_search": "szybkie wyszukiwanie",
"fast_search_description": "Opcja szybkiego wyszukiwania wyłącza pełno tekstowe przeszukiwanie zawartości notatek, co może przyspieszyć przeszukiwanie dużych baz danych.",
"include_archived": "dodaj zarchiwizowane",
"include_archived_notes_description": "Domyślnie zarchiwizowane notatki są wyłączone z wyszukiwania, z tą opcją zostaną dodane do wyszukiwania.",
"order_by": "sortuj",
"limit": "limituj",
"limit_description": "Limituj liczbę wyników",
"save_to_note": "Zapisz do notatki",
"search_parameters": "Parametry wyszukiwania",
"unknown_search_option": "Nieznana opcja wyszukiwania {{searchOptionName}}",
"search_note_saved": "Wyszukiwana notatka została zapisana do {{- notePathTitle}}",
"actions_executed": "Akcja została wykonana."
},
"similar_notes": {
"title": "Podobne notatki",
"no_similar_notes_found": "Nie znaleziono podobnych notatek."
},
"abstract_search_option": {
"remove_this_search_option": "Usuń tą opcję wyszukiwania",
"failed_rendering": "Nieudana opcja wyszukiwania: {{dto}} z błędem: {{error}} {{stack}}"
},
"ancestor": {
"label": "Przodek",
"placeholder": "szukaj notatki po jej nazwie",
"depth_label": "glębokość",
"depth_doesnt_matter": "nie ważne",
"depth_eq": "jest dokładnie {{count}}",
"direct_children": "bezpośrednie podnotatki",
"depth_gt": "jest więcej niż {{count}}",
"depth_lt": "jest mniej niż {{count}}"
},
"debug": {
"debug": "Debuguj",
"debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań."
},
"fast_search": {
"fast_search": "Szybkie wyszukiwanie"
},
"file_properties": {
"download": "Pobierz",
"open": "Otwórz",
"upload_new_revision": "Wgraj nową wersję",
"upload_success": "Nowa wersja pliku nie została wysłana.",
"upload_failed": "Wysyłanie nowej wersji pliku się nie udało.",
"title": "Plik"
},
"include_note": {
"label_note": "Notatka",
"placeholder_search": "szukaj notatki po jej nazwie",
"dialog_title": "Dołącz notatkę",
"button_include": "Dołącz notatkę"
},
"info": {
"closeButton": "Zamknij",
"okButton": "OK",
"modalTitle": "Wiadomość"
},
"jump_to_note": {
"search_placeholder": "Szukaj notatki po jej nazwie albo typie > komendy...",
"search_button": "Wyszukiwanie pełno tekstowe"
},
"markdown_import": {
"dialog_title": "Zaimportuj Markdown",
"import_button": "Import",
"import_success": "Treść Markdown została zaimportowana do dokumentu."
},
"limit": {
"limit": "Limit"
},
"link_context_menu": {
"open_note_in_popup": "Szybka edycja",
"open_note_in_new_tab": "Otwórz notatkę w nowej karcie",
"open_note_in_new_split": "Otwórz notatkę w nowym podziale ekranu",
"open_note_in_new_window": "Otwórz notatkę w nowym oknie"
},
"electron_integration": {
"desktop-application": "Aplikacja desktopowa"
},
"electron_context_menu": {
"cut": "Wytnij",
"copy": "Kopiuj",
"copy-link": "Kopiuj link",
"paste": "Wklej",
"paste-as-plain-text": "Wklej jako plain text",
"search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}"
},
"image_context_menu": {
"copy_reference_to_clipboard": "Skopiuj odnośnik do schowka",
"copy_image_to_clipboard": "Skopiuj obraz do schowka"
},
"note_autocomplete": {
"clear-text-field": "Wyczyść pole tekstowe",
"show-recent-notes": "Pokaż ostatnie notatki",
"full-text-search": "Wyszukiwanie pełnotekstowe"
},
"note_tooltip": {
"note-has-been-deleted": "Notatka została usunięta.",
"quick-edit": "Szybka edycja"
},
"duration": {
"seconds": "sekundy",
"minutes": "minuty",
"hours": "godziny",
"days": "dni"
},
"share": {
"title": "Ustawienia udostępniania"
},
"tasks": {
"due": {
"today": "Dziś",
"tomorrow": "Jutro",
"yesterday": "Wczoraj"
}
},
"content_widget": {
"unknown_widget": "Nieznany widget dla \"{{id}}\"."
},
"note_language": {
"not_set": "Nie ustawione",
"configure-languages": "Konfiguracja języków..."
},
"content_language": {
"title": "Język treści",
"description": "Wybierz jeden lub więcej języków, które mają być wyświetlane w sekcji Właściwości Podstawowe Notatki Tekstowej tylko do odczytu lub edytowalnej. Umożliwi to korzystanie z takich funkcji, jak sprawdzanie pisowni czy obsługa pisania od prawej do lewej."
},
"switch_layout_button": {
"title_vertical": "Przesuń panel edycji na dół",
"title_horizontal": "Przesuń panel edycji do lewej"
},
"toggle_read_only_button": {
"unlock-editing": "Odblokuj edycję",
"lock-editing": "Zablokuj edycję"
},
"png_export_button": {
"button_title": "Wyeksportuj diagram jako PNG"
},
"svg": {
"export_to_png": "Diagram nie może zostać wyeksportowany jako PNG."
},
"code_theme": {
"title": "Wygląd",
"word_wrapping": "Zawijanie słów",
"color-scheme": "Schemat kolorów"
},
"cpu_arch_warning": {
"title": "Proszę o pobranie wersji ARM64",
"message_macos": "TriliumNext działa obecnie w oparciu o technologię Rosetta 2, co oznacza, że używasz wersji Intel (x64) na komputerze Mac z procesorem Apple Silicon. Będzie to miało znaczący wpływ na wydajność i czas pracy baterii.",
"message_windows": "TriliumNext działa obecnie w trybie emulacji, co oznacza, że używasz wersji Intel (x64) na urządzeniu z systemem Windows na procesorze ARM. Będzie to miało znaczący wpływ na wydajność i czas pracy baterii.",
"recommendation": "Aby uzyskać najlepsze wrażenia, pobierz natywną wersję ARM64 aplikacji TriliumNext ze strony poświęconej wydaniom.",
"download_link": "Pobierz wersję natywną",
"continue_anyway": "Kontynuuj mimo wszystko",
"dont_show_again": "Nie pokazuj więcej tego ostrzeżenia"
},
"editorfeatures": {
"title": "Cechy",
"emoji_completion_enabled": "Włącz autouzupełnianie Emoji",
"note_completion_enabled": "Włącz autouzupełnianie notatki"
},
"table_view": {
"new-row": "Nowy wiersz",
"new-column": "Nowa kolumna",
"sort-column-by": "Sotuj po \"{{title}}\"",
"sort-column-ascending": "Rosnąco",
"sort-column-descending": "Malejąco",
"sort-column-clear": "Wyczyść sortowanie",
"hide-column": "Ukryj kolumnę \"{{title}}\"",
"show-hide-columns": "Pokaż/ukryj kolumny",
"row-insert-above": "Wstaw wiersz nad",
"row-insert-below": "Wstaw wiersz pod",
"row-insert-child": "Wstaw podnotatkę",
"add-column-to-the-left": "Dodaj kolumnę po lewej",
"add-column-to-the-right": "Dodaj kolumnę po prawej",
"edit-column": "Edytuj kolumnę",
"delete_column_confirmation": "Czy na pewno chcesz usunąć tę kolumnę? Odpowiedni atrybut zostanie usunięty ze wszystkich notatek.",
"delete-column": "Usuń kolumnę",
"new-column-label": "Etykieta",
"new-column-relation": "Relacje"
},
"book_properties_config": {
"hide-weekends": "Ukryj weekendy",
"display-week-numbers": "Pokaż numery tygodni",
"map-style": "Styl mapy:",
"max-nesting-depth": "Maksymalna głębokość zagnieżdżenia:",
"raster": "Raster",
"vector_light": "Wektor (jasny)",
"vector_dark": "Wektor (ciemny)",
"show-scale": "Pokaż skalę"
},
"table_context_menu": {
"delete_row": "Usuń wiersz"
},
"move_to": {
"dialog_title": "Przenieś notatki do ...",
"notes_to_move": "Notatki do przeniesienia"
},
"note_type_chooser": {
"modal_title": "Wybierz typ notatki",
"modal_body": "Wybierz typ / szablon notatki dla nowej notatki:",
"templates": "Szablony",
"builtin_templates": "Wbudowane szablony"
},
"password_not_set": {
"title": "Hasło nie zostało ustawione"
},
"add_relation": {
"add_relation": "Dodaj powiązanie",
"relation_name": "nazwa powiązania",
"allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.",
"to": "do",
"target_note": "docelowa notatka"
},
"ai_llm": {
"actions": "Akcje",
"retry": "Spróbuj ponownie",
"partial": "{{ percentage }}% wykonania",
"retry_queued": "notatka dodana do kolejki",
"retry_failed": "Nieudana próba dodania notatki do kolejki",
"max_notes_per_llm_query": "Maksymalna ilość notatek w zapytaniu",
"index_all_notes": "Zindeksuj wszystkie notatki",
"index_status": "Status indeksowania",
"indexed_notes": "Zindeksowane notatki",
"indexing_stopped": "Indeksowanie zatrzymane",
"indexing_in_progress": "Indeksowanie w trakcie...",
"last_indexed": "Ostatnio zindeksowane",
"n_notes_queued_0": "{{ count }} notatka zakolejkowana do indeksowania",
"n_notes_queued_1": "{{ count }} notatek zakolejkowanych do indeksowania",
"n_notes_queued_2": "{{ count }} notatek zakolejkowanych do indeksowania",
"note_chat": "Czat notatki",
"note_title": "Tytuł notatki",
"error": "Błąd",
"last_attempt": "Ostatnia próba",
"queued_notes": "Zakolejkowane notatki",
"failed_notes": "Nieudane notatki",
"last_processed": "Ostatnio procesowane",
"refresh_stats": "Odśwież Statystyki",
"enable_ai_features": "Włącz funkcje AI/LLM",
"enable_ai_description": "Włącz funkcje AI, takie jak podsumowywanie notatek, generowanie treści i inne możliwości LLM",
"openai_tab": "OpenAI",
"anthropic_tab": "Anthropic",
"voyage_tab": "Voyage AI",
"ollama_tab": "Ollama",
"enable_ai": "Włącz funkcje AI/LLM",
"enable_ai_desc": "Włącz funkcje AI, takie jak podsumowywanie notatek, generowanie treści i inne możliwości LLM",
"provider_configuration": "Konfiguracja dostawcy AI",
"provider_precedence": "Pierwszeństwo dostawcy",
"provider_precedence_description": "Lista dostawców przedzielonych przecinkami w kolejności (np. „openai,anthropic,ollama”)",
"temperature": "Temperatura",
"temperature_description": "Kontroluje losowość odpowiedzi (0 = deterministyczna, 2 = maksymalna losowość)",
"system_prompt": "Monit systemowy",
"system_prompt_description": "Domyślny monit systemowy używany do wszystkich interakcji ze sztuczną inteligencją",
"openai_configuration": "Konfiguracja OpenAI",
"openai_settings": "Ustawienia OpenAI",
"api_key": "Klucz API",
"url": "Bazowy URL",
"model": "Model",
"openai_api_key_description": "Klucz API OpenAI umożliwiający dostęp do usług AI",
"anthropic_api_key_description": "Klucz API Anthropic umożliwiający dostęp do usług AI",
"default_model": "Domyślny Model",
"openai_model_description": "Przykłady: gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
"base_url": "Bazowy URL",
"openai_url_description": "Domyślny: https://api.openai.com/v1",
"anthropic_settings": "Ustawienia Anthropic",
"anthropic_url_description": "Bazowy URL dla Anthropic API (domyślny: https://api.anthropic.com)",
"anthropic_model_description": "Modele Anthropic Claude'a do uzupełniania czatów",
"voyage_settings": "Ustawienia Voyage AI",
"ollama_settings": "Ustawienia Ollama",
"ollama_url_description": "URL dla Ollama API (domyślny: http://localhost:11434)",
"ollama_model_description": "Model Ollama używany do uzupełniania czatów",
"anthropic_configuration": "Konfiguracja Anthropic",
"voyage_configuration": "Konfiguracja Voyage AI",
"voyage_url_description": "Domyślny: https://api.voyageai.com/v1",
"ollama_configuration": "Konfiguracja Ollama",
"enable_ollama": "Włącz Ollama",
"enable_ollama_description": "Włącz Ollama dla lokalnego modelu AI",
"ollama_url": "Ollama URL",
"ollama_model": "Model Ollama",
"refresh_models": "Odśwież modele",
"refreshing_models": "Odświeżanie...",
"enable_automatic_indexing": "Włącz automatyczne indeksowanie",
"rebuild_index": "Odbuduj indeks",
"rebuild_index_error": "Błąd uruchomienia odbudowy indeksu. Sprawdź logi.",
"max_notes_per_llm_query_description": "Maksymalna liczba podobnych notatek do uwzględnienia w kontekście sztucznej inteligencji",
"active_providers": "Aktywni dostawcy",
"disabled_providers": "Wyłączeni dostawcy",
"remove_provider": "Usuń dostawcę z wyszukiwania",
"restore_provider": "Przywróć dostawcę do wyszukiwania",
"similarity_threshold": "Próg podobieństwa"
}
}

View File

@@ -432,7 +432,12 @@
"mime": "MIME: ",
"file_size": "Tamanho do arquivo:",
"preview": "Visualizar:",
"preview_not_available": "A visualização não está disponível para este tipo de nota."
"preview_not_available": "A visualização não está disponível para este tipo de nota.",
"diff_on": "Exibir diferença",
"diff_off": "Exibir conteúdo",
"diff_on_hint": "Clique para exibir a diferença de fonte da nota",
"diff_off_hint": "Clique para exibir o conteúdo da nota",
"diff_not_available": "A diferença não está disponível."
},
"sort_child_notes": {
"sort_children_by": "Ordenar notas filhas por...",
@@ -774,7 +779,9 @@
"apply-bulk-actions": "Aplicar ações em massa",
"converted-to-attachments": "{{count}} notas foram convertidas em anexos.",
"convert-to-attachment-confirm": "Tem certeza de que deseja converter as notas selecionadas em anexos de suas notas-pai?",
"open-in-popup": "Edição rápida"
"open-in-popup": "Edição rápida",
"archive": "Ficheiro",
"unarchive": "Desarquivar"
},
"command_palette": {
"search_subtree_title": "Buscar na Subárvore",
@@ -843,7 +850,18 @@
"september": "Setembro",
"october": "Outubro",
"november": "Novembro",
"december": "Dezembro"
"december": "Dezembro",
"week": "Semana",
"week_previous": "Semana passada",
"week_next": "Próxima semana",
"month": "Mês",
"month_previous": "Mês passado",
"month_next": "Próximo mês",
"year": "Ano",
"year_previous": "Ano passado",
"year_next": "Próximo ano",
"list": "Lista",
"today": "Hoje"
},
"close_pane_button": {
"close_this_pane": "Fechar este painel"
@@ -995,7 +1013,8 @@
"calendar": "Calendário",
"table": "Tabela",
"geo-map": "Mapa geográfico",
"board": "Quadro"
"board": "Quadro",
"include_archived_notes": "Exibir notas arquivadas"
},
"edited_notes": {
"no_edited_notes_found": "Ainda não há nenhuma nota editada neste dia…",
@@ -1350,7 +1369,9 @@
"title": "Desempenho",
"enable-motion": "Habilitar transições e animações",
"enable-shadows": "Habilitar sombras",
"enable-backdrop-effects": "Habilitar efeitos de fundo para menus, popups e painéis"
"enable-backdrop-effects": "Habilitar efeitos de fundo para menus, popups e painéis",
"enable-smooth-scroll": "Habilitar rolagem suave",
"app-restart-required": "(é necessário reiniciar o programa para que a mudança tenha efeito)"
},
"zoom_factor": {
"title": "Fator do Zoom (apenas versão de área de trabalho)",
@@ -1730,7 +1751,7 @@
"native-title-bar": "Barra de título nativa",
"native-title-bar-description": "Para Windows e macOS, manter a barra de título nativa desabilitada faz a aplicação parecer mais compacta. No Linux, manter a barra de título nativa habilitada faz a aplicação se integrar melhor com o restante do sistema.",
"background-effects": "Habilitar efeitos de fundo (apenas Windows 11)",
"background-effects-description": "O efeito Mica adicionar um fundo borrado e estilizado às janelas da aplicação, criando profundidade e um visual moderno.",
"background-effects-description": "O efeito Mica adiciona um fundo borrado e estilizado às janelas da aplicação, criando profundidade e um visual moderno. \"Barra de título nativa\" precisa ser desativada.",
"restart-app-button": "Reiniciar a aplicação para ver as alterações",
"zoom-factor": "Fator de Zoom"
},
@@ -1865,14 +1886,21 @@
"delete_row": "Excluir linha"
},
"board_view": {
"delete-note": "Excluir Nota",
"delete-note": "Deletar nota...",
"move-to": "Mover para",
"insert-above": "Inserir acima",
"insert-below": "Inserir abaixo",
"delete-column": "Excluir coluna",
"delete-column-confirmation": "Tem certeza de que deseja excluir esta coluna? O atributo correspondente também será removido de todas as notas abaixo desta coluna.",
"new-item": "Novo item",
"add-column": "Adicionar Coluna"
"add-column": "Adicionar Coluna",
"remove-from-board": "Remover do quadro",
"archive-note": "Arquivar nota",
"unarchive-note": "Desarquivar nota",
"new-item-placeholder": "Escreva o título da nota...",
"add-column-placeholder": "Escreva o nome da coluna...",
"edit-note-title": "Clique para editar o título da nota",
"edit-column-title": "Clique para editar o título da coluna"
},
"call_to_action": {
"next_theme_title": "Testar no novo tema do Trilium",
@@ -1894,7 +1922,9 @@
"percentage": "%"
},
"book": {
"no_children_help": "Esta coleção não possui nenhum nota filha, então não há nada para exibir. Veja <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para detalhes."
"no_children_help": "Esta coleção não possui nenhum nota filha, então não há nada para exibir. Veja <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para detalhes.",
"drag_locked_title": "Bloqueado para edição",
"drag_locked_message": "Arrastar não é permitido pois a coleção está bloqueada para edição."
},
"render": {
"note_detail_render_help_1": "Esta nota de ajuda é mostrada porque esta nota do tipo Renderizar HTML não possui a relação necessária para funcionar corretamente.",
@@ -1978,7 +2008,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID é uma forma padronizada de permitir que você faça login em sites usando uma conta de outro serviço, como o Google, para verificar sua identidade. O emissor padrão é o Google, mas você pode alterá-lo para qualquer outro provedor OpenID. Consulte <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">aqui</a> para mais informações. Siga estas <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instruções</a> para configurar um serviço OpenID através do Google.",
"oauth_description_warning": "Para habilitar o OAuth/OpenID, você precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no arquivo config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Configurações ausentes: {{variables}}",
"oauth_missing_vars": "Configurações ausentes: {{-variables}}",
"oauth_user_account": "Conta do Usuário: ",
"oauth_user_email": "E-mail do Usuário: ",
"oauth_user_not_logged_in": "Não está logado!"
@@ -2026,5 +2056,12 @@
"help_link": "Para ajuda, visite a <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>.",
"shared_publicly": "Esta nota é compartilhada publicamente em {{- link}}.",
"shared_locally": "Esta nota é compartilhada localmente em {{- link}}."
},
"pagination": {
"page_title": "Página de {{startIndex}} - {{endIndex}}",
"total_notes": "{{count}} notas"
},
"collections": {
"rendering_error": "Não foi possível exibir o conteúdo devido a um erro."
}
}

View File

@@ -1931,7 +1931,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID este o cale standardizată ce permite autentificarea într-un site folosind un cont dintr-un alt serviciu, precum Google, pentru a verifica identitatea. În mod implicit furnizorul este Google, dar se poate schimba cu orice furnizor OpenID. Pentru mai multe informații, consultați <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">ghidul</a>. Urmați <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">aceste instrucțiuni</a> pentru a putea configura OpenID prin Google.",
"oauth_description_warning": "Pentru a activa OAuth sau OpenID, trebuie să configurați URL-ul de bază, ID-ul de client și secretul de client în fișierul config.ini și să reporniți aplicația. Dacă doriți să utilizați variabile de environment, puteți seta TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID și TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Setări lipsă: {{variables}}",
"oauth_missing_vars": "Setări lipsă: {{-variables}}",
"oauth_user_account": "Cont: ",
"oauth_user_email": "Email: ",
"oauth_user_not_logged_in": "Neautentificat!"

View File

@@ -301,7 +301,7 @@
"chooseImportFile": "Выберите файл импорта",
"safeImport": "Безопасный импорт",
"shrinkImages": "Уменьшить изображения",
"textImportedAsText": "Импортировать HTML, Markdown и TXT как текстовые заметки, если из метаданные не позволяют определить тип заметки",
"textImportedAsText": "Импортировать HTML, Markdown и TXT как текстовые заметки, если их метаданные не позволяют определить тип заметки",
"replaceUnderscoresWithSpaces": "Заменить подчеркивания пробелами в названиях импортированных заметок",
"import": "Импорт",
"failed": "Сбой при импорте: {{message}}.",
@@ -665,10 +665,10 @@
"electron_integration": {
"zoom-factor": "Коэффициент масштабирования",
"restart-app-button": "Применить изменения и перезапустить приложение",
"background-effects-description": "Эффект Mica добавляет размытый, стильный фон окнам приложений, создавая глубину и современный вид.",
"background-effects-description": "Эффект Mica добавляет размытый, стильный фон окнам приложений, создавая глубину и современный вид. Опция \"Системная строка заголовка\" должна быть отключена.",
"background-effects": "Включить фоновые эффекты (только Windows 11)",
"native-title-bar-description": "В Windows и macOS отключение нативной строки заголовка делает приложение более компактным. В Linux включение нативной строки заголовка улучшает интеграцию с остальной частью системы.",
"native-title-bar": "Нативная панель заголовка",
"native-title-bar-description": "В Windows и macOS отключение системной строки заголовка делает приложение более компактным. В Linux включение системной строки заголовка улучшает интеграцию с остальной частью системы.",
"native-title-bar": "Системная панель заголовка",
"desktop-application": "Десктопное приложение"
},
"link_context_menu": {
@@ -824,7 +824,7 @@
"expand-subtree": "Развернуть поддерево",
"collapse-subtree": "Свернуть поддерево",
"sort-by": "Сортировать по...",
"insert-note-after": "Вставить замтку после",
"insert-note-after": "Вставить заметку после",
"insert-child-note": "Вставить дочернюю заметку",
"search-in-subtree": "Поиск в поддереве",
"edit-branch-prefix": "Изменить префикс ветки",
@@ -1207,7 +1207,7 @@
"native_title_bar": {
"enabled": "включено",
"disabled": "выключено",
"title": "Нативная панель заголовка (требует перезапуска приложения)"
"title": "Системная панель заголовка (требует перезапуска приложения)"
},
"ai_llm": {
"progress": "Прогресс",
@@ -1475,7 +1475,7 @@
"totp_secret_generated": "Создан секрет TOTP",
"recovery_keys_generate": "Генерация кодов восстановления",
"recovery_keys_regenerate": "Регенерация кодов восстановления",
"oauth_missing_vars": "Отсутствуют настройки: {{variables}}",
"oauth_missing_vars": "Отсутствуют настройки: {{-variables}}",
"oauth_user_not_logged_in": "Не выполнен вход!",
"totp_title": "Одноразовый пароль с ограничением по времени (TOTP)",
"recovery_keys_title": "Ключи восстановления единого входа",

View File

@@ -1843,7 +1843,7 @@
"oauth_title": "OAuth / OpenID 驗證",
"oauth_description": "OpenID 是一種標準化的方式,可讓您使用其他服務(如 Google的帳號登入網站以驗證您的身份。預設的提供者是 Google但您可以將其變更為任何其他 OpenID 提供者。查看<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">此處</a>以瞭解更多資訊。依照這些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指示</a>以透過 Google 設定 OpenID 服務。",
"oauth_description_warning": "要啟用 OAuth / OpenID您需要設定 config.ini 文件中的 OAuth / OpenID 基礎 URL、客戶端 ID 和客戶端金鑰,並重新啟動應用程式。如果要從環境變數設置,請設定 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 環境變數。",
"oauth_missing_vars": "缺少以下設定:{{variables}}",
"oauth_missing_vars": "缺少以下設定:{{-variables}}",
"oauth_user_account": "用戶帳號: ",
"oauth_user_email": "用戶信箱: ",
"oauth_user_not_logged_in": "尚未登入!"

View File

@@ -560,7 +560,7 @@
"oauth_title": "OAuth/OpenID",
"oauth_description": "OpenID це стандартизований спосіб входу на веб-сайти за допомогою облікового запису з іншого сервісу, такого як Google, для підтвердження вашої особи. Емітентом за замовчуванням є Google, але ви можете змінити його на будь-якого іншого постачальника OpenID. Перегляньте <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">тут</a> для отримання додаткової інформації. Дотримуйтесь цих <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">інструкцій</a>, щоб налаштувати сервіс OpenID через Google.",
"oauth_description_warning": "Щоб увімкнути OAuth/OpenID, потрібно встановити базову URL-адресу OAuth/OpenID, ідентифікатор клієнта та секрет клієнта у файлі config.ini та перезапустити програму. Якщо ви хочете встановити зі змінних середовища, встановіть TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID та TRILIUM_OAUTH_CLIENT_SECRET.",
"oauth_missing_vars": "Відсутні налаштування: {{variables}}",
"oauth_missing_vars": "Відсутні налаштування: {{-variables}}",
"oauth_user_account": "Обліковий запис користувача: ",
"oauth_user_email": "Електронна пошта користувача: ",
"oauth_user_not_logged_in": "Ви не ввійшли в систему!"

View File

@@ -6,8 +6,8 @@
.floating-buttons-children,
.show-floating-buttons {
position: absolute;
top: 10px;
right: 10px;
top: var(--floating-buttons-vert-offset, 10px);
right: var(--floating-buttons-horiz-offset, 10px);
display: flex;
flex-direction: row;
z-index: 100;
@@ -28,8 +28,8 @@
transform: rotate(180deg);
}
.type-canvas .floating-buttons-children {
top: 70px;
.type-canvas {
--floating-buttons-vert-offset: 70px;
}
.type-canvas .floating-buttons-children > * {

View File

@@ -8,31 +8,50 @@
min-width: 20em;
}
.global-menu-button {
button.global-menu-button {
position: relative;
width: 100% !important;
height: 100% !important;
position: relative;
border: none;
padding: 6px;
border: 0;
}
.global-menu-button svg > g {
transform-origin: center;
transition: transform 300ms ease-in-out;
}
.global-menu-button:active svg > g,
.global-menu-button.show svg > g{
transform: scale(0.85) rotate(-10deg);
}
.global-menu-button svg path {
fill: var(--launcher-pane-text-color);
}
.global-menu-button:hover { border: 0; }
.global-menu-button:hover svg path {
transition: 200ms ease-in-out fill;
.global-menu-button:hover {
border: none;
}
.global-menu-button:hover svg path.st0 { fill:#95C980; }
.global-menu-button:hover svg path.st1 { fill:#72B755; }
.global-menu-button:hover svg path.st2 { fill:#4FA52B; }
.global-menu-button:hover svg path.st3 { fill:#EE8C89; }
.global-menu-button:hover svg path.st4 { fill:#E96562; }
.global-menu-button:hover svg path.st5 { fill:#E33F3B; }
.global-menu-button:hover svg path.st6 { fill:#EFB075; }
.global-menu-button:hover svg path.st7 { fill:#E99547; }
.global-menu-button:hover svg path.st8 { fill:#E47B19; }
.global-menu-button:hover svg path,
.global-menu-button.show svg path {
transition: 300ms linear fill;
}
.global-menu-button svg path {
transition: fill 1000ms ease-out;
}
.global-menu-button:is(:hover, .show) svg path.st0 { fill:#95C980; transition-delay: 0ms; }
.global-menu-button:is(:hover, .show) svg path.st1 { fill:#72B755; transition-delay: 50ms; }
.global-menu-button:is(:hover, .show) svg path.st2 { fill:#4FA52B; transition-delay: 100ms; }
.global-menu-button:is(:hover, .show) svg path.st3 { fill:#EE8C89; transition-delay: 200ms; }
.global-menu-button:is(:hover, .show) svg path.st4 { fill:#E96562; transition-delay: 250ms; }
.global-menu-button:is(:hover, .show) svg path.st5 { fill:#E33F3B; transition-delay: 300ms; }
.global-menu-button:is(:hover, .show) svg path.st6 { fill:#EFB075; transition-delay: 400ms; }
.global-menu-button:is(:hover, .show) svg path.st7 { fill:#E99547; transition-delay: 450ms; }
.global-menu-button:is(:hover, .show) svg path.st8 { fill:#E47B19; transition-delay: 500ms; }
.global-menu-button-update-available {
position: absolute;

View File

@@ -1,6 +1,6 @@
import Dropdown from "../react/Dropdown";
import "./global_menu.css";
import { useStaticTooltip, useStaticTooltipWithKeyboardShortcut, useTriliumOption, useTriliumOptionBool } from "../react/hooks";
import { useStaticTooltip, useStaticTooltipWithKeyboardShortcut, useTriliumOption, useTriliumOptionBool, useTriliumOptionInt } from "../react/hooks";
import { useContext, useEffect, useRef, useState } from "preact/hooks";
import { t } from "../../services/i18n";
import { FormDropdownDivider, FormDropdownSubmenu, FormListItem } from "../react/FormList";
@@ -142,31 +142,25 @@ function VerticalLayoutIcon() {
}
function ZoomControls({ parentComponent }: { parentComponent?: Component | null }) {
const [ zoomLevel, setZoomLevel ] = useState(100);
const [ zoomLevel ] = useTriliumOption("zoomFactor");
function updateZoomState() {
if (!isElectron()) {
return;
}
const zoomFactor = dynamicRequire("electron").webFrame.getZoomFactor();
setZoomLevel(Math.round(zoomFactor * 100));
}
useEffect(updateZoomState, []);
function ZoomControlButton({ command, title, icon, children }: { command: KeyboardActionNames, title: string, icon?: string, children?: ComponentChildren }) {
function ZoomControlButton({ command, title, icon, children, dismiss }: { command: KeyboardActionNames, title: string, icon?: string, children?: ComponentChildren, dismiss?: boolean }) {
const linkRef = useRef<HTMLAnchorElement>(null);
useStaticTooltipWithKeyboardShortcut(linkRef, title, command);
useStaticTooltipWithKeyboardShortcut(linkRef, title, command, {
placement: "bottom",
fallbackPlacements: [ "bottom" ]
});
return (
<a
ref={linkRef}
tabIndex={0}
onClick={(e) => {
parentComponent?.triggerCommand(command);
setTimeout(() => updateZoomState(), 300)
e.stopPropagation();
if (!dismiss) {
e.stopPropagation();
}
}}
className={icon}
className={`dropdown-item-button ${icon}`}
>{children}</a>
)
}
@@ -174,15 +168,17 @@ function ZoomControls({ parentComponent }: { parentComponent?: Component | null
return isElectron() ? (
<FormListItem
icon="bx bx-empty"
container
className="zoom-container"
onClick={(e) => e.stopPropagation()}
>
{t("global_menu.zoom")}
<>
<div className="zoom-buttons">
<ZoomControlButton command="toggleFullscreen" title={t("global_menu.toggle_fullscreen")} icon="bx bx-expand-alt" />
<ZoomControlButton command="toggleFullscreen" title={t("global_menu.toggle_fullscreen")} icon="bx bx-expand-alt" dismiss />
&nbsp;
<ZoomControlButton command="zoomOut" title={t("global_menu.zoom_out")} icon="bx bx-minus" />
<ZoomControlButton command="zoomReset" title={t("global_menu.reset_zoom_level")}>{zoomLevel}{t("units.percentage")}</ZoomControlButton>
<ZoomControlButton command="zoomReset" title={t("global_menu.reset_zoom_level")}>{(parseFloat(zoomLevel) * 100).toFixed(0)}{t("units.percentage")}</ZoomControlButton>
<ZoomControlButton command="zoomIn" title={t("global_menu.zoom_in")} icon="bx bx-plus" />
</div>
</>

View File

@@ -14,23 +14,33 @@ import { WebSocketMessage } from "@triliumnext/commons";
import froca from "../../services/froca";
interface NoteListProps<T extends object> {
note?: FNote | null;
note: FNote | null | undefined;
notePath: string | null | undefined;
highlightedTokens?: string[] | null;
/** if set to `true` then only collection-type views are displayed such as geo-map and the calendar. The original book types grid and list will be ignored. */
displayOnlyCollections?: boolean;
highlightedTokens?: string[] | null;
viewStorage?: ViewModeStorage<T>;
isEnabled: boolean;
ntxId: string | null | undefined;
}
export default function NoteList<T extends object>({ note: providedNote, highlightedTokens, displayOnlyCollections }: NoteListProps<T>) {
export default function NoteList<T extends object>(props: Pick<NoteListProps<T>, "displayOnlyCollections">) {
const { note, noteContext, notePath, ntxId } = useNoteContext();
const isEnabled = noteContext?.hasNoteList();
return <CustomNoteList note={note} isEnabled={!!isEnabled} notePath={notePath} ntxId={ntxId} {...props} />
}
export function SearchNoteList<T extends object>(props: Omit<NoteListProps<T>, "isEnabled">) {
return <CustomNoteList {...props} isEnabled={true} />
}
function CustomNoteList<T extends object>({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId }: NoteListProps<T>) {
const widgetRef = useRef<HTMLDivElement>(null);
const { note: contextNote, noteContext, notePath } = useNoteContext();
const note = providedNote ?? contextNote;
const viewType = useNoteViewType(note);
const noteIds = useNoteIds(note, viewType);
const noteIds = useNoteIds(note, viewType, ntxId);
const isFullHeight = (viewType && viewType !== "list" && viewType !== "grid");
const [ isIntersecting, setIsIntersecting ] = useState(false);
const shouldRender = (isFullHeight || isIntersecting || note?.type === "book");
const isEnabled = (note && noteContext?.hasNoteList() && !!viewType && shouldRender);
const isEnabled = (note && shouldEnable && !!viewType && shouldRender);
useEffect(() => {
if (isFullHeight || displayOnlyCollections || note?.type === "book") {
@@ -110,7 +120,7 @@ function useNoteViewType(note?: FNote | null): ViewTypeOptions | undefined {
}
}
function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined) {
function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined, ntxId: string | null | undefined) {
const [ noteIds, setNoteIds ] = useState<string[]>([]);
const [ includeArchived ] = useNoteLabelBoolean(note, "includeArchived");
@@ -144,6 +154,12 @@ function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions |
}
})
// Refresh on search.
useTriliumEvent("searchRefreshed", ({ ntxId: eventNtxId }) => {
if (eventNtxId !== ntxId) return;
refreshNoteIds();
});
// Refresh on import.
useEffect(() => {
async function onImport(message: WebSocketMessage) {

View File

@@ -41,7 +41,7 @@ export function openNoteContextMenu(api: Api, event: ContextMenuEvent, note: FNo
y: event.pageY,
items: [
...link_context_menu.getItems(),
{ title: "----" },
{ kind: "separator" },
{
title: t("board_view.move-to"),
uiIcon: "bx bx-transfer",
@@ -52,7 +52,7 @@ export function openNoteContextMenu(api: Api, event: ContextMenuEvent, note: FNo
})),
},
getArchiveMenuItem(note),
{ title: "----" },
{ kind: "separator" },
{
title: t("board_view.insert-above"),
uiIcon: "bx bx-list-plus",
@@ -63,7 +63,7 @@ export function openNoteContextMenu(api: Api, event: ContextMenuEvent, note: FNo
uiIcon: "bx bx-empty",
handler: () => api.insertRowAtPosition(column, branchId, "after")
},
{ title: "----" },
{ kind: "separator" },
{
title: t("board_view.remove-from-board"),
uiIcon: "bx bx-task-x",

View File

@@ -228,7 +228,7 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, multilin
}) {
const inputRef = useRef<any>(null);
const dismissOnNextRefreshRef = useRef(false);
const shouldSave = useRef(false);
const shouldDismiss = useRef(false);
useEffect(() => {
inputRef.current?.focus();
@@ -254,12 +254,12 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, multilin
onKeyDown={(e: TargetedKeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {
if (e.key === "Enter" || e.key === "Escape") {
e.preventDefault();
shouldSave.current = (e.key === "Enter");
shouldDismiss.current = (e.key === "Escape");
e.currentTarget.blur();
}
}}
onBlur={(newValue) => {
if (shouldSave.current && newValue.trim() && (newValue !== currentValue || isNewItem)) {
if (!shouldDismiss.current && newValue.trim() && (newValue !== currentValue || isNewItem)) {
save(newValue);
dismissOnNextRefreshRef.current = true;
} else {

View File

@@ -10,14 +10,14 @@ import link from "../../../services/link.js";
export default function openContextMenu(noteId: string, e: LeafletMouseEvent, isEditable: boolean) {
let items: MenuItem<keyof CommandMappings>[] = [
...buildGeoLocationItem(e),
{ title: "----" },
{ kind: "separator" },
...linkContextMenu.getItems(),
];
if (isEditable) {
items = [
...items,
{ title: "----" },
{ kind: "separator" },
{ title: t("geo-map-context.remove-from-map"), command: "deleteFromMap", uiIcon: "bx bx-trash" }
];
}
@@ -46,7 +46,7 @@ export function openMapContextMenu(noteId: string, e: LeafletMouseEvent, isEdita
if (isEditable) {
items = [
...items,
{ title: "----" },
{ kind: "separator" },
{
title: t("geo-map-context.add-note"),
handler: () => createNewNote(noteId, e),

View File

@@ -74,7 +74,7 @@ function showColumnContextMenu(parentComponent: Component, e: MouseEvent, column
handler: () => tabulator.clearSort()
},
{
title: "----"
kind: "separator"
},
{
title: t("table_view.hide-column", { title }),
@@ -86,7 +86,7 @@ function showColumnContextMenu(parentComponent: Component, e: MouseEvent, column
uiIcon: "bx bx-columns",
items: buildColumnItems(tabulator)
},
{ title: "----" },
{ kind: "separator" },
{
title: t("table_view.add-column-to-the-left"),
uiIcon: "bx bx-horizontal-left",
@@ -105,7 +105,7 @@ function showColumnContextMenu(parentComponent: Component, e: MouseEvent, column
direction: "after"
})
},
{ title: "----" },
{ kind: "separator" },
{
title: t("table_view.edit-column"),
uiIcon: "bx bxs-edit-alt",
@@ -143,7 +143,7 @@ function showHeaderContextMenu(parentComponent: Component, e: MouseEvent, tabula
uiIcon: "bx bx-columns",
items: buildColumnItems(tabulator)
},
{ title: "----" },
{ kind: "separator" },
{
title: t("table_view.new-column"),
uiIcon: "bx bx-empty",
@@ -174,7 +174,7 @@ export function showRowContextMenu(parentComponent: Component, e: MouseEvent, ro
contextMenu.show({
items: [
...link_context_menu.getItems(),
{ title: "----" },
{ kind: "separator" },
{
title: t("table_view.row-insert-above"),
uiIcon: "bx bx-horizontal-left bx-rotate-90",
@@ -214,7 +214,7 @@ export function showRowContextMenu(parentComponent: Component, e: MouseEvent, ro
}
})
},
{ title: "----" },
{ kind: "separator" },
{
title: t("table_context_menu.delete_row"),
uiIcon: "bx bx-trash",

View File

@@ -17,8 +17,15 @@
}
.bulk-actions-dialog .bulk-existing-action-list .button-column {
/* minimal width so that table remains static sized and most space remains for middle column with settings */
width: 50px;
white-space: nowrap;
text-align: right;
}
.bulk-actions-dialog .bulk-existing-action-list .button-column > * {
vertical-align: middle;
}
.bulk-actions-dialog .bulk-existing-action-list .button-column .help-dropdown {
display: inline-block !important;
}

View File

@@ -28,8 +28,8 @@ const SEPARATOR_TITLE_REPLACEMENTS = [
export default function NoteTypeChooserDialogComponent() {
const [ callback, setCallback ] = useState<ChooseNoteTypeCallback>();
const [ shown, setShown ] = useState(false);
const [ parentNote, setParentNote ] = useState<Suggestion | null>();
const [ noteTypes, setNoteTypes ] = useState<MenuItem<TreeCommandNames>[]>([]);
const [ parentNote, setParentNote ] = useState<Suggestion | null>();
const [ noteTypes, setNoteTypes ] = useState<MenuItem<TreeCommandNames>[]>([]);
useTriliumEvent("chooseNoteType", ({ callback }) => {
setCallback(() => callback);
@@ -41,11 +41,11 @@ export default function NoteTypeChooserDialogComponent() {
let index = -1;
setNoteTypes((noteTypes ?? []).map((item) => {
if (item.title === "----") {
if ("kind" in item && item.kind === "separator") {
index++;
return {
title: SEPARATOR_TITLE_REPLACEMENTS[index],
enabled: false
kind: "header",
title: SEPARATOR_TITLE_REPLACEMENTS[index]
}
}
@@ -56,7 +56,7 @@ export default function NoteTypeChooserDialogComponent() {
function onNoteTypeSelected(value: string) {
const [ noteType, templateNoteId ] = value.split(",");
callback?.({
success: true,
noteType,
@@ -95,21 +95,21 @@ export default function NoteTypeChooserDialogComponent() {
<FormGroup name="note-type" label={t("note_type_chooser.modal_body")}>
<FormList onSelect={onNoteTypeSelected}>
{noteTypes.map((_item) => {
if (_item.title === "----") {
return;
if ("kind" in _item && _item.kind === "separator") {
return;
}
const item = _item as MenuCommandItem<TreeCommandNames>;
if (item.enabled === false) {
if ("kind" in item && item.kind === "header") {
return <FormListHeader text={item.title} />
} else {
return <FormListItem
value={[ item.type, item.templateNoteId ].join(",") }
icon={item.uiIcon}>
{item.title}
{item.badges && item.badges.map((badge) => <Badge {...badge} />)}
</FormListItem>;
{item.title}
{item.badges && item.badges.map((badge) => <Badge {...badge} />)}
</FormListItem>;
}
})}
</FormList>

View File

@@ -34,10 +34,10 @@ export async function validateProviders(validationWarning: HTMLElement): Promise
precedenceList = [precedenceStr];
}
}
// Check for configuration issues with providers in the precedence list
const configIssues: string[] = [];
// Always add experimental warning as the first item
configIssues.push(t("ai_llm.experimental_warning"));

View File

@@ -24,7 +24,7 @@ export default function MobileDetailMenu() {
items: [
{ title: t("mobile_detail_menu.insert_child_note"), command: "insertChildNote", uiIcon: "bx bx-plus", enabled: note?.type !== "search" },
{ title: t("mobile_detail_menu.delete_this_note"), command: "delete", uiIcon: "bx bx-trash", enabled: note?.noteId !== "root" },
{ title: "----" },
{ kind: "separator" },
{ title: "Note revisions", command: "showRevisions", uiIcon: "bx bx-history" }
],
selectMenuItemHandler: async ({ command }) => {

View File

@@ -1,5 +1,4 @@
.note-icon-widget {
padding-top: 3px;
padding-left: 7px;
margin-right: 0;
width: 50px;

View File

@@ -34,7 +34,7 @@ export default function NoteTitleWidget() {
if (isReadOnly) {
noteContext?.getNavigationTitle().then(setNavigationTitle);
}
}, [noteContext, isReadOnly]);
}, [note, isReadOnly]);
// Save changes to title.
const spacedUpdate = useSpacedUpdate(async () => {

View File

@@ -86,6 +86,7 @@ interface FormListItemOpts {
disabledTooltip?: string;
checked?: boolean | null;
selected?: boolean;
container?: boolean;
onClick?: (e: MouseEvent) => void;
triggerCommand?: CommandNames;
description?: string;
@@ -98,7 +99,7 @@ const TOOLTIP_CONFIG: Partial<Tooltip.Options> = {
fallbackPlacements: [ "right" ]
}
export function FormListItem({ className, icon, value, title, active, disabled, checked, onClick, selected, rtl, triggerCommand, description, ...contentProps }: FormListItemOpts) {
export function FormListItem({ className, icon, value, title, active, disabled, checked, container, onClick, selected, rtl, triggerCommand, description, ...contentProps }: FormListItemOpts) {
const itemRef = useRef<HTMLLIElement>(null);
if (checked) {
@@ -110,9 +111,9 @@ export function FormListItem({ className, icon, value, title, active, disabled,
return (
<li
ref={itemRef}
class={`dropdown-item ${active ? "active" : ""} ${disabled ? "disabled" : ""} ${selected ? "selected" : ""} ${className ?? ""}`}
class={`dropdown-item ${active ? "active" : ""} ${disabled ? "disabled" : ""} ${selected ? "selected" : ""} ${container ? "dropdown-container-item": ""} ${className ?? ""}`}
data-value={value} title={title}
tabIndex={0}
tabIndex={container ? -1 : 0}
onClick={onClick}
data-trigger-command={triggerCommand}
dir={rtl ? "rtl" : undefined}

View File

@@ -35,7 +35,7 @@ export default function NoteLink({ className, notePath, showNotePath, showNoteIc
if (!ref.current || !jqueryEl) return;
ref.current.replaceChildren(jqueryEl[0]);
highlightSearch(ref.current);
}, [ jqueryEl ]);
}, [ jqueryEl, highlightedTokens ]);
if (style) {
jqueryEl?.css(style);

View File

@@ -332,7 +332,9 @@ export function useNoteRelation(note: FNote | undefined | null, relationName: Re
*
* @param note the note whose label to read/write.
* @param labelName the name of the label to read/write.
* @returns an array where the first element is the getter and the second element is the setter. The setter has a special behaviour for convenience: if the value is undefined, the label is created without a value (e.g. a tag), if the value is null then the label is removed.
* @returns an array where the first element is the getter and the second element is the setter. The setter has a special behaviour for convenience:
* - if the value is undefined, the label is created without a value (e.g. a tag)
* - if the value is null then the label is removed.
*/
export function useNoteLabel(note: FNote | undefined | null, labelName: FilterLabelsByType<string>): [string | null | undefined, (newValue: string | null | undefined) => void] {
const [ , setLabelValue ] = useState<string | null | undefined>();
@@ -352,9 +354,9 @@ export function useNoteLabel(note: FNote | undefined | null, labelName: FilterLa
const setter = useCallback((value: string | null | undefined) => {
if (note) {
if (value || value === undefined) {
if (value !== null) {
attributes.setLabel(note.noteId, labelName, value)
} else if (value === null) {
} else {
attributes.removeOwnedLabelByName(note, labelName);
}
}
@@ -592,10 +594,11 @@ export function useStaticTooltip(elRef: RefObject<Element>, config?: Partial<Too
}, [ elRef, config ]);
}
export function useStaticTooltipWithKeyboardShortcut(elRef: RefObject<Element>, title: string, actionName: KeyboardActionNames | undefined) {
export function useStaticTooltipWithKeyboardShortcut(elRef: RefObject<Element>, title: string, actionName: KeyboardActionNames | undefined, opts?: Omit<Partial<Tooltip.Options>, "title">) {
const [ keyboardShortcut, setKeyboardShortcut ] = useState<string[]>();
useStaticTooltip(elRef, {
title: keyboardShortcut?.length ? `${title} (${keyboardShortcut?.join(",")})` : title
title: keyboardShortcut?.length ? `${title} (${keyboardShortcut?.join(",")})` : title,
...opts
});
useEffect(() => {

View File

@@ -341,7 +341,7 @@ function NoteLanguageSwitch({ note }: { note?: FNote | null }) {
return <FormListItem
rtl={locale.rtl}
checked={checked}
onClick={() => setCurrentNoteLanguage(locale.id)}
onClick={() => setCurrentNoteLanguage(locale.id || null)}
>{locale.name}</FormListItem>
} else {
return <FormDropdownDivider />

View File

@@ -96,7 +96,7 @@ const TAB_CONFIGURATION = numberObjectsInPlace<TabConfiguration>([
content: FilePropertiesTab,
show: ({ note }) => note?.type === "file",
toggleCommand: "toggleRibbonTabFileProperties",
activate: true
activate: ({ note }) => note?.mime !== "application/pdf"
},
{
title: t("image_properties.title"),

View File

@@ -33,7 +33,7 @@ export default function SearchDefinitionTab({ note, ntxId }: TabContext) {
const activeOptions: SearchOption[] = [];
for (const searchOption of SEARCH_OPTIONS) {
const attr = note.getAttribute(searchOption.attributeType, searchOption.attributeName);
const attr = note.getAttribute(searchOption.attributeType, searchOption.attributeName);
if (attr) {
activeOptions.push(searchOption);
} else {
@@ -75,24 +75,26 @@ export default function SearchDefinitionTab({ note, ntxId }: TabContext) {
return (
<div className="search-definition-widget">
<div className="search-settings">
{note &&
{note &&
<table className="search-setting-table">
<tr>
<td className="title-column">{t("search_definition.add_search_option")}</td>
<td colSpan={2} className="add-search-option">
{searchOptions?.availableOptions.map(({ icon, label, tooltip, attributeName, attributeType, defaultValue }) => (
<Button
size="small"
icon={icon}
text={label}
title={tooltip}
onClick={() => attributes.setAttribute(note, attributeType, attributeName, defaultValue ?? "")}
/>
))}
<tbody>
<tr>
<td className="title-column">{t("search_definition.add_search_option")}</td>
<td colSpan={2} className="add-search-option">
{searchOptions?.availableOptions.map(({ icon, label, tooltip, attributeName, attributeType, defaultValue }) => (
<Button
size="small"
icon={icon}
text={label}
title={tooltip}
onClick={() => attributes.setAttribute(note, attributeType, attributeName, defaultValue ?? "")}
/>
))}
<AddBulkActionButton note={note} />
</td>
</tr>
<AddBulkActionButton note={note} />
</td>
</tr>
</tbody>
<tbody className="search-options">
{searchOptions?.activeOptions.map(({ attributeType, attributeName, component, additionalAttributesToDelete, defaultValue }) => {
const Component = component;
@@ -125,7 +127,7 @@ export default function SearchDefinitionTab({ note, ntxId }: TabContext) {
onClick={async () => {
await server.post(`search-and-execute-note/${note.noteId}`);
refreshResults();
toast.showMessage(t("search_definition.actions_executed"), 3000);
toast.showMessage(t("search_definition.actions_executed"), 3000);
}}
/>
@@ -196,9 +198,9 @@ function AddBulkActionButton({ note }: { note: FNote }) {
{actions.map(({ actionName, actionTitle }) => (
<FormListItem onClick={() => bulk_action.addAction(note.noteId, actionName)}>{actionTitle}</FormListItem>
))}
))}
</>
))}
</Dropdown>
)
}
}

View File

@@ -32,7 +32,7 @@ export default function SimilarNotesTab({ note }: TabContext) {
notePath={notePath}
noTnLink
style={{
"font-size": 24 * (1 - 1 / (1 + score))
"font-size": 20 * (1 - 1 / (1 + score))
}}
/>
))}

View File

@@ -387,7 +387,7 @@ export default function AttributeEditor({ api, note, componentId, notePath, ntxI
items: [
{ title: t("attribute_editor.add_new_label"), command: "addNewLabel", uiIcon: "bx bx-hash" },
{ title: t("attribute_editor.add_new_relation"), command: "addNewRelation", uiIcon: "bx bx-transfer" },
{ title: "----" },
{ kind: "separator" },
{ title: t("attribute_editor.add_new_label_definition"), command: "addNewLabelDefinition", uiIcon: "bx bx-empty" },
{ title: t("attribute_editor.add_new_relation_definition"), command: "addNewRelationDefinition", uiIcon: "bx bx-empty" }
],

View File

@@ -3,7 +3,7 @@ import { t } from "../services/i18n";
import Alert from "./react/Alert";
import { useNoteContext, useTriliumEvent } from "./react/hooks";
import "./search_result.css";
import NoteList from "./collections/NoteList";
import { SearchNoteList } from "./collections/NoteList";
// import NoteListRenderer from "../services/note_list_renderer";
enum SearchResultState {
@@ -13,7 +13,7 @@ enum SearchResultState {
}
export default function SearchResult() {
const { note, ntxId } = useNoteContext();
const { note, notePath, ntxId } = useNoteContext();
const [ state, setState ] = useState<SearchResultState>();
const [ highlightedTokens, setHighlightedTokens ] = useState<string[]>();
@@ -53,7 +53,12 @@ export default function SearchResult() {
)}
{state === SearchResultState.GOT_RESULTS && (
<NoteList note={note} highlightedTokens={highlightedTokens} />
<SearchNoteList
note={note}
notePath={notePath}
highlightedTokens={highlightedTokens}
ntxId={ntxId}
/>
)}
</div>
);

View File

@@ -168,7 +168,6 @@ const TAB_ROW_TPL = `
.tab-row-widget .note-tab .note-tab-icon {
position: relative;
top: -1px;
padding-right: 3px;
}
@@ -356,11 +355,11 @@ export default class TabRowWidget extends BasicWidget {
{ title: t("tab_row.close_right_tabs"), command: "closeRightTabs", uiIcon: "bx bx-empty", enabled: appContext.tabManager.noteContexts?.at(-1)?.ntxId !== ntxId },
{ title: t("tab_row.close_all_tabs"), command: "closeAllTabs", uiIcon: "bx bx-empty" },
{ title: "----" },
{ kind: "separator" },
{ title: t("tab_row.reopen_last_tab"), command: "reopenLastTab", uiIcon: "bx bx-undo", enabled: appContext.tabManager.recentlyClosedTabs.length !== 0 },
{ title: "----" },
{ kind: "separator" },
{ title: t("tab_row.move_tab_to_new_window"), command: "moveTabToNewWindow", uiIcon: "bx bx-window-open" },
{ title: t("tab_row.copy_tab_to_new_window"), command: "copyTabToNewWindow", uiIcon: "bx bx-empty" }

View File

@@ -14,9 +14,9 @@ import dialog from "../../../services/dialog";
import { useTriliumEvent } from "../../react/hooks";
export default function ShortcutSettings() {
const [ keyboardShortcuts, setKeyboardShortcuts ] = useState<KeyboardShortcut[]>([]);
const [ keyboardShortcuts, setKeyboardShortcuts ] = useState<KeyboardShortcut[]>([]);
const [ filter, setFilter ] = useState<string>();
useEffect(() => {
server.get<KeyboardShortcut[]>("keyboard-actions").then(setKeyboardShortcuts);
}, [])
@@ -82,7 +82,7 @@ export default function ShortcutSettings() {
</FormText>
<FormGroup name="keyboard-shortcut-filter">
<FormTextBox
<FormTextBox
placeholder={t("shortcuts.type_text_to_filter")}
currentValue={filter} onChange={(value) => setFilter(value.toLowerCase())}
/>
@@ -136,7 +136,7 @@ function KeyboardShortcutTable({ filter, keyboardShortcuts }: { filter?: string,
}}>
{action.separator}
</td>
) : ( (!filter || filterKeyboardAction(action, filter)) &&
) : ( (!filter || filterKeyboardAction(action, filter)) &&
<>
<td>{action.friendlyName}</td>
<td>
@@ -181,4 +181,4 @@ function getOptionName(actionName: string) {
function getActionNameFromOptionName(optionName: string) {
return optionName.at(PREFIX.length)?.toLowerCase() + optionName.substring(PREFIX.length + 1);
}
}

View File

@@ -10,7 +10,7 @@ import Column from "../../react/Column";
import { FormSelectGroup, FormSelectWithGroups } from "../../react/FormSelect";
import { Themes } from "@triliumnext/highlightjs";
import { ensureMimeTypesForHighlighting, loadHighlightingTheme } from "../../../services/syntax_highlight";
import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons";
import { normalizeMimeTypeForCKEditor, type OptionNames } from "@triliumnext/commons";
import { getHtml } from "../../react/RawHtml";
import type { CSSProperties } from "preact/compat";
import FormText from "../../react/FormText";
@@ -69,26 +69,27 @@ function FormattingToolbar() {
}
function EditorFeatures() {
const [ textNoteEmojiCompletionEnabled, setTextNoteEmojiCompletionEnabled] = useTriliumOptionBool("textNoteEmojiCompletionEnabled");
const [ textNoteCompletionEnabled, setTextNoteCompletionEnabled ] = useTriliumOptionBool("textNoteCompletionEnabled");
return (
<OptionsSection title={t("editorfeatures.title")}>
<FormCheckbox
name="emoji-completion-enabled"
label={t("editorfeatures.emoji_completion_enabled")}
currentValue={textNoteEmojiCompletionEnabled} onChange={setTextNoteEmojiCompletionEnabled}
/>
<FormCheckbox
name="note-completion-enabled"
label={t("editorfeatures.note_completion_enabled")}
currentValue={textNoteCompletionEnabled} onChange={setTextNoteCompletionEnabled}
/>
<EditorFeature name="emoji-completion-enabled" optionName="textNoteEmojiCompletionEnabled" label={t("editorfeatures.emoji_completion_enabled")} description={t("editorfeatures.emoji_completion_description")} />
<EditorFeature name="note-completion-enabled" optionName="textNoteCompletionEnabled" label={t("editorfeatures.note_completion_enabled")} description={t("editorfeatures.emoji_completion_description")} />
<EditorFeature name="slash-commands-enabled" optionName="textNoteSlashCommandsEnabled" label={t("editorfeatures.slash_commands_enabled")} description={t("editorfeatures.emoji_completion_description")} />
</OptionsSection>
);
}
function EditorFeature({ optionName, name, label, description }: { optionName: OptionNames, name: string, label: string, description: string }) {
const [ featureEnabled, setFeatureEnabled ] = useTriliumOptionBool(optionName);
return (
<FormCheckbox
name={name} label={label}
currentValue={featureEnabled} onChange={setFeatureEnabled}
hint={description}
/>
);
}
function HeadingStyle() {
const [ headingStyle, setHeadingStyle ] = useTriliumOption("headingStyle");
@@ -152,7 +153,7 @@ function CodeBlockStyle() {
const [ codeBlockWordWrap, setCodeBlockWordWrap ] = useTriliumOptionBool("codeBlockWordWrap");
return (
<OptionsSection title={t("highlighting.title")}>
<OptionsSection title={t("highlighting.title")}>
<div className="row" style={{ marginBottom: "15px" }}>
<FormGroup name="theme" className="col-md-6" label={t("highlighting.color-scheme")} style={{ marginBottom: 0 }}>
<FormSelectWithGroups
@@ -173,7 +174,7 @@ function CodeBlockStyle() {
/>
</Column>
</div>
<CodeBlockPreview theme={codeBlockTheme} wordWrap={codeBlockWordWrap} />
</OptionsSection>
)
@@ -299,10 +300,10 @@ function DateTimeFormatOptions() {
}}
/>
</FormText>
<div className="row align-items-center">
<FormGroup name="custom-date-time-format" className="col-md-6" label={t("custom_date_time_format.format_string")}>
<FormTextBox
<FormTextBox
placeholder="YYYY-MM-DD HH:mm"
currentValue={customDateTimeFormat || "YYYY-MM-DD HH:mm"} onChange={setCustomDateTimeFormat}
/>
@@ -316,4 +317,4 @@ function DateTimeFormatOptions() {
</div>
</OptionsSection>
)
}
}

View File

@@ -244,5 +244,9 @@ function getDisabledPlugins() {
disabledPlugins.push("EmojiMention");
}
if (options.get("textNoteSlashCommandsEnabled") !== "true") {
disabledPlugins.push("SlashCommand");
}
return disabledPlugins;
}

View File

@@ -1,6 +1,6 @@
{
"name": "@triliumnext/desktop",
"version": "0.98.1",
"version": "0.99.0",
"description": "Build your personal knowledge base with Trilium Notes",
"private": true,
"main": "src/main.ts",
@@ -19,10 +19,10 @@
"electron-forge:package": "pnpm build && electron-forge package dist",
"electron-forge:start": "pnpm build && electron-forge start dist",
"e2e": "pnpm build && cross-env TRILIUM_INTEGRATION_TEST=memory-no-store TRILIUM_PORT=8082 TRILIUM_DATA_DIR=data-e2e ELECTRON_IS_DEV=0 playwright test"
},
},
"dependencies": {
"@electron/remote": "2.1.3",
"better-sqlite3": "^12.0.0",
"better-sqlite3": "12.4.1",
"electron-debug": "4.1.0",
"electron-dl": "4.0.0",
"electron-squirrel-startup": "1.0.1",
@@ -34,7 +34,7 @@
"@triliumnext/commons": "workspace:*",
"@triliumnext/server": "workspace:*",
"copy-webpack-plugin": "13.0.1",
"electron": "37.5.1",
"electron": "38.1.2",
"@electron-forge/cli": "7.9.0",
"@electron-forge/maker-deb": "7.9.0",
"@electron-forge/maker-dmg": "7.9.0",
@@ -44,5 +44,5 @@
"@electron-forge/maker-zip": "7.9.0",
"@electron-forge/plugin-auto-unpack-natives": "7.9.0",
"prebuild-install": "^7.1.1"
}
}
}

View File

@@ -4,7 +4,7 @@
"description": "Standalone tool to dump contents of Trilium document.db file into a directory tree of notes",
"private": true,
"dependencies": {
"better-sqlite3": "^12.0.0",
"better-sqlite3": "12.4.1",
"mime-types": "^3.0.0",
"sanitize-filename": "^1.6.3",
"tsx": "^4.19.3",

View File

@@ -5,14 +5,14 @@
"description": "Desktop version of Trilium which imports the demo database (presented to new users at start-up) or the user guide and other documentation and saves the modifications for committing.",
"dependencies": {
"archiver": "7.0.1",
"better-sqlite3": "^12.0.0"
"better-sqlite3": "12.4.1"
},
"devDependencies": {
"@triliumnext/client": "workspace:*",
"@triliumnext/desktop": "workspace:*",
"@types/fs-extra": "11.0.4",
"copy-webpack-plugin": "13.0.1",
"electron": "37.5.1",
"electron": "38.1.2",
"fs-extra": "11.3.2"
},
"scripts": {

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-bullseye-slim AS builder
FROM node:22.20.0-bullseye-slim AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-bullseye-slim
FROM node:22.20.0-bullseye-slim
# Install only runtime dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-alpine AS builder
FROM node:22.20.0-alpine AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-alpine
FROM node:22.20.0-alpine
# Install runtime dependencies
RUN apk add --no-cache su-exec shadow

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-alpine AS builder
FROM node:22.20.0-alpine AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-alpine
FROM node:22.20.0-alpine
# Create a non-root user with configurable UID/GID
ARG USER=trilium
ARG UID=1001

View File

@@ -1,4 +1,4 @@
FROM node:22.19.0-bullseye-slim AS builder
FROM node:22.20.0-bullseye-slim AS builder
RUN corepack enable
# Install native dependencies since we might be building cross-platform.
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.19.0-bullseye-slim
FROM node:22.20.0-bullseye-slim
# Create a non-root user with configurable UID/GID
ARG USER=trilium
ARG UID=1001

View File

@@ -1,5 +1,5 @@
{
"dependencies": {
"better-sqlite3": "12.2.0"
"better-sqlite3": "12.4.1"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@triliumnext/server",
"version": "0.98.1",
"version": "0.99.0",
"description": "The server-side component of TriliumNext, which exposes the client via the web, allows for sync and provides a REST API for both internal and external use.",
"private": true,
"main": "./src/main.ts",
@@ -25,10 +25,10 @@
"docker-start-rootless-alpine": "pnpm docker-build-rootless-alpine && docker run -p 8081:8080 triliumnext-rootless-alpine"
},
"dependencies": {
"better-sqlite3": "12.2.0"
"better-sqlite3": "12.4.1"
},
"devDependencies": {
"@anthropic-ai/sdk": "0.63.0",
"@anthropic-ai/sdk": "0.63.1",
"@braintree/sanitize-url": "7.1.1",
"@electron/remote": "2.1.3",
"@preact/preset-vite": "2.10.2",
@@ -81,7 +81,7 @@
"debounce": "2.2.0",
"debug": "4.4.3",
"ejs": "3.1.10",
"electron": "37.5.1",
"electron": "38.1.2",
"electron-debug": "4.1.0",
"electron-window-state": "5.0.3",
"escape-html": "1.0.3",
@@ -110,7 +110,7 @@
"mime-types": "3.0.1",
"multer": "2.0.2",
"normalize-strings": "1.1.1",
"ollama": "0.5.18",
"ollama": "0.6.0",
"openai": "5.12.0",
"rand-token": "1.0.1",
"safe-compare": "1.1.4",

View File

@@ -8,12 +8,12 @@
<h2>Interaction</h2>
<p>The contextual menu can operate:</p>
<ul>
<li data-list-item-id="eb6cb9554edd79a684a80c7af2bdb1664">On a single note, by right clicking it in the note tree.</li>
<li data-list-item-id="e3fe206c7b773d73eb3e89a24ba341f6f">On multiple notes, by selecting them first. See&nbsp;<a class="reference-link"
<li>On a single note, by right clicking it in the note tree.</li>
<li>On multiple notes, by selecting them first. See&nbsp;<a class="reference-link"
href="#root/_help_yTjUdsOi4CIE">Multiple selection</a>&nbsp;on how to do
so.
<ul>
<li data-list-item-id="e92e73adc8163eabecab0498d2cb60758">When right clicking, do note that usually the note being right clicked
<li>When right clicking, do note that usually the note being right clicked
is also included in the affected notes, regardless of whether it was selected
or not.</li>
</ul>
@@ -25,146 +25,142 @@
The ones that do support multiple notes will mention this in the list below.</p>
</aside>
<ul>
<li class="ck-list-marker-bold" data-list-item-id="ebc02b55f856d9f1e9fb42d57f730c990"><strong>Open in a new tab</strong>
<li><strong>Open in a new tab</strong>
<ul>
<li data-list-item-id="ec851584dc6de2bf338cbba5c8afcc034">Will open a single note in a new <a href="#root/_help_3seOhtN8uLIY">tab</a>.</li>
<li>Will open a single note in a new <a href="#root/_help_3seOhtN8uLIY">tab</a>.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="eb1a9a8de40997ac3bb82163034ebfe85"><strong>Open in a new split</strong>
<li><strong>Open in a new split</strong>
<ul>
<li data-list-item-id="ed766d53cafbdce33dadeeeee50bf06fe">Will open a split to the right with the given note within the current
<li>Will open a split to the right with the given note within the current
tab.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="ee0688bb752f7f0f0decfc0c97e75c6c3"><strong>Hoist note</strong>
<li><strong>Hoist note</strong>
<ul>
<li data-list-item-id="e8fa27c813efcfebd3ed3b6fc737d2873">Will focus the note tree on this note. See&nbsp;<a class="reference-link"
<li>Will focus the note tree on this note. See&nbsp;<a class="reference-link"
href="#root/_help_OR8WJ7Iz9K4U">Note Hoisting</a>&nbsp;for more information.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e84e24ba4db6c1a86b85f4e27ced5038a"><strong>Insert note after</strong>
<li><strong>Insert note after</strong>
<ul>
<li data-list-item-id="ef55a0a3d3f2ba7bab19201e71a229ff1">Allows easy creation of a note with a specified <a href="#root/_help_KSZ04uQ2D1St">note type</a>.</li>
<li
data-list-item-id="e5e3d1cb6382564b9989c6d0c7e8dd11b"><a class="reference-link" href="#root/_help_KC1HB96bqqHX">Templates</a>&nbsp;will
<li>Allows easy creation of a note with a specified <a href="#root/_help_KSZ04uQ2D1St">note type</a>.</li>
<li><a class="reference-link" href="#root/_help_KC1HB96bqqHX">Templates</a>&nbsp;will
also be present (if any) at the end of the list.</li>
<li data-list-item-id="e17d7b8cb3af863927c7bf442d947ff61">The note will be added on the same level of hierarchy as the note selected.</li>
</ul>
<li>The note will be added on the same level of hierarchy as the note selected.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e015e58e7596851e1e7c80293b12512e8"><strong>Insert child note</strong>
<li><strong>Insert child note</strong>
<ul>
<li data-list-item-id="e3f34378285c712e5c50c27253aa1c4d6">Same as <em>Insert note after</em>, but the note will be created as a child
<li>Same as <em>Insert note after</em>, but the note will be created as a child
of the selected note.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="ec62df328fb1217b81efc6cb7211f7478"><strong>Protect subtree</strong>
<li><strong>Protect subtree</strong>
<ul>
<li data-list-item-id="e0ddbb4b50f71c593f5ce541e4f53f968">Will mark this note and all of its descendents as protected. See&nbsp;
<li>Will mark this note and all of its descendents as protected. See&nbsp;
<a
class="reference-link" href="#root/_help_bwg0e8ewQMak">Protected Notes</a>&nbsp;for more information.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e0ee91d38d9f25740c57a7d70eaddc336"><strong>Unprotect subtree</strong>
<li><strong>Unprotect subtree</strong>
<ul>
<li data-list-item-id="eb5efa0e6955c815aacf62666e1e6c689">Will unprotect this note and all of its descendents.</li>
<li>Will unprotect this note and all of its descendents.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="eb8e1bcca0fdafb8eb2e0f4b3de5b9a41"><strong>Cut</strong>
<li><strong>Cut</strong>
<ul>
<li data-list-item-id="e199523665488cbdfca05d54bbde31b99">Will place the given notes in clipboard.</li>
<li data-list-item-id="ed17ea8bb880cad84d53d8b7e0acc4869">Use one of the two paste functions (or the keyboard shortcuts) to move
<li>Will place the given notes in clipboard.</li>
<li>Use one of the two paste functions (or the keyboard shortcuts) to move
them to the desired location.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e172c83c11fee7df66353f086e06bc96a"><strong>Copy / clone</strong>
<li><strong>Copy / clone</strong>
<ul>
<li data-list-item-id="ef0e77e470e16a46e82f33e1e951d728c">Will place the given notes in clipboard.</li>
<li data-list-item-id="e2280985bea8e20a8861f738c95933a66">Use one of the two paste functions (or the keyboard shortcuts) to copy
<li>Will place the given notes in clipboard.</li>
<li>Use one of the two paste functions (or the keyboard shortcuts) to copy
them to the desired location.</li>
<li data-list-item-id="e719fd71a95c54d850fe13ce894f384cc">Note that the copy function here works according to the&nbsp;<a class="reference-link"
<li>Note that the copy function here works according to the&nbsp;<a class="reference-link"
href="#root/_help_IakOLONlIfGI">Cloning Notes</a>&nbsp;functionality (i.e.
the note itself will be present in two locations at once, and editing it
in one place will edit it everywhere).</li>
<li data-list-item-id="e8a1613e3c22837872b54e63a94cfd5bf">To simply create a duplicate note that can be modified independently,
<li>To simply create a duplicate note that can be modified independently,
look for <em>Duplicate subtree</em>.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="eb885a3e51dbbdb22e656766ec9777236"><strong>Paste into</strong>
<li><strong>Paste into</strong>
<ul>
<li data-list-item-id="e70554a78c316b7bc8b20a23c59d8d585">If there are any notes in clipboard, they will be pasted as child notes
<li>If there are any notes in clipboard, they will be pasted as child notes
to the right-clicked one.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e9e31c336db26641080ebbd91880eaea3"><strong>Paste after</strong>
<li><strong>Paste after</strong>
<ul>
<li data-list-item-id="eeb7295126d8e3e41b2dd688b23aa11a0">If there are any notes in clipboard, they will be pasted underneath the
<li>If there are any notes in clipboard, they will be pasted underneath the
right-clicked one.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e3be6605c360cb68edb4c8f1410d81090"><strong>Move to…</strong>
<li><strong>Move to…</strong>
<ul>
<li data-list-item-id="edcdb851c8af8ff3d7eff2996dbac1140">Will display a modal to specify where to move the desired notes.</li>
<li>Will display a modal to specify where to move the desired notes.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e3526442fc15878b32947816cf7a4324f"><strong>Clone to…</strong>
<li><strong>Clone to…</strong>
<ul>
<li data-list-item-id="e3cb217f4efbbea0b4d98b994c11668c1">Will display a modal to specify where to <a href="#root/_help_IakOLONlIfGI">clone</a> the
<li>Will display a modal to specify where to <a href="#root/_help_IakOLONlIfGI">clone</a> the
desired notes.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e84dd12ab78222a46487f16bc0747f186"><strong>Duplicate</strong>
<li><strong>Duplicate</strong>
<ul>
<li data-list-item-id="ef29e5536470e71269bd79aff133ce764">Creates a copy of the note and its descendants.</li>
<li data-list-item-id="e2d21933174fe1f55438e5f6fb0ba4c49">This process is different from&nbsp;<a class="reference-link" href="#root/_help_IakOLONlIfGI">Cloning Notes</a>&nbsp;since
<li>Creates a copy of the note and its descendants.</li>
<li>This process is different from&nbsp;<a class="reference-link" href="#root/_help_IakOLONlIfGI">Cloning Notes</a>&nbsp;since
the duplicated note can be edited independently from the original.</li>
<li
data-list-item-id="e7a44679821b2bda09d5f722c4814ca07">An alternative to this, if done regularly, would be&nbsp;<a class="reference-link"
<li>An alternative to this, if done regularly, would be&nbsp;<a class="reference-link"
href="#root/_help_KC1HB96bqqHX">Templates</a>.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e06cf06f73e1d1ce9a5f19fde261d4ea2"><strong>Archive/Unarchive</strong>
<ul>
<li data-list-item-id="ef9a7753bd03b1131faee0627877dc998">Marks a note as <a href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/BFs8mudNFgCS/_help_MKmLg5x6xkor">archived</a>.</li>
<li
data-list-item-id="e791d0e50ed3372671373364c7c1dd637">If the note is already archived, it will be unarchived instead.</li>
<li
data-list-item-id="e1d634f992a89721a503d6a0add343cf5">Multiple notes can be selected as well. However, all the selected notes
must be in the same state (archived or not), otherwise the option will
be disabled.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e3dc71fa528db3a28d685ec4ceeb5712c"><strong>Delete</strong>
<ul>
<li data-list-item-id="e7dd3f211ab2ca1747368a99187131316">Will delete the given notes, asking for confirmation first.</li>
<li data-list-item-id="edbdf631fb10d44077359cf64fc168518">In the dialog, the following options can be configured:
<ul>
<li data-list-item-id="ec847ee5a65f8d2e035552c52d6cedecb"><em>Delete also all clones</em> to ensure that the note will be deleted
everywhere if it has been placed into multiple locations (see&nbsp;<a class="reference-link"
href="#root/_help_IakOLONlIfGI">Cloning Notes</a>).</li>
<li data-list-item-id="e7f6c995de3bbd55367c17cfad60ea13e"><em>Erase notes permanently</em> will ensure that the note cannot be recovered
from&nbsp;<a class="reference-link" href="#root/_help_r5JGHN99bVKn">Recent Changes</a>.</li>
</ul>
</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e3e2bd728c7ebe4186fab33a6320889c7"><strong>Import into note</strong>
<ul>
<li data-list-item-id="ef6db414262b08787cba86d979b09e20d">Opens the <a href="#root/_help_mHbBMPDPkVV5">import</a> dialog and places
the imported notes as child notes of the selected one.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e44d52f29984e95f76a9d2fb19ddbf51c"><strong>Export</strong>
<ul>
<li data-list-item-id="e3afb149e3071ee569b4139f835c2d410">Opens the <a href="#root/_help_mHbBMPDPkVV5">export</a> dialog for the selected
notes.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e983645504a61110b98a4976120e86f3e"><strong>Search in subtree</strong>
<ul>
<li data-list-item-id="ef27240229c1cd413f5e248ac9b2eac85">Opens a full&nbsp;<a class="reference-link" href="#root/_help_eIg8jdvaoNNd">Search</a>&nbsp;with
it preconfigured to only look into this note and its descendants (the <em>Ancestor</em> field).</li>
</ul>
</li>
</li>
<li><strong>Archive/Unarchive</strong>
<ul>
<li>Marks a note as <a href="#root/_help_MKmLg5x6xkor">archived</a>.</li>
<li>If the note is already archived, it will be unarchived instead.</li>
<li>Multiple notes can be selected as well. However, all the selected notes
must be in the same state (archived or not), otherwise the option will
be disabled.</li>
</ul>
</li>
<li><strong>Delete</strong>
<ul>
<li>Will delete the given notes, asking for confirmation first.</li>
<li>In the dialog, the following options can be configured:
<ul>
<li><em>Delete also all clones</em> to ensure that the note will be deleted
everywhere if it has been placed into multiple locations (see&nbsp;<a class="reference-link"
href="#root/_help_IakOLONlIfGI">Cloning Notes</a>).</li>
<li><em>Erase notes permanently</em> will ensure that the note cannot be recovered
from&nbsp;<a class="reference-link" href="#root/_help_r5JGHN99bVKn">Recent Changes</a>.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Import into note</strong>
<ul>
<li>Opens the <a href="#root/_help_mHbBMPDPkVV5">import</a> dialog and places
the imported notes as child notes of the selected one.</li>
</ul>
</li>
<li><strong>Export</strong>
<ul>
<li>Opens the <a href="#root/_help_mHbBMPDPkVV5">export</a> dialog for the selected
notes.</li>
</ul>
</li>
<li><strong>Search in subtree</strong>
<ul>
<li>Opens a full&nbsp;<a class="reference-link" href="#root/_help_eIg8jdvaoNNd">Search</a>&nbsp;with
it preconfigured to only look into this note and its descendants (the <em>Ancestor</em> field).</li>
</ul>
</li>
</ul>
<h2>Advanced options</h2>
<figure class="image image-style-align-right">
@@ -176,63 +172,60 @@
<p>To access these options, first look for the <em>Advanced</em> option in
the contextual menu to reveal a sub-menu with:</p>
<ul>
<li class="ck-list-marker-bold" data-list-item-id="ea86605b01e6d3feb1df5d6ac7aa6926c"><strong>Apply bulk actions</strong>
<li><strong>Apply bulk actions</strong>
<ul>
<li data-list-item-id="eb4e9969912b012156a9f1d9f70608d8c">Opens the&nbsp;<a class="reference-link" href="#root/_help_ivYnonVFBxbQ">Bulk Actions</a>&nbsp;dialog,
<li>Opens the&nbsp;<a class="reference-link" href="#root/_help_ivYnonVFBxbQ">Bulk Actions</a>&nbsp;dialog,
to apply actions such as adding labels or moving notes to multiple notes
at once (see&nbsp;<a class="reference-link" href="#root/_help_yTjUdsOi4CIE">Multiple selection</a>).</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e722a73810931d2fe19f77c38ccee61a7"><strong>Edit branch prefix</strong>
<li><strong>Edit branch prefix</strong>
<ul>
<li data-list-item-id="ec4b32f02cb3784ae3a88a6c2660fa571">Opens a dialog to assign a name to be able to distinguish <a href="#root/_help_IakOLONlIfGI">clones</a>,
<li>Opens a dialog to assign a name to be able to distinguish <a href="#root/_help_IakOLONlIfGI">clones</a>,
see&nbsp;<a class="reference-link" href="#root/_help_TBwsyfadTA18">Branch prefix</a>&nbsp;for
more information.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e53714aa1340a1115ab20e549d9c8f080"><strong>Convert to attachment</strong>
<li><strong>Convert to attachment</strong>
<ul>
<li data-list-item-id="e7dd2862dfc804ce618c6a4be4d02502d">Converts the selected notes to&nbsp;<a class="reference-link" href="#root/_help_0vhv7lsOLy82">Attachments</a>&nbsp;of
<li>Converts the selected notes to&nbsp;<a class="reference-link" href="#root/_help_0vhv7lsOLy82">Attachments</a>&nbsp;of
their parent notes.</li>
<li data-list-item-id="edb91f9b4f8603e6ae403ef4e5393b2b7">This functional is most useful when dealing with image&nbsp;<a class="reference-link"
<li>This functional is most useful when dealing with image&nbsp;<a class="reference-link"
href="#root/_help_W8vYD3Q1zjCR">File</a>&nbsp;notes that were imported
from an external source or an older version of Trilium.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e86a44b2f39bdf7ab0084e33e9376464c"><strong>Expand subtree</strong>
<li><strong>Expand subtree</strong>
<ul>
<li data-list-item-id="ec0ce2679c67ef667354a668d993b3255">Expands all the child notes in the&nbsp;<a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>.</li>
<li>Expands all the child notes in the&nbsp;<a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="eb56c0e74eaa531e740eff2e6e66bba32"><strong>Collapse subtree</strong>
<li><strong>Collapse subtree</strong>
<ul>
<li data-list-item-id="e726cbdfd5894175932de49a23740e0d0">Collapses all the child notes in the note tree.</li>
<li>Collapses all the child notes in the note tree.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e29b09b0c5668a525ac4da502aa70d155"><strong>Sort by…</strong>
<li><strong>Sort by…</strong>
<ul>
<li data-list-item-id="e4ccfee9fb0f8339070cac8436bdfbfe7">Opens a dialog to sort all the child notes of the selected note.</li>
<li
data-list-item-id="e266320f356a0b715d1c2a630affd9644">The sorting is done only once, there is an automatic sorting mechanism
<li>Opens a dialog to sort all the child notes of the selected note.</li>
<li>The sorting is done only once, there is an automatic sorting mechanism
as well that can be set using&nbsp;<a class="reference-link" href="#root/_help_zEY4DaJG4YT5">Attributes</a>.</li>
<li
data-list-item-id="ed92f730d0a993744e07657858d41fadd">See&nbsp;<a class="reference-link" href="#root/_help_aGlEvb9hyDhS">Sorting Notes</a>&nbsp;for
more information.</li>
<li>See&nbsp;<a class="reference-link" href="#root/_help_aGlEvb9hyDhS">Sorting Notes</a>&nbsp;for
more information.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="edaa5d23e976c060b88248b524da5ebfc"><strong>Copy note path to clipboard</strong>
<ul>
<li data-list-item-id="ec2e2fd6a83ae02f82fbd79c2f156193f">Copies a URL fragment representing the full path to this branch for a
note, such as <code>#root/Hb2E70L7HPuf/4sRFgMZhYFts/2IVuShedRJ3U/LJVMvKXOFv7n</code>.</li>
<li
data-list-item-id="ef476950782e594cfa4a304fedd88a6a1">The URL to manually create&nbsp;<a class="reference-link" href="#root/_help_QEAPj01N5f7w">Links</a>&nbsp;within
notes, or for note&nbsp;<a class="reference-link" href="#root/_help_wArbEsdSae6g">Navigation</a>.</li>
</li>
<li><strong>Copy note path to clipboard</strong>
<ul>
<li>Copies a URL fragment representing the full path to this branch for a
note, such as <code>#root/Hb2E70L7HPuf/4sRFgMZhYFts/2IVuShedRJ3U/LJVMvKXOFv7n</code>.</li>
<li>The URL to manually create&nbsp;<a class="reference-link" href="#root/_help_QEAPj01N5f7w">Links</a>&nbsp;within
notes, or for note&nbsp;<a class="reference-link" href="#root/_help_wArbEsdSae6g">Navigation</a>.</li>
</ul>
</li>
<li class="ck-list-marker-bold" data-list-item-id="e26fc9a5ce0305f59fec932ab285b466b"><strong>Recent changes in subtree</strong>
<ul>
<li data-list-item-id="e46b5175cfc92d742693329a6b03dd3c1">This will open&nbsp;<a class="reference-link" href="#root/_help_r5JGHN99bVKn">Recent Changes</a>,
but filtered to only the changes related to this note or one of its descendants.</li>
</ul>
</li>
</li>
<li><strong>Recent changes in subtree</strong>
<ul>
<li>This will open&nbsp;<a class="reference-link" href="#root/_help_r5JGHN99bVKn">Recent Changes</a>,
but filtered to only the changes related to this note or one of its descendants.</li>
</ul>
</li>
</ul>

View File

@@ -4,31 +4,29 @@
child notes into one continuous view. This makes it ideal for reading extensive
information broken into smaller, manageable segments.</p>
<ul>
<li data-list-item-id="e442897a098d755cfb03b45f1f511bbcb"><a class="reference-link" href="#root/_help_8QqnMzx393bx">Grid View</a>&nbsp;which
<li><a class="reference-link" href="#root/_help_8QqnMzx393bx">Grid View</a>&nbsp;which
is the default presentation method for child notes (see&nbsp;<a class="reference-link"
href="#root/_help_0ESUbbAxVnoK">Note List</a>), where the notes are displayed
as tiles with their title and content being visible.</li>
<li data-list-item-id="e777ceb55a84ddb66851c6ed9a9afade8"><a class="reference-link" href="#root/_help_mULW0Q3VojwY">List View</a>&nbsp;is
<li><a class="reference-link" href="#root/_help_mULW0Q3VojwY">List View</a>&nbsp;is
similar to&nbsp;<a class="reference-link" href="#root/_help_8QqnMzx393bx">Grid View</a>,
but it displays the notes one under the other with the content being expandable/collapsible,
but also works recursively.</li>
</ul>
<p>More specialized collections were introduced, such as the:</p>
<ul>
<li data-list-item-id="e1bed994e369a641909e6dcdff2066aef"><a class="reference-link" href="#root/_help_xWbu3jpNWapp">Calendar View</a>&nbsp;which
<li><a class="reference-link" href="#root/_help_xWbu3jpNWapp">Calendar View</a>&nbsp;which
displays a week, month or year calendar with the notes being shown as events.
New events can be added easily by dragging across the calendar.</li>
<li
data-list-item-id="e566db12b403024023ce83c03a7a7a473"><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">Geo Map View</a>&nbsp;which
<li><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">Geo Map View</a>&nbsp;which
displays a geographical map in which the notes are represented as markers/pins
on the map. New events can be easily added by pointing on the map.</li>
<li
data-list-item-id="e891787b65e1242e5a522bb11a4ca3754"><a class="reference-link" href="#root/_help_2FvYrpmOXm29">Table View</a>&nbsp;displays
each note as a row in a table, with&nbsp;<a class="reference-link" href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;being
shown as well. This makes it easy to visualize attributes of notes, as
well as making them easily editable.</li>
<li data-list-item-id="e4b72656c6bc5ea812a4124ac0445d8e3"><a class="reference-link" href="#root/_help_CtBQqbwXDx1w">Board View</a>&nbsp;(Kanban)
displays notes in columns, grouped by the value of a label.</li>
<li><a class="reference-link" href="#root/_help_2FvYrpmOXm29">Table View</a>&nbsp;displays
each note as a row in a table, with&nbsp;<a class="reference-link" href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;being
shown as well. This makes it easy to visualize attributes of notes, as
well as making them easily editable.</li>
<li><a class="reference-link" href="#root/_help_CtBQqbwXDx1w">Board View</a>&nbsp;(Kanban)
displays notes in columns, grouped by the value of a label.</li>
</ul>
<p>For a quick presentation of all the supported view types, see the child
notes of this help page, including screenshots.</p>
@@ -44,8 +42,8 @@
<h3>Adding a description to a collection</h3>
<p>To add a text before the collection, for example to describe it:</p>
<ol>
<li data-list-item-id="e8728c68749687f5c9a5fda2308418ad0">Create a new collection.</li>
<li data-list-item-id="ef9313bb02eb37827f6560f5174941670">In the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>,
<li>Create a new collection.</li>
<li>In the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>,
go to <em>Basic Properties</em> and change the note type from <em>Collection</em> to <em>Text</em>.</li>
</ol>
<p>Now the text will be displayed above while still maintaining the collection
@@ -60,20 +58,20 @@
<p>By default, collections come with a default configuration and sometimes
even sample notes. To create a collection completely from scratch:</p>
<ol>
<li data-list-item-id="ee0b8aabb661937d432242daff355eba8">Create a new note of type <em>Text</em> (or any type).</li>
<li data-list-item-id="e5d1875c79128e5132310e5f4700c9c41">In the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>,
<li>Create a new note of type <em>Text</em> (or any type).</li>
<li>In the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>,
go to <em>Basic Properties</em> and select <em>Collection</em> as the note
type.</li>
<li data-list-item-id="e387419ce7332f5718d30309e21de03c1">Still in the ribbon, go to <em>Collection Properties</em> and select the
<li>Still in the ribbon, go to <em>Collection Properties</em> and select the
desired view type.</li>
<li data-list-item-id="e744bec24bf12c040e31a2ce4ce5597e0">Consult the help page of the corresponding view type in order to understand
<li>Consult the help page of the corresponding view type in order to understand
how to configure them.</li>
</ol>
<h2>Archived notes</h2>
<p>By default, archived notes will not be shown in collections. This behaviour
can be changed by going to <em>Collection Properties</em> in the&nbsp;
<a
class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_BlN9DFI679QC">Ribbon</a>&nbsp;and checking <em>Show archived notes</em>.</p>
class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;and checking <em>Show archived notes</em>.</p>
<p>Archived notes will be generally indicated by being greyed out as opposed
to the normal ones.</p>
<h2>Under the hood</h2>

View File

@@ -15,60 +15,59 @@
in a hierarchy.</p>
<h2>Interaction with columns</h2>
<ul>
<li data-list-item-id="ea203ce202596a1f035101f25625e6d15">Create a new column by pressing <em>Add Column</em> near the last column.
<li>Create a new column by pressing <em>Add Column</em> near the last column.
<ul>
<li data-list-item-id="e9efd762535335f3de25f0baa6657f45a">Once pressed, a text box will be displayed to set the name of the column.
<li>Once pressed, a text box will be displayed to set the name of the column.
Press <kbd>Enter</kbd> to confirm, or <kbd>Escape</kbd> to dismiss.</li>
</ul>
</li>
<li data-list-item-id="ec99f0c8e66cc752403a46e2b8bfe8869">To reorder a column, simply hold the mouse over the title and drag it
<li>To reorder a column, simply hold the mouse over the title and drag it
to the desired position.</li>
<li data-list-item-id="ededf59de800d4efed8047d7c3f6d84f2">To delete a column, right click on its title and select <em>Delete column</em>.</li>
<li
data-list-item-id="ef87171b42348b3b6f69dc94f3736695a">To rename a column, click on the note title.
<li>To delete a column, right click on its title and select <em>Delete column</em>.</li>
<li>To rename a column, click on the note title.
<ul>
<li data-list-item-id="e620ab716cbf09899aad5a9e2e3fc65e1">Press Enter to confirm.</li>
<li data-list-item-id="eff0b74278d84be31e195bbcb0e2ea1ec">Upon renaming a column, the corresponding status attribute of all its
<li>Press Enter to confirm.</li>
<li>Upon renaming a column, the corresponding status attribute of all its
notes will be changed in bulk.</li>
</ul>
</li>
<li data-list-item-id="e560b291077a1644477257f84738d7326">If there are many columns, use the mouse wheel to scroll.</li>
</li>
<li>If there are many columns, use the mouse wheel to scroll.</li>
</ul>
<h2>Interaction with notes</h2>
<ul>
<li data-list-item-id="e1ce4ffef3be02b5db18ff6e9a129ca34">Create a new note in any column by pressing <em>New item</em>
<li>Create a new note in any column by pressing <em>New item</em>
<ul>
<li data-list-item-id="efa9c84c78b3d4b7edf639f3410b6a089">Enter the name of the note and press <kbd>Enter</kbd> or click away. To
<li>Enter the name of the note and press <kbd>Enter</kbd> or click away. To
dismiss the creation of a new note, simply press <kbd>Escape</kbd> or leave
the name empty.</li>
<li data-list-item-id="e38830a353c0bc39b591460cafb42d0c6">Once created, the new note will have an attribute (<code>status</code> label
<li>Once created, the new note will have an attribute (<code>status</code> label
by default) set to the name of the column.</li>
</ul>
</li>
<li data-list-item-id="e109384311fb75d3a749eee4449541bd8">To open the note, simply click on it.</li>
<li data-list-item-id="e4dda3bf2ee2fa33b648952e3db25303c">To change the title of the note directly from the board, hover the mouse
<li>To open the note, simply click on it.</li>
<li>To change the title of the note directly from the board, hover the mouse
over its card and press the edit button on the right.</li>
<li data-list-item-id="ece0ea479c9737b3ef3c5c0feb83b1878">To change the state of a note, simply drag a note from one column to the
<li>To change the state of a note, simply drag a note from one column to the
other to change its state.</li>
<li data-list-item-id="e29797765369d39cc8130260d96c1592a">The order of the notes in each column corresponds to their position in
<li>The order of the notes in each column corresponds to their position in
the tree.
<ul>
<li data-list-item-id="efb4f66f509ab83c18f06e68f4ec8f4fd">It's possible to reorder notes simply by dragging them to the desired
<li>It's possible to reorder notes simply by dragging them to the desired
position within the same columns.</li>
<li data-list-item-id="e0e2cf1123eee92f931fa0f2576328dad">It's also possible to drag notes across columns, at the desired position.</li>
<li>It's also possible to drag notes across columns, at the desired position.</li>
</ul>
</li>
<li data-list-item-id="ec72f68c429387d94d8deb35e3506efad">For more options, right click on a note to display a context menu with
<li>For more options, right click on a note to display a context menu with
the following options:
<ul>
<li data-list-item-id="eb32d1e6cf7d2d64620d03c4898175ee5">Open the note in a new tab/split/window or quick edit.</li>
<li data-list-item-id="ec8882b53cc288f49255e666c90da7540">Move the note to any column.</li>
<li data-list-item-id="eb7838ac083cbc68da526dd8cdd444623">Insert a new note above/below the current one.</li>
<li data-list-item-id="ebb1fd7f7c6466f6761aca28d8ebe8d66">Archive/unarchive the current note.</li>
<li data-list-item-id="e98f908b925f6037bca80694d0113ef37">Delete the current note.</li>
<li>Open the note in a new tab/split/window or quick edit.</li>
<li>Move the note to any column.</li>
<li>Insert a new note above/below the current one.</li>
<li>Archive/unarchive the current note.</li>
<li>Delete the current note.</li>
</ul>
</li>
<li data-list-item-id="e83e4a2b2d5b4149964a6e3f4f6918743">If there are many notes within the column, move the mouse over the column
<li>If there are many notes within the column, move the mouse over the column
and use the mouse wheel to scroll.</li>
</ul>
<h2>Configuration</h2>
@@ -84,5 +83,5 @@ class="admonition note">
<h2>Interaction</h2>
<h2>Limitations</h2>
<ul>
<li data-list-item-id="e1963dbb19d32c84e2211e24c920935e2">It is not possible yet to use group by a relation, only by label.</li>
<li>It is not possible yet to use group by a relation, only by label.</li>
</ul>

View File

@@ -12,126 +12,121 @@
on an attribute. It is also possible to add new notes at a specific location
using the built-in interface.</p>
<h2>Creating a new geo map</h2>
<figure class="table">
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<figure class="image">
<img style="aspect-ratio:483/413;" src="15_Geo Map View_image.png" width="483"
height="413">
</figure>
</td>
<td>Right click on any note on the note tree and select <em>Insert child note</em><em>Geo Map (beta)</em>.</td>
</tr>
<tr>
<td>2</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:53.44%;">
<img style="aspect-ratio:1720/1396;" src="8_Geo Map View_image.png" width="1720"
height="1396">
</figure>
</td>
<td>By default the map will be empty and will show the entire world.</td>
</tr>
</tbody>
</table>
</figure>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<figure class="image">
<img style="aspect-ratio:483/413;" src="15_Geo Map View_image.png" width="483"
height="413">
</figure>
</td>
<td>Right click on any note on the note tree and select <em>Insert child note</em><em>Geo Map (beta)</em>.</td>
</tr>
<tr>
<td>2</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:53.44%;">
<img style="aspect-ratio:1720/1396;" src="8_Geo Map View_image.png" width="1720"
height="1396">
</figure>
</td>
<td>By default the map will be empty and will show the entire world.</td>
</tr>
</tbody>
</table>
<h2>Repositioning the map</h2>
<ul>
<li data-list-item-id="ecb922a6132847edfd70d16eb23f7d8bf">Click and drag the map in order to move across the map.</li>
<li data-list-item-id="e5dd5e8e5ebf09fbb55d804bf289ba562">Use the mouse wheel, two-finger gesture on a touchpad or the +/- buttons
<li>Click and drag the map in order to move across the map.</li>
<li>Use the mouse wheel, two-finger gesture on a touchpad or the +/- buttons
on the top-left to adjust the zoom.</li>
</ul>
<p>The position on the map and the zoom are saved inside the map note and
restored when visiting again the note.</p>
<h2>Adding a marker using the map</h2>
<h3>Adding a new note using the plus button</h3>
<figure class="table">
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>To create a marker, first navigate to the desired point on the map. Then
press the
<img src="10_Geo Map View_image.png">button in the&nbsp;<a href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>&nbsp;(top-right)
area.&nbsp;&nbsp;&nbsp;
<br>
<br>If the button is not visible, make sure the button section is visible
by pressing the chevron button (
<img src="17_Geo Map View_image.png">) in the top-right of the map.</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>2</td>
<td>
<img class="image_resized" style="aspect-ratio:1730/416;width:100%;" src="2_Geo Map View_image.png"
width="1730" height="416">
</td>
<td>Once pressed, the map will enter in the insert mode, as illustrated by
the notification.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Simply click the point on the map where to place the marker, or the Escape
key to cancel.</td>
</tr>
<tr>
<td>3</td>
<td>
<img class="image_resized" style="aspect-ratio:1586/404;width:100%;" src="7_Geo Map View_image.png"
width="1586" height="404">
</td>
<td>Enter the name of the marker/note to be created.</td>
</tr>
<tr>
<td>4</td>
<td>
<img class="image_resized" style="aspect-ratio:1696/608;width:100%;" src="16_Geo Map View_image.png"
width="1696" height="608">
</td>
<td>Once confirmed, the marker will show up on the map and it will also be
displayed as a child note of the map.</td>
</tr>
</tbody>
</table>
</figure>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>To create a marker, first navigate to the desired point on the map. Then
press the
<img src="10_Geo Map View_image.png">button in the&nbsp;<a href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>&nbsp;(top-right)
area.&nbsp;&nbsp;&nbsp;
<br>
<br>If the button is not visible, make sure the button section is visible
by pressing the chevron button (
<img src="17_Geo Map View_image.png">) in the top-right of the map.</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td>
<img class="image_resized" style="aspect-ratio:1730/416;width:100%;" src="2_Geo Map View_image.png"
width="1730" height="416">
</td>
<td>Once pressed, the map will enter in the insert mode, as illustrated by
the notification.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Simply click the point on the map where to place the marker, or the Escape
key to cancel.</td>
</tr>
<tr>
<td>3</td>
<td>
<img class="image_resized" style="aspect-ratio:1586/404;width:100%;" src="7_Geo Map View_image.png"
width="1586" height="404">
</td>
<td>Enter the name of the marker/note to be created.</td>
</tr>
<tr>
<td>4</td>
<td>
<img class="image_resized" style="aspect-ratio:1696/608;width:100%;" src="16_Geo Map View_image.png"
width="1696" height="608">
</td>
<td>Once confirmed, the marker will show up on the map and it will also be
displayed as a child note of the map.</td>
</tr>
</tbody>
</table>
<h3>Adding a new note using the contextual menu</h3>
<ol>
<li data-list-item-id="e9beeef281c3d8afd284c8acc6921f2c5">Right click anywhere on the map, where to place the newly created marker
<li>Right click anywhere on the map, where to place the newly created marker
(and corresponding note).</li>
<li data-list-item-id="eb532018ac1abb6fcb8c0c1bafe34fe82">Select <em>Add a marker at this location</em>.</li>
<li data-list-item-id="e08fc96c1568cbed0966006686e7866e7">Enter the name of the newly created note.</li>
<li data-list-item-id="e0c469ca75a83ad1600465103e1ddd6a0">The map should be updated with the new marker.</li>
<li>Select <em>Add a marker at this location</em>.</li>
<li>Enter the name of the newly created note.</li>
<li>The map should be updated with the new marker.</li>
</ol>
<h3>Adding an existing note on note from the note tree</h3>
<ol>
<li data-list-item-id="e6733621d1cb448ae5b7d465f320406cc">Select the desired note in the&nbsp;<a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>.</li>
<li
data-list-item-id="e7d982b69ed8b4bae937f445b90223e1f">Hold the mouse on the note and drag it to the map to the desired location.</li>
<li
data-list-item-id="e8aede57d9ec589ad88a99f5ee5e201ef">The map should be updated with the new marker.</li>
<li>Select the desired note in the&nbsp;<a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>.</li>
<li>Hold the mouse on the note and drag it to the map to the desired location.</li>
<li>The map should be updated with the new marker.</li>
</ol>
<p>This works for:</p>
<ul>
<li data-list-item-id="e88f7f1962b35ab8af56913187767c9dc">Notes that are not part of the geo map, case in which a <a href="#root/_help_IakOLONlIfGI">clone</a> will
<li>Notes that are not part of the geo map, case in which a <a href="#root/_help_IakOLONlIfGI">clone</a> will
be created.</li>
<li data-list-item-id="ea404e79683ca0a1423733d1932693123">Notes that are a child of the geo map but not yet positioned on the map.</li>
<li
data-list-item-id="e5b06dcc6c5d0a4547c938934e4fb966e">Notes that are a child of the geo map and also positioned, case in which
<li>Notes that are a child of the geo map but not yet positioned on the map.</li>
<li>Notes that are a child of the geo map and also positioned, case in which
the marker will be relocated to the new position.</li>
</ul>
<aside class="admonition note">
@@ -141,9 +136,8 @@
<h2>How the location of the markers is stored</h2>
<p>The location of a marker is stored in the <code>#geolocation</code> attribute
of the child notes:</p>
<p>
<img src="18_Geo Map View_image.png" width="1288" height="278">
</p>
<img src="18_Geo Map View_image.png" width="1288"
height="278">
<p>This value can be added manually if needed. The value of the attribute
is made up of the latitude and longitude separated by a comma.</p>
<h2>Repositioning markers</h2>
@@ -155,17 +149,16 @@
page (<kbd>Ctrl</kbd>+<kbd>R</kbd> ) to cancel it.</p>
<h2>Interaction with the markers</h2>
<ul>
<li data-list-item-id="e9fa3475fa6ef28354165d9464ead010a">Hovering over a marker will display a&nbsp;<a class="reference-link" href="#root/_help_lgKX7r3aL30x">Note Tooltip</a>&nbsp;with
<li>Hovering over a marker will display a&nbsp;<a class="reference-link" href="#root/_help_lgKX7r3aL30x">Note Tooltip</a>&nbsp;with
the content of the note it belongs to.
<ul>
<li data-list-item-id="e1a4d6205b7fa9b96c113b57df7365d86">Clicking on the note title in the tooltip will navigate to the note in
<li>Clicking on the note title in the tooltip will navigate to the note in
the current view.</li>
</ul>
</li>
<li data-list-item-id="e551edb8c3fb3771f0dd0852a64ec451a">Middle-clicking the marker will open the note in a new tab.</li>
<li data-list-item-id="e453d73dc73b9fb71a9e68c54f2a5efee">Right-clicking the marker will open a contextual menu (as described below).</li>
<li
data-list-item-id="e48f511a8d223175e56d93b58ef310bb7">If the map is in read-only mode, clicking on a marker will open a&nbsp;
<li>Middle-clicking the marker will open the note in a new tab.</li>
<li>Right-clicking the marker will open a contextual menu (as described below).</li>
<li>If the map is in read-only mode, clicking on a marker will open a&nbsp;
<a
class="reference-link" href="#root/_help_ZjLYv08Rp3qC">Quick edit</a>&nbsp;popup for the corresponding note.</li>
</ul>
@@ -173,24 +166,24 @@
<p>It's possible to press the right mouse button to display a contextual
menu.</p>
<ol>
<li data-list-item-id="e6e1df77d08abea42b114123b9e206831">If right-clicking an empty section of the map (not on a marker), it allows
<li>If right-clicking an empty section of the map (not on a marker), it allows
to:
<ol>
<li data-list-item-id="e0c607a462795bf27fa8d3274c5848eac">Displays the latitude and longitude. Clicking this option will copy them
<li>Displays the latitude and longitude. Clicking this option will copy them
to the clipboard.</li>
<li data-list-item-id="ebb4df1dbc71c1cf2a60a4556137d9979">Open the location using an external application (if the operating system
<li>Open the location using an external application (if the operating system
supports it).</li>
<li data-list-item-id="ef2cebb14c49f49212bc6125dc7396aee">Adding a new marker at that location.</li>
<li>Adding a new marker at that location.</li>
</ol>
</li>
<li data-list-item-id="eb51937764412ec81b46a1170895fec34">If right-clicking on a marker, it allows to:
<li>If right-clicking on a marker, it allows to:
<ol>
<li data-list-item-id="e2ecc956afa9b89f7ee794f7e82a4acb8">Displays the latitude and longitude. Clicking this option will copy them
<li>Displays the latitude and longitude. Clicking this option will copy them
to the clipboard.</li>
<li data-list-item-id="e9f170d3ab76c0df6b97b645834f3ca35">Open the location using an external application (if the operating system
<li>Open the location using an external application (if the operating system
supports it).</li>
<li data-list-item-id="e74b36cbaa919cd7ccd4ca5cbd62ead2c">Open the note in a new tab, split or window.</li>
<li data-list-item-id="e520b2e1b876d547a66719c7d6d39b9b7">Remove the marker from the map, which will remove the <code>#geolocation</code> attribute
<li>Open the note in a new tab, split or window.</li>
<li>Remove the marker from the map, which will remove the <code>#geolocation</code> attribute
of the note. To add it back again, the coordinates have to be manually
added back in.</li>
</ol>
@@ -210,215 +203,209 @@
<p>The value of the attribute is made up of the latitude and longitude separated
by a comma.</p>
<h3>Adding from Google Maps</h3>
<figure class="table">
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:56.84%;">
<img style="aspect-ratio:732/918;" src="12_Geo Map View_image.png" width="732"
height="918">
</figure>
</td>
<td>Go to Google Maps on the web and look for a desired location, right click
on it and a context menu will show up.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Simply click on the first item displaying the coordinates and they will
be copied to clipboard.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Then paste the value inside the text box into the <code>#geolocation</code> attribute
of a child note of the map (don't forget to surround the value with a <code>"</code> character).</td>
</tr>
<tr>
<td>2</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:100%;">
<img style="aspect-ratio:518/84;" src="4_Geo Map View_image.png" width="518"
height="84">
</figure>
</td>
<td>In Trilium, create a child note under the map.</td>
</tr>
<tr>
<td>3</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:100%;">
<img style="aspect-ratio:1074/276;" src="11_Geo Map View_image.png" width="1074"
height="276">
</figure>
</td>
<td>And then go to Owned Attributes and type <code>#geolocation="</code>, then
paste from the clipboard as-is and then add the ending <code>"</code> character.
Press Enter to confirm and the map should now be updated to contain the
new note.</td>
</tr>
</tbody>
</table>
</figure>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:56.84%;">
<img style="aspect-ratio:732/918;" src="12_Geo Map View_image.png" width="732"
height="918">
</figure>
</td>
<td>Go to Google Maps on the web and look for a desired location, right click
on it and a context menu will show up.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Simply click on the first item displaying the coordinates and they will
be copied to clipboard.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Then paste the value inside the text box into the <code>#geolocation</code> attribute
of a child note of the map (don't forget to surround the value with a <code>"</code> character).</td>
</tr>
<tr>
<td>2</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:100%;">
<img style="aspect-ratio:518/84;" src="4_Geo Map View_image.png" width="518"
height="84">
</figure>
</td>
<td>In Trilium, create a child note under the map.</td>
</tr>
<tr>
<td>3</td>
<td>
<figure class="image image-style-align-center image_resized" style="width:100%;">
<img style="aspect-ratio:1074/276;" src="11_Geo Map View_image.png" width="1074"
height="276">
</figure>
</td>
<td>And then go to Owned Attributes and type <code>#geolocation="</code>, then
paste from the clipboard as-is and then add the ending <code>"</code> character.
Press Enter to confirm and the map should now be updated to contain the
new note.</td>
</tr>
</tbody>
</table>
<h3>Adding from OpenStreetMap</h3>
<p>Similarly to the Google Maps approach:</p>
<figure class="table">
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<img class="image_resized" style="aspect-ratio:562/454;width:100%;" src="1_Geo Map View_image.png"
width="562" height="454">
</td>
<td>Go to any location on openstreetmap.org and right click to bring up the
context menu. Select the “Show address” item.</td>
</tr>
<tr>
<td>2</td>
<td>
<img class="image_resized" style="aspect-ratio:696/480;width:100%;" src="Geo Map View_image.png"
width="696" height="480">
</td>
<td>The address will be visible in the top-left of the screen, in the place
of the search bar.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Select the coordinates and copy them into the clipboard.</td>
</tr>
<tr>
<td>3</td>
<td>
<img class="image_resized" style="aspect-ratio:640/276;width:100%;" src="5_Geo Map View_image.png"
width="640" height="276">
</td>
<td>Simply paste the value inside the text box into the <code>#geolocation</code> attribute
of a child note of the map and then it should be displayed on the map.</td>
</tr>
</tbody>
</table>
</figure>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<img class="image_resized" style="aspect-ratio:562/454;width:100%;" src="1_Geo Map View_image.png"
width="562" height="454">
</td>
<td>Go to any location on openstreetmap.org and right click to bring up the
context menu. Select the “Show address” item.</td>
</tr>
<tr>
<td>2</td>
<td>
<img class="image_resized" style="aspect-ratio:696/480;width:100%;" src="Geo Map View_image.png"
width="696" height="480">
</td>
<td>The address will be visible in the top-left of the screen, in the place
of the search bar.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>Select the coordinates and copy them into the clipboard.</td>
</tr>
<tr>
<td>3</td>
<td>
<img class="image_resized" style="aspect-ratio:640/276;width:100%;" src="5_Geo Map View_image.png"
width="640" height="276">
</td>
<td>Simply paste the value inside the text box into the <code>#geolocation</code> attribute
of a child note of the map and then it should be displayed on the map.</td>
</tr>
</tbody>
</table>
<h2>Adding GPS tracks (.gpx)</h2>
<p>Trilium has basic support for displaying GPS tracks on the geo map.</p>
<figure
class="table">
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<figure class="image image-style-align-center">
<img style="aspect-ratio:226/74;" src="3_Geo Map View_image.png" width="226"
height="74">
</figure>
</td>
<td>To add a track, simply drag &amp; drop a .gpx file inside the geo map
in the note tree.</td>
</tr>
<tr>
<td>2</td>
<td>
<figure class="image image-style-align-center">
<img style="aspect-ratio:322/222;" src="14_Geo Map View_image.png" width="322"
height="222">
</figure>
</td>
<td>In order for the file to be recognized as a GPS track, it needs to show
up as <code>application/gpx+xml</code> in the <em>File type</em> field.</td>
</tr>
<tr>
<td>3</td>
<td>
<figure class="image image-style-align-center">
<img style="aspect-ratio:620/530;" src="6_Geo Map View_image.png" width="620"
height="530">
</figure>
</td>
<td>When going back to the map, the track should now be visible.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>The start and end points of the track are indicated by the two blue markers.</td>
</tr>
</tbody>
</table>
</figure>
<aside class="admonition note">
<p>The starting point of the track will be displayed as a marker, with the
name of the note underneath. The start marker will also respect the icon
and the <code>color</code> of the note. The end marker is displayed with
a distinct icon.</p>
<p>If the GPX contains waypoints, they will also be displayed. If they have
a name, it is displayed when hovering over it with the mouse.</p>
</aside>
<h2>Read-only mode</h2>
<p>When a map is in read-only all editing features will be disabled such
as:</p>
<ul>
<li data-list-item-id="e01ba8c2bc5a5fe298f2bcc3f38045726">The add button in the&nbsp;<a class="reference-link" href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>.</li>
<li
data-list-item-id="e5dc4164805a9c592960edacccd84c2b9">Dragging markers.</li>
<li data-list-item-id="e6eb954bc0018874dc6d31e3116c1f6f2">Editing from the contextual menu (removing locations or adding new items).</li>
</ul>
<p>To enable read-only mode simply press the <em>Lock</em> icon from the&nbsp;
<a
class="reference-link" href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>. To disable it, press the button again.</p>
<h2>Configuration</h2>
<h3>Map Style</h3>
<p>The styling of the map can be adjusted in the <em>Collection Properties</em> tab
in the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;or
manually via the <code>#map:style</code> attribute.</p>
<p>The geo map comes with two different types of styles:</p>
<ul>
<li data-list-item-id="eeea4587bdcb9de0b9654142f5a5d6775">Raster styles
<ul>
<li data-list-item-id="e2c98091e2d27c6f3db1584e77955417c">For these styles the map is represented as a grid of images at different
zoom levels. This is the traditional way OpenStreetMap used to work.</li>
<li
data-list-item-id="e2d4b2a0674a0b45ff41825c8a3f31b4d">Zoom is slightly restricted.</li>
<li data-list-item-id="e523531fd38c4d62d03fb98d759910cba">Currently, the only raster theme is the original OpenStreetMap style.</li>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>
<figure class="image image-style-align-center">
<img style="aspect-ratio:226/74;" src="3_Geo Map View_image.png" width="226"
height="74">
</figure>
</td>
<td>To add a track, simply drag &amp; drop a .gpx file inside the geo map
in the note tree.</td>
</tr>
<tr>
<td>2</td>
<td>
<figure class="image image-style-align-center">
<img style="aspect-ratio:322/222;" src="14_Geo Map View_image.png" width="322"
height="222">
</figure>
</td>
<td>In order for the file to be recognized as a GPS track, it needs to show
up as <code>application/gpx+xml</code> in the <em>File type</em> field.</td>
</tr>
<tr>
<td>3</td>
<td>
<figure class="image image-style-align-center">
<img style="aspect-ratio:620/530;" src="6_Geo Map View_image.png" width="620"
height="530">
</figure>
</td>
<td>When going back to the map, the track should now be visible.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>
<br>The start and end points of the track are indicated by the two blue markers.</td>
</tr>
</tbody>
</table>
<aside class="admonition note">
<p>The starting point of the track will be displayed as a marker, with the
name of the note underneath. The start marker will also respect the icon
and the <code>color</code> of the note. The end marker is displayed with
a distinct icon.</p>
<p>If the GPX contains waypoints, they will also be displayed. If they have
a name, it is displayed when hovering over it with the mouse.</p>
</aside>
<h2>Read-only mode</h2>
<p>When a map is in read-only all editing features will be disabled such
as:</p>
<ul>
<li>The add button in the&nbsp;<a class="reference-link" href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>.</li>
<li>Dragging markers.</li>
<li>Editing from the contextual menu (removing locations or adding new items).</li>
</ul>
<p>To enable read-only mode simply press the <em>Lock</em> icon from the&nbsp;
<a
class="reference-link" href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>. To disable it, press the button again.</p>
<h2>Configuration</h2>
<h3>Map Style</h3>
<p>The styling of the map can be adjusted in the <em>Collection Properties</em> tab
in the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;or
manually via the <code>#map:style</code> attribute.</p>
<p>The geo map comes with two different types of styles:</p>
<ul>
<li>Raster styles
<ul>
<li>For these styles the map is represented as a grid of images at different
zoom levels. This is the traditional way OpenStreetMap used to work.</li>
<li>Zoom is slightly restricted.</li>
<li>Currently, the only raster theme is the original OpenStreetMap style.</li>
</ul>
</li>
<li data-list-item-id="e52d95b226aad245ac19ff167f5ab55f5">Vector styles
<ul>
<li data-list-item-id="e044a20e3c5a75f5f89ec45be5d21bcc0">Vector styles are not represented as images, but as geometrical shapes.
This makes the rendering much smoother, especially when zooming and looking
at the building edges, for example.</li>
<li data-list-item-id="e3652568ffe587c07fbf3859e4418d331">The map can be zoomed in much further.</li>
<li data-list-item-id="e0e973f7c719aabf5a25e77d287ffd674">These come both in a light and a dark version.</li>
<li data-list-item-id="e97a7fde2237e13f23f74bc74eaad977d">The vector styles come from <a href="https://versatiles.org/">VersaTiles</a>,
a free and open-source project providing map tiles based on OpenStreetMap.</li>
</ul>
</li>
</ul>
<aside class="admonition note">
<p>Currently it is not possible to use a custom map style.</p>
</aside>
<h3>Scale</h3>
<p>Activating this option via the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;or
manually via <code>#map:scale</code> will display an indicator in the bottom-left
of the scale of the map.</p>
<h2>Troubleshooting</h2>
<figure class="image image-style-align-right image_resized" style="width:34.06%;">
<img style="aspect-ratio:678/499;" src="13_Geo Map View_image.png" width="678"
height="499">
</figure>
<h3>Grid-like artifacts on the map</h3>
<p>This occurs if the application is not at 100% zoom which causes the pixels
of the map to not render correctly due to fractional scaling. The only
possible solution is to set the UI zoom at 100% (default keyboard shortcut
is <kbd>Ctrl</kbd>+<kbd>0</kbd>).</p>
</li>
<li>Vector styles
<ul>
<li>Vector styles are not represented as images, but as geometrical shapes.
This makes the rendering much smoother, especially when zooming and looking
at the building edges, for example.</li>
<li>The map can be zoomed in much further.</li>
<li>These come both in a light and a dark version.</li>
<li>The vector styles come from <a href="https://versatiles.org/">VersaTiles</a>,
a free and open-source project providing map tiles based on OpenStreetMap.</li>
</ul>
</li>
</ul>
<aside class="admonition note">
<p>Currently it is not possible to use a custom map style.</p>
</aside>
<h3>Scale</h3>
<p>Activating this option via the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;or
manually via <code>#map:scale</code> will display an indicator in the bottom-left
of the scale of the map.</p>
<h2>Troubleshooting</h2>
<figure class="image image-style-align-right image_resized" style="width:34.06%;">
<img style="aspect-ratio:678/499;" src="13_Geo Map View_image.png" width="678"
height="499">
</figure>
<h3>Grid-like artifacts on the map</h3>
<p>This occurs if the application is not at 100% zoom which causes the pixels
of the map to not render correctly due to fractional scaling. The only
possible solution is to set the UI zoom at 100% (default keyboard shortcut
is <kbd>Ctrl</kbd>+<kbd>0</kbd>).</p>

View File

@@ -8,31 +8,31 @@
<h2>How it works</h2>
<p>The tabular structure is represented as such:</p>
<ul>
<li data-list-item-id="e64ad901cbe4893af338d8b33b17b946b">Each child note is a row in the table.</li>
<li data-list-item-id="ef19a21d99b681c4f637ac5be0e42b93e">If child rows also have children, they will be displayed under an expander
<li>Each child note is a row in the table.</li>
<li>If child rows also have children, they will be displayed under an expander
(nested notes).</li>
<li data-list-item-id="ebaa090ab0ae91a60d3653d39c52cd452">Each column is a <a href="#root/_help_OFXdgB2nNk1F">promoted attribute</a> that
<li>Each column is a <a href="#root/_help_OFXdgB2nNk1F">promoted attribute</a> that
is defined on the Collection note.
<ul>
<li data-list-item-id="e86fffd20976a8d692cc10d57021d169b">Actually, both promoted and unpromoted attributes are supported, but it's
<li>Actually, both promoted and unpromoted attributes are supported, but it's
a requirement to use a label/relation definition.</li>
<li data-list-item-id="e6a6826c920bb1c83b03a48ef4c5882e9">The promoted attributes are usually defined as inheritable in order to
<li>The promoted attributes are usually defined as inheritable in order to
show up in the child notes, but it's not a requirement.</li>
</ul>
</li>
<li data-list-item-id="e2ebc33e6efe4b9e8e03e59e1f332ec09">If there are multiple attribute definitions with the same <code>name</code>,
<li>If there are multiple attribute definitions with the same <code>name</code>,
only one will be displayed.</li>
</ul>
<p>There are also a few predefined columns:</p>
<ul>
<li data-list-item-id="e720fffe6dd418b4f9dc4f0202c346cde">The current item number, identified by the <code>#</code> symbol.
<li>The current item number, identified by the <code>#</code> symbol.
<ul>
<li data-list-item-id="e2413a01cb3ab56c417ce668adbc6ac73">This simply counts the note and is affected by sorting.</li>
<li>This simply counts the note and is affected by sorting.</li>
</ul>
</li>
<li data-list-item-id="e2d391e22bb6c8fd1b13ec73508aac5aa"><a class="reference-link" href="#root/_help_m1lbrzyKDaRB">Note ID</a>,
<li><a class="reference-link" href="#root/_help_m1lbrzyKDaRB">Note ID</a>,
representing the unique ID used internally by Trilium</li>
<li data-list-item-id="eb24f409f2880ace8024d5c365f27ae4d">The title of the note.</li>
<li>The title of the note.</li>
</ul>
<h2>Interaction</h2>
<h3>Creating a new table</h3>
@@ -43,18 +43,17 @@
is defined on the Collection note.</p>
<p>To create a new column, either:</p>
<ul>
<li data-list-item-id="ea6af0ba9cb59abbdf103afbcca3648d3">Press <em>Add new column</em> at the bottom of the table.</li>
<li data-list-item-id="e06425c83a8b2d544439deb67e1ed8dde">Right click on an existing column and select Add column to the left/right.</li>
<li
data-list-item-id="e465dcedaa659069fa8adf45965c6f82a">Right click on the empty space of the column header and select <em>Label</em> or <em>Relation</em> in
<li>Press <em>Add new column</em> at the bottom of the table.</li>
<li>Right click on an existing column and select Add column to the left/right.</li>
<li>Right click on the empty space of the column header and select <em>Label</em> or <em>Relation</em> in
the <em>New column</em> section.</li>
</ul>
<h3>Adding new rows</h3>
<p>Each row is actually a note that is a child of the Collection note.</p>
<p>To create a new note, either:</p>
<ul>
<li data-list-item-id="e842c202bbe506db120ec062144926725">Press <em>Add new row</em> at the bottom of the table.</li>
<li data-list-item-id="e138ab1b21ae6b33f0e239cc2423a8235">Right click on an existing row and select <em>Insert row above, Insert child note</em> or <em>Insert row below</em>.</li>
<li>Press <em>Add new row</em> at the bottom of the table.</li>
<li>Right click on an existing row and select <em>Insert row above, Insert child note</em> or <em>Insert row below</em>.</li>
</ul>
<p>By default it will try to edit the title of the newly created note.</p>
<p>Alternatively, the note can be created from the&nbsp;<a class="reference-link"
@@ -62,30 +61,29 @@
<h3>Context menu</h3>
<p>There are multiple menus:</p>
<ul>
<li data-list-item-id="ed33636cc739348e80ec41b5e6e4c4040">Right clicking on a column, allows:
<li>Right clicking on a column, allows:
<ul>
<li data-list-item-id="e4d519dd67a7724fb7ee96ede04edb222">Sorting by the selected column and resetting the sort.</li>
<li data-list-item-id="e470b443d32907aa08f4df29779ea28bd">Hiding the selected column or adjusting the visibility of every column.</li>
<li
data-list-item-id="e5317846febd8241273f4ede7f3db66cc">Adding new columns to the left or the right of the column.</li>
<li data-list-item-id="e962918274b39cb9fd6df6b5b56693538">Editing the current column.</li>
<li data-list-item-id="ec032100c066a947c1d7dad2582ff5508">Deleting the current column.</li>
</ul>
</li>
<li data-list-item-id="e2973fdee2c6a0e380ff76c12e981a8ca">Right clicking on the space to the right of the columns, allows:
<ul>
<li data-list-item-id="ec9af5f22c914ff6e1dacd08e8d36b689">Adjusting the visibility of every column.</li>
<li data-list-item-id="e4c01630a0d3807fa1bb6ba7ad1d2b4d5">Adding new columns.</li>
<li>Sorting by the selected column and resetting the sort.</li>
<li>Hiding the selected column or adjusting the visibility of every column.</li>
<li>Adding new columns to the left or the right of the column.</li>
<li>Editing the current column.</li>
<li>Deleting the current column.</li>
</ul>
</li>
<li data-list-item-id="e34f4fc20582cd16a296b9ea6111d7217">Right clicking on a row, allows:
<li>Right clicking on the space to the right of the columns, allows:
<ul>
<li data-list-item-id="e85f6f9ad8bd4cedba76ec61641aef872">Opening the corresponding note of the row in a new tab, split, window
<li>Adjusting the visibility of every column.</li>
<li>Adding new columns.</li>
</ul>
</li>
<li>Right clicking on a row, allows:
<ul>
<li>Opening the corresponding note of the row in a new tab, split, window
or quick editing it.</li>
<li data-list-item-id="e7d162cd1c691bfaa5fdcca2b7657889c">Inserting a new note above or below the selected row. These options are
<li>Inserting a new note above or below the selected row. These options are
only enabled if the table is not sorted.</li>
<li data-list-item-id="e4bc3dac5d829f536f9c675fabd487159">Inserting a new child note for the selected row.</li>
<li data-list-item-id="ea884b0514b3e6008d37c4203b578abf4">Deleting the row.</li>
<li>Inserting a new child note for the selected row.</li>
<li>Deleting the row.</li>
</ul>
</li>
</ul>
@@ -94,18 +92,17 @@
not only reflect in the table, but also as an attribute of the corresponding
note.</p>
<ul>
<li data-list-item-id="ed4ca126e9dfee077aa1e82c61e002b0e">The editing will respect the type of the promoted attribute, by presenting
<li>The editing will respect the type of the promoted attribute, by presenting
a normal text box, a number selector or a date selector for example.</li>
<li
data-list-item-id="ee4ebcbf4c65901d499054ace1ec30fba">It also possible to change the title of a note.</li>
<li data-list-item-id="e7647cecb7bfe80f5fbeb0978d2314ce4">Editing relations is also possible
<ul>
<li data-list-item-id="e13d2d5274c7ed601308aca53acc0a1de">Simply click on a relation and it will become editable. Enter the text
to look for a note and click on it.</li>
<li data-list-item-id="e9a5cfc1a3c99e10027de4c0e823d52dd">To remove a relation, remove the title of the note from the text box and
click outside the cell.</li>
</ul>
</li>
<li>It also possible to change the title of a note.</li>
<li>Editing relations is also possible
<ul>
<li>Simply click on a relation and it will become editable. Enter the text
to look for a note and click on it.</li>
<li>To remove a relation, remove the title of the note from the text box and
click outside the cell.</li>
</ul>
</li>
</ul>
<h3>Editing columns</h3>
<p>It is possible to edit a column by right clicking it and selecting <em>Edit column.</em> This
@@ -119,19 +116,18 @@
href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>. However, it is possible
to sort the data by the values of a column:</p>
<ul>
<li data-list-item-id="e5ce45ad603e17cc791c1cce896ea2343">To do so, simply click on a column.</li>
<li data-list-item-id="e63bfff41295adf24d39bc2cd6ccca84b">To switch between ascending or descending sort, simply click again on
<li>To do so, simply click on a column.</li>
<li>To switch between ascending or descending sort, simply click again on
the same column. The arrow next to the column will indicate the direction
of the sort.</li>
<li data-list-item-id="e0f85e4da263221dcbb95f16c030d39eb">To disable sorting and fall back to the original order, right click any
<li>To disable sorting and fall back to the original order, right click any
column on the header and select <em>Clear sorting.</em>
</li>
</ul>
<h3>Reordering and hiding columns</h3>
<ul>
<li data-list-item-id="e5896de9b64721336b750424722520077">Columns can be reordered by dragging the header of the columns.</li>
<li
data-list-item-id="ef3e79755ec075ba7bb3e8022be187d09">Columns can be hidden or shown by right clicking on a column and clicking
<li>Columns can be reordered by dragging the header of the columns.</li>
<li>Columns can be hidden or shown by right clicking on a column and clicking
the item corresponding to the column.</li>
</ul>
<h3>Reordering rows</h3>
@@ -142,12 +138,10 @@
href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>.</p>
<p>Reordering does have some limitations:</p>
<ul>
<li data-list-item-id="e5031f5ee58e1716ab7539646ec04560e">If the parent note has <code>#sorted</code>, reordering will be disabled.</li>
<li
data-list-item-id="ea459b73acc724ce194bee9ad4edcb41f">If using nested tables, then reordering will also be disabled.</li>
<li
data-list-item-id="e141cb996730f01b09d3445deaf4c78e2">Currently, it's possible to reorder notes even if column sorting is used,
but the result might be inconsistent.</li>
<li>If the parent note has <code>#sorted</code>, reordering will be disabled.</li>
<li>If using nested tables, then reordering will also be disabled.</li>
<li>Currently, it's possible to reorder notes even if column sorting is used,
but the result might be inconsistent.</li>
</ul>
<h3>Nested trees</h3>
<p>If the child notes of the collection also have their own child notes,
@@ -158,27 +152,27 @@
to a certain number of levels or even disable it completely. To do so,
either:</p>
<ul>
<li data-list-item-id="ec9fad81d25d69837d3a8e4493d324933">Go to <em>Collection Properties</em> in the&nbsp;<a class="reference-link"
<li>Go to <em>Collection Properties</em> in the&nbsp;<a class="reference-link"
href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;and look for the <em>Max nesting depth</em> section.
<ul>
<li data-list-item-id="eed3900305b6dac0230464952a8d740fc">To disable nesting, type 0 and press Enter.</li>
<li data-list-item-id="eb08305402db92dae03b076110db46cd3">To limit to a certain depth, type in the desired number (e.g. 2 to only
<li>To disable nesting, type 0 and press Enter.</li>
<li>To limit to a certain depth, type in the desired number (e.g. 2 to only
display children and sub-children).</li>
<li data-list-item-id="e550fe73006d8104a4d4389065937625f">To re-enable unlimited nesting, remove the number and press Enter.</li>
<li>To re-enable unlimited nesting, remove the number and press Enter.</li>
</ul>
</li>
<li data-list-item-id="e1f71636501119bd8e0ab93088345a3ed">Manually set <code>maxNestingDepth</code> to the desired value.</li>
<li>Manually set <code>maxNestingDepth</code> to the desired value.</li>
</ul>
<p>Limitations:</p>
<ul>
<li data-list-item-id="e899eba1fe16e4e4c4387802f3ffefae1">While in this mode, it's not possible to reorder notes.</li>
<li>While in this mode, it's not possible to reorder notes.</li>
</ul>
<h2>Limitations</h2>
<ul>
<li data-list-item-id="e01428cbdee7a21cd301899f174d365f8">Multi-value labels and relations are not supported. If a&nbsp;<a class="reference-link"
<li>Multi-value labels and relations are not supported. If a&nbsp;<a class="reference-link"
href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;is defined
with a <em>Multi value</em> specificity, they will be ignored.</li>
<li data-list-item-id="ed7383c1e825d65f89f15a4a46e6182d0">There is no support to filter the rows by a certain criteria. Consider
<li>There is no support to filter the rows by a certain criteria. Consider
using the table view in search for that use case.</li>
</ul>
<h2>Use in search</h2>
@@ -189,8 +183,8 @@
of the&nbsp;<a class="reference-link" href="#root/_help_eIg8jdvaoNNd">Search</a>.</p>
<p>However, there are also some limitations:</p>
<ul>
<li data-list-item-id="ecc3da3b48bf89456c4a7f417b57846dc">It's not possible to reorder notes.</li>
<li data-list-item-id="e8293ec0a9c6537df0eda725492531bf4">It's not possible to add a new row.</li>
<li>It's not possible to reorder notes.</li>
<li>It's not possible to add a new row.</li>
</ul>
<p>Columns are supported, by being defined as&nbsp;<a class="reference-link"
href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;to the&nbsp;

View File

@@ -1,5 +1,15 @@
{
"keyboard_actions": {
"back-in-note-history": "Navigovat na předchozí poznámku v historii"
"back-in-note-history": "Navigovat na předchozí poznámku v historii",
"forward-in-note-history": "Navigovat na následující poznámku v historii",
"open-jump-to-note-dialog": "Otevřít dialog \"Přejít na poznámku\"",
"open-command-palette": "Otevřít paletu příkazů",
"scroll-to-active-note": "Posunout strom poznámek na aktivní položku",
"quick-search": "Zobrazit pole pro rychlé hledání",
"search-in-subtree": "Hledat poznámky pod aktuálně zvolenou",
"expand-subtree": "Rozbalit podstrom aktivní poznámky",
"collapse-tree": "Sbalit celý strom poznámek",
"collapse-subtree": "Sbalí podstrom aktivní poznámky",
"sort-child-notes": "Seřadit podřízené poznámky"
}
}

View File

@@ -5,6 +5,10 @@
"creating-and-moving-notes": "Luo ja siirrä muistioita",
"delete-note": "Poista muistio",
"move-note-up": "Siirrä muistio ylös",
"open-command-palette": "Avaa komentovalikko"
"open-command-palette": "Avaa komentovalikko",
"back-in-note-history": "Palaa edelliseen muistiinpanoon",
"forward-in-note-history": "Siirry seuraavaan muistiinpanoon",
"open-jump-to-note-dialog": "Avaa \"Siirry muistiinpanoon\" -dialogi",
"scroll-to-active-note": "Näytä aktiivinen muistiinpano puunäkymässä"
}
}

View File

@@ -1,164 +1,167 @@
{
"keyboard_action_names": {
"zoom-in": "Ingrandisci",
"reset-zoom-level": "Ripristina il livello di ingrandimento",
"zoom-out": "Riduci",
"toggle-full-screen": "Attiva/disattiva lo Schermo Intero",
"toggle-left-pane": "Attiva/disattiva il Pannello Sinistro",
"toggle-zen-mode": "Attiva/disattiva la modalità zen",
"toggle-right-pane": "Attiva/disattiva il Pannello Destro",
"toggle-system-tray-icon": "Attiva/disattiva l'Icona nel Vassoio di Sistema",
"toggle-note-hoisting": "Attiva/disattiva l'Ancoraggio della Nota",
"unhoist-note": "Disancora la Nota",
"reload-frontend-app": "Ricarica l'Applicazione Frontend",
"open-developer-tools": "Apri gli Strumenti da Sviluppatore",
"find-in-text": "Cerca nel Testo",
"print-active-note": "Stampa la Nota Attiva",
"export-active-note-as-pdf": "Esporta la nota attiva come PDF",
"open-note-externally": "Apri Esternamente la Nota",
"run-active-note": "Esegui la Nota Attiva",
"render-active-note": "Presenta la Nota Attiva"
},
"hidden-subtree": {
"options-title": "Opzioni",
"appearance-title": "Aspetto",
"shortcuts-title": "Scorciatoie",
"text-notes": "Note di Testo",
"code-notes-title": "Note di Codice",
"images-title": "Immagini",
"spellcheck-title": "Controllo Ortografico",
"password-title": "Password",
"multi-factor-authentication-title": "MFA",
"etapi-title": "ETAPI",
"backup-title": "Archiviazione",
"sync-title": "Sincronizza",
"ai-llm-title": "IA/LLM",
"other": "Altro",
"advanced-title": "Avanzato",
"user-guide": "Guida Utente",
"visible-launchers-title": "Lanciatori Visibili",
"localization": "Lingua e Regione",
"inbox-title": "Posta in arrivo"
},
"notes": {
"new-note": "Nuova nota",
"duplicate-note-suffix": "(dup)",
"duplicate-note-title": "{{- noteTitle }} {{ duplicateNoteSuffix }}"
},
"backend_log": {
"log-does-not-exist": "Il file di log del backend '{{ fileName }}' non esiste (ancora).",
"reading-log-failed": "La lettura del file di log del backend '{{ fileName }}' è fallita."
},
"content_renderer": {
"note-cannot-be-displayed": "Questo tipo di nota non può essere visualizzato."
},
"pdf": {
"export_filter": "Documento PDF (*.pdf)",
"unable-to-export-message": "La nota corrente non può essere esportata come PDF.",
"unable-to-export-title": "Impossibile esportare come PDF",
"unable-to-save-message": "Il file selezionato non può essere salvato. Prova di nuovo o seleziona un'altra destinazione."
},
"tray": {
"tooltip": "Trilium Notes",
"close": "Esci da Trilium",
"recents": "Note recenti",
"bookmarks": "Segnalibri",
"today": "Apri la nota di oggi",
"new-note": "Nuova nota",
"show-windows": "Mostra le finestre",
"open_new_window": "Aprire una nuova finestra"
},
"migration": {
"old_version": "La migrazione diretta dalla tua versione attuale non è supportata. Si prega di aggiornare prima all'ultima versione v0.60.4 e solo dopo a questa versione.",
"error_message": "Errore durante la migrazione alla versione {{version}}: {{stack}}",
"wrong_db_version": "La versione del database ({{version}}) è più recente di quanto l'applicazione si aspetti ({{targetVersion}}), il che significa che è stato creato da una versione più nuova e incompatibile di Trilium. Aggiorna Trilium all'ultima versione per risolvere questo problema."
},
"modals": {
"error_title": "Errore"
},
"share_theme": {
"site-theme": "Tema del Sito",
"search_placeholder": "Cerca..."
},
"keyboard_actions": {
"back-in-note-history": "Navigare alla nota precedente della cronologia",
"forward-in-note-history": "Navigare alla prossima nota della cronologia",
"open-jump-to-note-dialog": "Apri la finestra di dialogo \"Salta alla nota\"",
"open-command-palette": "Apri la palette dei comandi",
"scroll-to-active-note": "Scorri l'albero fino alla nota attiva",
"quick-search": "Attiva la barra di ricerca rapida",
"search-in-subtree": "Cerca le note nel sotto albero della nota attiva",
"expand-subtree": "Espande il sotto albero della nota corrente",
"collapse-tree": "Contrae l'albero completo delle note",
"collapse-subtree": "Contrae il sotto albero della nota corrente",
"sort-child-notes": "Ordina le note figlio",
"creating-and-moving-notes": "Crea e sposta le note",
"create-note-after": "Crea una nota dopo quella attiva",
"create-note-into": "Crea una nota come figlia di quella attiva",
"create-note-into-inbox": "Creare una nota nella casella di posta (se definita) o nella nota del giorno",
"delete-note": "Elimina una nota",
"move-note-up": "Sposta su una nota",
"move-note-down": "Sposta giù una nota",
"move-note-up-in-hierarchy": "Sposta su la nota nella gerarchia",
"move-note-down-in-hierarchy": "Sposta giù una nota nella gerarchia",
"edit-note-title": "Salta dall'albero al dettaglio della nota e modifica il titolo",
"edit-branch-prefix": "Mostra la finestra di dialogo \"Modifica il prefisso del ramo\"",
"clone-notes-to": "Clona le note selezionate",
"move-notes-to": "Sposta le note selezionate",
"note-clipboard": "Appunti delle Note",
"copy-notes-to-clipboard": "Copia le note selezionate negli appunti",
"paste-notes-from-clipboard": "Incolla le note dagli appunti nella nota attiva",
"cut-notes-to-clipboard": "Tagliare le note selezionate negli appunti",
"select-all-notes-in-parent": "Seleziona tutte le note dal livello di nota corrente",
"add-note-above-to-the-selection": "Aggiungi una nota sopra alla selezione",
"add-note-below-to-selection": "Aggiungi una nota sotto alla selezione",
"duplicate-subtree": "Duplica il sotto albero",
"tabs-and-windows": "Schede e Finestre",
"open-new-tab": "Apri una nuova scheda",
"close-active-tab": "Chiudi la scheda attiva",
"reopen-last-tab": "Riapri l'ultima scheda chiusa",
"activate-next-tab": "Attiva la scheda sulla destra",
"activate-previous-tab": "Attiva la scheda a sinistra",
"open-new-window": "Apri una nuova finestra vuota",
"toggle-tray": "Mostra/nascondi l'applicazione dal vassoio di sistema",
"first-tab": "Attiva la prima scheda nell'elenco",
"second-tab": "Attiva la seconda scheda nell'elenco",
"third-tab": "Attiva la terza scheda nell'elenco",
"fourth-tab": "Attiva la quarta scheda nella lista",
"fifth-tab": "Attiva la quinta scheda nell'elenco",
"sixth-tab": "Attiva la sesta scheda nell'elenco",
"seventh-tab": "Attiva la settima scheda nella lista",
"eight-tab": "Attiva l'ottava scheda nell'elenco",
"ninth-tab": "Attiva la nona scheda nella lista",
"last-tab": "Attiva l'ultima scheda nell'elenco",
"dialogs": "Finestre di dialogo",
"show-note-source": "Mostra la finestra di dialogo \"Sorgente della Nota\"",
"show-options": "Apri la pagina \"Opzioni\"",
"show-revisions": "Mostra la finestra di dialogo \"Revisione della Nota\"",
"show-recent-changes": "Mostra la finestra di dialogo \"Modifiche Recenti\"",
"show-sql-console": "Apri la pagina \"Console SQL\"",
"show-backend-log": "Apri la pagina \"Log del Backend\"",
"show-help": "Apri la Guida Utente integrata",
"show-cheatsheet": "Mostra una finestra modale con le operazioni comuni da tastiera",
"text-note-operations": "Operazioni sulle note di testo",
"add-link-to-text": "Apri la finestra di dialogo per aggiungere il collegamento al testo",
"follow-link-under-cursor": "Segui il collegamento all'interno del quale è il cursore",
"insert-date-and-time-to-text": "Inserisci la data e l'ora corrente nel testo",
"paste-markdown-into-text": "Incolla il Markdown dagli appunti nella nota di testo",
"cut-into-note": "Taglia la selezione dalla nota corrente e crea una sotto nota col testo selezionato",
"add-include-note-to-text": "Apre la finestra di dialogo per includere una nota",
"edit-readonly-note": "Modifica una nota di sola lettura",
"attributes-labels-and-relations": "Attributi (etichette e relazioni)",
"add-new-label": "Crea una nuova etichetta",
"create-new-relation": "Crea una nuova relazione",
"ribbon-tabs": "Nastro delle schede",
"toggle-basic-properties": "Mostra/nascondi le Proprietà di Base",
"toggle-file-properties": "Attiva Proprietà del file",
"toggle-image-properties": "Attiva Proprietà Immagine",
"toggle-owned-attributes": "Attiva Attributi Propri",
"toggle-inherited-attributes": "Attiva Attributi Ereditati",
"toggle-promoted-attributes": "Attiva Attributi Promossi",
"toggle-link-map": "Attiva Mappa Link",
"toggle-note-info": "Attiva Informazioni Nota"
}
"keyboard_action_names": {
"zoom-in": "Ingrandisci",
"reset-zoom-level": "Ripristina il livello di ingrandimento",
"zoom-out": "Riduci",
"toggle-full-screen": "Attiva/disattiva lo Schermo Intero",
"toggle-left-pane": "Attiva/disattiva il Pannello Sinistro",
"toggle-zen-mode": "Attiva/disattiva la modalità zen",
"toggle-right-pane": "Attiva/disattiva il Pannello Destro",
"toggle-system-tray-icon": "Attiva/disattiva l'Icona nel Vassoio di Sistema",
"toggle-note-hoisting": "Attiva/disattiva l'Ancoraggio della Nota",
"unhoist-note": "Disancora la Nota",
"reload-frontend-app": "Ricarica l'Applicazione Frontend",
"open-developer-tools": "Apri gli Strumenti da Sviluppatore",
"find-in-text": "Cerca nel Testo",
"print-active-note": "Stampa la Nota Attiva",
"export-active-note-as-pdf": "Esporta la nota attiva come PDF",
"open-note-externally": "Apri Esternamente la Nota",
"run-active-note": "Esegui la Nota Attiva",
"render-active-note": "Presenta la Nota Attiva"
},
"hidden-subtree": {
"options-title": "Opzioni",
"appearance-title": "Aspetto",
"shortcuts-title": "Scorciatoie",
"text-notes": "Note di Testo",
"code-notes-title": "Note di Codice",
"images-title": "Immagini",
"spellcheck-title": "Controllo Ortografico",
"password-title": "Password",
"multi-factor-authentication-title": "MFA",
"etapi-title": "ETAPI",
"backup-title": "Archiviazione",
"sync-title": "Sincronizza",
"ai-llm-title": "IA/LLM",
"other": "Altro",
"advanced-title": "Avanzato",
"user-guide": "Guida Utente",
"visible-launchers-title": "Lanciatori Visibili",
"localization": "Lingua e Regione",
"inbox-title": "Posta in arrivo"
},
"notes": {
"new-note": "Nuova nota",
"duplicate-note-suffix": "(dup)",
"duplicate-note-title": "{{- noteTitle }} {{ duplicateNoteSuffix }}"
},
"backend_log": {
"log-does-not-exist": "Il file di log del backend '{{ fileName }}' non esiste (ancora).",
"reading-log-failed": "La lettura del file di log del backend '{{ fileName }}' è fallita."
},
"content_renderer": {
"note-cannot-be-displayed": "Questo tipo di nota non può essere visualizzato."
},
"pdf": {
"export_filter": "Documento PDF (*.pdf)",
"unable-to-export-message": "La nota corrente non può essere esportata come PDF.",
"unable-to-export-title": "Impossibile esportare come PDF",
"unable-to-save-message": "Il file selezionato non può essere salvato. Prova di nuovo o seleziona un'altra destinazione."
},
"tray": {
"tooltip": "Trilium Notes",
"close": "Esci da Trilium",
"recents": "Note recenti",
"bookmarks": "Segnalibri",
"today": "Apri la nota di oggi",
"new-note": "Nuova nota",
"show-windows": "Mostra le finestre",
"open_new_window": "Aprire una nuova finestra"
},
"migration": {
"old_version": "La migrazione diretta dalla tua versione attuale non è supportata. Si prega di aggiornare prima all'ultima versione v0.60.4 e solo dopo a questa versione.",
"error_message": "Errore durante la migrazione alla versione {{version}}: {{stack}}",
"wrong_db_version": "La versione del database ({{version}}) è più recente di quanto l'applicazione si aspetti ({{targetVersion}}), il che significa che è stato creato da una versione più nuova e incompatibile di Trilium. Aggiorna Trilium all'ultima versione per risolvere questo problema."
},
"modals": {
"error_title": "Errore"
},
"share_theme": {
"site-theme": "Tema del Sito",
"search_placeholder": "Cerca..."
},
"keyboard_actions": {
"back-in-note-history": "Navigare alla nota precedente della cronologia",
"forward-in-note-history": "Navigare alla prossima nota della cronologia",
"open-jump-to-note-dialog": "Apri la finestra di dialogo \"Salta alla nota\"",
"open-command-palette": "Apri la palette dei comandi",
"scroll-to-active-note": "Scorri l'albero fino alla nota attiva",
"quick-search": "Attiva la barra di ricerca rapida",
"search-in-subtree": "Cerca le note nel sotto albero della nota attiva",
"expand-subtree": "Espande il sotto albero della nota corrente",
"collapse-tree": "Contrae l'albero completo delle note",
"collapse-subtree": "Contrae il sotto albero della nota corrente",
"sort-child-notes": "Ordina le note figlio",
"creating-and-moving-notes": "Crea e sposta le note",
"create-note-after": "Crea una nota dopo quella attiva",
"create-note-into": "Crea una nota come figlia di quella attiva",
"create-note-into-inbox": "Creare una nota nella casella di posta (se definita) o nella nota del giorno",
"delete-note": "Elimina una nota",
"move-note-up": "Sposta su una nota",
"move-note-down": "Sposta giù una nota",
"move-note-up-in-hierarchy": "Sposta su la nota nella gerarchia",
"move-note-down-in-hierarchy": "Sposta giù una nota nella gerarchia",
"edit-note-title": "Salta dall'albero al dettaglio della nota e modifica il titolo",
"edit-branch-prefix": "Mostra la finestra di dialogo \"Modifica il prefisso del ramo\"",
"clone-notes-to": "Clona le note selezionate",
"move-notes-to": "Sposta le note selezionate",
"note-clipboard": "Appunti delle Note",
"copy-notes-to-clipboard": "Copia le note selezionate negli appunti",
"paste-notes-from-clipboard": "Incolla le note dagli appunti nella nota attiva",
"cut-notes-to-clipboard": "Tagliare le note selezionate negli appunti",
"select-all-notes-in-parent": "Seleziona tutte le note dal livello di nota corrente",
"add-note-above-to-the-selection": "Aggiungi una nota sopra alla selezione",
"add-note-below-to-selection": "Aggiungi una nota sotto alla selezione",
"duplicate-subtree": "Duplica il sotto albero",
"tabs-and-windows": "Schede e Finestre",
"open-new-tab": "Apri una nuova scheda",
"close-active-tab": "Chiudi la scheda attiva",
"reopen-last-tab": "Riapri l'ultima scheda chiusa",
"activate-next-tab": "Attiva la scheda sulla destra",
"activate-previous-tab": "Attiva la scheda a sinistra",
"open-new-window": "Apri una nuova finestra vuota",
"toggle-tray": "Mostra/nascondi l'applicazione dal vassoio di sistema",
"first-tab": "Attiva la prima scheda nell'elenco",
"second-tab": "Attiva la seconda scheda nell'elenco",
"third-tab": "Attiva la terza scheda nell'elenco",
"fourth-tab": "Attiva la quarta scheda nella lista",
"fifth-tab": "Attiva la quinta scheda nell'elenco",
"sixth-tab": "Attiva la sesta scheda nell'elenco",
"seventh-tab": "Attiva la settima scheda nella lista",
"eight-tab": "Attiva l'ottava scheda nell'elenco",
"ninth-tab": "Attiva la nona scheda nella lista",
"last-tab": "Attiva l'ultima scheda nell'elenco",
"dialogs": "Finestre di dialogo",
"show-note-source": "Mostra la finestra di dialogo \"Sorgente della Nota\"",
"show-options": "Apri la pagina \"Opzioni\"",
"show-revisions": "Mostra la finestra di dialogo \"Revisione della Nota\"",
"show-recent-changes": "Mostra la finestra di dialogo \"Modifiche Recenti\"",
"show-sql-console": "Apri la pagina \"Console SQL\"",
"show-backend-log": "Apri la pagina \"Log del Backend\"",
"show-help": "Apri la Guida Utente integrata",
"show-cheatsheet": "Mostra una finestra modale con le operazioni comuni da tastiera",
"text-note-operations": "Operazioni sulle note di testo",
"add-link-to-text": "Apri la finestra di dialogo per aggiungere il collegamento al testo",
"follow-link-under-cursor": "Segui il collegamento all'interno del quale è il cursore",
"insert-date-and-time-to-text": "Inserisci la data e l'ora corrente nel testo",
"paste-markdown-into-text": "Incolla il Markdown dagli appunti nella nota di testo",
"cut-into-note": "Taglia la selezione dalla nota corrente e crea una sotto nota col testo selezionato",
"add-include-note-to-text": "Apre la finestra di dialogo per includere una nota",
"edit-readonly-note": "Modifica una nota di sola lettura",
"attributes-labels-and-relations": "Attributi (etichette e relazioni)",
"add-new-label": "Crea una nuova etichetta",
"create-new-relation": "Crea una nuova relazione",
"ribbon-tabs": "Nastro delle schede",
"toggle-basic-properties": "Mostra/nascondi le Proprietà di Base",
"toggle-file-properties": "Attiva Proprietà del file",
"toggle-image-properties": "Attiva Proprietà Immagine",
"toggle-owned-attributes": "Attiva Attributi Propri",
"toggle-inherited-attributes": "Attiva Attributi Ereditati",
"toggle-promoted-attributes": "Attiva Attributi Promossi",
"toggle-link-map": "Attiva Mappa Link",
"toggle-note-info": "Attiva Informazioni Nota",
"toggle-note-paths": "Attiva Percorsi Note",
"toggle-similar-notes": "Attiva Note Simili",
"other": "Altro"
}
}

View File

@@ -198,7 +198,9 @@
"toggle-note-hoisting": "ノートホイスト切り替え",
"unhoist-note": "ノートホイストを無効にする",
"force-save-revision": "強制保存リビジョン",
"add-include-note-to-text": "埋め込みノートを追加"
"add-include-note-to-text": "埋め込みノートを追加",
"toggle-ribbon-tab-classic-editor": "リボンタブのクラシックエディターに切り替える",
"toggle-ribbon-tab-promoted-attributes": "リボンタブのプロモート属性を切り替える"
},
"login": {
"title": "ログイン",
@@ -337,7 +339,9 @@
"llm-chat-title": "ノートとチャット",
"options-title": "オプション",
"multi-factor-authentication-title": "多要素認証",
"etapi-title": "ETAPI"
"etapi-title": "ETAPI",
"visible-launchers-title": "可視化されたランチャー",
"inbox-title": "Inbox"
},
"notes": {
"new-note": "新しいノート",
@@ -415,5 +419,6 @@
"clipped-from": "このノートは元々{{- url}}から切り取られたものです",
"no-content": "このノートには内容がありません。"
},
"weekdayNumber": "第{weekNumber}週"
"weekdayNumber": "第{weekNumber}週",
"quarterNumber": "四半期 {quarterNumber}"
}

View File

@@ -77,7 +77,33 @@
"toggle-full-screen": "Przełącz pełny ekran",
"cut-into-note": "Wycina zaznaczony tekst i tworzy podrzędną notatkę z tym tekstem",
"edit-readonly-note": "Edytuj notatkę tylko do odczytu",
"other": "Inne"
"other": "Inne",
"toggle-basic-properties": "Przełącz podstawowe ustawienia",
"toggle-file-properties": "Przełącz ustawienia pliku",
"toggle-image-properties": "Przełącz ustawienia obrazu",
"toggle-owned-attributes": "Przełącz posiadane atrybuty",
"toggle-inherited-attributes": "Przełącz odziedziczone atrybuty",
"toggle-promoted-attributes": "Przełącz promowane atrybuty",
"render-active-note": "Wyrenderuj (ponownie) aktywną notatkę",
"find-in-text": "Włącz panel wyszukiwania",
"note-navigation": "Nawigacja notatki",
"export-as-pdf": "Wyeksportuj ta notatkę jako PDF",
"copy-without-formatting": "Skopiuj zaznaczony tekst bez formatowania",
"force-save-revision": "Wymuszanie tworzenia/zapisywania nowej wersji aktywnej notatki",
"toggle-book-properties": "Przełącz właściwości kolekcji",
"toggle-left-note-tree-panel": "Włącz panel po lewej (drzewo notatek)",
"toggle-classic-editor-toolbar": "Przełącz kartę Formatowanie dla edytora ze stałym paskiem narzędzi",
"add-include-note-to-text": "Otwiera okno dialogowe umożliwiające dodanie notatki",
"ribbon-tabs": "Karty wstążki",
"toggle-link-map": "Włącz mapę linków",
"toggle-note-info": "Włącz informacje o notatce",
"toggle-note-paths": "Włącz ścieżki notatki",
"toggle-similar-notes": "Włącz pokazywanie podobnych notatek",
"toggle-right-pane": "Przełącz wyświetlanie prawego panelu, który zawiera spis treści i najważniejsze informacje",
"run-active-note": "Uruchomienie aktywnego kodu JavaScript (frontend/backend) w notatce",
"toggle-note-hoisting": "Przełączanie podnoszenia aktywnej notatki",
"unhoist": "Odłącz ze wszystkich miejsc",
"toggle-zen-mode": "Włącz/wyłącz tryb zen (minimalny UI dla większej koncentracji)"
},
"keyboard_action_names": {
"zoom-in": "Powiększ",
@@ -99,22 +125,90 @@
"close-active-tab": "Zamknij aktywną kartę",
"reopen-last-tab": "Przywróć ostatnią kartę",
"open-new-window": "Otwórz nowe okno",
"find-in-text": "Wyszukaj w tekście"
"find-in-text": "Wyszukaj w tekście",
"quick-search": "Szybkie wyszukiwanie",
"edit-note-title": "Edytuj tytuł notatki",
"copy-notes-to-clipboard": "Skopiuj Notatki do schowka",
"paste-notes-from-clipboard": "Wklej notatki ze schowka",
"cut-notes-to-clipboard": "Wytnij notatki do schowka",
"clone-notes-to": "Sklonuj notatkę do",
"move-notes-to": "Przenieś notatkę do",
"duplicate-subtree": "Duplikuj poddrzewo",
"open-developer-tools": "Otwórz narzędzia dewelopera",
"export-active-note-as-pdf": "Wyeksportuj aktywną notatkę jako PDF",
"open-note-externally": "Otwórz notatkę zewnętrznie",
"render-active-note": "Wyrenderuj aktywną notatkę",
"run-active-note": "Uruchom aktywną notatkę",
"show-revisions": "Pokaż wersje",
"show-recent-changes": "Pokaż ostatnie zmiany",
"show-sql-console": "Pokaż konsolę SQL",
"reset-zoom-level": "Zresetuj poziom zooma",
"add-link-to-text": "Dodaj link do tekstu",
"force-save-revision": "Wymuś zapis wersji",
"create-note-after": "Stwórz notatkę po",
"create-note-into": "Stwórz notatkę w",
"create-note-into-inbox": "Stwórz notatkę w skrzynce odbiorczej",
"select-all-notes-in-parent": "Zaznacz wszystkie notatki",
"add-note-above-to-selection": "Dodaj notatkę nad w selekcji",
"add-note-below-to-selection": "Dodaj notatkę pod do selekcji",
"activate-next-tab": "Aktywuj następną kartę",
"activate-previous-tab": "Aktywuj poprzednią kartę",
"toggle-system-tray-icon": "Włącz ikonę zasobnika systemowego",
"toggle-zen-mode": "Włącz tryb Zen",
"switch-to-first-tab": "Przełącz do pierwszej karty",
"switch-to-second-tab": "Przełącz do drugiej karty",
"switch-to-third-tab": "Przełącz do trzeciej karty",
"switch-to-fourth-tab": "Przełącz do czwartej karty",
"switch-to-fifth-tab": "Przełącz do piątej karty",
"switch-to-sixth-tab": "Przełącz do szóstej karty",
"switch-to-seventh-tab": "Przełącz do siódmej karty",
"switch-to-eighth-tab": "Przełącz do ósmej karty",
"switch-to-ninth-tab": "Przełącz do dziewiątej karty",
"switch-to-last-tab": "Przełącz do ostatniej karty",
"show-note-source": "Pokaż źródło notatki",
"show-options": "Pokaż opcje",
"show-backend-log": "Pokaż dziennik logów",
"show-help": "Pokaż pomoc",
"show-cheatsheet": "Pokaż Cheatsheet",
"back-in-note-history": "Powrót do historii notatek",
"forward-in-note-history": "Przewiń historię notatek",
"command-palette": "Paleta komend",
"edit-branch-prefix": "Edytuj prefiks gałęzi",
"paste-markdown-into-text": "Wklej Markdown do tekstu",
"cut-into-note": "Wytnij do notatki",
"edit-read-only-note": "Edytuj notatkę tylko do odczytu",
"add-new-label": "Dodaj nową etykietę",
"add-new-relation": "Dodaj nowe powiązanie",
"print-active-note": "Wydrukuj aktywną notatkę",
"toggle-left-pane": "Włącz lewy panel",
"toggle-full-screen": "Włącz pełny ekran"
},
"login": {
"password": "Hasło",
"remember-me": "Zapamiętaj mnie"
"remember-me": "Zapamiętaj mnie",
"title": "Zaloguj",
"heading": "Logowanie do Trilium",
"incorrect-totp": "TOTP jest nieprawidłowe. Spróbuj ponownie.",
"incorrect-password": "Hasło jest nieprawidłowe. Spróbuj ponownie.",
"button": "Login",
"sign_in_with_sso": "Zaloguj się za pomocą {{ ssoIssuerName }}"
},
"javascript-required": "Trillium wymaga włączenia JavaScript.",
"setup_sync-from-server": {
"server-host": "Adres serwera Trillium",
"proxy-server": "Serwer proxy (opcjonalnie)",
"back": "Wstecz",
"finish-setup": "Zakończ konfiguracje"
"finish-setup": "Zakończ konfiguracje",
"heading": "Sychnronizuj z serwera",
"note": "Notatka:",
"server-host-placeholder": "https://<hostname>:<port>",
"password": "Hasło",
"password-placeholder": "Hasło"
},
"setup_sync-in-progress": {
"heading": "Synchronizacja w toku",
"outstanding-items": "Pozostało do zsynchronizowania:"
"outstanding-items": "Pozostało do zsynchronizowania:",
"outstanding-items-default": "N/A"
},
"weekdays": {
"monday": "Poniedziałek",
@@ -163,5 +257,72 @@
},
"notes": {
"new-note": "Nowa notatka"
},
"set_password": {
"title": "Ustaw hasło",
"heading": "Ustaw hasło",
"description": "Aby zacząć korzystać z Trilium online, musisz ustawić najpierw hasło. Hasło zostanie użyte do logowania.",
"password": "Hasło",
"password-confirmation": "Potwierdź hasło",
"button": "Ustaw nowe hasło"
},
"setup": {
"heading": "Instalacja Trilium Notes",
"new-document": "Jestem nowym użytkownikiem i chce stworzyć nowy dokument Trilium dla moich notatek",
"sync-from-desktop": "Mam już wersję desktopową i chcę ustawić synchronizację",
"sync-from-server": "Mam już serwer i chcę skonfigurować z nią synchronizację",
"next": "Następny",
"init-in-progress": "Trwa inicjalizacja dokumentu",
"redirecting": "Zostaniesz przeniesiony do aplikacji.",
"title": "Instalacja"
},
"setup_sync-from-desktop": {
"heading": "Synchronizuj z wersją desktopową",
"description": "Ta instalacja musi być wykonana na wersji desktopowej:",
"step1": "Otwórz aplikację Trilium Notes.",
"step2": "Z menu Trilium wybierz Opcje.",
"step3": "Kliknij na kategorię Synchronizuj.",
"step4": "Zmień adres wersji do: {{- host}} i kliknij zapisz.",
"step5": "Kliknij \"Testuj Synchronizację\" aby zweryfikować połączenie.",
"step6": "Kiedy wykonasz te kroki, kliknij {{- link}}.",
"step6-here": "tutaj"
},
"share_page": {
"no-content": "Ta notatka nie ma treści."
},
"share_404": {
"title": "Nie znaleziono",
"heading": "Nie znaleziono"
},
"share_theme": {
"image_alt": "Zdjęcie artykułu",
"last-updated": "Ostatnia aktualizacja: {{- date}}",
"subpages": "Podstrony:",
"on-this-page": "Na tej stronie"
},
"hidden_subtree_templates": {
"table": "Tabela",
"geo-map": "Geo Mapa",
"start-date": "Początek daty",
"end-date": "Koniec daty",
"start-time": "Czas od",
"end-time": "Czas do",
"geolocation": "Geolokalizacja",
"built-in-templates": "Wbudowane szablony",
"board": "Tablica",
"status": "Status",
"board_note_first": "Pierwsza notatka",
"board_note_second": "Druga notatka",
"board_note_third": "Trzecia notatka",
"board_status_todo": "Do zrobienia",
"board_status_progress": "W trakcie",
"board_status_done": "Zrobione"
},
"sql_init": {
"db_not_initialized_desktop": "Baza danych nie została zainicjowana, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.",
"db_not_initialized_server": "Baza danych nie została zainicjowana, odwiedź stronę instalacji http://[your-server-host]:{{port}} aby zobaczyć jak uruchomić Trilium."
},
"desktop": {
"instance_already_running": "Istnieje już uruchomiona instancja, skup się na niej."
}
}

View File

@@ -424,5 +424,12 @@
"board_status_todo": "A fazer",
"board_status_progress": "Em andamento",
"board_status_done": "Concluído"
},
"sql_init": {
"db_not_initialized_desktop": "BD não inicializada, siga as instruções no ecrã.",
"db_not_initialized_server": "BD não inicializada, visite a página de configuração - http://[anfitrião-do-servidor]:{{port}} para ver instruções sobre como inicializar o Trilium."
},
"desktop": {
"instance_already_running": "Já há uma instância em execução, a focar essa instância."
}
}

View File

@@ -424,5 +424,12 @@
"board_status_todo": "A fazer",
"board_status_progress": "Em andamento",
"board_status_done": "Concluído"
},
"sql_init": {
"db_not_initialized_desktop": "DB não inicializada, por favor siga as instruções na tela.",
"db_not_initialized_server": "DB não inicializada, por favor visite a página de configuração - http://[your-server-host]:{{port}} para ver instruções de como inicializar o Trillium."
},
"desktop": {
"instance_already_running": "Já existe uma instância sendo executada, em vez disso focando nesta."
}
}

View File

@@ -428,5 +428,8 @@
"sql_init": {
"db_not_initialized_desktop": "База данных не инициализирована, следуйте инструкциям на экране.",
"db_not_initialized_server": "База данных не инициализирована, пожалуйста, посетите страницу настройки - http://[your-server-host]:{{port}}, чтобы увидеть инструкции по инициализации Trilium."
},
"desktop": {
"instance_already_running": "Приложение уже запущено, фокус переключен на него."
}
}

View File

@@ -428,5 +428,8 @@
"sql_init": {
"db_not_initialized_desktop": "DB не ініціалізовано, будь ласка, дотримуйтесь інструкцій на екрані.",
"db_not_initialized_server": "DB не ініціалізовано, будь ласка, відвідайте сторінку налаштування - http://[your-server-host]:{{port}} , щоб переглянути інструкції щодо ініціалізації Trilium."
},
"desktop": {
"instance_already_running": "Екземпляр вже запущено, фокусування буде на ньому."
}
}

View File

@@ -91,6 +91,7 @@ const ALLOWED_OPTIONS = new Set<OptionNames>([
"textNoteEditorMultilineToolbar",
"textNoteEmojiCompletionEnabled",
"textNoteCompletionEnabled",
"textNoteSlashCommandsEnabled",
"layoutOrientation",
"backgroundEffects",
"allowedHtmlTags",

View File

@@ -43,7 +43,7 @@ function index(req: Request, res: Response) {
platform: process.platform,
isElectron,
hasNativeTitleBar: isElectron && nativeTitleBarVisible,
hasBackgroundEffects: isElectron && isWindows11 && !nativeTitleBarVisible,
hasBackgroundEffects: isElectron && isWindows11 && !nativeTitleBarVisible && options.backgroundEffects === "true",
mainFontSize: parseInt(options.mainFontSize),
treeFontSize: parseInt(options.treeFontSize),
detailFontSize: parseInt(options.detailFontSize),

View File

@@ -120,7 +120,7 @@ const defaultOptions: DefaultOption[] = [
{ name: "compressImages", value: "true", isSynced: true },
{ name: "downloadImagesAutomatically", value: "true", isSynced: true },
{ name: "minTocHeadings", value: "5", isSynced: true },
{ name: "highlightsList", value: '["bold","italic","underline","color","bgColor"]', isSynced: true },
{ name: "highlightsList", value: '["underline","color","bgColor"]', isSynced: true },
{ name: "checkForUpdates", value: "true", isSynced: true },
{ name: "disableTray", value: "false", isSynced: false },
{ name: "eraseUnusedAttachmentsAfterSeconds", value: "2592000", isSynced: true }, // default 30 days
@@ -184,6 +184,7 @@ const defaultOptions: DefaultOption[] = [
{ name: "textNoteEditorMultilineToolbar", value: "false", isSynced: true },
{ name: "textNoteEmojiCompletionEnabled", value: "true", isSynced: true },
{ name: "textNoteCompletionEnabled", value: "true", isSynced: true },
{ name: "textNoteSlashCommandsEnabled", value: "true", isSynced: true },
// HTML import configuration
{ name: "layoutOrientation", value: "vertical", isSynced: false },