Merge branch 'main' of github.com:TriliumNext/Trilium
|
|
@ -270,6 +270,7 @@ export type CommandMappings = {
|
|||
closeThisNoteSplit: CommandData;
|
||||
moveThisNoteSplit: CommandData & { isMovingLeft: boolean };
|
||||
jumpToNote: CommandData;
|
||||
openTodayNote: CommandData;
|
||||
commandPalette: CommandData;
|
||||
|
||||
// Keyboard shortcuts
|
||||
|
|
|
|||
|
|
@ -159,6 +159,16 @@ export default class Entrypoints extends Component {
|
|||
this.openInWindowCommand({ notePath: "", hoistedNoteId: "root" });
|
||||
}
|
||||
|
||||
async openTodayNoteCommand() {
|
||||
const todayNote = await dateNoteService.getTodayNote();
|
||||
if (!todayNote) {
|
||||
console.warn("Missing today note.");
|
||||
return;
|
||||
}
|
||||
|
||||
await appContext.tabManager.openInSameTab(todayNote.noteId);
|
||||
}
|
||||
|
||||
async runActiveNoteCommand() {
|
||||
const noteContext = appContext.tabManager.getActiveContext();
|
||||
if (!noteContext) {
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@ export default class FNote {
|
|||
return notePaths;
|
||||
}
|
||||
|
||||
getSortedNotePathRecords(hoistedNoteId = "root"): NotePathRecord[] {
|
||||
getSortedNotePathRecords(hoistedNoteId = "root", activeNotePath: string | null = null): NotePathRecord[] {
|
||||
const isHoistedRoot = hoistedNoteId === "root";
|
||||
|
||||
const notePaths: NotePathRecord[] = this.getAllNotePaths().map((path) => ({
|
||||
|
|
@ -428,7 +428,23 @@ export default class FNote {
|
|||
isHidden: path.includes("_hidden")
|
||||
}));
|
||||
|
||||
// Calculate the length of the prefix match between two arrays
|
||||
const prefixMatchLength = (path: string[], target: string[]) => {
|
||||
const diffIndex = path.findIndex((seg, i) => seg !== target[i]);
|
||||
return diffIndex === -1 ? Math.min(path.length, target.length) : diffIndex;
|
||||
};
|
||||
|
||||
notePaths.sort((a, b) => {
|
||||
if (activeNotePath) {
|
||||
const activeSegments = activeNotePath.split('/');
|
||||
const aOverlap = prefixMatchLength(a.notePath, activeSegments);
|
||||
const bOverlap = prefixMatchLength(b.notePath, activeSegments);
|
||||
// Paths with more matching prefix segments are prioritized
|
||||
// when the match count is equal, other criteria are used for sorting
|
||||
if (bOverlap !== aOverlap) {
|
||||
return bOverlap - aOverlap;
|
||||
}
|
||||
}
|
||||
if (a.isInHoistedSubTree !== b.isInHoistedSubTree) {
|
||||
return a.isInHoistedSubTree ? -1 : 1;
|
||||
} else if (a.isArchived !== b.isArchived) {
|
||||
|
|
@ -449,10 +465,11 @@ export default class FNote {
|
|||
* Returns the note path considered to be the "best"
|
||||
*
|
||||
* @param {string} [hoistedNoteId='root']
|
||||
* @param {string|null} [activeNotePath=null]
|
||||
* @return {string[]} array of noteIds constituting the particular note path
|
||||
*/
|
||||
getBestNotePath(hoistedNoteId = "root") {
|
||||
return this.getSortedNotePathRecords(hoistedNoteId)[0]?.notePath;
|
||||
getBestNotePath(hoistedNoteId = "root", activeNotePath: string | null = null) {
|
||||
return this.getSortedNotePathRecords(hoistedNoteId, activeNotePath)[0]?.notePath;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -26,21 +26,12 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
|
|||
}
|
||||
|
||||
const path = notePath.split("/").reverse();
|
||||
|
||||
if (!path.includes("root")) {
|
||||
path.push("root");
|
||||
}
|
||||
|
||||
const effectivePathSegments: string[] = [];
|
||||
let childNoteId: string | null = null;
|
||||
let i = 0;
|
||||
|
||||
while (true) {
|
||||
if (i >= path.length) {
|
||||
break;
|
||||
}
|
||||
|
||||
const parentNoteId = path[i++];
|
||||
for (let i = 0; i < path.length; i++) {
|
||||
const parentNoteId = path[i];
|
||||
|
||||
if (childNoteId !== null) {
|
||||
const child = await froca.getNote(childNoteId, !logErrors);
|
||||
|
|
@ -65,7 +56,7 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
|
|||
return null;
|
||||
}
|
||||
|
||||
if (!parents.some((p) => p.noteId === parentNoteId)) {
|
||||
if (!parents.some(p => p.noteId === parentNoteId) || (i === path.length - 1 && parentNoteId !== 'root')) {
|
||||
if (logErrors) {
|
||||
const parent = froca.getNoteFromCache(parentNoteId);
|
||||
|
||||
|
|
@ -77,7 +68,8 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
|
|||
);
|
||||
}
|
||||
|
||||
const bestNotePath = child.getBestNotePath(hoistedNoteId);
|
||||
const activeNotePath = appContext.tabManager.getActiveContextNotePath();
|
||||
const bestNotePath = child.getBestNotePath(hoistedNoteId, activeNotePath);
|
||||
|
||||
if (bestNotePath) {
|
||||
const pathToRoot = bestNotePath.reverse().slice(1);
|
||||
|
|
@ -108,7 +100,9 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
|
|||
if (!note) {
|
||||
throw new Error(`Unable to find note: ${notePath}.`);
|
||||
}
|
||||
const bestNotePath = note.getBestNotePath(hoistedNoteId);
|
||||
|
||||
const activeNotePath = appContext.tabManager.getActiveContextNotePath();
|
||||
const bestNotePath = note.getBestNotePath(hoistedNoteId, activeNotePath);
|
||||
|
||||
if (!bestNotePath) {
|
||||
throw new Error(`Did not find any path segments for '${note.toString()}', hoisted note '${hoistedNoteId}'`);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,11 @@ export function reloadFrontendApp(reason?: string) {
|
|||
logInfo(`Frontend app reload: ${reason}`);
|
||||
}
|
||||
|
||||
window.location.reload();
|
||||
if (isElectron()) {
|
||||
dynamicRequire("@electron/remote").BrowserWindow.getFocusedWindow()?.reload();
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
export function restartDesktopApp() {
|
||||
|
|
|
|||
|
|
@ -79,8 +79,8 @@ export default function ExportDialog() {
|
|||
values={[
|
||||
{ value: "html", label: t("export.format_html_zip") },
|
||||
{ value: "markdown", label: t("export.format_markdown") },
|
||||
{ value: "opml", label: t("export.format_opml") },
|
||||
{ value: "share", label: t("export.share-format") }
|
||||
{ value: "share", label: t("export.share-format") },
|
||||
{ value: "opml", label: t("export.format_opml") }
|
||||
]}
|
||||
/>
|
||||
|
||||
|
|
|
|||
2
apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json
generated
vendored
21
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements.html
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<p>The desktop version of Trilium supports all three main operating systems:</p>
|
||||
<ul>
|
||||
<li>Windows
|
||||
<ul>
|
||||
<li>Windows 11 is officially supported.</li>
|
||||
<li>Windows on ARM is also supported</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Linux:
|
||||
<ul>
|
||||
<li>Most modern distributions are supported, including NixOS.</li>
|
||||
<li>ARM is supported in <code>aarch64</code> (no ARM v7 support).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>macOS
|
||||
<ul>
|
||||
<li>Minimum supported operating system: macOS Monterey</li>
|
||||
<li>Both Intel and Apple Silicon devices are supported.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
16
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.html
generated
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<ul>
|
||||
<li>Using Docker, the server can be run on Windows, Linux and macOS devices.</li>
|
||||
<li>Native binaries are provided for Linux x64 and ARM (<code>aarch64</code>).</li>
|
||||
</ul>
|
||||
<h2>Legacy ARM support</h2>
|
||||
<p>The Docker builds also provide <code>linux/arm/v7</code> and <code>linux/arm/v8</code> platforms.
|
||||
These platforms are considered legacy since Trilium uses Node.js version
|
||||
24 which have <a href="https://github.com/nodejs/node/commit/6682861d6f">officially downgraded support</a> for
|
||||
these platforms to “experimental”.</p>
|
||||
<p>As a result, Trilium needs to use Node.js 22 for these versions. As soon
|
||||
as soon Node.js 22 will no longer be compatible, support for <code>armv7</code> and <code>armv8</code> will
|
||||
be dropped entirely.</p>
|
||||
<p>Regardless of upstream support, these platforms are supported on a best-effort
|
||||
basis and are not officially supported by the Trilium development team.
|
||||
Bug reports are accepted but they will not be treated with priority; contributions
|
||||
are welcome.</p>
|
||||
|
|
@ -36,9 +36,9 @@
|
|||
starts to grow, and I see how <em>some</em> parts could be split out, I move
|
||||
them out into separate sub notes. As an example I have a book review for <em>The Fellowship of the Ring</em>:</p>
|
||||
<ul>
|
||||
<li data-list-item-id="e014cdda874b3afa265620405ac664225">Book reviews
|
||||
<li>Book reviews
|
||||
<ul>
|
||||
<li data-list-item-id="eb71eb18cab8130d57c921f0d2be2ce7a">The Fellowship of the Ring</li>
|
||||
<li>The Fellowship of the Ring</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -47,12 +47,12 @@
|
|||
too many book highlights and overall review is also rather long, so I want
|
||||
to change the structure to the following:</p>
|
||||
<ul>
|
||||
<li data-list-item-id="e95d447a4545a6fff27b6672dda4b65bb">Book reviews
|
||||
<li>Book reviews
|
||||
<ul>
|
||||
<li data-list-item-id="e515c90d48187340c7cf8edc51ef0200b">The Fellowship of the Ring <em>(still contains basic info)</em>
|
||||
<li>The Fellowship of the Ring <em>(still contains basic info)</em>
|
||||
<ul>
|
||||
<li data-list-item-id="e79281e84f0048909678b69fca208e01b">Highlights</li>
|
||||
<li data-list-item-id="e389fa061d4b6b1c0fd34e6e1e37be4e5">Review</li>
|
||||
<li>Highlights</li>
|
||||
<li>Review</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -113,15 +113,15 @@
|
|||
and move all irrelevant notes there. So my credentials note might look
|
||||
something like this:</p>
|
||||
<ul>
|
||||
<li data-list-item-id="e7b3783f701225194d86196f0475bd942">Credentials
|
||||
<li>Credentials
|
||||
<ul>
|
||||
<li data-list-item-id="e580b39918e97b257a23a807479e3ab7c">Personal
|
||||
<li>Personal
|
||||
<ul>
|
||||
<li data-list-item-id="eba2958dae6c7cbe187af4c99780fe571">OLD <em>(contains a bunch of notes with credentials for services I don't use anymore)</em>
|
||||
<li>OLD <em>(contains a bunch of notes with credentials for services I don't use anymore)</em>
|
||||
</li>
|
||||
<li data-list-item-id="e837f86b22c3ffa29be1f98a0865bebc5">Gmail</li>
|
||||
<li data-list-item-id="e1c9d712ef07078c8410af4800975b9c3">Github</li>
|
||||
<li data-list-item-id="ecadc93e95b537580013b2e85f7c22c85">...</li>
|
||||
<li>Gmail</li>
|
||||
<li>Github</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -132,14 +132,14 @@
|
|||
<p>Every day has its note which contains or references everything related
|
||||
to the given day. Structure looks like this:</p>
|
||||
<ul>
|
||||
<li data-list-item-id="ee6821b6cce470161686fe2feee3d93ea">2018
|
||||
<li>2018
|
||||
<ul>
|
||||
<li data-list-item-id="e497e79bb02a92b13bdfa6a644238a4e8">11 - November
|
||||
<li>11 - November
|
||||
<ul>
|
||||
<li data-list-item-id="e629d7121225a4a49f93586c5420e8e18">26 - Monday</li>
|
||||
<li data-list-item-id="ea77c915376a6a96c7c9b5b068f2b540f">27 - Tuesday
|
||||
<li>26 - Monday</li>
|
||||
<li>27 - Tuesday
|
||||
<ul>
|
||||
<li data-list-item-id="e6a5f10ca531a2f958db0cceab2b9482e">subnote 1</li>
|
||||
<li>subnote 1</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
@ -157,38 +157,36 @@
|
|||
create new note in the day note.</p>
|
||||
<p>What notes do I keep under this day note?</p>
|
||||
<ul>
|
||||
<li data-list-item-id="ee3e9512cfacd13a91129178bf213bc82">TODO list for given day (this can be automated - see <a class="reference-link"
|
||||
href="#root/pOsGYCXsbNQG/tC7s2alapj8V/5668rwcirq1t/_help_xYjQUYhpbUEW">Task Manager</a>)</li>
|
||||
<li
|
||||
data-list-item-id="e122fba5e5f752294338c63d652d0caa1">Personal diary</li>
|
||||
<li data-list-item-id="e1765ff9fbdb3975e1ff524b615394d13"><a href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/BFs8mudNFgCS/_help_IakOLONlIfGI">clones</a> of
|
||||
notes I created during this day (which kind of represents what I've been
|
||||
working on).</li>
|
||||
<li data-list-item-id="e937262fd7fcd7330ae50e9caaa8ffb4b">I often clone notes (or sub-trees) of e.g. projects I'm working on at
|
||||
given day so they are at hand</li>
|
||||
<li data-list-item-id="e538922885f7a7991236c09b74b0ae62b">I have some <a href="#root/pOsGYCXsbNQG/_help_CdNpE2pqjmI6">scripts</a> which
|
||||
allow me to track certain daily metrics (like weight). These are saved
|
||||
into one daily "data note" (actually JSON <a href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_6f9hih2hXXZk">code note</a>).
|
||||
<ul>
|
||||
<li data-list-item-id="e5eb22957b0cdf5881ff7efc3b3671914">I have other scripts which then help me to visualize these data (see a
|
||||
<a
|
||||
class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/5668rwcirq1t/_help_R7abl2fc6Mxi">Weight Tracker</a> example)</li>
|
||||
<li data-list-item-id="ea748fe94bf10774baf5da985dde9cf19">I have a script which automatically imports all my comments from reddit
|
||||
into the day note.
|
||||
<ul>
|
||||
<li data-list-item-id="e4e1db895dcdb1b3fba6d5ad6b5e27320">People are sometimes wondering why. The answer is that I usually put some
|
||||
effort and thought into a comment and that's why I feel it's worth preserving,
|
||||
especially if it can be done automatically.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>TODO list for given day (this can be automated - see <a class="reference-link"
|
||||
href="#root/_help_xYjQUYhpbUEW">Task Manager</a>)</li>
|
||||
<li>Personal diary</li>
|
||||
<li><a href="#root/_help_IakOLONlIfGI">clones</a> of notes I created during this
|
||||
day (which kind of represents what I've been working on).</li>
|
||||
<li>I often clone notes (or sub-trees) of e.g. projects I'm working on at
|
||||
given day so they are at hand</li>
|
||||
<li>I have some <a href="#root/_help_CdNpE2pqjmI6">scripts</a> which allow me to track
|
||||
certain daily metrics (like weight). These are saved into one daily "data
|
||||
note" (actually JSON <a href="#root/_help_6f9hih2hXXZk">code note</a>).
|
||||
<ul>
|
||||
<li>I have other scripts which then help me to visualize these data (see a
|
||||
<a
|
||||
class="reference-link" href="#root/_help_R7abl2fc6Mxi">Weight Tracker</a> example)</li>
|
||||
<li>I have a script which automatically imports all my comments from reddit
|
||||
into the day note.
|
||||
<ul>
|
||||
<li>People are sometimes wondering why. The answer is that I usually put some
|
||||
effort and thought into a comment and that's why I feel it's worth preserving,
|
||||
especially if it can be done automatically.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>For most notes, this day note placement is <em>secondary</em> and their
|
||||
primary location is somewhere else (e.g. for a book review I've been working
|
||||
on it's <em>Book / Reviews</em>, not the day note). So for this pattern
|
||||
to work, ability to <a href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/BFs8mudNFgCS/_help_IakOLONlIfGI">clone</a> notes
|
||||
into multiple places is pretty fundamental.</p>
|
||||
to work, ability to <a href="#root/_help_IakOLONlIfGI">clone</a> notes into multiple
|
||||
places is pretty fundamental.</p>
|
||||
<h3>Projects</h3>
|
||||
<p><em>Project</em> is pretty self-explanatory, for me specifically it also
|
||||
means being long term (years) - an example of a project might be Trilium
|
||||
|
|
@ -210,11 +208,11 @@
|
|||
<h3>Credentials</h3>
|
||||
<p>I keep all my credentials in the knowledge base, they are sorted into
|
||||
categories - work related, project related, personal per country etc. These
|
||||
notes are of course <a href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/BFs8mudNFgCS/_help_bwg0e8ewQMak">protected</a> and
|
||||
are often cloned into other places (e.g. project credentials are cloned
|
||||
into the project itself). This is a pretty important advantage compared
|
||||
to traditional tools like KeePass - all the relevant information is centralized
|
||||
into one place without compromising security.</p>
|
||||
notes are of course <a href="#root/_help_bwg0e8ewQMak">protected</a> and are often
|
||||
cloned into other places (e.g. project credentials are cloned into the
|
||||
project itself). This is a pretty important advantage compared to traditional
|
||||
tools like KeePass - all the relevant information is centralized into one
|
||||
place without compromising security.</p>
|
||||
<h3>People profiles</h3>
|
||||
<p>This might seem creepy to some, but I keep a profile on most people. It
|
||||
contains pretty standard things like date of birth, contacts, address,
|
||||
|
|
@ -231,25 +229,25 @@
|
|||
further organization is by <em>clan</em> (as in "Smiths"). Some people are
|
||||
members of several such circles, so they are just cloned into multiple
|
||||
places.</p>
|
||||
<p>For family specifically it's pretty useful to create <a href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_iRwzGnHPzonm">relation map</a> to
|
||||
<p>For family specifically it's pretty useful to create <a href="#root/_help_iRwzGnHPzonm">relation map</a> to
|
||||
visualize relationships:</p>
|
||||
<figure class="image">
|
||||
<img style="aspect-ratio:941/758;" src="Patterns of personal knowl.png"
|
||||
width="941" height="758">
|
||||
</figure>
|
||||
<p><a class="reference-link" href="/images/relation-map-family.png|width=800">[missing note]</a>
|
||||
<p><a class="reference-link" href="#root/_help_lQcnSv5DMSe1">[missing note]</a>
|
||||
</p>
|
||||
<h3>Books</h3>
|
||||
<p>Of course, I keep standard "To read" list. I also keep a record on the
|
||||
books I've read - typically one book has one subtree where the root has
|
||||
some basic info like author, page count, publication date, date started,
|
||||
date finished (in the form of <a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/zEY4DaJG4YT5/_help_OFXdgB2nNk1F">Promoted Attributes</a>).
|
||||
date finished (in the form of <a class="reference-link" href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>).
|
||||
I also write a (private) review and keep list of highlights from Kindle,
|
||||
optionally with some commentary, these are usually stored in sub notes
|
||||
(unless they are pretty short).</p>
|
||||
<p>To keep the list of books manageable, I sort them per year (of reading
|
||||
them), this also gives me some basic overview of "reading performance"
|
||||
for given year. I plan to create a <a href="#root/pOsGYCXsbNQG/_help_CdNpE2pqjmI6">script</a> which
|
||||
for given year. I plan to create a <a href="#root/_help_CdNpE2pqjmI6">script</a> which
|
||||
would show some timeline chart visualizing book attributes <code>dateStarted</code> - <code>dateFinished</code> to
|
||||
have nicer view of my reading sprints and trends.</p>
|
||||
<p>Some specific authors also have their own note which contains cloned book
|
||||
|
|
@ -262,15 +260,15 @@
|
|||
<p>I sort personal diary notes directly under <em>day note</em> (explained
|
||||
above), but it can be cloned also to e.g. "trip note" (if the diary note
|
||||
is about given trip) or to person's profile (if the person plays a role
|
||||
in the diary note). All my diary notes are <a href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/BFs8mudNFgCS/_help_bwg0e8ewQMak">protected</a> since
|
||||
in the diary note). All my diary notes are <a href="#root/_help_bwg0e8ewQMak">protected</a> since
|
||||
they are usually pretty sensitive.</p>
|
||||
<h3>Documents</h3>
|
||||
<p>I keep all my personal documents (ID, passport, education certificates
|
||||
...) scanned in the knowledge base. They are <a href="#root/pOsGYCXsbNQG/Otzi9La2YAUX/_help_cbkrhQjrkKrh">synchronized</a> across
|
||||
...) scanned in the knowledge base. They are <a href="#root/_help_cbkrhQjrkKrh">synchronized</a> across
|
||||
every PC which provides decent backup and makes them available everywhere.</p>
|
||||
<p>Advantage compared to e.g. keeping them in Dropbox or Google Drive is
|
||||
that they are not stored on some 3rd party server and they can be encrypted
|
||||
(<a href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/BFs8mudNFgCS/_help_bwg0e8ewQMak">protected</a>).</p>
|
||||
(<a href="#root/_help_bwg0e8ewQMak">protected</a>).</p>
|
||||
<h3>Inventory</h3>
|
||||
<p>Inventory contains documents and other relevant importation for my important
|
||||
belongings - e.g. for car you can keep the registration card, maintenance
|
||||
|
|
@ -286,7 +284,7 @@
|
|||
<h3>Work knowledge base</h3>
|
||||
<p>I usually keep top level note for the company I currently work at (past
|
||||
jobs are moved elsewhere). I track basic organization of the company (divisions,
|
||||
business units), who is who (<a href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/_help_iRwzGnHPzonm">relation maps</a>)
|
||||
business units), who is who (<a href="#root/_help_iRwzGnHPzonm">relation maps</a>)
|
||||
are again useful for visualization), projects I work at etc.</p>
|
||||
<p>There's a number of credentials to various company services I need to
|
||||
use. Companies usually have a bunch of complex processes and tools. I record
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
/ installed applications, without any intermediary.</p>
|
||||
<p>Automatic network activity consists of:</p>
|
||||
<ul>
|
||||
<li data-list-item-id="edb71d4fe0be295aea582b3bd69ae896e">Trilium periodically queries URL <a href="https://github.com/TriliumNext/Trilium/releases">https://github.com/TriliumNext/Trilium/releases</a> to
|
||||
<li>Trilium periodically queries URL <a href="https://github.com/TriliumNext/Trilium/releases">https://github.com/TriliumNext/Trilium/releases</a> to
|
||||
see if there's a new stable version released. (check only, there's no automatic
|
||||
download and/or installation).</li>
|
||||
<li data-list-item-id="ea0de29e780d3a00603386fa133584eba">Trilium will download spelling dictionaries automatically as needed based
|
||||
<li>Trilium will download spelling dictionaries automatically as needed based
|
||||
on language settings</li>
|
||||
</ul>
|
||||
<h3>Trilium Web Clipper</h3>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 871 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 871 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 249 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/13_Tables_image.png
generated
vendored
Normal file
|
After Width: | Height: | Size: 219 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/14_Tables_image.png
generated
vendored
Normal file
|
After Width: | Height: | Size: 473 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/9_Tables_image.png
generated
vendored
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 541 B |
41
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Tables.html
generated
vendored
|
|
@ -9,7 +9,7 @@
|
|||
<h2>Formatting toolbar</h2>
|
||||
<p>When a table is selected, a special formatting toolbar will appear:</p>
|
||||
<img
|
||||
src="9_Tables_image.png" width="384"
|
||||
src="10_Tables_image.png" width="384"
|
||||
height="100">
|
||||
|
||||
<h2>Navigating a table</h2>
|
||||
|
|
@ -18,7 +18,7 @@ height="100">
|
|||
<ul>
|
||||
<li>Click on a cell to focus it.</li>
|
||||
<li>Click the
|
||||
<img src="10_Tables_image.png"
|
||||
<img src="11_Tables_image.png"
|
||||
width="28" height="27">button at the top or the bottom of a table to insert an empty paragraph
|
||||
near it.</li>
|
||||
<li>Click the
|
||||
|
|
@ -82,7 +82,7 @@ height="100">
|
|||
width="312" height="311">
|
||||
</figure>
|
||||
<p>The table properties can be accessed via the
|
||||
<img src="12_Tables_image.png"
|
||||
<img src="13_Tables_image.png"
|
||||
width="19" height="19">button and allows for the following adjustments:</p>
|
||||
<ul>
|
||||
<li>Border (not the border of the cells, but the outer rim of the table),
|
||||
|
|
@ -106,7 +106,7 @@ height="100">
|
|||
width="320" height="386">
|
||||
</figure>
|
||||
<p>Similarly to table properties, the
|
||||
<img src="11_Tables_image.png"
|
||||
<img src="12_Tables_image.png"
|
||||
width="19" height="19">button opens a popup which adjusts the styling of one or more cells (based
|
||||
on the user's selection).</p>
|
||||
<p>The following options can be adjusted:</p>
|
||||
|
|
@ -127,7 +127,38 @@ height="100">
|
|||
<img src="4_Tables_image.png"
|
||||
width="18" height="17">button to insert a caption or a text description of the table, which is
|
||||
going to be displayed above the table.</p>
|
||||
<h2>Tables with invisible borders</h2>
|
||||
<h2>Table borders</h2>
|
||||
<p>By default, tables will come with a predefined gray border.</p>
|
||||
<p>To adjust the borders, follow these steps:</p>
|
||||
<ol>
|
||||
<li>Select the table.</li>
|
||||
<li>In the floating panel, select the <em>Table properties</em> option (
|
||||
<img
|
||||
src="14_Tables_image.png" width="21"
|
||||
height="21">).
|
||||
<ol>
|
||||
<li>Look for the <em>Border</em> section at the top of the newly opened panel.</li>
|
||||
<li>This will control the outer borders of the table.</li>
|
||||
<li>Select a style for the border. Generally <em>Single</em> is the desirable
|
||||
option.</li>
|
||||
<li>Select a color for the border.</li>
|
||||
<li>Select a width for the border, expressed in pixels.</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>Select all the cells of the table and then press the <em>Cell properties</em> option
|
||||
(
|
||||
<img src="9_Tables_image.png" width="21"
|
||||
height="21">).
|
||||
<ol>
|
||||
<li>This will control the inner borders of the table, at cell level.</li>
|
||||
<li>Note that it's possible to change the borders individually by selecting
|
||||
one or more cells, case in which it will only change the borders that intersect
|
||||
these cells.</li>
|
||||
<li>Repeat the same steps as from step (2).</li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
<h3>Tables with invisible borders</h3>
|
||||
<p>Tables can be set to have invisible borders in order to allow for basic
|
||||
layouts (columns, grids) of text or <a href="#root/_help_mT0HEkOsz6i1">images</a> without
|
||||
the distraction of their border:</p>
|
||||
|
|
|
|||
2
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Script API.html
generated
vendored
|
|
@ -1,4 +1,4 @@
|
|||
<p>For <a href="#root/_help_CdNpE2pqjmI6">script code notes</a>, Trilium offers
|
||||
<p>tFor <a href="#root/_help_CdNpE2pqjmI6">script code notes</a>, Trilium offers
|
||||
an API that gives them access to various features of the application.</p>
|
||||
<p>There are two APIs:</p>
|
||||
<ul>
|
||||
|
|
|
|||
|
|
@ -1,106 +1,106 @@
|
|||
{
|
||||
"keyboard_actions": {
|
||||
"back-in-note-history": "Navega a la nota previa a l'historial",
|
||||
"forward-in-note-history": "Navega a la següent nota a l'historial",
|
||||
"dialogs": "Diàlegs",
|
||||
"other": "Altres"
|
||||
},
|
||||
"login": {
|
||||
"title": "Inicia sessió",
|
||||
"password": "Contrasenya",
|
||||
"button": "Inicia sessió"
|
||||
},
|
||||
"set_password": {
|
||||
"password": "Contrasenya"
|
||||
},
|
||||
"setup": {
|
||||
"next": "Següent",
|
||||
"title": "Configuració"
|
||||
},
|
||||
"setup_sync-from-desktop": {
|
||||
"step6-here": "aquí"
|
||||
},
|
||||
"setup_sync-from-server": {
|
||||
"server-host-placeholder": "https://<hostname>:<port>",
|
||||
"proxy-server-placeholder": "https://<hostname>:<port>",
|
||||
"note": "Nota:",
|
||||
"password": "Contrasenya",
|
||||
"password-placeholder": "Contrasenya",
|
||||
"back": "Torna"
|
||||
},
|
||||
"setup_sync-in-progress": {
|
||||
"outstanding-items-default": "N/A"
|
||||
},
|
||||
"share_page": {
|
||||
"parent": "pare:"
|
||||
},
|
||||
"weekdays": {
|
||||
"monday": "Dilluns",
|
||||
"tuesday": "Dimarts",
|
||||
"wednesday": "Dimecres",
|
||||
"thursday": "Dijous",
|
||||
"friday": "Divendres",
|
||||
"saturday": "Dissabte",
|
||||
"sunday": "Diumenge"
|
||||
},
|
||||
"months": {
|
||||
"january": "Gener",
|
||||
"february": "Febrer",
|
||||
"march": "Març",
|
||||
"april": "Abril",
|
||||
"may": "Maig",
|
||||
"june": "Juny",
|
||||
"july": "Juliol",
|
||||
"august": "Agost",
|
||||
"september": "Setembre",
|
||||
"october": "Octubre",
|
||||
"november": "Novembre",
|
||||
"december": "Desembre"
|
||||
},
|
||||
"special_notes": {
|
||||
"search_prefix": "Cerca:"
|
||||
},
|
||||
"hidden-subtree": {
|
||||
"spacer-title": "Espaiador",
|
||||
"calendar-title": "Calendari",
|
||||
"bookmarks-title": "Marcadors",
|
||||
"settings-title": "Ajustos",
|
||||
"options-title": "Opcions",
|
||||
"appearance-title": "Aparença",
|
||||
"shortcuts-title": "Dreceres",
|
||||
"images-title": "Imatges",
|
||||
"spellcheck-title": "Correció ortogràfica",
|
||||
"password-title": "Contrasenya",
|
||||
"multi-factor-authentication-title": "MFA",
|
||||
"etapi-title": "ETAPI",
|
||||
"backup-title": "Còpia de seguretat",
|
||||
"sync-title": "Sincronització",
|
||||
"ai-llm-title": "AI/LLM",
|
||||
"other": "Altres",
|
||||
"advanced-title": "Avançat",
|
||||
"inbox-title": "Safata d'entrada"
|
||||
},
|
||||
"notes": {
|
||||
"duplicate-note-suffix": "(dup)"
|
||||
},
|
||||
"tray": {
|
||||
"bookmarks": "Marcadors"
|
||||
},
|
||||
"modals": {
|
||||
"error_title": "Error"
|
||||
},
|
||||
"share_theme": {
|
||||
"search_placeholder": "Cerca...",
|
||||
"subpages": "Subpàgines:",
|
||||
"expand": "Expandeix"
|
||||
},
|
||||
"hidden_subtree_templates": {
|
||||
"description": "Descripció",
|
||||
"calendar": "Calendari",
|
||||
"table": "Taula",
|
||||
"geolocation": "Geolocalització",
|
||||
"board": "Tauler",
|
||||
"status": "Estat",
|
||||
"board_status_done": "Fet"
|
||||
}
|
||||
"keyboard_actions": {
|
||||
"back-in-note-history": "Navega a la nota previa a l'historial",
|
||||
"forward-in-note-history": "Navega a la següent nota a l'historial",
|
||||
"dialogs": "Diàlegs",
|
||||
"other": "Altres"
|
||||
},
|
||||
"login": {
|
||||
"title": "Inicia sessió",
|
||||
"password": "Contrasenya",
|
||||
"button": "Inicia sessió"
|
||||
},
|
||||
"set_password": {
|
||||
"password": "Contrasenya"
|
||||
},
|
||||
"setup": {
|
||||
"next": "Següent",
|
||||
"title": "Configuració"
|
||||
},
|
||||
"setup_sync-from-desktop": {
|
||||
"step6-here": "aquí"
|
||||
},
|
||||
"setup_sync-from-server": {
|
||||
"server-host-placeholder": "https://<hostname>:<port>",
|
||||
"proxy-server-placeholder": "https://<hostname>:<port>",
|
||||
"note": "Nota:",
|
||||
"password": "Contrasenya",
|
||||
"password-placeholder": "Contrasenya",
|
||||
"back": "Torna"
|
||||
},
|
||||
"setup_sync-in-progress": {
|
||||
"outstanding-items-default": "N/A"
|
||||
},
|
||||
"share_page": {
|
||||
"parent": "pare:"
|
||||
},
|
||||
"weekdays": {
|
||||
"monday": "Dilluns",
|
||||
"tuesday": "Dimarts",
|
||||
"wednesday": "Dimecres",
|
||||
"thursday": "Dijous",
|
||||
"friday": "Divendres",
|
||||
"saturday": "Dissabte",
|
||||
"sunday": "Diumenge"
|
||||
},
|
||||
"months": {
|
||||
"january": "Gener",
|
||||
"february": "Febrer",
|
||||
"march": "Març",
|
||||
"april": "Abril",
|
||||
"may": "Maig",
|
||||
"june": "Juny",
|
||||
"july": "Juliol",
|
||||
"august": "Agost",
|
||||
"september": "Setembre",
|
||||
"october": "Octubre",
|
||||
"november": "Novembre",
|
||||
"december": "Desembre"
|
||||
},
|
||||
"special_notes": {
|
||||
"search_prefix": "Cerca:"
|
||||
},
|
||||
"hidden-subtree": {
|
||||
"spacer-title": "Espaiador",
|
||||
"calendar-title": "Calendari",
|
||||
"bookmarks-title": "Marcadors",
|
||||
"settings-title": "Ajustos",
|
||||
"options-title": "Opcions",
|
||||
"appearance-title": "Aparença",
|
||||
"shortcuts-title": "Dreceres",
|
||||
"images-title": "Imatges",
|
||||
"spellcheck-title": "Correció ortogràfica",
|
||||
"password-title": "Contrasenya",
|
||||
"multi-factor-authentication-title": "MFA",
|
||||
"etapi-title": "ETAPI",
|
||||
"backup-title": "Còpia de seguretat",
|
||||
"sync-title": "Sincronització",
|
||||
"ai-llm-title": "AI/LLM",
|
||||
"other": "Altres",
|
||||
"advanced-title": "Avançat",
|
||||
"inbox-title": "Safata d'entrada"
|
||||
},
|
||||
"notes": {
|
||||
"duplicate-note-suffix": "(dup)"
|
||||
},
|
||||
"tray": {
|
||||
"bookmarks": "Marcadors"
|
||||
},
|
||||
"modals": {
|
||||
"error_title": "Error"
|
||||
},
|
||||
"share_theme": {
|
||||
"search_placeholder": "Cerca...",
|
||||
"subpages": "Subpàgines:",
|
||||
"expand": "Expandeix"
|
||||
},
|
||||
"hidden_subtree_templates": {
|
||||
"description": "Descripció",
|
||||
"calendar": "Calendari",
|
||||
"table": "Taula",
|
||||
"geolocation": "Geolocalització",
|
||||
"board": "Tauler",
|
||||
"status": "Estat",
|
||||
"board_status_done": "Fet"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -402,7 +402,7 @@
|
|||
"end-date": "終了日",
|
||||
"start-time": "開始時刻",
|
||||
"end-time": "終了時間",
|
||||
"board": "ボード",
|
||||
"board": "カンバンボード",
|
||||
"status": "ステータス",
|
||||
"board_note_first": "最初のノート",
|
||||
"board_note_second": "2番目のノート",
|
||||
|
|
|
|||
|
|
@ -417,7 +417,7 @@
|
|||
"end-time": "結束時間",
|
||||
"geolocation": "地理位置",
|
||||
"built-in-templates": "內建模版",
|
||||
"board": "看板",
|
||||
"board": "儀表板",
|
||||
"status": "狀態",
|
||||
"board_note_first": "第一個筆記",
|
||||
"board_note_second": "第二個筆記",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import type { Application } from "express";
|
|||
import dayjs from "dayjs";
|
||||
import { type SQLiteSessionStore } from "./session_parser.js";
|
||||
import { SessionData } from "express-session";
|
||||
import cls from "../services/cls.js";
|
||||
|
||||
let app: Application;
|
||||
let sessionStore: SQLiteSessionStore;
|
||||
|
|
@ -106,7 +107,7 @@ describe("Login Route test", () => {
|
|||
expect(expiry).toBeTruthy();
|
||||
|
||||
vi.setSystemTime(expiry!);
|
||||
vi.advanceTimersByTime(CLEAN_UP_INTERVAL);
|
||||
cls.init(() => vi.advanceTimersByTime(CLEAN_UP_INTERVAL));
|
||||
({ session } = await getSessionFromCookie(setCookieHeader));
|
||||
expect(session).toBeFalsy();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -41,6 +41,14 @@ function getDefaultKeyboardActions() {
|
|||
scope: "window",
|
||||
ignoreFromCommandPalette: true
|
||||
},
|
||||
{
|
||||
actionName: "openTodayNote",
|
||||
friendlyName: t("hidden-subtree.open-today-journal-note-title"),
|
||||
iconClass: "bx bx-calendar",
|
||||
defaultShortcuts: [],
|
||||
description: t("hidden-subtree.open-today-journal-note-title"),
|
||||
scope: "window"
|
||||
},
|
||||
{
|
||||
actionName: "commandPalette",
|
||||
friendlyName: t("keyboard_action_names.command-palette"),
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import { highlightAuto } from "@triliumnext/highlightjs";
|
|||
import becca from "../becca/becca.js";
|
||||
import { BAttachment } from "../services/backend_script_entrypoint.js";
|
||||
import SAttachment from "./shaca/entities/sattachment.js";
|
||||
import { sanitizeUrl } from "@braintree/sanitize-url";
|
||||
|
||||
const shareAdjustedAssetPath = isDev ? assetPath : `../${assetPath}`;
|
||||
const templateCache: Map<string, string> = new Map();
|
||||
|
|
@ -250,6 +251,8 @@ export function getContent(note: SNote | BNote) {
|
|||
renderFile(note, result);
|
||||
} else if (note.type === "book") {
|
||||
result.isEmpty = true;
|
||||
} else if (note.type === "webView") {
|
||||
renderWebView(note, result);
|
||||
} else {
|
||||
result.content = `<p>${t("content_renderer.note-cannot-be-displayed")}</p>`;
|
||||
}
|
||||
|
|
@ -414,6 +417,13 @@ function renderFile(note: SNote | BNote, result: Result) {
|
|||
}
|
||||
}
|
||||
|
||||
function renderWebView(note: SNote | BNote, result: Result) {
|
||||
const url = note.getLabelValue("webViewSrc");
|
||||
if (!url) return;
|
||||
|
||||
result.content = `<iframe class="webview" src="${sanitizeUrl(url)}" sandbox="allow-same-origin allow-scripts allow-popups"></iframe>`;
|
||||
}
|
||||
|
||||
export default {
|
||||
getContent
|
||||
};
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
"calendar_description": "カレンダーを使って、個人的な予定や仕事上の予定を管理しましょう。終日イベントと複数日イベントに対応しています。週、月、年表示でイベントを一目で確認できます。イベントの追加やドラッグ操作で簡単に行えます。",
|
||||
"table_title": "テーブル",
|
||||
"table_description": "ノートに関する情報を表形式で表示・編集できます。テキスト、数値、チェックボックス、日時、リンク、色など、様々な列タイプに対応し、リレーションもサポートしています。オプションで、ノートを表内のツリー階層に表示することもできます。",
|
||||
"board_title": "ボード",
|
||||
"board_title": "カンバンボード",
|
||||
"board_description": "新しい項目や列を簡単に作成し、ボード上でドラッグするだけでステータスを変更できるカンバン ボードで、タスクやプロジェクトのステータスを整理できます。",
|
||||
"geomap_title": "ジオマップ",
|
||||
"geomap_description": "カスタマイズ可能なマーカーを使って、休暇を計画したり、興味のある場所を地図上に直接マークしたりできます。記録されたGPXトラックを表示して、旅程を追跡できます。",
|
||||
|
|
|
|||
|
|
@ -1 +1,22 @@
|
|||
{}
|
||||
{
|
||||
"get-started": {
|
||||
"title": "Começar",
|
||||
"architecture": "Arquitetura:",
|
||||
"older_releases": "Ver versões anteriores",
|
||||
"server_title": "Configurar um servidor para aceder a partir de vários dispositivos"
|
||||
},
|
||||
"hero_section": {
|
||||
"title": "Organiza as tuas ideias. Constrói a tua base de conhecimento pessoal.",
|
||||
"subtitle": "O Trilium é uma solução de código aberto para tomar notas e organizar a tua base de conhecimento pessoal. Usa-o localmente no teu computador ou sincroniza-o com o teu próprio servidor para teres as tuas notas acessíveis em qualquer lugar.",
|
||||
"get_started": "Começar",
|
||||
"github": "GitHub",
|
||||
"dockerhub": "Docker Hub",
|
||||
"screenshot_alt": "Captura de ecrã da aplicação Trilium Notes para computador"
|
||||
},
|
||||
"organization_benefits": {
|
||||
"title": "Organização",
|
||||
"note_structure_description": "As notas podem ser organizadas de forma hierárquica. Não há necessidade de pastas, pois cada nota pode conter sub notas. Uma única nota pode ser adicionada em vários locais da hierarquia.",
|
||||
"attributes_description": "Utiliza relações entre notas ou adiciona etiquetas para uma categorização fácil. Usa atributos promovidos para inserir informação estruturada, que pode ser utilizada em tabelas ou quadros.",
|
||||
"hoisting_description": "Separa facilmente as tuas notas pessoais e de trabalho agrupando-as num espaço de trabalho, que focaliza a árvore de notas para mostrar apenas um conjunto específico de notas."
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@
|
|||
"calendar_description": "使用行事曆規劃個人或專業活動,支援全天及多日活動。透過週、月、年檢視模式,一覽所有活動。通過簡單互動即可新增或拖曳活動。",
|
||||
"table_title": "表格",
|
||||
"table_description": "以表格結構顯示並編輯筆記資訊,支援多種欄位類型,包括文字、數字、核取方塊、日期與時間、連結及顏色,並支援關聯功能。可選擇性地在表格內以樹狀層級結構顯示筆記內容。",
|
||||
"board_title": "看板",
|
||||
"board_title": "儀表板",
|
||||
"board_description": "將您的任務或專案狀態整理成看板,輕鬆建立新項目與欄位,並透過在看板上拖曳即可簡單變更狀態。",
|
||||
"geomap_title": "地理地圖",
|
||||
"geomap_description": "使用可自訂的標記,直接在地圖上規劃您的假期行程或標記感興趣的地點。顯示已記錄的GPX軌跡,以便追蹤行程路線。",
|
||||
|
|
@ -115,7 +115,7 @@
|
|||
},
|
||||
"social_buttons": {
|
||||
"github": "GitHub",
|
||||
"github_discussions": "GitHub Discussions",
|
||||
"github_discussions": "GitHub 討論",
|
||||
"matrix": "Matrix",
|
||||
"reddit": "Reddit"
|
||||
},
|
||||
|
|
|
|||
13
docs/README-pt.md
vendored
|
|
@ -25,27 +25,28 @@ status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted
|
|||
| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
|
||||
[Spanish](./docs/README-es.md)
|
||||
|
||||
Trilium Notes is a free and open-source, cross-platform hierarchical note taking
|
||||
application with focus on building large personal knowledge bases.
|
||||
Trilium Notes é uma aplicação gratuita e de código aberto, multiplataforma, para
|
||||
a criação hierárquica de notas, com foco na construção de grandes bases de
|
||||
conhecimento pessoais.
|
||||
|
||||
See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
|
||||
quick overview:
|
||||
|
||||
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="./docs/app.png" alt="Trilium Screenshot" width="1000"></a>
|
||||
|
||||
## ⏬ Download
|
||||
## ⏬ Transferir
|
||||
- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) –
|
||||
stable version, recommended for most users.
|
||||
- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) –
|
||||
unstable development version, updated daily with the latest features and
|
||||
fixes.
|
||||
|
||||
## 📚 Documentation
|
||||
## 📚 Documentação
|
||||
|
||||
**Visit our comprehensive documentation at
|
||||
[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
|
||||
|
||||
Our documentation is available in multiple formats:
|
||||
A nossa documentação está disponível em múltiplos formatos:
|
||||
- **Online Documentation**: Browse the full documentation at
|
||||
[docs.triliumnotes.org](https://docs.triliumnotes.org/)
|
||||
- **In-App Help**: Press `F1` within Trilium to access the same documentation
|
||||
|
|
@ -53,7 +54,7 @@ Our documentation is available in multiple formats:
|
|||
- **GitHub**: Navigate through the [User
|
||||
Guide](./docs/User%20Guide/User%20Guide/) in this repository
|
||||
|
||||
### Quick Links
|
||||
### Links rápidos
|
||||
- [Getting Started Guide](https://docs.triliumnotes.org/)
|
||||
- [Installation
|
||||
Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
|
||||
|
|
|
|||
156
docs/User Guide/!!!meta.json
vendored
|
|
@ -331,6 +331,41 @@
|
|||
"format": "markdown",
|
||||
"dataFileName": "Using the desktop application .md",
|
||||
"attachments": []
|
||||
},
|
||||
{
|
||||
"isClone": false,
|
||||
"noteId": "Rp0q8bSP6Ayl",
|
||||
"notePath": [
|
||||
"pOsGYCXsbNQG",
|
||||
"Otzi9La2YAUX",
|
||||
"poXkQfguuA0U",
|
||||
"Rp0q8bSP6Ayl"
|
||||
],
|
||||
"title": "System Requirements",
|
||||
"notePosition": 20,
|
||||
"prefix": null,
|
||||
"isExpanded": false,
|
||||
"type": "text",
|
||||
"mime": "text/html",
|
||||
"attributes": [
|
||||
{
|
||||
"type": "label",
|
||||
"name": "shareAlias",
|
||||
"value": "system-requirements",
|
||||
"isInheritable": false,
|
||||
"position": 30
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "iconClass",
|
||||
"value": "bx bx-chip",
|
||||
"isInheritable": false,
|
||||
"position": 40
|
||||
}
|
||||
],
|
||||
"format": "markdown",
|
||||
"dataFileName": "System Requirements.md",
|
||||
"attachments": []
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -1151,6 +1186,41 @@
|
|||
"format": "markdown",
|
||||
"dataFileName": "Third-party cloud hosting.md",
|
||||
"attachments": []
|
||||
},
|
||||
{
|
||||
"isClone": false,
|
||||
"noteId": "iGTnKjubbXkA",
|
||||
"notePath": [
|
||||
"pOsGYCXsbNQG",
|
||||
"Otzi9La2YAUX",
|
||||
"WOcw2SLH6tbX",
|
||||
"iGTnKjubbXkA"
|
||||
],
|
||||
"title": "System Requirements",
|
||||
"notePosition": 140,
|
||||
"prefix": null,
|
||||
"isExpanded": false,
|
||||
"type": "text",
|
||||
"mime": "text/html",
|
||||
"attributes": [
|
||||
{
|
||||
"type": "label",
|
||||
"name": "shareAlias",
|
||||
"value": "system-requirements",
|
||||
"isInheritable": false,
|
||||
"position": 30
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "iconClass",
|
||||
"value": "bx bx-chip",
|
||||
"isInheritable": false,
|
||||
"position": 40
|
||||
}
|
||||
],
|
||||
"format": "markdown",
|
||||
"dataFileName": "System Requirements.md",
|
||||
"attachments": []
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
@ -8281,7 +8351,7 @@
|
|||
"dataFileName": "8_Tables_image.png"
|
||||
},
|
||||
{
|
||||
"attachmentId": "UdhsypjV4pzZ",
|
||||
"attachmentId": "rrLM5BQCZ5ci",
|
||||
"title": "image.png",
|
||||
"role": "image",
|
||||
"mime": "image/png",
|
||||
|
|
@ -8289,7 +8359,7 @@
|
|||
"dataFileName": "9_Tables_image.png"
|
||||
},
|
||||
{
|
||||
"attachmentId": "VerzwlO9y6Na",
|
||||
"attachmentId": "UdhsypjV4pzZ",
|
||||
"title": "image.png",
|
||||
"role": "image",
|
||||
"mime": "image/png",
|
||||
|
|
@ -8297,7 +8367,7 @@
|
|||
"dataFileName": "10_Tables_image.png"
|
||||
},
|
||||
{
|
||||
"attachmentId": "wYkQvargZlNF",
|
||||
"attachmentId": "VerzwlO9y6Na",
|
||||
"title": "image.png",
|
||||
"role": "image",
|
||||
"mime": "image/png",
|
||||
|
|
@ -8305,12 +8375,28 @@
|
|||
"dataFileName": "11_Tables_image.png"
|
||||
},
|
||||
{
|
||||
"attachmentId": "YFGeAN41kvZY",
|
||||
"attachmentId": "wYkQvargZlNF",
|
||||
"title": "image.png",
|
||||
"role": "image",
|
||||
"mime": "image/png",
|
||||
"position": 10,
|
||||
"dataFileName": "12_Tables_image.png"
|
||||
},
|
||||
{
|
||||
"attachmentId": "YFGeAN41kvZY",
|
||||
"title": "image.png",
|
||||
"role": "image",
|
||||
"mime": "image/png",
|
||||
"position": 10,
|
||||
"dataFileName": "13_Tables_image.png"
|
||||
},
|
||||
{
|
||||
"attachmentId": "zRLxHrKJiK8N",
|
||||
"title": "image.png",
|
||||
"role": "image",
|
||||
"mime": "image/png",
|
||||
"position": 10,
|
||||
"dataFileName": "14_Tables_image.png"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -15102,41 +15188,55 @@
|
|||
"name": "internalLink",
|
||||
"value": "xYjQUYhpbUEW",
|
||||
"isInheritable": false,
|
||||
"position": 30
|
||||
"position": 10
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "IakOLONlIfGI",
|
||||
"isInheritable": false,
|
||||
"position": 40
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "CdNpE2pqjmI6",
|
||||
"isInheritable": false,
|
||||
"position": 50
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "6f9hih2hXXZk",
|
||||
"isInheritable": false,
|
||||
"position": 60
|
||||
"position": 20
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "R7abl2fc6Mxi",
|
||||
"isInheritable": false,
|
||||
"position": 70
|
||||
"position": 30
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "bwg0e8ewQMak",
|
||||
"isInheritable": false,
|
||||
"position": 40
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "OFXdgB2nNk1F",
|
||||
"isInheritable": false,
|
||||
"position": 50
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "cbkrhQjrkKrh",
|
||||
"isInheritable": false,
|
||||
"position": 60
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "CdNpE2pqjmI6",
|
||||
"isInheritable": false,
|
||||
"position": 70
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "6f9hih2hXXZk",
|
||||
"isInheritable": false,
|
||||
"position": 80
|
||||
},
|
||||
{
|
||||
|
|
@ -15146,20 +15246,6 @@
|
|||
"isInheritable": false,
|
||||
"position": 90
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "OFXdgB2nNk1F",
|
||||
"isInheritable": false,
|
||||
"position": 100
|
||||
},
|
||||
{
|
||||
"type": "relation",
|
||||
"name": "internalLink",
|
||||
"value": "cbkrhQjrkKrh",
|
||||
"isInheritable": false,
|
||||
"position": 110
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"name": "shareAlias",
|
||||
|
|
|
|||
12
docs/User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements.md
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# System Requirements
|
||||
The desktop version of Trilium supports all three main operating systems:
|
||||
|
||||
* Windows
|
||||
* Windows 11 is officially supported.
|
||||
* Windows on ARM is also supported
|
||||
* Linux:
|
||||
* Most modern distributions are supported, including NixOS.
|
||||
* ARM is supported in `aarch64` (no ARM v7 support).
|
||||
* macOS
|
||||
* Minimum supported operating system: macOS Monterey
|
||||
* Both Intel and Apple Silicon devices are supported.
|
||||
11
docs/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.md
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# System Requirements
|
||||
* Using Docker, the server can be run on Windows, Linux and macOS devices.
|
||||
* Native binaries are provided for Linux x64 and ARM (`aarch64`).
|
||||
|
||||
## Legacy ARM support
|
||||
|
||||
The Docker builds also provide `linux/arm/v7` and `linux/arm/v8` platforms. These platforms are considered legacy since Trilium uses Node.js version 24 which have [officially downgraded support](https://github.com/nodejs/node/commit/6682861d6f) for these platforms to “experimental”.
|
||||
|
||||
As a result, Trilium needs to use Node.js 22 for these versions. As soon as soon Node.js 22 will no longer be compatible, support for `armv7` and `armv8` will be dropped entirely.
|
||||
|
||||
Regardless of upstream support, these platforms are supported on a best-effort basis and are not officially supported by the Trilium development team. Bug reports are accepted but they will not be treated with priority; contributions are welcome.
|
||||
|
|
@ -112,7 +112,7 @@ For family specifically it's pretty useful to create [relation map](../Note%20Ty
|
|||
|
||||
<figure class="image"><img style="aspect-ratio:941/758;" src="Patterns of personal knowl.png" width="941" height="758"></figure>
|
||||
|
||||
<a class="reference-link" href="/images/relation-map-family.png|width=800">[missing note]</a>
|
||||
<a class="reference-link" href="#root/lQcnSv5DMSe1">[missing note]</a>
|
||||
|
||||
### Books
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 871 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 249 B After Width: | Height: | Size: 871 B |
|
Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 249 B |
BIN
docs/User Guide/User Guide/Note Types/Text/13_Tables_image.png
vendored
Normal file
|
After Width: | Height: | Size: 219 B |
BIN
docs/User Guide/User Guide/Note Types/Text/14_Tables_image.png
vendored
Normal file
|
After Width: | Height: | Size: 473 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 541 B |
|
|
@ -9,13 +9,13 @@ To create a table, simply press the table button and select with the mouse the d
|
|||
|
||||
When a table is selected, a special formatting toolbar will appear:
|
||||
|
||||
<img src="9_Tables_image.png" width="384" height="100">
|
||||
<img src="10_Tables_image.png" width="384" height="100">
|
||||
|
||||
## Navigating a table
|
||||
|
||||
* Using the mouse:
|
||||
* Click on a cell to focus it.
|
||||
* Click the <img src="10_Tables_image.png" width="28" height="27"> button at the top or the bottom of a table to insert an empty paragraph near it.
|
||||
* Click the <img src="11_Tables_image.png" width="28" height="27"> button at the top or the bottom of a table to insert an empty paragraph near it.
|
||||
* Click the <img src="5_Tables_image.png" width="24" height="26"> button at the top-left of the table to select it entirely (for easy copy-pasting or cutting) or drag and drop it to relocate the table.
|
||||
* Using the keyboard:
|
||||
* Use the arrow keys on the keyboard to easily navigate between cells.
|
||||
|
|
@ -48,7 +48,7 @@ More options are available by pressing the arrow next to it:
|
|||
|
||||
<figure class="image image-style-align-right"><img style="aspect-ratio:312/311;" src="2_Tables_image.png" width="312" height="311"></figure>
|
||||
|
||||
The table properties can be accessed via the <img src="12_Tables_image.png" width="19" height="19"> button and allows for the following adjustments:
|
||||
The table properties can be accessed via the <img src="13_Tables_image.png" width="19" height="19"> button and allows for the following adjustments:
|
||||
|
||||
* Border (not the border of the cells, but the outer rim of the table), which includes the style (single, double), color and width.
|
||||
* The background color, with none set by default.
|
||||
|
|
@ -63,7 +63,7 @@ The table will immediately update to reflect the changes, but the _Save_ button
|
|||
|
||||
<figure class="image image-style-align-right"><img style="aspect-ratio:320/386;" src="3_Tables_image.png" width="320" height="386"></figure>
|
||||
|
||||
Similarly to table properties, the <img src="11_Tables_image.png" width="19" height="19"> button opens a popup which adjusts the styling of one or more cells (based on the user's selection).
|
||||
Similarly to table properties, the <img src="12_Tables_image.png" width="19" height="19"> button opens a popup which adjusts the styling of one or more cells (based on the user's selection).
|
||||
|
||||
The following options can be adjusted:
|
||||
|
||||
|
|
@ -79,7 +79,25 @@ The cell will immediately update to reflect the changes, but the _Save_ button m
|
|||
|
||||
Press the <img src="4_Tables_image.png" width="18" height="17"> button to insert a caption or a text description of the table, which is going to be displayed above the table.
|
||||
|
||||
## Tables with invisible borders
|
||||
## Table borders
|
||||
|
||||
By default, tables will come with a predefined gray border.
|
||||
|
||||
To adjust the borders, follow these steps:
|
||||
|
||||
1. Select the table.
|
||||
2. In the floating panel, select the _Table properties_ option (<img src="14_Tables_image.png" width="21" height="21">).
|
||||
1. Look for the _Border_ section at the top of the newly opened panel.
|
||||
2. This will control the outer borders of the table.
|
||||
3. Select a style for the border. Generally _Single_ is the desirable option.
|
||||
4. Select a color for the border.
|
||||
5. Select a width for the border, expressed in pixels.
|
||||
3. Select all the cells of the table and then press the _Cell properties_ option (<img src="9_Tables_image.png" width="21" height="21">).
|
||||
1. This will control the inner borders of the table, at cell level.
|
||||
2. Note that it's possible to change the borders individually by selecting one or more cells, case in which it will only change the borders that intersect these cells.
|
||||
3. Repeat the same steps as from step (2).
|
||||
|
||||
### Tables with invisible borders
|
||||
|
||||
Tables can be set to have invisible borders in order to allow for basic layouts (columns, grids) of text or [images](Images.md) without the distraction of their border:
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# Script API
|
||||
For [script code notes](../Scripting.md), Trilium offers an API that gives them access to various features of the application.
|
||||
tFor [script code notes](../Scripting.md), Trilium offers an API that gives them access to various features of the application.
|
||||
|
||||
There are two APIs:
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ const enum KeyboardActionNamesEnum {
|
|||
activateNextTab,
|
||||
activatePreviousTab,
|
||||
openNewWindow,
|
||||
openTodayNote,
|
||||
toggleTray,
|
||||
toggleZenMode,
|
||||
firstTab,
|
||||
|
|
|
|||
|
|
@ -52,4 +52,19 @@
|
|||
|
||||
body:not(.math-loaded) .math-tex {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
body.type-webView #main {
|
||||
max-width: unset;
|
||||
}
|
||||
|
||||
body.type-webView #content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
iframe.webview {
|
||||
width: 100%;
|
||||
flex-grow: 1;
|
||||
}
|
||||