Compare commits

...

27 Commits

Author SHA1 Message Date
contributor
2131153924
Merge d51a0d415bb552ff7dc35547e06dbe83d9df4b8a into 732494dfc51286926d86d49a73d3915a4aa22ef9 2025-11-30 02:55:04 +02:00
Adorian Doran
732494dfc5 client/keyboard shortcuts cheatsheet: add an edit button
Some checks are pending
Checks / main (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Dev / Test development (push) Waiting to run
Dev / Build Docker image (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile) (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile.alpine) (push) Blocked by required conditions
/ Check Docker build (Dockerfile) (push) Waiting to run
/ Check Docker build (Dockerfile.alpine) (push) Waiting to run
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Blocked by required conditions
/ Merge manifest lists (push) Blocked by required conditions
playwright / E2E tests on linux-arm64 (push) Waiting to run
playwright / E2E tests on linux-x64 (push) Waiting to run
Deploy website / Build & deploy website (push) Waiting to run
2025-11-30 02:54:51 +02:00
Adorian Doran
b8748b856a client/note menu: use proper style for development-only actions section header 2025-11-30 02:34:09 +02:00
Adorian Doran
cc71f15700 client/quick edit: remove fixed toolbar transparency 2025-11-30 02:17:43 +02:00
Adorian Doran
124ef640b1 client/quick edit: tweak layout 2025-11-30 02:04:40 +02:00
Adorian Doran
f5e3df0cd2 client/quick edit: add placeholder for "open in full editor" custom title bar button 2025-11-30 01:54:28 +02:00
Adorian Doran
c8431181c8 client/dialogs/custom title bar buttons: tweak 2025-11-30 01:52:55 +02:00
Adorian Doran
07fb5ab017 client/dialogs: add support for custom title bar buttons 2025-11-30 01:44:20 +02:00
Adorian Doran
6735b257b4 style/promoted color attributes: fix the layout on narrow width 2025-11-30 01:09:07 +02:00
Adorian Doran
cef242a9ce style/button group: fix the appearance of the active button 2025-11-30 00:55:34 +02:00
Elian Doran
2923d917e5
Translations update from Hosted Weblate (#7891) 2025-11-29 22:58:03 +02:00
Hosted Weblate
9a76a9069c
Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/
2025-11-29 20:01:42 +01:00
pythaac
8e1d796870
Translated using Weblate (Korean)
Currently translated at 44.7% (68 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/
2025-11-29 20:01:38 +01:00
Andreas H.
8b0d4e5c3b
Translated using Weblate (German)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/
2025-11-29 20:01:37 +01:00
contributor
d51a0d415b fix auto generated data-list-item-id attributes in docs 2025-11-26 10:25:51 +02:00
contributor
a79c8b4add add autoExecuteSearch user guide docs 2025-11-26 10:25:51 +02:00
contributor
b359b48ec3 add attribute autoExecuteSearch help string 2025-11-26 10:25:51 +02:00
contributor
a0e1cc4154 add autoExecuteSearch label typing 2025-11-26 10:21:10 +02:00
contributor
625c0ed7dc do not activate collections tab for empty search result 2025-11-26 00:45:47 +02:00
contributor
1ac241ad1b tidy up code 2025-11-26 00:45:47 +02:00
contributor
2c447a4293 use module level var instead of sessionStorage 2025-11-26 00:45:47 +02:00
contributor
6c1886c5ca do not activate collections tab for mobile 2025-11-26 00:45:47 +02:00
contributor
9c86145ff8 use session storage for state
f2
2025-11-26 00:45:46 +02:00
contributor
6dcc3a7e81 only exec for search note type 2025-11-26 00:45:46 +02:00
contributor
921b56a89e use search results for state 2025-11-26 00:45:46 +02:00
contributor
9d0b532aeb fixing first tab cannot be open 2025-11-26 00:45:46 +02:00
contributor
cc468d964f add ability to auto execute search note 2025-11-26 00:45:46 +02:00
25 changed files with 107 additions and 26 deletions

View File

@ -592,11 +592,6 @@ button.btn-sm {
color: var(--left-pane-text-color); color: var(--left-pane-text-color);
} }
.btn.active:not(.btn-primary) {
background-color: var(--button-disabled-background-color) !important;
opacity: 0.4;
}
.ck.ck-block-toolbar-button { .ck.ck-block-toolbar-button {
transform: translateX(7px); transform: translateX(7px);
color: var(--muted-text-color); color: var(--muted-text-color);

View File

@ -41,6 +41,9 @@
--cmd-button-keyboard-shortcut-color: white; --cmd-button-keyboard-shortcut-color: white;
--cmd-button-disabled-opacity: 0.5; --cmd-button-disabled-opacity: 0.5;
--button-group-active-button-background: #ffffff4e;
--button-group-active-button-text-color: white;
--icon-button-color: currentColor; --icon-button-color: currentColor;
--icon-button-hover-background: var(--hover-item-background-color); --icon-button-hover-background: var(--hover-item-background-color);
--icon-button-hover-color: var(--hover-item-text-color); --icon-button-hover-color: var(--hover-item-text-color);

View File

@ -41,6 +41,9 @@
--cmd-button-keyboard-shortcut-color: black; --cmd-button-keyboard-shortcut-color: black;
--cmd-button-disabled-opacity: 0.5; --cmd-button-disabled-opacity: 0.5;
--button-group-active-button-background: #00000026;
--button-group-active-button-text-color: black;
--icon-button-color: currentColor; --icon-button-color: currentColor;
--icon-button-hover-background: var(--hover-item-background-color); --icon-button-hover-background: var(--hover-item-background-color);
--icon-button-hover-color: var(--hover-item-text-color); --icon-button-hover-color: var(--hover-item-text-color);

View File

@ -25,6 +25,7 @@
.modal .modal-header .btn-close, .modal .modal-header .btn-close,
.modal .modal-header .help-button, .modal .modal-header .help-button,
.modal .modal-header .custom-title-bar-button,
#toast-container .toast .toast-header .btn-close { #toast-container .toast .toast-header .btn-close {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -55,15 +56,17 @@
font-family: boxicons; font-family: boxicons;
} }
.modal .modal-header .help-button { .modal .modal-header .help-button,
.modal .modal-header .custom-title-bar-button {
margin-inline-end: 0; margin-inline-end: 0;
font-size: calc(var(--modal-control-button-size) * .75); font-size: calc(var(--modal-control-button-size) * .70);
font-family: unset; font-family: unset;
font-weight: bold; font-weight: bold;
} }
.modal .modal-header .btn-close:hover, .modal .modal-header .btn-close:hover,
.modal .modal-header .help-button:hover, .modal .modal-header .help-button:hover,
.modal .modal-header .custom-title-bar-button:hover,
#toast-container .toast .toast-header .btn-close:hover { #toast-container .toast .toast-header .btn-close:hover {
background: var(--modal-control-button-hover-background); background: var(--modal-control-button-hover-background);
color: var(--modal-control-button-hover-color); color: var(--modal-control-button-hover-color);
@ -71,6 +74,7 @@
.modal .modal-header .btn-close:active, .modal .modal-header .btn-close:active,
.modal .modal-header .help-button:active, .modal .modal-header .help-button:active,
.modal .modal-header .custom-title-bar-button:active,
#toast-container .toast .toast-header .btn-close:active { #toast-container .toast .toast-header .btn-close:active {
transform: scale(.85); transform: scale(.85);
} }

