mirror of
https://github.com/zadam/trilium.git
synced 2025-10-30 18:05:55 +01:00
Compare commits
1 Commits
kev/share-
...
feat/websi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff06376a30 |
@@ -1492,7 +1492,7 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: none;
|
border: none;
|
||||||
color: var(--launcher-pane-text-color);
|
color: var(--launcher-pane-text-color);
|
||||||
background-color: transparent;
|
background: transparent;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,14 +63,6 @@ export default function Card({
|
|||||||
setBranchIdToEdit?.(branch.branchId);
|
setBranchIdToEdit?.(branch.branchId);
|
||||||
}, [ setBranchIdToEdit, branch ]);
|
}, [ setBranchIdToEdit, branch ]);
|
||||||
|
|
||||||
const handleKeyDown = useCallback((e: KeyboardEvent) => {
|
|
||||||
if (e.key === "Enter") {
|
|
||||||
api.openNote(note.noteId);
|
|
||||||
} else if (e.key === "F2") {
|
|
||||||
setBranchIdToEdit?.(branch.branchId);
|
|
||||||
}
|
|
||||||
}, [ setBranchIdToEdit, note ]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
editorRef.current?.focus();
|
editorRef.current?.focus();
|
||||||
}, [ isEditing ]);
|
}, [ isEditing ]);
|
||||||
@@ -91,11 +83,9 @@ export default function Card({
|
|||||||
onDragEnd={handleDragEnd}
|
onDragEnd={handleDragEnd}
|
||||||
onContextMenu={handleContextMenu}
|
onContextMenu={handleContextMenu}
|
||||||
onClick={!isEditing ? handleOpen : undefined}
|
onClick={!isEditing ? handleOpen : undefined}
|
||||||
onKeyDown={handleKeyDown}
|
|
||||||
style={{
|
style={{
|
||||||
display: !isVisible ? "none" : undefined
|
display: !isVisible ? "none" : undefined
|
||||||
}}
|
}}
|
||||||
tabIndex={300}
|
|
||||||
>
|
>
|
||||||
{!isEditing ? (
|
{!isEditing ? (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -50,12 +50,6 @@ export default function Column({
|
|||||||
openColumnContextMenu(api, e, column);
|
openColumnContextMenu(api, e, column);
|
||||||
}, [ api, column ]);
|
}, [ api, column ]);
|
||||||
|
|
||||||
const handleTitleKeyDown = useCallback((e: KeyboardEvent) => {
|
|
||||||
if (e.key === "F2") {
|
|
||||||
setColumnNameToEdit?.(column);
|
|
||||||
}
|
|
||||||
}, [ column ]);
|
|
||||||
|
|
||||||
/** Allow using mouse wheel to scroll inside card, while also maintaining column horizontal scrolling. */
|
/** Allow using mouse wheel to scroll inside card, while also maintaining column horizontal scrolling. */
|
||||||
const handleScroll = useCallback((event: JSX.TargetedWheelEvent<HTMLDivElement>) => {
|
const handleScroll = useCallback((event: JSX.TargetedWheelEvent<HTMLDivElement>) => {
|
||||||
const el = event.currentTarget;
|
const el = event.currentTarget;
|
||||||
@@ -88,6 +82,7 @@ export default function Column({
|
|||||||
onDragOver={isAnyColumnDragging ? handleColumnDragOver : handleDragOver}
|
onDragOver={isAnyColumnDragging ? handleColumnDragOver : handleDragOver}
|
||||||
onDragLeave={handleDragLeave}
|
onDragLeave={handleDragLeave}
|
||||||
onDrop={handleDrop}
|
onDrop={handleDrop}
|
||||||
|
onWheel={handleScroll}
|
||||||
style={{
|
style={{
|
||||||
display: !isVisible ? "none" : undefined
|
display: !isVisible ? "none" : undefined
|
||||||
}}
|
}}
|
||||||
@@ -98,8 +93,6 @@ export default function Column({
|
|||||||
onDragStart={handleColumnDragStart}
|
onDragStart={handleColumnDragStart}
|
||||||
onDragEnd={handleColumnDragEnd}
|
onDragEnd={handleColumnDragEnd}
|
||||||
onContextMenu={handleContextMenu}
|
onContextMenu={handleContextMenu}
|
||||||
onKeyDown={handleTitleKeyDown}
|
|
||||||
tabIndex={300}
|
|
||||||
>
|
>
|
||||||
{!isEditing ? (
|
{!isEditing ? (
|
||||||
<>
|
<>
|
||||||
@@ -119,7 +112,6 @@ export default function Column({
|
|||||||
)}
|
)}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div className="board-column-content" onWheel={handleScroll}>
|
|
||||||
{(columnItems ?? []).map(({ note, branch }, index) => {
|
{(columnItems ?? []).map(({ note, branch }, index) => {
|
||||||
const showIndicatorBefore = dropPosition?.column === column &&
|
const showIndicatorBefore = dropPosition?.column === column &&
|
||||||
dropPosition.index === index &&
|
dropPosition.index === index &&
|
||||||
@@ -148,25 +140,17 @@ export default function Column({
|
|||||||
|
|
||||||
<AddNewItem api={api} column={column} />
|
<AddNewItem api={api} column={column} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function AddNewItem({ column, api }: { column: string, api: BoardApi }) {
|
function AddNewItem({ column, api }: { column: string, api: BoardApi }) {
|
||||||
const [ isCreatingNewItem, setIsCreatingNewItem ] = useState(false);
|
const [ isCreatingNewItem, setIsCreatingNewItem ] = useState(false);
|
||||||
const addItemCallback = useCallback(() => setIsCreatingNewItem(true), []);
|
const addItemCallback = useCallback(() => setIsCreatingNewItem(true), []);
|
||||||
const handleKeyDown = useCallback((e: KeyboardEvent) => {
|
|
||||||
if (!isCreatingNewItem && e.key === "Enter") {
|
|
||||||
setIsCreatingNewItem(true);
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={`board-new-item ${isCreatingNewItem ? "editing" : ""}`}
|
className={`board-new-item ${isCreatingNewItem ? "editing" : ""}`}
|
||||||
onClick={addItemCallback}
|
onClick={addItemCallback}
|
||||||
onKeyDown={handleKeyDown}
|
|
||||||
tabIndex={300}
|
|
||||||
>
|
>
|
||||||
{!isCreatingNewItem ? (
|
{!isCreatingNewItem ? (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -24,13 +24,10 @@
|
|||||||
border: 2px solid transparent;
|
border: 2px solid transparent;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
padding-bottom: 0;
|
|
||||||
background-color: var(--accented-background-color);
|
background-color: var(--accented-background-color);
|
||||||
transition: border-color 0.2s ease;
|
transition: border-color 0.2s ease;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.board-view-container .board-column.drag-over {
|
.board-view-container .board-column.drag-over {
|
||||||
@@ -40,7 +37,7 @@
|
|||||||
|
|
||||||
.board-view-container .board-column h3 {
|
.board-view-container .board-column h3 {
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
margin: 0;
|
margin-bottom: 0.75em;
|
||||||
padding: 0.5em 0.5em 0.5em 0.5em;
|
padding: 0.5em 0.5em 0.5em 0.5em;
|
||||||
border-bottom: 1px solid var(--main-border-color);
|
border-bottom: 1px solid var(--main-border-color);
|
||||||
cursor: grab;
|
cursor: grab;
|
||||||
@@ -101,12 +98,6 @@
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.board-view-container .board-column > .board-column-content {
|
|
||||||
flex-grow: 1;
|
|
||||||
overflow: scroll;
|
|
||||||
padding-bottom: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.board-view-container .board-column h3:hover .edit-icon,
|
.board-view-container .board-column h3:hover .edit-icon,
|
||||||
.board-view-container .board-note:hover .edit-icon {
|
.board-view-container .board-note:hover .edit-icon {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
@@ -130,11 +121,6 @@
|
|||||||
font-size: var(--card-font-size);
|
font-size: var(--card-font-size);
|
||||||
}
|
}
|
||||||
|
|
||||||
.board-view-container :focus {
|
|
||||||
outline: 3px solid var(--input-focus-outline-color);
|
|
||||||
outline-offset: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.board-view-container .board-note {
|
.board-view-container .board-note {
|
||||||
transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.15s ease, margin-top 0.2s ease;
|
transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.15s ease, margin-top 0.2s ease;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -227,12 +227,10 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, multilin
|
|||||||
isNewItem?: boolean;
|
isNewItem?: boolean;
|
||||||
}) {
|
}) {
|
||||||
const inputRef = useRef<any>(null);
|
const inputRef = useRef<any>(null);
|
||||||
const focusElRef = useRef<Element>(null);
|
|
||||||
const dismissOnNextRefreshRef = useRef(false);
|
const dismissOnNextRefreshRef = useRef(false);
|
||||||
const shouldDismiss = useRef(false);
|
const shouldDismiss = useRef(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
focusElRef.current = document.activeElement;
|
|
||||||
inputRef.current?.focus();
|
inputRef.current?.focus();
|
||||||
inputRef.current?.select();
|
inputRef.current?.select();
|
||||||
}, [ inputRef ]);
|
}, [ inputRef ]);
|
||||||
@@ -256,11 +254,8 @@ export function TitleEditor({ currentValue, placeholder, save, dismiss, multilin
|
|||||||
onKeyDown={(e: TargetedKeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {
|
onKeyDown={(e: TargetedKeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {
|
||||||
if (e.key === "Enter" || e.key === "Escape") {
|
if (e.key === "Enter" || e.key === "Escape") {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
|
||||||
shouldDismiss.current = (e.key === "Escape");
|
shouldDismiss.current = (e.key === "Escape");
|
||||||
if (focusElRef.current instanceof HTMLElement) {
|
e.currentTarget.blur();
|
||||||
focusElRef.current.focus();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
onBlur={(newValue) => {
|
onBlur={(newValue) => {
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ function ListNoteCard({ note, parentNote, expand, highlightedTokens }: { note: F
|
|||||||
const [ isExpanded, setExpanded ] = useState(expand);
|
const [ isExpanded, setExpanded ] = useState(expand);
|
||||||
const notePath = getNotePath(parentNote, note);
|
const notePath = getNotePath(parentNote, note);
|
||||||
|
|
||||||
// Reset expand state if switching to another note, or if user manually toggled expansion state.
|
// Reset expand state if switching to another note.
|
||||||
useEffect(() => setExpanded(expand), [ note, expand ]);
|
useEffect(() => setExpanded(expand), [ note ]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export default function TableView({ note, noteIds, notePath, viewConfig, saveCon
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="table-view">
|
<div className="table-view">
|
||||||
{rowData !== undefined && persistenceProps && (
|
{persistenceProps && (
|
||||||
<>
|
<>
|
||||||
<Tabulator
|
<Tabulator
|
||||||
tabulatorRef={tabulatorRef}
|
tabulatorRef={tabulatorRef}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ interface TableProps<T> extends Omit<Options, "data" | "footerElement" | "index"
|
|||||||
footerElement?: string | HTMLElement | JSX.Element;
|
footerElement?: string | HTMLElement | JSX.Element;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Tabulator<T>({ className, columns, data, modules, tabulatorRef: externalTabulatorRef, footerElement, events, index, dataTree, ...restProps }: TableProps<T>) {
|
export default function Tabulator<T>({ className, columns, data, modules, tabulatorRef: externalTabulatorRef, footerElement, events, index, ...restProps }: TableProps<T>) {
|
||||||
const parentComponent = useContext(ParentComponent);
|
const parentComponent = useContext(ParentComponent);
|
||||||
const containerRef = useRef<HTMLDivElement>(null);
|
const containerRef = useRef<HTMLDivElement>(null);
|
||||||
const tabulatorRef = useRef<VanillaTabulator>(null);
|
const tabulatorRef = useRef<VanillaTabulator>(null);
|
||||||
@@ -36,7 +36,6 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula
|
|||||||
data,
|
data,
|
||||||
footerElement: (parentComponent && isValidElement(footerElement) ? renderReactWidget(parentComponent, footerElement)[0] : undefined),
|
footerElement: (parentComponent && isValidElement(footerElement) ? renderReactWidget(parentComponent, footerElement)[0] : undefined),
|
||||||
index: index as string | number | undefined,
|
index: index as string | number | undefined,
|
||||||
dataTree,
|
|
||||||
...restProps
|
...restProps
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -46,7 +45,7 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula
|
|||||||
});
|
});
|
||||||
|
|
||||||
return () => tabulator.destroy();
|
return () => tabulator.destroy();
|
||||||
}, [ dataTree ] );
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const tabulator = tabulatorRef.current;
|
const tabulator = tabulatorRef.current;
|
||||||
|
|||||||
@@ -27,11 +27,11 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
scrollbar-width: 0 !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.classic-toolbar-widget::-webkit-scrollbar:horizontal {
|
.classic-toolbar-widget::-webkit-scrollbar {
|
||||||
height: 0 !important;
|
height: 0 !important;
|
||||||
|
width: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.classic-toolbar-widget.dropdown-active {
|
.classic-toolbar-widget.dropdown-active {
|
||||||
|
|||||||
@@ -116,13 +116,6 @@ class="admonition tip">
|
|||||||
<td>JavaScript note which will be injected into the share page. JS note must
|
<td>JavaScript note which will be injected into the share page. JS note must
|
||||||
be in the shared sub-tree as well. Consider using <code>share_hidden_from_tree</code>.</td>
|
be in the shared sub-tree as well. Consider using <code>share_hidden_from_tree</code>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td><code>shareHtml</code>
|
|
||||||
</td>
|
|
||||||
<td>HTML note which will be injected into the share page at locations specified
|
|
||||||
by the <code>shareHtmlLocation</code> label. HTML note must be in the shared
|
|
||||||
sub-tree as well. Consider using <code>share_hidden_from_tree</code>.</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><code>shareTemplate</code>
|
<td><code>shareTemplate</code>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
36
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html
generated
vendored
36
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html
generated
vendored
@@ -234,34 +234,6 @@ class="image">
|
|||||||
This allows you to access note attributes or traverse the note tree using
|
This allows you to access note attributes or traverse the note tree using
|
||||||
the <code>fetchNote()</code> API, which retrieves note data based on its
|
the <code>fetchNote()</code> API, which retrieves note data based on its
|
||||||
ID.</p>
|
ID.</p>
|
||||||
<h3>Adding custom HTML</h3>
|
|
||||||
<p>You can inject custom HTML snippets into specific locations of the shared
|
|
||||||
page using the <code>~shareHtml</code> relation. The HTML note should contain
|
|
||||||
the raw HTML content you want to inject, and you can control where it appears
|
|
||||||
by adding the <code>#shareHtmlLocation</code> label to the HTML snippet note
|
|
||||||
itself.</p>
|
|
||||||
<p>The <code>#shareHtmlLocation</code> label accepts values in the format <code>location:position</code>:</p>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Locations</strong>: <code>head</code>, <code>body</code>, <code>content</code>
|
|
||||||
</li>
|
|
||||||
<li><strong>Positions</strong>: <code>start</code>, <code>end</code>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<p>For example:</p>
|
|
||||||
<ul>
|
|
||||||
<li><code>#shareHtmlLocation=head:start</code> - Injects HTML at the beginning
|
|
||||||
of the <code><head></code> section</li>
|
|
||||||
<li><code>#shareHtmlLocation=head:end</code> - Injects HTML at the end of the <code><head></code> section
|
|
||||||
(default)</li>
|
|
||||||
<li><code>#shareHtmlLocation=body:start</code> - Injects HTML at the beginning
|
|
||||||
of the <code><body></code> section</li>
|
|
||||||
<li><code>#shareHtmlLocation=content:start</code> - Injects HTML at the beginning
|
|
||||||
of the content area</li>
|
|
||||||
<li><code>#shareHtmlLocation=content:end</code> - Injects HTML at the end of
|
|
||||||
the content area</li>
|
|
||||||
</ul>
|
|
||||||
<p>If no location is specified, the HTML will be injected at <code>content:end</code> by
|
|
||||||
default.</p>
|
|
||||||
<p>Example:</p><pre><code class="language-application-javascript-env-backend">const currentNote = await fetchNote();
|
<p>Example:</p><pre><code class="language-application-javascript-env-backend">const currentNote = await fetchNote();
|
||||||
const parentNote = await fetchNote(currentNote.parentNoteIds[0]);
|
const parentNote = await fetchNote(currentNote.parentNoteIds[0]);
|
||||||
|
|
||||||
@@ -372,14 +344,6 @@ for (const attr of parentNote.attributes) {
|
|||||||
</td>
|
</td>
|
||||||
<td>Note with this label will list all roots of shared notes.</td>
|
<td>Note with this label will list all roots of shared notes.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td><code>shareHtmlLocation</code>
|
|
||||||
</td>
|
|
||||||
<td>defines where custom HTML injected via <code>~shareHtml</code> relation
|
|
||||||
should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where
|
|
||||||
location is <code>head</code>, <code>body</code>, or <code>content</code> and
|
|
||||||
position is <code>start</code> or <code>end</code>. Defaults to <code>content:end</code>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|||||||
@@ -15,74 +15,61 @@
|
|||||||
in a hierarchy.</p>
|
in a hierarchy.</p>
|
||||||
<h2>Interaction with columns</h2>
|
<h2>Interaction with columns</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li data-list-item-id="e53cd56f64ad0a087af5c123894261ff1">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>
|
<ul>
|
||||||
<li data-list-item-id="eaf5a55c795e0cfe57a2a05d6b9f89761">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>
|
Press <kbd>Enter</kbd> to confirm, or <kbd>Escape</kbd> to dismiss.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li data-list-item-id="e2d7f17b56a6a8027d26e5d30f16bd7f6">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>
|
to the desired position.</li>
|
||||||
<li data-list-item-id="ef0f57de87814bf725cf846cecca01899">To delete a column, right click on its title and select <em>Delete column</em>.</li>
|
<li>To delete a column, right click on its title and select <em>Delete column</em>.</li>
|
||||||
<li
|
<li>To rename a column, click on the note title.
|
||||||
data-list-item-id="e00cb99d9b34dbf63523f053a57f28fe8">To rename a column, click on the note title.
|
|
||||||
<ul>
|
<ul>
|
||||||
<li data-list-item-id="ea86b1d902db4bbab1fe85bcf669c595c">Press Enter to confirm.</li>
|
<li>Press Enter to confirm.</li>
|
||||||
<li data-list-item-id="e6d1bc52b0a8b3d554fd4be0f1f009b04">Upon renaming a column, the corresponding status attribute of all its
|
<li>Upon renaming a column, the corresponding status attribute of all its
|
||||||
notes will be changed in bulk.</li>
|
notes will be changed in bulk.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li data-list-item-id="ea1dd557786a534468e61f445aaea665f">If there are many columns, use the mouse wheel to scroll.</li>
|
<li>If there are many columns, use the mouse wheel to scroll.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>Interaction with notes</h2>
|
<h2>Interaction with notes</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li data-list-item-id="ec25f6e597c61e1f56422d72a91777cb8">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>
|
<ul>
|
||||||
<li data-list-item-id="e3027de7ac16543b3a3be526c6700f22e">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
|
dismiss the creation of a new note, simply press <kbd>Escape</kbd> or leave
|
||||||
the name empty.</li>
|
the name empty.</li>
|
||||||
<li data-list-item-id="ef97c736e327952225517534711a8e329">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>
|
by default) set to the name of the column.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li data-list-item-id="e0558241e1901ee6a5b765644c115f95c">To open the note, simply click on it.</li>
|
<li>To open the note, simply click on it.</li>
|
||||||
<li data-list-item-id="e1580878e9963e2039332f9c3ff40dc9d">To change the title of the note directly from the board, hover the mouse
|
<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>
|
over its card and press the edit button on the right.</li>
|
||||||
<li data-list-item-id="e817b2e5103fd08622477663a5a8b9683">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>
|
other to change its state.</li>
|
||||||
<li data-list-item-id="e5f86d7f2f545470451040860ca3e8890">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.
|
the tree.
|
||||||
<ul>
|
<ul>
|
||||||
<li data-list-item-id="e0b47ff4af56dc7cd21a118fbc9b1808a">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>
|
position within the same columns.</li>
|
||||||
<li data-list-item-id="e9eb4fa22b9ed927a24aee3e94d5a1b5d">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>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li data-list-item-id="e94ebbbe060ccfe7fbb1c67616e272b35">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:
|
the following options:
|
||||||
<ul>
|
<ul>
|
||||||
<li data-list-item-id="e5516bb20b5c4534580854c6422107b1d">Open the note in a new tab/split/window or quick edit.</li>
|
<li>Open the note in a new tab/split/window or quick edit.</li>
|
||||||
<li data-list-item-id="e8419784dbd01baae6c1e1e8875baa84a">Move the note to any column.</li>
|
<li>Move the note to any column.</li>
|
||||||
<li data-list-item-id="e6ab7181ef973bbd96e3bbbfed5e302d1">Insert a new note above/below the current one.</li>
|
<li>Insert a new note above/below the current one.</li>
|
||||||
<li data-list-item-id="e8aae7a4c6ddb5f191d6dcd914f0c3b78">Archive/unarchive the current note.</li>
|
<li>Archive/unarchive the current note.</li>
|
||||||
<li data-list-item-id="e0bf5bc2c60b27a7fd0078001816d8ca4">Delete the current note.</li>
|
<li>Delete the current note.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li data-list-item-id="ec32b9f786e2c612fb63677c8c5089365">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>
|
and use the mouse wheel to scroll.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>Keyboard interaction</h2>
|
|
||||||
<p>The board view has mild support for keyboard-based navigation:</p>
|
|
||||||
<ul>
|
|
||||||
<li data-list-item-id="e0c992a7fdac57768851c53137a2cfa64">Use <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> to navigate between
|
|
||||||
column titles, notes and the “New item” button for each of the columns,
|
|
||||||
in sequential order.</li>
|
|
||||||
<li data-list-item-id="e4c143d1ec92d0fc5b75e850cf10f4377">To rename a column or a note, press <kbd>F2</kbd> while it is focused.</li>
|
|
||||||
<li
|
|
||||||
data-list-item-id="ee3008937bdfd14e06c308a5f0846addf">To open a specific note or create a new item, press <kbd>Enter</kbd> while
|
|
||||||
it is focused.</li>
|
|
||||||
<li data-list-item-id="e70ceff80dcd5422e2361c4fbcd805773">To dismiss a rename of a note or a column, press <kbd>Escape</kbd>.</li>
|
|
||||||
</ul>
|
|
||||||
<h2>Configuration</h2>
|
<h2>Configuration</h2>
|
||||||
<h3>Grouping by another attribute</h3>
|
<h3>Grouping by another attribute</h3>
|
||||||
<p>By default, the label used to group the notes is <code>#status</code>.
|
<p>By default, the label used to group the notes is <code>#status</code>.
|
||||||
@@ -96,5 +83,5 @@ class="admonition note">
|
|||||||
<h2>Interaction</h2>
|
<h2>Interaction</h2>
|
||||||
<h2>Limitations</h2>
|
<h2>Limitations</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li data-list-item-id="e61ec93de3282934fd37d302933d208b8">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>
|
</ul>
|
||||||
@@ -66,7 +66,6 @@ export default [
|
|||||||
{ type: "label", name: "shareDisallowRobotIndexing" },
|
{ type: "label", name: "shareDisallowRobotIndexing" },
|
||||||
{ type: "label", name: "shareCredentials" },
|
{ type: "label", name: "shareCredentials" },
|
||||||
{ type: "label", name: "shareIndex" },
|
{ type: "label", name: "shareIndex" },
|
||||||
{ type: "label", name: "shareHtmlLocation" },
|
|
||||||
{ type: "label", name: "displayRelations" },
|
{ type: "label", name: "displayRelations" },
|
||||||
{ type: "label", name: "hideRelations" },
|
{ type: "label", name: "hideRelations" },
|
||||||
{ type: "label", name: "titleTemplate", isDangerous: true },
|
{ type: "label", name: "titleTemplate", isDangerous: true },
|
||||||
@@ -106,7 +105,6 @@ export default [
|
|||||||
{ type: "relation", name: "renderNote", isDangerous: true },
|
{ type: "relation", name: "renderNote", isDangerous: true },
|
||||||
{ type: "relation", name: "shareCss" },
|
{ type: "relation", name: "shareCss" },
|
||||||
{ type: "relation", name: "shareJs" },
|
{ type: "relation", name: "shareJs" },
|
||||||
{ type: "relation", name: "shareHtml" },
|
|
||||||
{ type: "relation", name: "shareTemplate" },
|
{ type: "relation", name: "shareTemplate" },
|
||||||
{ type: "relation", name: "shareFavicon" }
|
{ type: "relation", name: "shareFavicon" }
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ a.download-button {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
gap: 1em;
|
gap: 1em;
|
||||||
|
font-weight: 500;
|
||||||
|
|
||||||
@media (min-width: 720px) {
|
@media (min-width: 720px) {
|
||||||
display: flex !important;
|
display: flex !important;
|
||||||
@@ -11,12 +12,12 @@ a.download-button {
|
|||||||
.platform {
|
.platform {
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
opacity: 0.75;
|
opacity: 0.75;
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.big {
|
&.big {
|
||||||
padding: 0.5em 3.5em;
|
padding: 0.5em 3.5em;
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
gap: m;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
|
||||||
.platform {
|
.platform {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export default function DownloadButton({ big }: DownloadButtonProps) {
|
|||||||
Download now{" "}
|
Download now{" "}
|
||||||
{big
|
{big
|
||||||
? <span class="platform">v{packageJson.version} for {recommendedDownload.name}</span>
|
? <span class="platform">v{packageJson.version} for {recommendedDownload.name}</span>
|
||||||
: <span class="platform">for {recommendedDownload.name}</span>
|
: null
|
||||||
}
|
}
|
||||||
</>}
|
</>}
|
||||||
/>
|
/>
|
||||||
@@ -40,7 +40,7 @@ export default function DownloadButton({ big }: DownloadButtonProps) {
|
|||||||
Download now{" "}
|
Download now{" "}
|
||||||
{big
|
{big
|
||||||
? <span class="platform">v{packageJson.version} for Linux</span>
|
? <span class="platform">v{packageJson.version} for Linux</span>
|
||||||
: <span class="platform">for Linux</span>
|
: null
|
||||||
}
|
}
|
||||||
</>}
|
</>}
|
||||||
/>
|
/>
|
||||||
|
|||||||
9
docs/User Guide/!!!meta.json
vendored
9
docs/User Guide/!!!meta.json
vendored
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"formatVersion": 2,
|
"formatVersion": 2,
|
||||||
"appVersion": "0.99.1",
|
"appVersion": "0.99.0",
|
||||||
"files": [
|
"files": [
|
||||||
{
|
{
|
||||||
"isClone": false,
|
"isClone": false,
|
||||||
@@ -9,9 +9,9 @@
|
|||||||
"pOsGYCXsbNQG"
|
"pOsGYCXsbNQG"
|
||||||
],
|
],
|
||||||
"title": "User Guide",
|
"title": "User Guide",
|
||||||
"notePosition": 10,
|
"notePosition": 1,
|
||||||
"prefix": null,
|
"prefix": null,
|
||||||
"isExpanded": true,
|
"isExpanded": false,
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"mime": "text/html",
|
"mime": "text/html",
|
||||||
"attributes": [],
|
"attributes": [],
|
||||||
@@ -4135,7 +4135,8 @@
|
|||||||
"prefix": null,
|
"prefix": null,
|
||||||
"dataFileName": "Quick edit.clone.md",
|
"dataFileName": "Quick edit.clone.md",
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"format": "markdown"
|
"format": "markdown",
|
||||||
|
"isExpanded": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"isClone": false,
|
"isClone": false,
|
||||||
|
|||||||
@@ -50,6 +50,5 @@ These relations are supported and used internally by Trilium.
|
|||||||
| `widget_relation` | target of this relation will be executed and rendered as a widget in the sidebar |
|
| `widget_relation` | target of this relation will be executed and rendered as a widget in the sidebar |
|
||||||
| `shareCss` | CSS note which will be injected into the share page. CSS note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree` and `share_omit_default_css` as well. |
|
| `shareCss` | CSS note which will be injected into the share page. CSS note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree` and `share_omit_default_css` as well. |
|
||||||
| `shareJs` | JavaScript note which will be injected into the share page. JS note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
|
| `shareJs` | JavaScript note which will be injected into the share page. JS note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
|
||||||
| `shareHtml` | HTML note which will be injected into the share page at locations specified by the `shareHtmlLocation` label. HTML note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
|
|
||||||
| `shareTemplate` | Embedded JavaScript note that will be used as the template for displaying the shared note. Falls back to the default template. Consider using `share_hidden_from_tree`. |
|
| `shareTemplate` | Embedded JavaScript note that will be used as the template for displaying the shared note. Falls back to the default template. Consider using `share_hidden_from_tree`. |
|
||||||
| `shareFavicon` | Favicon note to be set in the shared page. Typically you want to set it to share root and make it inheritable. Favicon note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
|
| `shareFavicon` | Favicon note to be set in the shared page. Typically you want to set it to share root and make it inheritable. Favicon note must be in the shared sub-tree as well. Consider using `share_hidden_from_tree`. |
|
||||||
@@ -67,25 +67,6 @@ The default design should be a good starting point, but you can customize it usi
|
|||||||
|
|
||||||
You can inject custom JavaScript into the shared note using the `~shareJs` relation. This allows you to access note attributes or traverse the note tree using the `fetchNote()` API, which retrieves note data based on its ID.
|
You can inject custom JavaScript into the shared note using the `~shareJs` relation. This allows you to access note attributes or traverse the note tree using the `fetchNote()` API, which retrieves note data based on its ID.
|
||||||
|
|
||||||
### Adding custom HTML
|
|
||||||
|
|
||||||
You can inject custom HTML snippets into specific locations of the shared page using the `~shareHtml` relation. The HTML note should contain the raw HTML content you want to inject, and you can control where it appears by adding the `#shareHtmlLocation` label to the HTML snippet note itself.
|
|
||||||
|
|
||||||
The `#shareHtmlLocation` label accepts values in the format `location:position`:
|
|
||||||
|
|
||||||
* **Locations**: `head`, `body`, `content`
|
|
||||||
* **Positions**: `start`, `end`
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
* `#shareHtmlLocation=head:start` - Injects HTML at the beginning of the `<head>` section
|
|
||||||
* `#shareHtmlLocation=head:end` - Injects HTML at the end of the `<head>` section (default)
|
|
||||||
* `#shareHtmlLocation=body:start` - Injects HTML at the beginning of the `<body>` section
|
|
||||||
* `#shareHtmlLocation=content:start` - Injects HTML at the beginning of the content area
|
|
||||||
* `#shareHtmlLocation=content:end` - Injects HTML at the end of the content area
|
|
||||||
|
|
||||||
If no location is specified, the HTML will be injected at `content:end` by default.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
@@ -125,7 +106,7 @@ To do so, create a shared text note and apply the `shareIndex` label. When viewe
|
|||||||
|
|
||||||
## Attribute reference
|
## Attribute reference
|
||||||
|
|
||||||
<table><thead><tr><th>Attribute</th><th>Description</th></tr></thead><tbody><tr><td><code>shareHiddenFromTree</code></td><td>this note is hidden from left navigation tree, but still accessible with its URL</td></tr><tr><td><code>shareExternalLink</code></td><td>note will act as a link to an external website in the share tree</td></tr><tr><td><code>shareAlias</code></td><td>define an alias using which the note will be available under <code>https://your_trilium_host/share/[your_alias]</code></td></tr><tr><td><code>shareOmitDefaultCss</code></td><td>default share page CSS will be omitted. Use when you make extensive styling changes.</td></tr><tr><td><code>shareRoot</code></td><td>marks note which is served on /share root.</td></tr><tr><td><code>shareDescription</code></td><td>define text to be added to the HTML meta tag for description</td></tr><tr><td><code>shareRaw</code></td><td>Note will be served in its raw format, without HTML wrapper. See also <a class="reference-link" href="Sharing/Serving%20directly%20the%20content%20o.md">Serving directly the content of a note</a> for an alternative method without setting an attribute.</td></tr><tr><td><code>shareDisallowRobotIndexing</code></td><td><p>Indicates to web crawlers that the page should not be indexed of this note by:</p><ul><li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li><li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li></ul></td></tr><tr><td><code>shareCredentials</code></td><td>require credentials to access this shared note. Value is expected to be in format <code>username:password</code>. Don't forget to make this inheritable to apply to child-notes/images.</td></tr><tr><td><code>shareIndex</code></td><td>Note with this label will list all roots of shared notes.</td></tr><tr><td><code>shareHtmlLocation</code></td><td>defines where custom HTML injected via <code>~shareHtml</code> relation should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where location is <code>head</code>, <code>body</code>, or <code>content</code> and position is <code>start</code> or <code>end</code>. Defaults to <code>content:end</code>.</td></tr></tbody></table>
|
<table><thead><tr><th>Attribute</th><th>Description</th></tr></thead><tbody><tr><td><code>shareHiddenFromTree</code></td><td>this note is hidden from left navigation tree, but still accessible with its URL</td></tr><tr><td><code>shareExternalLink</code></td><td>note will act as a link to an external website in the share tree</td></tr><tr><td><code>shareAlias</code></td><td>define an alias using which the note will be available under <code>https://your_trilium_host/share/[your_alias]</code></td></tr><tr><td><code>shareOmitDefaultCss</code></td><td>default share page CSS will be omitted. Use when you make extensive styling changes.</td></tr><tr><td><code>shareRoot</code></td><td>marks note which is served on /share root.</td></tr><tr><td><code>shareDescription</code></td><td>define text to be added to the HTML meta tag for description</td></tr><tr><td><code>shareRaw</code></td><td>Note will be served in its raw format, without HTML wrapper. See also <a class="reference-link" href="Sharing/Serving%20directly%20the%20content%20o.md">Serving directly the content of a note</a> for an alternative method without setting an attribute.</td></tr><tr><td><code>shareDisallowRobotIndexing</code></td><td><p>Indicates to web crawlers that the page should not be indexed of this note by:</p><ul><li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li><li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li></ul></td></tr><tr><td><code>shareCredentials</code></td><td>require credentials to access this shared note. Value is expected to be in format <code>username:password</code>. Don't forget to make this inheritable to apply to child-notes/images.</td></tr><tr><td><code>shareIndex</code></td><td>Note with this label will list all roots of shared notes.</td></tr></tbody></table>
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|||||||
@@ -39,15 +39,6 @@ Notes are displayed recursively, so even the child notes of the child notes will
|
|||||||
* Delete the current note.
|
* Delete the current note.
|
||||||
* If there are many notes within the column, move the mouse over the column and use the mouse wheel to scroll.
|
* If there are many notes within the column, move the mouse over the column and use the mouse wheel to scroll.
|
||||||
|
|
||||||
## Keyboard interaction
|
|
||||||
|
|
||||||
The board view has mild support for keyboard-based navigation:
|
|
||||||
|
|
||||||
* Use <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> to navigate between column titles, notes and the “New item” button for each of the columns, in sequential order.
|
|
||||||
* To rename a column or a note, press <kbd>F2</kbd> while it is focused.
|
|
||||||
* To open a specific note or create a new item, press <kbd>Enter</kbd> while it is focused.
|
|
||||||
* To dismiss a rename of a note or a column, press <kbd>Escape</kbd>.
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
### Grouping by another attribute
|
### Grouping by another attribute
|
||||||
|
|||||||
@@ -1,31 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<%
|
<% const hasTree = subRoot.note.hasVisibleChildren(); %>
|
||||||
const hasTree = subRoot.note.hasVisibleChildren();
|
|
||||||
|
|
||||||
// Collect HTML snippets by location
|
|
||||||
const htmlSnippetsByLocation = {};
|
|
||||||
for (const htmlRelation of note.getRelations("shareHtml")) {
|
|
||||||
const htmlNote = htmlRelation.targetNote;
|
|
||||||
if (htmlNote) {
|
|
||||||
let location = htmlNote.getLabelValue("shareHtmlLocation") || "content:end";
|
|
||||||
// Default to :end if no position specified
|
|
||||||
if (!location.includes(":")) {
|
|
||||||
location = location + ":end";
|
|
||||||
}
|
|
||||||
if (!htmlSnippetsByLocation[location]) {
|
|
||||||
htmlSnippetsByLocation[location] = [];
|
|
||||||
}
|
|
||||||
htmlSnippetsByLocation[location].push(htmlNote.getContent());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const renderSnippets = (location) => {
|
|
||||||
const snippets = htmlSnippetsByLocation[location];
|
|
||||||
return snippets ? snippets.join("\n") : "";
|
|
||||||
};
|
|
||||||
%>
|
|
||||||
<%- renderSnippets("head:start") %>
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
@@ -77,7 +53,6 @@
|
|||||||
<meta name="twitter:image" content="<%= openGraphImage %>">
|
<meta name="twitter:image" content="<%= openGraphImage %>">
|
||||||
<!-- Meta Tags Generated via https://opengraph.dev -->
|
<!-- Meta Tags Generated via https://opengraph.dev -->
|
||||||
<meta name="theme-color" content="<%= openGraphColor %>">
|
<meta name="theme-color" content="<%= openGraphColor %>">
|
||||||
<%- renderSnippets("head:end") %>
|
|
||||||
</head>
|
</head>
|
||||||
<%
|
<%
|
||||||
const customLogoId = subRoot.note.getRelation("shareLogo")?.value;
|
const customLogoId = subRoot.note.getRelation("shareLogo")?.value;
|
||||||
@@ -97,7 +72,6 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
});
|
});
|
||||||
%>
|
%>
|
||||||
<body data-note-id="<%= note.noteId %>" class="type-<%= note.type %><%= themeClass %>" data-ancestor-note-id="<%= subRoot.note.noteId %>">
|
<body data-note-id="<%= note.noteId %>" class="type-<%= note.type %><%= themeClass %>" data-ancestor-note-id="<%= subRoot.note.noteId %>">
|
||||||
<%- renderSnippets("body:start") %>
|
|
||||||
<div id="mobile-header">
|
<div id="mobile-header">
|
||||||
<a href="<%= shareRootLink %>">
|
<a href="<%= shareRootLink %>">
|
||||||
<img src="<%= logoUrl %>" width="32" height="<%= mobileLogoHeight %>" alt="Logo" />
|
<img src="<%= logoUrl %>" width="32" height="<%= mobileLogoHeight %>" alt="Logo" />
|
||||||
@@ -147,8 +121,8 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
</div>
|
</div>
|
||||||
<div id="right-pane">
|
<div id="right-pane">
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
|
||||||
<div id="content" class="type-<%= note.type %><% if (note.type === "text") { %> ck-content<% } %><% if (isEmpty) { %> no-content<% } %>">
|
<div id="content" class="type-<%= note.type %><% if (note.type === "text") { %> ck-content<% } %><% if (isEmpty) { %> no-content<% } %>">
|
||||||
<%- renderSnippets("content:start") %>
|
|
||||||
<h1 id="title"><%= note.title %></h1>
|
<h1 id="title"><%= note.title %></h1>
|
||||||
<% if (isEmpty && (!note.hasVisibleChildren() && note.type !== "book")) { %>
|
<% if (isEmpty && (!note.hasVisibleChildren() && note.type !== "book")) { %>
|
||||||
<p>This note has no content.</p>
|
<p>This note has no content.</p>
|
||||||
@@ -158,7 +132,6 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
%>
|
%>
|
||||||
<%- content %>
|
<%- content %>
|
||||||
<% } %>
|
<% } %>
|
||||||
<%- renderSnippets("content:end") %>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% if (note.hasVisibleChildren() || note.type === "book") { %>
|
<% if (note.hasVisibleChildren() || note.type === "book") { %>
|
||||||
@@ -232,6 +205,5 @@ content = content.replaceAll(headingRe, (...match) => {
|
|||||||
<% } %>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%- renderSnippets("body:end") %>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user