View File

@ -146,6 +146,14 @@ button.btn.btn-success kbd {
outline: 2px solid var(--input-focus-outline-color); outline: 2px solid var(--input-focus-outline-color);
} }
/* Button groups */
/* Active button */
:root .btn-group button.btn.active {
background-color: var(--button-group-active-button-background);
color: var(--button-group-active-button-text-color);
}
/* /*
* Input boxes * Input boxes
*/ */

View File

@ -1448,6 +1448,14 @@ div.promoted-attribute-cell .multiplicity:has(span) span {
justify-content: center; justify-content: center;
} }
div.promoted-attribute-cell.promoted-attribute-label-color {
justify-content: space-between;
}
div.promoted-attribute-cell.promoted-attribute-label-color .input-group {
width: auto;
}
/* /*
* Floating buttons * Floating buttons
*/ */

View File

@ -2098,7 +2098,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "当前正在查看一个只读笔记。", "read-only-note": "当前正在查看一个只读笔记。",
"auto-read-only-note": "这条笔记以只读模式显示便于快速加载。", "auto-read-only-note": "这条笔记以只读模式显示便于快速加载。",
"auto-read-only-learn-more": "了解更多",
"edit-note": "编辑笔记" "edit-note": "编辑笔记"
}, },
"note-color": { "note-color": {

View File

@ -2097,7 +2097,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "Aktuelle Notiz wird im Lese-Modus angezeigt.", "read-only-note": "Aktuelle Notiz wird im Lese-Modus angezeigt.",
"auto-read-only-note": "Diese Notiz wird im Nur-Lesen-Modus angezeigt, um ein schnelleres Laden zu ermöglichen.", "auto-read-only-note": "Diese Notiz wird im Nur-Lesen-Modus angezeigt, um ein schnelleres Laden zu ermöglichen.",
"auto-read-only-learn-more": "Mehr erfahren",
"edit-note": "Notiz bearbeiten" "edit-note": "Notiz bearbeiten"
}, },
"calendar_view": { "calendar_view": {

View File

@ -112,6 +112,7 @@
}, },
"help": { "help": {
"title": "Cheatsheet", "title": "Cheatsheet",
"editShortcuts": "Edit keyboard shortcuts",
"noteNavigation": "Note navigation", "noteNavigation": "Note navigation",
"goUpDown": "go up/down in the list of notes", "goUpDown": "go up/down in the list of notes",
"collapseExpand": "collapse/expand node", "collapseExpand": "collapse/expand node",
@ -385,6 +386,7 @@
"workspace_template": "This note will appear in the selection of available template when creating new note, but only when hoisted into a workspace containing this template", "workspace_template": "This note will appear in the selection of available template when creating new note, but only when hoisted into a workspace containing this template",
"search_home": "new search notes will be created as children of this note", "search_home": "new search notes will be created as children of this note",
"workspace_search_home": "new search notes will be created as children of this note when hoisted to some ancestor of this workspace note", "workspace_search_home": "new search notes will be created as children of this note when hoisted to some ancestor of this workspace note",
"auto_execute_search": "Automatically executes the search defined in a saved search note and switches to the Collection Properties tab if any notes match the query",
"inbox": "default inbox location for new notes - when you create a note using \"new note\" button in the sidebar, notes will be created as child notes in the note marked as with <code>#inbox</code> label.", "inbox": "default inbox location for new notes - when you create a note using \"new note\" button in the sidebar, notes will be created as child notes in the note marked as with <code>#inbox</code> label.",
"workspace_inbox": "default inbox location for new notes when hoisted to some ancestor of this workspace note", "workspace_inbox": "default inbox location for new notes when hoisted to some ancestor of this workspace note",
"sql_console_home": "default location of SQL console notes", "sql_console_home": "default location of SQL console notes",

View File

@ -2096,7 +2096,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "Actualmente, está viendo una nota de solo lectura.", "read-only-note": "Actualmente, está viendo una nota de solo lectura.",
"auto-read-only-note": "Esta nota se muestra en modo de solo lectura para una carga más rápida.", "auto-read-only-note": "Esta nota se muestra en modo de solo lectura para una carga más rápida.",
"auto-read-only-learn-more": "Para saber más",
"edit-note": "Editar nota" "edit-note": "Editar nota"
}, },
"calendar_view": { "calendar_view": {

View File

@ -2092,7 +2092,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "Stai visualizzando una nota di sola lettura.", "read-only-note": "Stai visualizzando una nota di sola lettura.",
"auto-read-only-note": "Questa nota viene visualizzata in modalità di sola lettura per un caricamento più rapido.", "auto-read-only-note": "Questa nota viene visualizzata in modalità di sola lettura per un caricamento più rapido.",
"auto-read-only-learn-more": "Per saperne di più",
"edit-note": "Modifica nota" "edit-note": "Modifica nota"
}, },
"calendar_view": { "calendar_view": {

View File

@ -2098,7 +2098,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "現在、読み取り専用のノートを表示しています。", "read-only-note": "現在、読み取り専用のノートを表示しています。",
"auto-read-only-note": "このノートは読み込みを高速化するために読み取り専用モードで表示されています。", "auto-read-only-note": "このノートは読み込みを高速化するために読み取り専用モードで表示されています。",
"auto-read-only-learn-more": "さらに詳しく",
"edit-note": "ノートを編集" "edit-note": "ノートを編集"
}, },
"note-color": { "note-color": {

View File

@ -2097,7 +2097,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "Vizualizați o notiță în modul doar în citire.", "read-only-note": "Vizualizați o notiță în modul doar în citire.",
"auto-read-only-note": "Această notiță este afișată în modul doar în citire din motive de performanță.", "auto-read-only-note": "Această notiță este afișată în modul doar în citire din motive de performanță.",
"auto-read-only-learn-more": "Mai multe detalii",
"edit-note": "Editează notița" "edit-note": "Editează notița"
}, },
"calendar_view": { "calendar_view": {

View File

@ -2098,7 +2098,6 @@
"read-only-info": { "read-only-info": {
"read-only-note": "目前正在檢視唯讀筆記。", "read-only-note": "目前正在檢視唯讀筆記。",
"auto-read-only-note": "此筆記以唯讀模式顯示以加快載入速度。", "auto-read-only-note": "此筆記以唯讀模式顯示以加快載入速度。",
"auto-read-only-learn-more": "了解更多",
"edit-note": "編輯筆記" "edit-note": "編輯筆記"
}, },
"note-color": { "note-color": {

View File

@ -236,6 +236,7 @@ const ATTR_HELP: Record<string, Record<string, string>> = {
workspaceTemplate: t("attribute_detail.workspace_template"), workspaceTemplate: t("attribute_detail.workspace_template"),
searchHome: t("attribute_detail.search_home"), searchHome: t("attribute_detail.search_home"),
workspaceSearchHome: t("attribute_detail.workspace_search_home"), workspaceSearchHome: t("attribute_detail.workspace_search_home"),
autoExecuteSearch: t("attribute_detail.auto_execute_search"),
inbox: t("attribute_detail.inbox"), inbox: t("attribute_detail.inbox"),
workspaceInbox: t("attribute_detail.workspace_inbox"), workspaceInbox: t("attribute_detail.workspace_inbox"),
sqlConsoleHome: t("attribute_detail.sql_console_home"), sqlConsoleHome: t("attribute_detail.sql_console_home"),

View File

@ -33,8 +33,8 @@ body.mobile .modal.popup-editor-dialog .modal-dialog {
align-items: center; align-items: center;
} }
.modal.popup-editor-dialog .modal-header .title-row > * { .modal.popup-editor-dialog .modal-header .note-title-widget {
margin: 5px; margin-top: 8px;
} }
.modal.popup-editor-dialog .modal-body { .modal.popup-editor-dialog .modal-body {
@ -66,12 +66,17 @@ body.mobile .modal.popup-editor-dialog .modal-dialog {
background-color: transparent; background-color: transparent;
} }
.modal.popup-editor-dialog div.promoted-attributes-container {
margin-block: 0;
}
.modal.popup-editor-dialog .classic-toolbar-widget { .modal.popup-editor-dialog .classic-toolbar-widget {
position: sticky; position: sticky;
margin-inline: 8px;
top: 0; top: 0;
inset-inline-start: 0; inset-inline-start: 0;
inset-inline-end: 0; inset-inline-end: 0;
background: transparent; background: var(--modal-background-color);
z-index: 998; z-index: 998;
align-items: flex-start; align-items: flex-start;
} }

View File

@ -60,6 +60,11 @@ export default function PopupEditor() {
<DialogWrapper> <DialogWrapper>
<Modal <Modal
title={<TitleRow />} title={<TitleRow />}
customTitleBarButtons={[{
iconClassName: "bx-expand-alt",
title: "Switch to full editor",
onClick: () => {/* TO DO */}
}]}
className="popup-editor-dialog" className="popup-editor-dialog"
size="lg" size="lg"
show={shown} show={shown}

View File

@ -1,7 +1,7 @@
import Modal from "../react/Modal.jsx"; import Modal from "../react/Modal.jsx";
import { t } from "../../services/i18n.js"; import { t } from "../../services/i18n.js";
import { ComponentChildren } from "preact"; import { ComponentChildren } from "preact";
import { CommandNames } from "../../components/app_context.js"; import appContext, { CommandNames } from "../../components/app_context.js";
import RawHtml from "../react/RawHtml.jsx"; import RawHtml from "../react/RawHtml.jsx";
import { useEffect, useState } from "preact/hooks"; import { useEffect, useState } from "preact/hooks";
import keyboard_actions from "../../services/keyboard_actions.js"; import keyboard_actions from "../../services/keyboard_actions.js";
@ -14,6 +14,7 @@ export default function HelpDialog() {
return ( return (
<Modal <Modal
title={t("help.title")} className="help-dialog use-tn-links" minWidth="90%" size="lg" scrollable title={t("help.title")} className="help-dialog use-tn-links" minWidth="90%" size="lg" scrollable
customTitleBarButtons={[{title: t("help.editShortcuts"), iconClassName: "bxs-pencil", onClick: editShortcuts}]}
onHidden={() => setShown(false)} onHidden={() => setShown(false)}
show={shown} show={shown}
> >
@ -160,3 +161,7 @@ function Card({ title, children }: { title: string, children: ComponentChildren
</div> </div>
) )
} }
function editShortcuts() {
appContext.tabManager.openContextWithNote("_optionsShortcuts", { activate: true });
}

View File

@ -1,3 +1,4 @@
import clsx from "clsx";
import { useEffect, useRef, useMemo } from "preact/hooks"; import { useEffect, useRef, useMemo } from "preact/hooks";
import { t } from "../../services/i18n"; import { t } from "../../services/i18n";
import { ComponentChildren } from "preact"; import { ComponentChildren } from "preact";
@ -7,9 +8,16 @@ import { Modal as BootstrapModal } from "bootstrap";
import { memo } from "preact/compat"; import { memo } from "preact/compat";
import { useSyncedRef } from "./hooks"; import { useSyncedRef } from "./hooks";
interface CustomTitleBarButton {
title: string;
iconClassName: string;
onClick: () => void;
}
interface ModalProps { interface ModalProps {
className: string; className: string;
title: string | ComponentChildren; title: string | ComponentChildren;
customTitleBarButtons?: (CustomTitleBarButton | null)[];
size: "xl" | "lg" | "md" | "sm"; size: "xl" | "lg" | "md" | "sm";
children: ComponentChildren; children: ComponentChildren;
/** /**
@ -72,7 +80,7 @@ interface ModalProps {
noFocus?: boolean; noFocus?: boolean;
} }
export default function Modal({ children, className, size, title, header, footer, footerStyle, footerAlignment, onShown, onSubmit, helpPageId, minWidth, maxWidth, zIndex, scrollable, onHidden: onHidden, modalRef: externalModalRef, formRef, bodyStyle, show, stackable, keepInDom, noFocus }: ModalProps) { export default function Modal({ children, className, size, title, customTitleBarButtons: titleBarButtons, header, footer, footerStyle, footerAlignment, onShown, onSubmit, helpPageId, minWidth, maxWidth, zIndex, scrollable, onHidden: onHidden, modalRef: externalModalRef, formRef, bodyStyle, show, stackable, keepInDom, noFocus }: ModalProps) {
const modalRef = useSyncedRef<HTMLDivElement>(externalModalRef); const modalRef = useSyncedRef<HTMLDivElement>(externalModalRef);
const modalInstanceRef = useRef<BootstrapModal>(); const modalInstanceRef = useRef<BootstrapModal>();
const elementToFocus = useRef<Element | null>(); const elementToFocus = useRef<Element | null>();
@ -148,7 +156,17 @@ export default function Modal({ children, className, size, title, header, footer
{helpPageId && ( {helpPageId && (
<button className="help-button" type="button" data-in-app-help={helpPageId} title={t("modal.help_title")}>?</button> <button className="help-button" type="button" data-in-app-help={helpPageId} title={t("modal.help_title")}>?</button>
)} )}
{titleBarButtons?.filter((b) => b !== null).map((titleBarButton) => (
<button type="button"
className={clsx("custom-title-bar-button bx", titleBarButton.iconClassName)}
title={titleBarButton.title}
onClick={titleBarButton.onClick}>
</button>
))}
<button type="button" className="btn-close" data-bs-dismiss="modal" aria-label={t("modal.close")}></button> <button type="button" className="btn-close" data-bs-dismiss="modal" aria-label={t("modal.close")}></button>
</div> </div>
{onSubmit ? ( {onSubmit ? (

View File

@ -1,5 +1,5 @@
import { ConvertToAttachmentResponse } from "@triliumnext/commons"; import { ConvertToAttachmentResponse } from "@triliumnext/commons";
import { FormDropdownDivider, FormListItem } from "../react/FormList"; import { FormDropdownDivider, FormListHeader, FormListItem } from "../react/FormList";
import { isElectron as getIsElectron, isMac as getIsMac } from "../../services/utils"; import { isElectron as getIsElectron, isMac as getIsMac } from "../../services/utils";
import { ParentComponent } from "../react/react_utils"; import { ParentComponent } from "../react/react_utils";
import { t } from "../../services/i18n" import { t } from "../../services/i18n"
@ -113,8 +113,7 @@ function NoteContextMenu({ note, noteContext }: { note: FNote, noteContext?: Not
function DevelopmentActions({ note }: { note: FNote }) { function DevelopmentActions({ note }: { note: FNote }) {
return ( return (
<> <>
<FormDropdownDivider /> <FormListHeader text="Development-only Actions" />
<FormListItem disabled>Development-only Actions</FormListItem>
<FormListItem <FormListItem
icon="bx bx-printer" icon="bx bx-printer"
onClick={() => window.open(`/?print=#root/${note.noteId}`, "_blank")} onClick={() => window.open(`/?print=#root/${note.noteId}`, "_blank")}

View File

@ -22,7 +22,7 @@ import RenameNoteBulkAction from "../bulk_actions/note/rename_note";
import { getErrorMessage } from "../../services/utils"; import { getErrorMessage } from "../../services/utils";
import "./SearchDefinitionTab.css"; import "./SearchDefinitionTab.css";
export default function SearchDefinitionTab({ note, ntxId, hidden }: TabContext) { export default function SearchDefinitionTab({ note, ntxId, hidden, noteContext }: TabContext) {
const parentComponent = useContext(ParentComponent); const parentComponent = useContext(ParentComponent);
const [ searchOptions, setSearchOptions ] = useState<{ availableOptions: SearchOption[], activeOptions: SearchOption[] }>(); const [ searchOptions, setSearchOptions ] = useState<{ availableOptions: SearchOption[], activeOptions: SearchOption[] }>();
const [ error, setError ] = useState<{ message: string }>(); const [ error, setError ] = useState<{ message: string }>();
@ -73,6 +73,27 @@ export default function SearchDefinitionTab({ note, ntxId, hidden }: TabContext)
} }
}); });
useEffect(() => {
async function autoExecute() {
if (!note || note.type !== "search" || !note.hasLabel("autoExecuteSearch")) {
executionState.save("");
return;
}
const lastExecutedNoteId = executionState.load();
if (lastExecutedNoteId !== note.noteId) {
executionState.save(note.noteId);
await refreshResults();
if (noteContext?.viewScope?.viewMode === "default" && note.children.length > 0) {
parentComponent?.triggerCommand("toggleRibbonTabBookProperties", {});
}
}
}
autoExecute();
}, [note]);
return ( return (
<div className="search-definition-widget"> <div className="search-definition-widget">
<div className="search-settings"> <div className="search-settings">
@ -160,6 +181,14 @@ export default function SearchDefinitionTab({ note, ntxId, hidden }: TabContext)
) )
} }
const executionState = function() {
let lastAutoExecutedSearchNoteId = "";
return {
load: () => lastAutoExecutedSearchNoteId,
save: (noteId: string) => lastAutoExecutedSearchNoteId = noteId,
};
}();
function BulkActionsList({ note }: { note: FNote }) { function BulkActionsList({ note }: { note: FNote }) {
const [ bulkActions, setBulkActions ] = useState<RenameNoteBulkAction[]>(); const [ bulkActions, setBulkActions ] = useState<RenameNoteBulkAction[]>();

View File

@ -21,7 +21,7 @@
"note_structure_description": "Notizen lassen sich hierarchisch anordnen. Ordner sind nicht nötig, da jede Notiz Unternotizen enthalten kann. Eine einzelne Notiz kann an mehreren Stellen in der Hierarchie hinzugefügt werden.", "note_structure_description": "Notizen lassen sich hierarchisch anordnen. Ordner sind nicht nötig, da jede Notiz Unternotizen enthalten kann. Eine einzelne Notiz kann an mehreren Stellen in der Hierarchie hinzugefügt werden.",
"hoisting_description": "Trennen Sie Ihre persönlichen und beruflichen Notizen ganz einfach, indem Sie sie in einem Arbeitsbereich gruppieren. Dadurch wird Ihre Notizstruktur so fokussiert, dass nur ein bestimmter Satz von Notizen angezeigt wird.", "hoisting_description": "Trennen Sie Ihre persönlichen und beruflichen Notizen ganz einfach, indem Sie sie in einem Arbeitsbereich gruppieren. Dadurch wird Ihre Notizstruktur so fokussiert, dass nur ein bestimmter Satz von Notizen angezeigt wird.",
"hoisting_title": "Arbeitsbereiche und Fokusansicht", "hoisting_title": "Arbeitsbereiche und Fokusansicht",
"attributes_description": "Nutzen Sie Verbindungen zwischen Notizen oder fügen Sie Labels hinzu, um die Kategorisierung zu erleichtern. Mit hervorgehobenen („promoted“) Attributen können Sie strukturierte Informationen erfassen, die sich direkt in Tabellen und Boards verwenden lassen." "attributes_description": "Verwenden Sie Beziehungen zwischen Notizen oder fügen Sie Beschriftungen hinzu, um die Kategorisierung zu vereinfachen. Verwenden Sie hervorgehobene Attribute, um strukturierte Informationen einzugeben, die in Tabellen und Boards verwendet werden können."
}, },
"productivity_benefits": { "productivity_benefits": {
"revisions_title": "Notizrevisionen", "revisions_title": "Notizrevisionen",

View File

@ -87,6 +87,8 @@
"description_arm64": "ARM 기반 리눅스 배포판에서 aarch64 아키텍처와 호환됩니다." "description_arm64": "ARM 기반 리눅스 배포판에서 aarch64 아키텍처와 호환됩니다."
}, },
"note_types": { "note_types": {
"text_title": "텍스트 노트" "text_title": "텍스트 노트",
"text_description": "노트는 WYSIWYG 편집기를 사용하며 표, 이미지, 수학 표현식, 구문 강조 기능의 코드 블록을 지원합니다. 특수문자를 사용한 마크다운 유사 구문이나 슬래시(/) 명령으로 텍스트 서식을 빠르게 지정할 수 있습니다.",
"code_title": "코드 노트"
} }
} }

File diff suppressed because one or more lines are too long

View File

@ -23,6 +23,7 @@ type Labels = {
ancestorDepth: string; ancestorDepth: string;
orderBy: string; orderBy: string;
orderDirection: string; orderDirection: string;
autoExecuteSearch: boolean;
// Collection-specific // Collection-specific
viewType: string; viewType: string;