Compare commits
486 Commits
v0.99.0
...
kev/share-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63c54010eb | ||
|
|
cec868459a | ||
|
|
6c106300d4 | ||
|
|
69a59f0935 | ||
|
|
fa7575ed00 | ||
|
|
b2174549c7 | ||
|
|
19f16274ab | ||
|
|
7f88ae5494 | ||
|
|
c820b5caa4 | ||
|
|
b1638e1ffc | ||
|
|
f2e60f52d2 | ||
|
|
d845343e97 | ||
|
|
ee2edc92e7 | ||
|
|
332216f5f5 | ||
|
|
4d4cd7d130 | ||
|
|
b3cc51ce63 | ||
|
|
05645d93ef | ||
|
|
a2d09efca4 | ||
|
|
1212f9a9e9 | ||
|
|
75f7986e36 | ||
|
|
2447a6fc8d | ||
|
|
38a4a3e7b6 | ||
|
|
28240d549d | ||
|
|
5da46a1678 | ||
|
|
e592a37799 | ||
|
|
15d00b61dd | ||
|
|
5d0b6f9fad | ||
|
|
2a40ffd164 | ||
|
|
8c687de3c6 | ||
|
|
27415b4e16 | ||
|
|
ce0b39765e | ||
|
|
fafc4af237 | ||
|
|
76a283ed77 | ||
|
|
99500bca8f | ||
|
|
a982fc326f | ||
|
|
b16309d01a | ||
|
|
1bfc3d450f | ||
|
|
37b63d4ea9 | ||
|
|
e7315e7d35 | ||
|
|
718dffa672 | ||
|
|
c3dd9865e7 | ||
|
|
1702ec5644 | ||
|
|
dfddf044cf | ||
|
|
24a632056a | ||
|
|
dc7f4a6cf3 | ||
|
|
cd100f37fe | ||
|
|
984e8bbba0 | ||
|
|
fcc22cc212 | ||
|
|
4101acc2e3 | ||
|
|
f30bdd54b1 | ||
|
|
62bb8ac89a | ||
|
|
33dfcb1c6e | ||
|
|
5969815ed1 | ||
|
|
2b2125c702 | ||
|
|
85a4557bb0 | ||
|
|
0d9e4a1aa2 | ||
|
|
4a01181110 | ||
|
|
89dfc480f3 | ||
|
|
c178fc2957 | ||
|
|
9d8c62caaf | ||
|
|
279f014c42 | ||
|
|
826e9c7114 | ||
|
|
384c8649b4 | ||
|
|
ecc8bc3866 | ||
|
|
bb4d723f18 | ||
|
|
e250510ab1 | ||
|
|
dc630f927f | ||
|
|
e47cb13b89 | ||
|
|
838ae315e3 | ||
|
|
58afa86a2b | ||
|
|
5b90ece12f | ||
|
|
afb2072b97 | ||
|
|
8e0ca56b85 | ||
|
|
8e4cf38840 | ||
|
|
cb872d3638 | ||
|
|
781be26833 | ||
|
|
0ad5f3493d | ||
|
|
15bb3acb31 | ||
|
|
a43ddf3f9f | ||
|
|
8417bfebb0 | ||
|
|
28e8ea2da9 | ||
|
|
393264b4a1 | ||
|
|
9306a28c87 | ||
|
|
77fef38009 | ||
|
|
c14ea42978 | ||
|
|
341cd62b13 | ||
|
|
9e6cfe7c1e | ||
|
|
9695dd404b | ||
|
|
5e6be01251 | ||
|
|
f367a1c776 | ||
|
|
bce987c67a | ||
|
|
e7a9f9c566 | ||
|
|
33150e3a98 | ||
|
|
e1aead098e | ||
|
|
9f9a276a51 | ||
|
|
873df6da6c | ||
|
|
2e353afb98 | ||
|
|
d497688d9a | ||
|
|
2cf3a04482 | ||
|
|
e50fd6f540 | ||
|
|
5096163ae3 | ||
|
|
0d6640ae14 | ||
|
|
52ac93e99c | ||
|
|
674b0a8215 | ||
|
|
ec56b297dc | ||
|
|
a477cc22e6 | ||
|
|
119278b5f5 | ||
|
|
5414fbeacb | ||
|
|
a4b01bba9b | ||
|
|
bab536751a | ||
|
|
7657e17373 | ||
|
|
30f530abdb | ||
|
|
1d373bc7d5 | ||
|
|
9d3c5d04b9 | ||
|
|
ba91fbbe6b | ||
|
|
f6898779bb | ||
|
|
dbb90bdd2b | ||
|
|
f442c56ed6 | ||
|
|
e971a9cb03 | ||
|
|
b450a4faa0 | ||
|
|
9a2440942b | ||
|
|
c3151f9afa | ||
|
|
f277612444 | ||
|
|
1b92ad2f53 | ||
|
|
f96abe0e45 | ||
|
|
142a276cc4 | ||
|
|
a52b0a45fe | ||
|
|
6df40ec80a | ||
|
|
713340a9ba | ||
|
|
ee8b41c81b | ||
|
|
dd477258a9 | ||
|
|
7c30e2b4f6 | ||
|
|
37a3c00214 | ||
|
|
d30cdadb2d | ||
|
|
58f0d01944 | ||
|
|
d4791944b0 | ||
|
|
92a052674f | ||
|
|
d49ce7c289 | ||
|
|
5f38d52f20 | ||
|
|
6286745684 | ||
|
|
4f574f8aa4 | ||
|
|
a3e27248ad | ||
|
|
e48569245d | ||
|
|
473f7a83e6 | ||
|
|
1c622fa848 | ||
|
|
409e650506 | ||
|
|
d461f5474e | ||
|
|
36e731cc2c | ||
|
|
b77fbcb7ad | ||
|
|
7b7dc346ca | ||
|
|
b4f8a02ba6 | ||
|
|
9d6a5d1bb5 | ||
|
|
fa747c5c4b | ||
|
|
bc93f40cdb | ||
|
|
a9975798d7 | ||
|
|
4ea4404aba | ||
|
|
361848b518 | ||
|
|
8c46103f63 | ||
|
|
edcdecb720 | ||
|
|
e1ef02058d | ||
|
|
d9746df16b | ||
|
|
b4c20d9683 | ||
|
|
59955b7414 | ||
|
|
95b1c82ccb | ||
|
|
7cfebbabeb | ||
|
|
f412874c73 | ||
|
|
873c4c6636 | ||
|
|
efcd54be50 | ||
|
|
ae0bb78b1c | ||
|
|
29fa335a27 | ||
|
|
3a84a78cd1 | ||
|
|
df6bb7e6bf | ||
|
|
dfcaebc613 | ||
|
|
1ece35536b | ||
|
|
1a90548622 | ||
|
|
cc7e5bdb80 | ||
|
|
5c73b21ff7 | ||
|
|
e9078107ae | ||
|
|
6c24b18bc1 | ||
|
|
be7ff73142 | ||
|
|
63ac45d369 | ||
|
|
f164a4b786 | ||
|
|
806d601115 | ||
|
|
6b3cf49398 | ||
|
|
b8851565eb | ||
|
|
888d0d1084 | ||
|
|
0a25d4db0d | ||
|
|
4a72f2c6a7 | ||
|
|
446bdd6a5e | ||
|
|
cb26fac2ea | ||
|
|
3a45440c74 | ||
|
|
e115d6e275 | ||
|
|
fc614ccf83 | ||
|
|
17c9db7698 | ||
|
|
d483b6e840 | ||
|
|
032819e812 | ||
|
|
9d7d415756 | ||
|
|
e9d432b4bf | ||
|
|
be35584f9a | ||
|
|
80be4cc6b8 | ||
|
|
c74ba44b91 | ||
|
|
28a79baa01 | ||
|
|
5279601105 | ||
|
|
c2639951a5 | ||
|
|
6bfab1387d | ||
|
|
4212d208fc | ||
|
|
9e5bded4cf | ||
|
|
ce0763f03d | ||
|
|
e860b7aa32 | ||
|
|
0be9310450 | ||
|
|
d870a260e1 | ||
|
|
2de545be1c | ||
|
|
bf04e5a15b | ||
|
|
46d2d7e160 | ||
|
|
1775b22c7a | ||
|
|
ae022b6389 | ||
|
|
d4155102c5 | ||
|
|
3b1a25230f | ||
|
|
d8639793e0 | ||
|
|
06fec88214 | ||
|
|
da93928976 | ||
|
|
2314443d19 | ||
|
|
4b34047324 | ||
|
|
bc1d4de13d | ||
|
|
6bae4c8075 | ||
|
|
84a89fd0ba | ||
|
|
1447fa6f14 | ||
|
|
bc4937f9d2 | ||
|
|
43a7b828d9 | ||
|
|
d611591e1a | ||
|
|
f7a565ec73 | ||
|
|
6b35e909ab | ||
|
|
53b9ce0f3d | ||
|
|
5e1cd7d6ac | ||
|
|
acb98061ce | ||
|
|
979ef6287f | ||
|
|
58a883797d | ||
|
|
f718e87673 | ||
|
|
4c6a742af7 | ||
|
|
848dc51a7a | ||
|
|
44541b66c4 | ||
|
|
3694018441 | ||
|
|
3874e54d76 | ||
|
|
10de141c00 | ||
|
|
806ba320a8 | ||
|
|
09ef24d27d | ||
|
|
236f3cada7 | ||
|
|
c2afef4832 | ||
|
|
b9fa7d70bb | ||
|
|
9ac31f2667 | ||
|
|
639d1befef | ||
|
|
b99c8d5cc1 | ||
|
|
0770398010 | ||
|
|
c3d24451b7 | ||
|
|
4db1a3bdec | ||
|
|
2a0410f597 | ||
|
|
7e79d907be | ||
|
|
c0ea441c59 | ||
|
|
290d134d88 | ||
|
|
517bfd2c9a | ||
|
|
31990a9992 | ||
|
|
151a2c284d | ||
|
|
614a8f177c | ||
|
|
8b5e53e579 | ||
|
|
1ad8b1bf85 | ||
|
|
a393584a2a | ||
|
|
804fc72ed8 | ||
|
|
3f8f05368c | ||
|
|
5a56ba2fd5 | ||
|
|
de7c1329f8 | ||
|
|
6fc5aa0090 | ||
|
|
2eaeccda05 | ||
|
|
56f970ab08 | ||
|
|
d1cb9e4a3f | ||
|
|
992adcab65 | ||
|
|
d3b3a83477 | ||
|
|
98ad371d01 | ||
|
|
3cdae245e1 | ||
|
|
887c78d893 | ||
|
|
e208497d71 | ||
|
|
dd744b4e0d | ||
|
|
647cbc7e7a | ||
|
|
cc93102859 | ||
|
|
5b673e753b | ||
|
|
bd2eb6fdbb | ||
|
|
c25f783980 | ||
|
|
9b37708f0c | ||
|
|
7386bb35e5 | ||
|
|
9274522877 | ||
|
|
1b444686af | ||
|
|
b3dfdacdc3 | ||
|
|
159fab41ce | ||
|
|
093f48f76a | ||
|
|
6998a3593e | ||
|
|
c3250cfd72 | ||
|
|
e52eb9bcb0 | ||
|
|
5ac2892e34 | ||
|
|
a15aab395a | ||
|
|
f991276152 | ||
|
|
1f71ceb611 | ||
|
|
92e14159b9 | ||
|
|
b8419604e5 | ||
|
|
096fd82e64 | ||
|
|
cbaae52a7e | ||
|
|
5905299331 | ||
|
|
2df0763141 | ||
|
|
fb7453f7b0 | ||
|
|
974d20b0ba | ||
|
|
c2f6d9aa07 | ||
|
|
6194386464 | ||
|
|
329ecd6894 | ||
|
|
150f470aee | ||
|
|
83b843f047 | ||
|
|
24043611c3 | ||
|
|
2c99ba64bc | ||
|
|
ffe30bed75 | ||
|
|
b6088f488f | ||
|
|
e04165a184 | ||
|
|
d7aa95ce8e | ||
|
|
28214ec9fb | ||
|
|
28952a5253 | ||
|
|
d66505e5bc | ||
|
|
c4354032b5 | ||
|
|
d23550d3ef | ||
|
|
894ec1e3c1 | ||
|
|
bdb03f8d51 | ||
|
|
61ea27c8f4 | ||
|
|
ac45617d8f | ||
|
|
35853ff988 | ||
|
|
80009f99e8 | ||
|
|
0b1d001c20 | ||
|
|
cb63e88cdc | ||
|
|
a5c7f4221b | ||
|
|
f61010a65e | ||
|
|
b99f5b2cbe | ||
|
|
9919d0cbfa | ||
|
|
fe8099d8d1 | ||
|
|
0da336c8e1 | ||
|
|
37f5d19739 | ||
|
|
2ac0d84cee | ||
|
|
e639961b68 | ||
|
|
adf29b4e6e | ||
|
|
b00cd032a3 | ||
|
|
60e8f46777 | ||
|
|
ef2860770f | ||
|
|
aa562e9c26 | ||
|
|
866ccc1696 | ||
|
|
dbe241dee7 | ||
|
|
bd32a08e11 | ||
|
|
8416dab870 | ||
|
|
6fda669307 | ||
|
|
c21a9223f5 | ||
|
|
4e4e65b462 | ||
|
|
5e07231d78 | ||
|
|
d71d1ce8b4 | ||
|
|
892e84deaa | ||
|
|
7a73af0299 | ||
|
|
65dae511e5 | ||
|
|
55c70b404c | ||
|
|
8117586548 | ||
|
|
3ce9c7ba3d | ||
|
|
ab162efab8 | ||
|
|
babfc3cfb9 | ||
|
|
3d780d7d02 | ||
|
|
5b81aff8be | ||
|
|
86b14a5763 | ||
|
|
14a2794d15 | ||
|
|
eef68aca0f | ||
|
|
f6f7445528 | ||
|
|
f7c0184a6b | ||
|
|
65bc599a16 | ||
|
|
b445bef74c | ||
|
|
93d7ba032d | ||
|
|
334e2c3949 | ||
|
|
a11797fe6e | ||
|
|
3cf0ec5740 | ||
|
|
40f578f43f | ||
|
|
428abb4591 | ||
|
|
4954fa89b5 | ||
|
|
10f7837a7f | ||
|
|
fca310cc31 | ||
|
|
cf58b511df | ||
|
|
9da1f52a71 | ||
|
|
5c8e674ddb | ||
|
|
f027b25bc2 | ||
|
|
cfe71a3426 | ||
|
|
70afb636ca | ||
|
|
818efe7fb0 | ||
|
|
3c2263db86 | ||
|
|
7c30bc9c72 | ||
|
|
ec8d719d41 | ||
|
|
5f884c4440 | ||
|
|
e6c806d462 | ||
|
|
4afceeca79 | ||
|
|
7990c60ce7 | ||
|
|
74c248bce2 | ||
|
|
2df646f80c | ||
|
|
768260782a | ||
|
|
4eff105af5 | ||
|
|
68ef6ea142 | ||
|
|
772d4ac5a1 | ||
|
|
b3e1a79d40 | ||
|
|
d7afa8526d | ||
|
|
b4a2a6c12b | ||
|
|
32c15f5e03 | ||
|
|
b5a491820c | ||
|
|
8a477c87e0 | ||
|
|
8bcae8cdb8 | ||
|
|
ea87161a91 | ||
|
|
f2bb6cb848 | ||
|
|
fecb677552 | ||
|
|
3ba9b56833 | ||
|
|
a329e7d72a | ||
|
|
2568f6bb53 | ||
|
|
23936596fa | ||
|
|
398db56fe7 | ||
|
|
423ef14ca6 | ||
|
|
9921d3e0a7 | ||
|
|
ac22fd8d60 | ||
|
|
ff065964e9 | ||
|
|
951dda50ac | ||
|
|
01bd2f1815 | ||
|
|
570f8fd155 | ||
|
|
5d348e3ad6 | ||
|
|
9573346d55 | ||
|
|
e4570a1bb0 | ||
|
|
b884aba244 | ||
|
|
9c73908560 | ||
|
|
b399d292a9 | ||
|
|
a557d9770f | ||
|
|
a11ebfeb42 | ||
|
|
4695c3726d | ||
|
|
324f79ceb9 | ||
|
|
fc5e459895 | ||
|
|
bdaba67859 | ||
|
|
2b01e2fdaf | ||
|
|
9967da6ea1 | ||
|
|
a56a00ba2f | ||
|
|
82df26031f | ||
|
|
b4af8e7339 | ||
|
|
e6180f427b | ||
|
|
9a95ec170d | ||
|
|
7be0507db5 | ||
|
|
1d324ab3b0 | ||
|
|
9e00ed7e14 | ||
|
|
02a6652b44 | ||
|
|
e19f7b286a | ||
|
|
50301a97f3 | ||
|
|
408e31079c | ||
|
|
bf81e159ca | ||
|
|
b1f89296ff | ||
|
|
1948302a64 | ||
|
|
187585b32f | ||
|
|
d351fd506a | ||
|
|
1cf29c985e | ||
|
|
04374540ad | ||
|
|
ce8f3a4f8f | ||
|
|
acb21b992d | ||
|
|
15f344fe4a | ||
|
|
120324c3f0 | ||
|
|
59ce8b912d | ||
|
|
619888847b | ||
|
|
06b782e91d | ||
|
|
1d7e0a193a | ||
|
|
2d815852e4 | ||
|
|
735a7104f1 | ||
|
|
e3e4772aab | ||
|
|
8bb65b94d0 | ||
|
|
b9edae4fc9 | ||
|
|
27aae18345 | ||
|
|
47db63d909 | ||
|
|
8ebeead32c | ||
|
|
09d43e710f | ||
|
|
7240f64a49 | ||
|
|
ab868d76db | ||
|
|
acdaf6a636 | ||
|
|
6dccef1689 | ||
|
|
f7ec726b15 | ||
|
|
781570f950 | ||
|
|
7774d41457 | ||
|
|
29c8bcaf6e | ||
|
|
2b3ae94f8d | ||
|
|
5c618abc79 | ||
|
|
220cf8aedd | ||
|
|
78f16ddc12 | ||
|
|
0048e95e0c |
103
.github/actions/deploy-to-cloudflare-pages/action.yml
vendored
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
name: "Deploy to Cloudflare Pages"
|
||||||
|
description: "Deploys to Cloudflare Pages on either a temporary branch with preview comment, or on the production version if on the main branch."
|
||||||
|
inputs:
|
||||||
|
project_name:
|
||||||
|
description: "CloudFlare Pages project name"
|
||||||
|
comment_body:
|
||||||
|
description: "The message to display when deployment is ready"
|
||||||
|
default: "Deployment is ready."
|
||||||
|
required: false
|
||||||
|
production_url:
|
||||||
|
description: "The URL to mention as the production URL."
|
||||||
|
required: true
|
||||||
|
deploy_dir:
|
||||||
|
description: "The directory from which to deploy."
|
||||||
|
required: true
|
||||||
|
cloudflare_api_token:
|
||||||
|
description: "The Cloudflare API token to use for deployment."
|
||||||
|
required: true
|
||||||
|
cloudflare_account_id:
|
||||||
|
description: "The Cloudflare account ID to use for deployment."
|
||||||
|
required: true
|
||||||
|
github_token:
|
||||||
|
description: "The GitHub token to use for posting PR comments."
|
||||||
|
required: true
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
# Install wrangler globally to avoid workspace issues
|
||||||
|
- name: Install Wrangler
|
||||||
|
shell: bash
|
||||||
|
run: npm install -g wrangler
|
||||||
|
|
||||||
|
# Deploy using Wrangler (use pre-installed wrangler)
|
||||||
|
- name: Deploy to Cloudflare Pages
|
||||||
|
id: deploy
|
||||||
|
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
|
||||||
|
uses: cloudflare/wrangler-action@v3
|
||||||
|
with:
|
||||||
|
apiToken: ${{ inputs.cloudflare_api_token }}
|
||||||
|
accountId: ${{ inputs.cloudflare_account_id }}
|
||||||
|
command: pages deploy ${{ inputs.deploy_dir }} --project-name=${{ inputs.project_name}} --branch=${{ github.ref_name }}
|
||||||
|
wranglerVersion: '' # Use pre-installed version
|
||||||
|
|
||||||
|
# Deploy preview for PRs
|
||||||
|
- name: Deploy Preview to Cloudflare Pages
|
||||||
|
id: preview-deployment
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
uses: cloudflare/wrangler-action@v3
|
||||||
|
with:
|
||||||
|
apiToken: ${{ inputs.cloudflare_api_token }}
|
||||||
|
accountId: ${{ inputs.cloudflare_account_id }}
|
||||||
|
command: pages deploy ${{ inputs.deploy_dir }} --project-name=${{ inputs.project_name}} --branch=pr-${{ github.event.pull_request.number }}
|
||||||
|
wranglerVersion: '' # Use pre-installed version
|
||||||
|
|
||||||
|
# Post deployment URL as PR comment
|
||||||
|
- name: Comment PR with Preview URL
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
uses: actions/github-script@v8
|
||||||
|
env:
|
||||||
|
COMMENT_BODY: ${{ inputs.comment_body }}
|
||||||
|
PRODUCTION_URL: ${{ inputs.production_url }}
|
||||||
|
PROJECT_NAME: ${{ inputs.project_name }}
|
||||||
|
with:
|
||||||
|
github-token: ${{ inputs.github_token }}
|
||||||
|
script: |
|
||||||
|
const prNumber = context.issue.number;
|
||||||
|
// Construct preview URL based on Cloudflare Pages pattern
|
||||||
|
const projectName = process.env.PROJECT_NAME;
|
||||||
|
const previewUrl = `https://pr-${prNumber}.${projectName}.pages.dev`;
|
||||||
|
|
||||||
|
// Check if we already commented
|
||||||
|
const comments = await github.rest.issues.listComments({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: prNumber
|
||||||
|
});
|
||||||
|
|
||||||
|
const customMessage = process.env.COMMENT_BODY;
|
||||||
|
const botComment = comments.data.find(comment =>
|
||||||
|
comment.user.type === 'Bot' &&
|
||||||
|
comment.body.includes(customMessage)
|
||||||
|
);
|
||||||
|
|
||||||
|
const mainUrl = process.env.PRODUCTION_URL;
|
||||||
|
const commentBody = `${customMessage}!\n\n🔗 Preview URL: ${previewUrl}\n📖 Production URL: ${mainUrl}\n\n✅ All checks passed\n\n_This preview will be updated automatically with new commits._`;
|
||||||
|
|
||||||
|
if (botComment) {
|
||||||
|
// Update existing comment
|
||||||
|
await github.rest.issues.updateComment({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
comment_id: botComment.id,
|
||||||
|
body: commentBody
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Create new comment
|
||||||
|
await github.rest.issues.createComment({
|
||||||
|
issue_number: prNumber,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: commentBody
|
||||||
|
});
|
||||||
|
}
|
||||||
78
.github/workflows/deploy-docs.yml
vendored
@@ -116,73 +116,13 @@ jobs:
|
|||||||
test -d site/assets || (echo "ERROR: site/assets directory not found" && exit 1)
|
test -d site/assets || (echo "ERROR: site/assets directory not found" && exit 1)
|
||||||
echo "✅ Site validation passed"
|
echo "✅ Site validation passed"
|
||||||
|
|
||||||
# Install wrangler globally to avoid workspace issues
|
- name: Deploy
|
||||||
- name: Install Wrangler
|
uses: ./.github/actions/deploy-to-cloudflare-pages
|
||||||
run: |
|
|
||||||
npm install -g wrangler
|
|
||||||
|
|
||||||
# Deploy using Wrangler (use pre-installed wrangler)
|
|
||||||
- name: Deploy to Cloudflare Pages
|
|
||||||
id: deploy
|
|
||||||
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
|
|
||||||
uses: cloudflare/wrangler-action@v3
|
|
||||||
with:
|
with:
|
||||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
project_name: "trilium-docs"
|
||||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
comment_body: "📚 Documentation preview is ready"
|
||||||
command: pages deploy site --project-name=trilium-docs --branch=${{ github.ref_name }}
|
production_url: "https://docs.triliumnotes.org"
|
||||||
wranglerVersion: '' # Use pre-installed version
|
deploy_dir: "site"
|
||||||
|
cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
# Deploy preview for PRs
|
cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
- name: Deploy Preview to Cloudflare Pages
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
id: preview-deployment
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
uses: cloudflare/wrangler-action@v3
|
|
||||||
with:
|
|
||||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
|
||||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
||||||
command: pages deploy site --project-name=trilium-docs --branch=pr-${{ github.event.pull_request.number }}
|
|
||||||
wranglerVersion: '' # Use pre-installed version
|
|
||||||
|
|
||||||
# Post deployment URL as PR comment
|
|
||||||
- name: Comment PR with Preview URL
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
uses: actions/github-script@v8
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const prNumber = context.issue.number;
|
|
||||||
// Construct preview URL based on Cloudflare Pages pattern
|
|
||||||
const previewUrl = `https://pr-${prNumber}.trilium-docs.pages.dev`;
|
|
||||||
const mainUrl = 'https://docs.triliumnotes.org';
|
|
||||||
|
|
||||||
// Check if we already commented
|
|
||||||
const comments = await github.rest.issues.listComments({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
issue_number: prNumber
|
|
||||||
});
|
|
||||||
|
|
||||||
const botComment = comments.data.find(comment =>
|
|
||||||
comment.user.type === 'Bot' &&
|
|
||||||
comment.body.includes('Documentation preview is ready')
|
|
||||||
);
|
|
||||||
|
|
||||||
const commentBody = `📚 Documentation preview is ready!\n\n🔗 Preview URL: ${previewUrl}\n📖 Production URL: ${mainUrl}\n\n✅ All checks passed\n\n_This preview will be updated automatically with new commits._`;
|
|
||||||
|
|
||||||
if (botComment) {
|
|
||||||
// Update existing comment
|
|
||||||
await github.rest.issues.updateComment({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
comment_id: botComment.id,
|
|
||||||
body: commentBody
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// Create new comment
|
|
||||||
await github.rest.issues.createComment({
|
|
||||||
issue_number: prNumber,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
body: commentBody
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|||||||
5
.github/workflows/nightly.yml
vendored
@@ -19,7 +19,6 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GITHUB_UPLOAD_URL: https://uploads.github.com/repos/TriliumNext/Notes/releases/179589950/assets{?name,label}
|
|
||||||
GITHUB_RELEASE_ID: 179589950
|
GITHUB_RELEASE_ID: 179589950
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@@ -78,7 +77,7 @@ jobs:
|
|||||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
|
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2.3.3
|
uses: softprops/action-gh-release@v2.3.4
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
make_latest: false
|
make_latest: false
|
||||||
@@ -119,7 +118,7 @@ jobs:
|
|||||||
arch: ${{ matrix.arch }}
|
arch: ${{ matrix.arch }}
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
uses: softprops/action-gh-release@v2.3.3
|
uses: softprops/action-gh-release@v2.3.4
|
||||||
if: ${{ github.event_name != 'pull_request' }}
|
if: ${{ github.event_name != 'pull_request' }}
|
||||||
with:
|
with:
|
||||||
make_latest: false
|
make_latest: false
|
||||||
|
|||||||
2
.github/workflows/playwright.yml
vendored
@@ -4,6 +4,8 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- "apps/website/**"
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
|
|||||||
2
.github/workflows/release.yml
vendored
@@ -127,7 +127,7 @@ jobs:
|
|||||||
path: upload
|
path: upload
|
||||||
|
|
||||||
- name: Publish stable release
|
- name: Publish stable release
|
||||||
uses: softprops/action-gh-release@v2.3.3
|
uses: softprops/action-gh-release@v2.3.4
|
||||||
with:
|
with:
|
||||||
draft: false
|
draft: false
|
||||||
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
|
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
|
||||||
|
|||||||
48
.github/workflows/website.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
name: Deploy website
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- "apps/website/**"
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- "apps/website/**"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Build & deploy website
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
deployments: write
|
||||||
|
pull-requests: write # For PR preview comments
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: pnpm/action-setup@v4
|
||||||
|
- name: Set up node & dependencies
|
||||||
|
uses: actions/setup-node@v5
|
||||||
|
with:
|
||||||
|
node-version: 22
|
||||||
|
cache: "pnpm"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --filter website --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Build the website
|
||||||
|
run: pnpm website:build
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: ./.github/actions/deploy-to-cloudflare-pages
|
||||||
|
with:
|
||||||
|
project_name: "trilium-homepage"
|
||||||
|
comment_body: "📚 Website preview is ready"
|
||||||
|
production_url: "https://triliumnotes.org"
|
||||||
|
deploy_dir: "apps/website/dist"
|
||||||
|
cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||||
|
cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
34
README.md
@@ -5,7 +5,7 @@
|
|||||||

|

|
||||||
[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [](https://hosted.weblate.org/engage/trilium/)
|
[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [](https://hosted.weblate.org/engage/trilium/)
|
||||||
|
|
||||||
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README.ru.md) | [Japanese](./docs/README.ja.md) | [Italian](./docs/README.it.md) | [Spanish](./docs/README.es.md)
|
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | [Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md) | [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 is a free and open-source, cross-platform hierarchical note taking application with focus on building large personal knowledge bases.
|
||||||
|
|
||||||
@@ -166,16 +166,34 @@ Please view the [documentation guide](https://github.com/TriliumNext/Trilium/blo
|
|||||||
|
|
||||||
## 👏 Shoutouts
|
## 👏 Shoutouts
|
||||||
|
|
||||||
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
|
* [zadam](https://github.com/zadam) for the original concept and implementation of the application.
|
||||||
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
|
* [Larsa](https://github.com/LarsaSara) for designing the application icon.
|
||||||
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
|
* [nriver](https://github.com/nriver) for his work on internationalization.
|
||||||
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
|
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
|
||||||
|
* [antoniotejada](https://github.com/nriver) for the original syntax highlight widget.
|
||||||
|
* [Dosu](https://dosu.dev/) for providing us with the automated responses to GitHub issues and discussions.
|
||||||
|
* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
|
||||||
|
|
||||||
|
Trilium would not be possible without the technologies behind it:
|
||||||
|
|
||||||
|
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind text notes. We are grateful for being offered a set of the premium features.
|
||||||
|
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages.
|
||||||
|
* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite whiteboard used in Canvas notes.
|
||||||
|
* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the mind map functionality.
|
||||||
|
* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical maps.
|
||||||
|
* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive table used in collections.
|
||||||
|
* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library without real competition.
|
||||||
|
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library. Used in [relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
|
||||||
|
|
||||||
## 🤝 Support
|
## 🤝 Support
|
||||||
|
|
||||||
Support for the TriliumNext organization will be possible in the near future. For now, you can:
|
Trilium is built and maintained with [hundreds of hours of work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your support keeps it open-source, improves features, and covers costs such as hosting.
|
||||||
- Support continued development on TriliumNext by supporting our developers: [eliandoran](https://github.com/sponsors/eliandoran) (See the [repository insights]([developers]([url](https://github.com/TriliumNext/trilium/graphs/contributors))) for a full list)
|
|
||||||
- Show a token of gratitude to the original Trilium developer ([zadam](https://github.com/sponsors/zadam)) via [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2).
|
Consider supporting the main developer ([eliandoran](https://github.com/eliandoran)) of the application via:
|
||||||
|
|
||||||
|
- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
|
||||||
|
- [PayPal](https://paypal.me/eliandoran)
|
||||||
|
- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
|
||||||
|
|
||||||
|
|
||||||
## 🔑 License
|
## 🔑 License
|
||||||
|
|||||||
@@ -35,13 +35,13 @@
|
|||||||
"chore:generate-openapi": "tsx bin/generate-openapi.js"
|
"chore:generate-openapi": "tsx bin/generate-openapi.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@playwright/test": "1.55.0",
|
"@playwright/test": "1.55.1",
|
||||||
"@stylistic/eslint-plugin": "5.4.0",
|
"@stylistic/eslint-plugin": "5.4.0",
|
||||||
"@types/express": "5.0.3",
|
"@types/express": "5.0.3",
|
||||||
"@types/node": "22.18.6",
|
"@types/node": "22.18.8",
|
||||||
"@types/yargs": "17.0.33",
|
"@types/yargs": "17.0.33",
|
||||||
"@vitest/coverage-v8": "3.2.4",
|
"@vitest/coverage-v8": "3.2.4",
|
||||||
"eslint": "9.36.0",
|
"eslint": "9.37.0",
|
||||||
"eslint-plugin-simple-import-sort": "12.1.1",
|
"eslint-plugin-simple-import-sort": "12.1.1",
|
||||||
"esm": "3.2.25",
|
"esm": "3.2.25",
|
||||||
"jsdoc": "4.0.4",
|
"jsdoc": "4.0.4",
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "@triliumnext/client",
|
"name": "@triliumnext/client",
|
||||||
"version": "0.99.0",
|
"version": "0.99.1",
|
||||||
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
|
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
|
||||||
"private": true,
|
"private": true,
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Trilium Notes Team",
|
"name": "Trilium Notes Team",
|
||||||
"email": "contact@eliandoran.me",
|
"email": "contact@eliandoran.me",
|
||||||
"url": "https://github.com/TriliumNext/Notes"
|
"url": "https://github.com/TriliumNext/Trilium"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
|
"build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build",
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
|
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint/js": "9.36.0",
|
"@eslint/js": "9.37.0",
|
||||||
"@excalidraw/excalidraw": "0.18.0",
|
"@excalidraw/excalidraw": "0.18.0",
|
||||||
"@fullcalendar/core": "6.1.19",
|
"@fullcalendar/core": "6.1.19",
|
||||||
"@fullcalendar/daygrid": "6.1.19",
|
"@fullcalendar/daygrid": "6.1.19",
|
||||||
@@ -41,23 +41,23 @@
|
|||||||
"draggabilly": "3.0.0",
|
"draggabilly": "3.0.0",
|
||||||
"force-graph": "1.51.0",
|
"force-graph": "1.51.0",
|
||||||
"globals": "16.4.0",
|
"globals": "16.4.0",
|
||||||
"i18next": "25.5.2",
|
"i18next": "25.5.3",
|
||||||
"i18next-http-backend": "3.0.2",
|
"i18next-http-backend": "3.0.2",
|
||||||
"jquery": "3.7.1",
|
"jquery": "3.7.1",
|
||||||
"jquery.fancytree": "2.38.5",
|
"jquery.fancytree": "2.38.5",
|
||||||
"jsplumb": "2.15.6",
|
"jsplumb": "2.15.6",
|
||||||
"katex": "0.16.22",
|
"katex": "0.16.23",
|
||||||
"knockout": "3.5.1",
|
"knockout": "3.5.1",
|
||||||
"leaflet": "1.9.4",
|
"leaflet": "1.9.4",
|
||||||
"leaflet-gpx": "2.2.0",
|
"leaflet-gpx": "2.2.0",
|
||||||
"mark.js": "8.11.1",
|
"mark.js": "8.11.1",
|
||||||
"marked": "16.3.0",
|
"marked": "16.3.0",
|
||||||
"mermaid": "11.12.0",
|
"mermaid": "11.12.0",
|
||||||
"mind-elixir": "5.2.0",
|
"mind-elixir": "5.1.1",
|
||||||
"normalize.css": "8.0.1",
|
"normalize.css": "8.0.1",
|
||||||
"panzoom": "9.4.3",
|
"panzoom": "9.4.3",
|
||||||
"preact": "10.27.2",
|
"preact": "10.27.2",
|
||||||
"react-i18next": "15.7.3",
|
"react-i18next": "16.0.0",
|
||||||
"split.js": "1.6.5",
|
"split.js": "1.6.5",
|
||||||
"svg-pan-zoom": "3.6.2",
|
"svg-pan-zoom": "3.6.2",
|
||||||
"tabulator-tables": "6.3.1",
|
"tabulator-tables": "6.3.1",
|
||||||
@@ -73,8 +73,8 @@
|
|||||||
"@types/mark.js": "8.11.12",
|
"@types/mark.js": "8.11.12",
|
||||||
"@types/tabulator-tables": "6.2.11",
|
"@types/tabulator-tables": "6.2.11",
|
||||||
"copy-webpack-plugin": "13.0.1",
|
"copy-webpack-plugin": "13.0.1",
|
||||||
"happy-dom": "18.0.1",
|
"happy-dom": "19.0.2",
|
||||||
"script-loader": "0.7.2",
|
"script-loader": "0.7.2",
|
||||||
"vite-plugin-static-copy": "3.1.2"
|
"vite-plugin-static-copy": "3.1.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -21,6 +21,7 @@ import dayjs from "dayjs";
|
|||||||
import type NoteContext from "../components/note_context.js";
|
import type NoteContext from "../components/note_context.js";
|
||||||
import type NoteDetailWidget from "../widgets/note_detail.js";
|
import type NoteDetailWidget from "../widgets/note_detail.js";
|
||||||
import type Component from "../components/component.js";
|
import type Component from "../components/component.js";
|
||||||
|
import { formatLogMessage } from "@triliumnext/commons";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A whole number
|
* A whole number
|
||||||
@@ -455,7 +456,7 @@ export interface Api {
|
|||||||
/**
|
/**
|
||||||
* Log given message to the log pane in UI
|
* Log given message to the log pane in UI
|
||||||
*/
|
*/
|
||||||
log(message: string): void;
|
log(message: string | object): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -696,7 +697,7 @@ function FrontendScriptApi(this: Api, startNote: FNote, currentNote: FNote, orig
|
|||||||
this.log = (message) => {
|
this.log = (message) => {
|
||||||
const { noteId } = this.startNote;
|
const { noteId } = this.startNote;
|
||||||
|
|
||||||
message = `${utils.now()}: ${message}`;
|
message = `${utils.now()}: ${formatLogMessage(message)}`;
|
||||||
|
|
||||||
console.log(`Script ${noteId}: ${message}`);
|
console.log(`Script ${noteId}: ${message}`);
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,7 @@ async function getLinkIcon(noteId: string, viewMode: ViewMode | undefined) {
|
|||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove `string` once all the view modes have been mapped.
|
export type ViewMode = "default" | "source" | "attachments" | "contextual-help";
|
||||||
type ViewMode = "default" | "source" | "attachments" | "contextual-help" | string;
|
|
||||||
|
|
||||||
export interface ViewScope {
|
export interface ViewScope {
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -119,11 +119,6 @@ describe("shortcuts", () => {
|
|||||||
metaKey: options.metaKey || false
|
metaKey: options.metaKey || false
|
||||||
} as KeyboardEvent);
|
} as KeyboardEvent);
|
||||||
|
|
||||||
it("should match simple key shortcuts", () => {
|
|
||||||
const event = createKeyboardEvent({ key: "a", code: "KeyA" });
|
|
||||||
expect(matchesShortcut(event, "a")).toBe(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should match shortcuts with modifiers", () => {
|
it("should match shortcuts with modifiers", () => {
|
||||||
const event = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
const event = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
||||||
expect(matchesShortcut(event, "ctrl+a")).toBe(true);
|
expect(matchesShortcut(event, "ctrl+a")).toBe(true);
|
||||||
@@ -148,6 +143,28 @@ describe("shortcuts", () => {
|
|||||||
expect(matchesShortcut(event, "a")).toBe(false);
|
expect(matchesShortcut(event, "a")).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should not match when no modifiers are used", () => {
|
||||||
|
const event = createKeyboardEvent({ key: "a", code: "KeyA" });
|
||||||
|
expect(matchesShortcut(event, "a")).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should match some keys even with no modifiers", () => {
|
||||||
|
// Bare function keys
|
||||||
|
let event = createKeyboardEvent({ key: "F1", code: "F1" });
|
||||||
|
expect(matchesShortcut(event, "F1")).toBeTruthy();
|
||||||
|
expect(matchesShortcut(event, "f1")).toBeTruthy();
|
||||||
|
|
||||||
|
// Function keys with shift
|
||||||
|
event = createKeyboardEvent({ key: "F1", code: "F1", shiftKey: true });
|
||||||
|
expect(matchesShortcut(event, "Shift+F1")).toBeTruthy();
|
||||||
|
|
||||||
|
// Special keys
|
||||||
|
for (const keyCode of [ "Delete", "Enter" ]) {
|
||||||
|
event = createKeyboardEvent({ key: keyCode, code: keyCode });
|
||||||
|
expect(matchesShortcut(event, keyCode), `Key ${keyCode}`).toBeTruthy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it("should handle alternative modifier names", () => {
|
it("should handle alternative modifier names", () => {
|
||||||
const ctrlEvent = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
const ctrlEvent = createKeyboardEvent({ key: "a", code: "KeyA", ctrlKey: true });
|
||||||
expect(matchesShortcut(ctrlEvent, "control+a")).toBe(true);
|
expect(matchesShortcut(ctrlEvent, "control+a")).toBe(true);
|
||||||
|
|||||||
@@ -36,10 +36,19 @@ const keyMap: { [key: string]: string[] } = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Function keys
|
// Function keys
|
||||||
|
const functionKeyCodes: string[] = [];
|
||||||
for (let i = 1; i <= 19; i++) {
|
for (let i = 1; i <= 19; i++) {
|
||||||
keyMap[`f${i}`] = [`F${i}`];
|
const keyCode = `F${i}`;
|
||||||
|
functionKeyCodes.push(keyCode);
|
||||||
|
keyMap[`f${i}`] = [ keyCode ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const KEYCODES_WITH_NO_MODIFIER = new Set([
|
||||||
|
"Delete",
|
||||||
|
"Enter",
|
||||||
|
...functionKeyCodes
|
||||||
|
]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if IME (Input Method Editor) is composing
|
* Check if IME (Input Method Editor) is composing
|
||||||
* This is used to prevent keyboard shortcuts from firing during IME composition
|
* This is used to prevent keyboard shortcuts from firing during IME composition
|
||||||
@@ -162,6 +171,12 @@ export function matchesShortcut(e: KeyboardEvent, shortcut: string): boolean {
|
|||||||
const expectedShift = modifiers.includes('shift');
|
const expectedShift = modifiers.includes('shift');
|
||||||
const expectedMeta = modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command');
|
const expectedMeta = modifiers.includes('meta') || modifiers.includes('cmd') || modifiers.includes('command');
|
||||||
|
|
||||||
|
// Refuse key combinations that don't include modifiers because they interfere with the normal usage of the application.
|
||||||
|
// Some keys such as function keys are an exception.
|
||||||
|
if (!(expectedCtrl || expectedAlt || expectedShift || expectedMeta) && !KEYCODES_WITH_NO_MODIFIER.has(e.code)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return e.ctrlKey === expectedCtrl &&
|
return e.ctrlKey === expectedCtrl &&
|
||||||
e.altKey === expectedAlt &&
|
e.altKey === expectedAlt &&
|
||||||
e.shiftKey === expectedShift &&
|
e.shiftKey === expectedShift &&
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import ws from "./ws.js";
|
|
||||||
import utils from "./utils.js";
|
import utils from "./utils.js";
|
||||||
|
|
||||||
export interface ToastOptions {
|
export interface ToastOptions {
|
||||||
id?: string;
|
id?: string;
|
||||||
icon: string;
|
icon: string;
|
||||||
title: string;
|
title?: string;
|
||||||
message: string;
|
message: string;
|
||||||
delay?: number;
|
delay?: number;
|
||||||
autohide?: boolean;
|
autohide?: boolean;
|
||||||
@@ -12,20 +11,32 @@ export interface ToastOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function toast(options: ToastOptions) {
|
function toast(options: ToastOptions) {
|
||||||
const $toast = $(
|
const $toast = $(options.title
|
||||||
`<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
? `\
|
||||||
<div class="toast-header">
|
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||||
<strong class="me-auto">
|
<div class="toast-header">
|
||||||
|
<strong class="me-auto">
|
||||||
|
<span class="bx bx-${options.icon}"></span>
|
||||||
|
<span class="toast-title"></span>
|
||||||
|
</strong>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="toast-body"></div>
|
||||||
|
</div>`
|
||||||
|
: `
|
||||||
|
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
|
||||||
|
<div class="toast-icon">
|
||||||
<span class="bx bx-${options.icon}"></span>
|
<span class="bx bx-${options.icon}"></span>
|
||||||
<span class="toast-title"></span>
|
</div>
|
||||||
</strong>
|
<div class="toast-body"></div>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
<div class="toast-header">
|
||||||
</div>
|
<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||||
<div class="toast-body"></div>
|
</div>
|
||||||
</div>`
|
</div>`
|
||||||
);
|
);
|
||||||
|
|
||||||
$toast.find(".toast-title").text(options.title);
|
$toast.toggleClass("no-title", !options.title);
|
||||||
|
$toast.find(".toast-title").text(options.title ?? "");
|
||||||
$toast.find(".toast-body").html(options.message);
|
$toast.find(".toast-body").html(options.message);
|
||||||
|
|
||||||
if (options.id) {
|
if (options.id) {
|
||||||
@@ -70,7 +81,6 @@ function showMessage(message: string, delay = 2000) {
|
|||||||
console.debug(utils.now(), "message:", message);
|
console.debug(utils.now(), "message:", message);
|
||||||
|
|
||||||
toast({
|
toast({
|
||||||
title: "Info",
|
|
||||||
icon: "check",
|
icon: "check",
|
||||||
message: message,
|
message: message,
|
||||||
autohide: true,
|
autohide: true,
|
||||||
@@ -82,7 +92,6 @@ export function showError(message: string, delay = 10000) {
|
|||||||
console.log(utils.now(), "error: ", message);
|
console.log(utils.now(), "error: ", message);
|
||||||
|
|
||||||
toast({
|
toast({
|
||||||
title: "Error",
|
|
||||||
icon: "alert",
|
icon: "alert",
|
||||||
message: message,
|
message: message,
|
||||||
autohide: true,
|
autohide: true,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import appContext from "../components/app_context.js";
|
|||||||
import { t } from "./i18n.js";
|
import { t } from "./i18n.js";
|
||||||
import type { EntityChange } from "../server_types.js";
|
import type { EntityChange } from "../server_types.js";
|
||||||
import { WebSocketMessage } from "@triliumnext/commons";
|
import { WebSocketMessage } from "@triliumnext/commons";
|
||||||
|
import toast from "./toast.js";
|
||||||
|
|
||||||
type MessageHandler = (message: WebSocketMessage) => void;
|
type MessageHandler = (message: WebSocketMessage) => void;
|
||||||
let messageHandlers: MessageHandler[] = [];
|
let messageHandlers: MessageHandler[] = [];
|
||||||
@@ -278,13 +279,17 @@ function connectWebSocket() {
|
|||||||
|
|
||||||
async function sendPing() {
|
async function sendPing() {
|
||||||
if (Date.now() - lastPingTs > 30000) {
|
if (Date.now() - lastPingTs > 30000) {
|
||||||
console.log(
|
console.warn(utils.now(), "Lost websocket connection to the backend");
|
||||||
utils.now(),
|
toast.showPersistent({
|
||||||
"Lost websocket connection to the backend. If you keep having this issue repeatedly, you might want to check your reverse proxy (nginx, apache) configuration and allow/unblock WebSocket."
|
id: "lost-websocket-connection",
|
||||||
);
|
title: t("ws.lost-websocket-connection-title"),
|
||||||
|
message: t("ws.lost-websocket-connection-message"),
|
||||||
|
icon: "no-signal"
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ws.readyState === ws.OPEN) {
|
if (ws.readyState === ws.OPEN) {
|
||||||
|
toast.closePersistent("lost-websocket-connection");
|
||||||
ws.send(
|
ws.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
type: "ping",
|
type: "ping",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
#center-pane > *:not(.split-note-container-widget),
|
#center-pane > *:not(.split-note-container-widget),
|
||||||
#right-pane,
|
#right-pane,
|
||||||
.title-row .note-icon-widget,
|
.title-row .note-icon-widget,
|
||||||
.title-row .button-widget,
|
.title-row .icon-action,
|
||||||
.ribbon-container,
|
.ribbon-container,
|
||||||
.promoted-attributes-widget,
|
.promoted-attributes-widget,
|
||||||
.scroll-padding-widget,
|
.scroll-padding-widget,
|
||||||
|
|||||||
@@ -1141,6 +1141,26 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.toast.no-title {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title .toast-icon {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title .toast-body {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toast.no-title .toast-header {
|
||||||
|
background-color: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
.ck-mentions .ck-button {
|
.ck-mentions .ck-button {
|
||||||
font-size: var(--detail-font-size) !important;
|
font-size: var(--detail-font-size) !important;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
@@ -1472,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: transparent;
|
background-color: transparent;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2005,12 +2025,16 @@ body.zen .ribbon-container:not(:has(.classic-toolbar-widget.visible)),
|
|||||||
body.zen .ribbon-container:has(.classic-toolbar-widget.visible) .ribbon-top-row,
|
body.zen .ribbon-container:has(.classic-toolbar-widget.visible) .ribbon-top-row,
|
||||||
body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget.visible)),
|
body.zen .ribbon-container .ribbon-body:not(:has(.classic-toolbar-widget.visible)),
|
||||||
body.zen .note-icon-widget,
|
body.zen .note-icon-widget,
|
||||||
body.zen .title-row .button-widget,
|
body.zen .title-row .icon-action,
|
||||||
body.zen .floating-buttons-children > *:not(.bx-edit-alt),
|
body.zen .floating-buttons-children > *:not(.bx-edit-alt),
|
||||||
body.zen .action-button {
|
body.zen .action-button {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.zen .split-note-container-widget > .gutter {
|
||||||
|
display: unset !important;
|
||||||
|
}
|
||||||
|
|
||||||
body.zen #launcher-pane {
|
body.zen #launcher-pane {
|
||||||
position: absolute !important;
|
position: absolute !important;
|
||||||
top: 0 !important;
|
top: 0 !important;
|
||||||
|
|||||||
@@ -327,30 +327,49 @@ li.dropdown-item a.dropdown-item-button:focus-visible {
|
|||||||
--modal-control-button-color: var(--bs-toast-color);
|
--modal-control-button-color: var(--bs-toast-color);
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row-reverse;
|
flex-direction: column;
|
||||||
backdrop-filter: blur(6px);
|
backdrop-filter: blur(6px);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-header {
|
#toast-container .toast .toast-header {
|
||||||
padding: 0 !important;
|
|
||||||
background: transparent !important;
|
background: transparent !important;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
|
color: var(--toast-text-color) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-header strong {
|
#toast-container .toast .toast-header strong > * {
|
||||||
/* The title of the toast is no longer displayed */
|
vertical-align: middle;
|
||||||
display: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-header .btn-close {
|
#toast-container .toast .toast-header .btn-close {
|
||||||
margin: 0 var(--bs-toast-padding-x) 0 12px;
|
margin: 0 0 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast.no-title {
|
||||||
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toast-container .toast .toast-body {
|
#toast-container .toast .toast-body {
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast:not(.no-title) .bx {
|
||||||
|
margin-right: 0.5em;
|
||||||
|
font-size: 1.1em;
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast.no-title .bx {
|
||||||
|
margin-right: 0;
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toast-container .toast.no-title .toast-body {
|
||||||
|
padding-top: var(--bs-toast-padding-x);
|
||||||
|
color: var(--toast-text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1410,6 +1410,13 @@ div.promoted-attribute-cell .multiplicity:has(span) {
|
|||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
margin-right: calc(var(--pa-card-padding-left) - var(--pa-card-padding-right));
|
margin-right: calc(var(--pa-card-padding-left) - var(--pa-card-padding-right));
|
||||||
font-size: 0; /* Prevent whitespaces creating a gap between buttons */
|
font-size: 0; /* Prevent whitespaces creating a gap between buttons */
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.promoted-attribute-cell .multiplicity:has(span) span {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -121,7 +121,7 @@
|
|||||||
"sat": "Ds",
|
"sat": "Ds",
|
||||||
"sun": "Dg",
|
"sun": "Dg",
|
||||||
"january": "Gener",
|
"january": "Gener",
|
||||||
"febuary": "Febrer",
|
"february": "Febrer",
|
||||||
"march": "Març",
|
"march": "Març",
|
||||||
"april": "Abril",
|
"april": "Abril",
|
||||||
"may": "Maig",
|
"may": "Maig",
|
||||||
|
|||||||
@@ -582,7 +582,7 @@
|
|||||||
"cannot_find_day_note": "无法找到日记",
|
"cannot_find_day_note": "无法找到日记",
|
||||||
"cannot_find_week_note": "无法找到周记",
|
"cannot_find_week_note": "无法找到周记",
|
||||||
"january": "一月",
|
"january": "一月",
|
||||||
"febuary": "二月",
|
"february": "二月",
|
||||||
"march": "三月",
|
"march": "三月",
|
||||||
"april": "四月",
|
"april": "四月",
|
||||||
"may": "五月",
|
"may": "五月",
|
||||||
@@ -1353,7 +1353,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID 认证",
|
"oauth_title": "OAuth/OpenID 认证",
|
||||||
"oauth_description": "OpenID 是一种标准化方式,允许您使用其他服务(如 Google)的账号登录网站来验证您的身份。默认的身份提供者是 Google,但您可以更改为任何其他 OpenID 提供者。点击<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">这里</a>了解更多信息。请参阅这些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指南</a> 通过 Google 设置 OpenID 服务。",
|
"oauth_description": "OpenID 是一种标准化方式,允许您使用其他服务(如 Google)的账号登录网站来验证您的身份。默认的身份提供者是 Google,但您可以更改为任何其他 OpenID 提供者。点击<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">这里</a>了解更多信息。请参阅这些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指南</a> 通过 Google 设置 OpenID 服务。",
|
||||||
"oauth_description_warning": "要启用 OAuth/OpenID,您需要设置 config.ini 文件中的 OAuth/OpenID 基础 URL、客户端 ID 和客户端密钥,并重新启动应用程序。如果要从环境变量设置,请设置 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 环境变量。",
|
"oauth_description_warning": "要启用 OAuth/OpenID,您需要设置 config.ini 文件中的 OAuth/OpenID 基础 URL、客户端 ID 和客户端密钥,并重新启动应用程序。如果要从环境变量设置,请设置 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 环境变量。",
|
||||||
"oauth_missing_vars": "缺少以下设置项:{{variables}}",
|
"oauth_missing_vars": "缺少以下设置项:{{-variables}}",
|
||||||
"oauth_user_account": "用户账号: ",
|
"oauth_user_account": "用户账号: ",
|
||||||
"oauth_user_email": "用户邮箱: ",
|
"oauth_user_email": "用户邮箱: ",
|
||||||
"oauth_user_not_logged_in": "未登录!"
|
"oauth_user_not_logged_in": "未登录!"
|
||||||
@@ -1623,7 +1623,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "同步检查失败!",
|
"sync-check-failed": "同步检查失败!",
|
||||||
"consistency-checks-failed": "一致性检查失败!请查看日志了解详细信息。",
|
"consistency-checks-failed": "一致性检查失败!请查看日志了解详细信息。",
|
||||||
"encountered-error": "遇到错误 \"{{message}}\",请查看控制台。"
|
"encountered-error": "遇到错误 \"{{message}}\",请查看控制台。",
|
||||||
|
"lost-websocket-connection-title": "与服务器的连线中断",
|
||||||
|
"lost-websocket-connection-message": "检查您的反向代理(如 nginx 或 Apache)设置以确保 Websocket 连线没有被阻挡。"
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "请求的笔记 '{{requestedNote}}' 位于聚焦的笔记 '{{hoistedNote}}' 的子树之外,您必须取消聚焦才能访问该笔记。是否继续取消聚焦?"
|
"confirm_unhoisting": "请求的笔记 '{{requestedNote}}' 位于聚焦的笔记 '{{hoistedNote}}' 的子树之外,您必须取消聚焦才能访问该笔记。是否继续取消聚焦?"
|
||||||
@@ -1952,7 +1954,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "功能",
|
"title": "功能",
|
||||||
"emoji_completion_enabled": "启用表情自动补全",
|
"emoji_completion_enabled": "启用表情自动补全",
|
||||||
"note_completion_enabled": "启用笔记自动补全"
|
"note_completion_enabled": "启用笔记自动补全",
|
||||||
|
"emoji_completion_description": "如果启用,表情可以轻易地经由输入 `:` 加上表情名称来插入。",
|
||||||
|
"note_completion_description": "如果启用,导向笔记的链接可以经由输入 `@` 加上笔记标题来创建。",
|
||||||
|
"slash_commands_enabled": "启用斜杠命令",
|
||||||
|
"slash_commands_description": "如果启用,可以经由输入 `/` 来触发命令,如插入换行符或标题。"
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "新增行",
|
"new-row": "新增行",
|
||||||
|
|||||||
@@ -1 +1,41 @@
|
|||||||
{}
|
{
|
||||||
|
"about": {
|
||||||
|
"title": "O Trilium Notes",
|
||||||
|
"homepage": "Domovská stránka:",
|
||||||
|
"app_version": "Verze aplikace:",
|
||||||
|
"db_version": "Verze DB:",
|
||||||
|
"sync_version": "Verze sync:",
|
||||||
|
"build_date": "Datum sestavení:",
|
||||||
|
"build_revision": "Revize sestavení:",
|
||||||
|
"data_directory": "Datový adresář:"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"critical-error": {
|
||||||
|
"title": "Kritická chyba",
|
||||||
|
"message": "Nastala kritická chyba která aplikaci brání ve spuštění:\n\n{{message}}\n\nPravděpodobně neočekávaným způsobem selhal skript. Pokuste se restartovat aplikaci v safe módu a problém napravit."
|
||||||
|
},
|
||||||
|
"widget-error": {
|
||||||
|
"title": "Nepodařilo se inicializovat widget",
|
||||||
|
"message-custom": "Uživatelský widget z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být inicializován z důvodu: \n\n{{message}}",
|
||||||
|
"message-unknown": "Neznámý widget nemohl být inicializován z důvodu:\n\n{{message}}"
|
||||||
|
},
|
||||||
|
"bundle-error": {
|
||||||
|
"title": "Načtení uživatelského skriptu selhalo",
|
||||||
|
"message": "Uživatelský skript z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být spuštěn z důvodu: \n\n{{message}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ai_llm": {
|
||||||
|
"n_notes_queued_0": "{{ count }} poznámka ve frontě k indexaci",
|
||||||
|
"n_notes_queued_1": "{{ count }} poznámky ve frontě k indexaci",
|
||||||
|
"n_notes_queued_2": "{{ count }} poznámek ve frontě k indexaci",
|
||||||
|
"notes_indexed_0": "{{ count }} poznámka indexována",
|
||||||
|
"notes_indexed_1": "{{ count }} poznámky indexovány",
|
||||||
|
"notes_indexed_2": "{{ count }} poznámek indexováno"
|
||||||
|
},
|
||||||
|
"add_link": {
|
||||||
|
"add_link": "Přidat odkaz",
|
||||||
|
"help_on_links": "Nápověda k odkazům",
|
||||||
|
"note": "Poznámka",
|
||||||
|
"search_note": "hledat poznámku podle názvu"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -581,7 +581,7 @@
|
|||||||
"sun": "So",
|
"sun": "So",
|
||||||
"cannot_find_day_note": "Tagesnotiz kann nicht gefunden werden",
|
"cannot_find_day_note": "Tagesnotiz kann nicht gefunden werden",
|
||||||
"january": "Januar",
|
"january": "Januar",
|
||||||
"febuary": "Februar",
|
"february": "Februar",
|
||||||
"march": "März",
|
"march": "März",
|
||||||
"april": "April",
|
"april": "April",
|
||||||
"may": "Mai",
|
"may": "Mai",
|
||||||
@@ -1587,7 +1587,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Synchronisationsprüfung fehlgeschlagen!",
|
"sync-check-failed": "Synchronisationsprüfung fehlgeschlagen!",
|
||||||
"consistency-checks-failed": "Konsistenzprüfung fehlgeschlagen! Siehe Logs für Details.",
|
"consistency-checks-failed": "Konsistenzprüfung fehlgeschlagen! Siehe Logs für Details.",
|
||||||
"encountered-error": "Fehler „{{message}}“ aufgetreten, siehe Konsole für Details."
|
"encountered-error": "Fehler „{{message}}“ aufgetreten, siehe Konsole für Details.",
|
||||||
|
"lost-websocket-connection-title": "Verbindung zum Server verloren",
|
||||||
|
"lost-websocket-connection-message": "Überprüfe die Konfiguration des Reverse-Proxys (z. B. nginx oder Apache), um sicherzustellen, dass WebSocket-Verbindungen zugelassen und nicht blockiert werden."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Die angeforderte Notiz ‚{{requestedNote}}‘ befindet sich außerhalb des hoisted Bereichs der Notiz ‚{{hoistedNote}}‘. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?"
|
"confirm_unhoisting": "Die angeforderte Notiz ‚{{requestedNote}}‘ befindet sich außerhalb des hoisted Bereichs der Notiz ‚{{hoistedNote}}‘. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?"
|
||||||
@@ -1901,7 +1903,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID ist ein standardisiertes Verfahren, mit dem Sie sich über ein Konto eines anderen Dienstes, beispielsweise Google, bei Websites anmelden können, um Ihre Identität zu bestätigen. Der Standardaussteller ist Google, Sie können jedoch jeden anderen OpenID-Anbieter auswählen. Weitere Informationen finden Sie <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">hier</a>. Befolgen Sie diese <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">Anweisungen</a>, um einen OpenID-Dienst über Google einzurichten.",
|
"oauth_description": "OpenID ist ein standardisiertes Verfahren, mit dem Sie sich über ein Konto eines anderen Dienstes, beispielsweise Google, bei Websites anmelden können, um Ihre Identität zu bestätigen. Der Standardaussteller ist Google, Sie können jedoch jeden anderen OpenID-Anbieter auswählen. Weitere Informationen finden Sie <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">hier</a>. Befolgen Sie diese <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">Anweisungen</a>, um einen OpenID-Dienst über Google einzurichten.",
|
||||||
"oauth_description_warning": "Um OAuth/OpenID zu aktivieren, müssen Sie die OAuth/OpenID-Basis-URL, die Client-ID und den Client-Secret in der Datei config.ini festlegen und die Anwendung neu starten. Wenn Sie die Einstellungen über Umgebungsvariablen vornehmen möchten, legen Sie bitte TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID und TRILIUM_OAUTH_CLIENT_SECRET fest.",
|
"oauth_description_warning": "Um OAuth/OpenID zu aktivieren, müssen Sie die OAuth/OpenID-Basis-URL, die Client-ID und den Client-Secret in der Datei config.ini festlegen und die Anwendung neu starten. Wenn Sie die Einstellungen über Umgebungsvariablen vornehmen möchten, legen Sie bitte TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID und TRILIUM_OAUTH_CLIENT_SECRET fest.",
|
||||||
"oauth_missing_vars": "Fehlende Einstellung: {{variables}}",
|
"oauth_missing_vars": "Fehlende Einstellung: {{-variables}}",
|
||||||
"oauth_user_account": "Benutzerkonto: ",
|
"oauth_user_account": "Benutzerkonto: ",
|
||||||
"oauth_user_email": "Benutzer E-Mail: ",
|
"oauth_user_email": "Benutzer E-Mail: ",
|
||||||
"oauth_user_not_logged_in": "Nicht eingeloggt!"
|
"oauth_user_not_logged_in": "Nicht eingeloggt!"
|
||||||
@@ -1966,7 +1968,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Funktionen",
|
"title": "Funktionen",
|
||||||
"emoji_completion_enabled": "Emoji-Autovervollständigung aktivieren",
|
"emoji_completion_enabled": "Emoji-Autovervollständigung aktivieren",
|
||||||
"note_completion_enabled": "Automatisches Vervollständigen von Notizen aktivieren"
|
"note_completion_enabled": "Automatisches Vervollständigen von Notizen aktivieren",
|
||||||
|
"emoji_completion_description": "Wenn aktiviert, können Emojis ganz einfach in den Text eingefügt werden, indem man \":\" gefolgt vom Namen eines Emojis eingibt.",
|
||||||
|
"note_completion_description": "Wenn aktiviert, können Links zu Notizen erstellt werden, indem man \"@\" gefolgt vom Titel einer Notiz eingibt.",
|
||||||
|
"slash_commands_enabled": "Aktiviere Slash-Befehle",
|
||||||
|
"slash_commands_description": "Wenn aktiviert, können Bearbeitungsbefehle wie das Einfügen von Zeilenumbrüchen oder Überschriften durch Eingabe von \"/\" aktiviert werden."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "Neue Zeile",
|
"new-row": "Neue Zeile",
|
||||||
|
|||||||
@@ -582,7 +582,7 @@
|
|||||||
"cannot_find_day_note": "Cannot find day note",
|
"cannot_find_day_note": "Cannot find day note",
|
||||||
"cannot_find_week_note": "Cannot find week note",
|
"cannot_find_week_note": "Cannot find week note",
|
||||||
"january": "January",
|
"january": "January",
|
||||||
"febuary": "February",
|
"february": "February",
|
||||||
"march": "March",
|
"march": "March",
|
||||||
"april": "April",
|
"april": "April",
|
||||||
"may": "May",
|
"may": "May",
|
||||||
@@ -1517,7 +1517,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
|
"oauth_description": "OpenID is a standardized way to let you log into websites using an account from another service, like Google, to verify your identity. The default issuer is Google, but you can change it to any other OpenID provider. Check <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">here</a> for more information. Follow these <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instructions</a> to setup an OpenID service through Google.",
|
||||||
"oauth_description_warning": "To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "To enable OAuth/OpenID, you need to set the OAuth/OpenID base URL, client ID and client secret in the config.ini file and restart the application. If you want to set from environment variables, please set TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Missing settings: {{variables}}",
|
"oauth_missing_vars": "Missing settings: {{-variables}}",
|
||||||
"oauth_user_account": "User Account: ",
|
"oauth_user_account": "User Account: ",
|
||||||
"oauth_user_email": "User Email: ",
|
"oauth_user_email": "User Email: ",
|
||||||
"oauth_user_not_logged_in": "Not logged in!"
|
"oauth_user_not_logged_in": "Not logged in!"
|
||||||
@@ -1787,7 +1787,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Sync check failed!",
|
"sync-check-failed": "Sync check failed!",
|
||||||
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
|
"consistency-checks-failed": "Consistency checks failed! See logs for details.",
|
||||||
"encountered-error": "Encountered error \"{{message}}\", check out the console."
|
"encountered-error": "Encountered error \"{{message}}\", check out the console.",
|
||||||
|
"lost-websocket-connection-title": "Lost connection to the server",
|
||||||
|
"lost-websocket-connection-message": "Check your reverse proxy (e.g. nginx or Apache) configuration to ensure WebSocket connections are properly allowed and not being blocked."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Requested note '{{requestedNote}}' is outside of hoisted note '{{hoistedNote}}' subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?"
|
"confirm_unhoisting": "Requested note '{{requestedNote}}' is outside of hoisted note '{{hoistedNote}}' subtree and you must unhoist to access the note. Do you want to proceed with unhoisting?"
|
||||||
|
|||||||
@@ -276,7 +276,12 @@
|
|||||||
"mime": "MIME: ",
|
"mime": "MIME: ",
|
||||||
"file_size": "Tamaño del archivo:",
|
"file_size": "Tamaño del archivo:",
|
||||||
"preview": "Vista previa:",
|
"preview": "Vista previa:",
|
||||||
"preview_not_available": "La vista previa no está disponible para este tipo de notas."
|
"preview_not_available": "La vista previa no está disponible para este tipo de notas.",
|
||||||
|
"diff_off": "Mostrar contenido",
|
||||||
|
"diff_on": "Mostrar diferencia",
|
||||||
|
"diff_off_hint": "Haga clic para mostrar el contenido de la nota",
|
||||||
|
"diff_not_available": "Diferencias no disponibles.",
|
||||||
|
"diff_on_hint": "Haga clic para ver las diferencias"
|
||||||
},
|
},
|
||||||
"sort_child_notes": {
|
"sort_child_notes": {
|
||||||
"sort_children_by": "Ordenar hijos por...",
|
"sort_children_by": "Ordenar hijos por...",
|
||||||
@@ -577,7 +582,7 @@
|
|||||||
"cannot_find_day_note": "No se puede encontrar la nota del día",
|
"cannot_find_day_note": "No se puede encontrar la nota del día",
|
||||||
"cannot_find_week_note": "No se puede encontrar la nota de la semana",
|
"cannot_find_week_note": "No se puede encontrar la nota de la semana",
|
||||||
"january": "Enero",
|
"january": "Enero",
|
||||||
"febuary": "Febrero",
|
"february": "Febrero",
|
||||||
"march": "Marzo",
|
"march": "Marzo",
|
||||||
"april": "Abril",
|
"april": "Abril",
|
||||||
"may": "Mayo",
|
"may": "Mayo",
|
||||||
@@ -587,7 +592,18 @@
|
|||||||
"september": "Septiembre",
|
"september": "Septiembre",
|
||||||
"october": "Octubre",
|
"october": "Octubre",
|
||||||
"november": "Noviembre",
|
"november": "Noviembre",
|
||||||
"december": "Diciembre"
|
"december": "Diciembre",
|
||||||
|
"week": "Semana",
|
||||||
|
"week_previous": "Semana anterior",
|
||||||
|
"week_next": "Semana siguiente",
|
||||||
|
"month": "Mes",
|
||||||
|
"month_previous": "Mes anterior",
|
||||||
|
"month_next": "Mes siguiente",
|
||||||
|
"year": "Año",
|
||||||
|
"year_previous": "Año anterior",
|
||||||
|
"year_next": "Año siguiente",
|
||||||
|
"list": "Lista",
|
||||||
|
"today": "Hoy"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Cerrar este panel"
|
"close_this_pane": "Cerrar este panel"
|
||||||
@@ -748,7 +764,8 @@
|
|||||||
"book_properties": "Propiedades de colección",
|
"book_properties": "Propiedades de colección",
|
||||||
"table": "Tabla",
|
"table": "Tabla",
|
||||||
"geo-map": "Mapa Geo",
|
"geo-map": "Mapa Geo",
|
||||||
"board": "Tablero"
|
"board": "Tablero",
|
||||||
|
"include_archived_notes": "Mostrar notas archivadas"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "Aún no hay notas editadas en este día...",
|
"no_edited_notes_found": "Aún no hay notas editadas en este día...",
|
||||||
@@ -949,7 +966,9 @@
|
|||||||
"no_attachments": "Esta nota no tiene archivos adjuntos."
|
"no_attachments": "Esta nota no tiene archivos adjuntos."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Esta nota de tipo libro no tiene ninguna subnota así que no hay nada que mostrar. Véa la <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para más detalles."
|
"no_children_help": "Esta nota de tipo libro no tiene ninguna subnota así que no hay nada que mostrar. Véa la <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> para más detalles.",
|
||||||
|
"drag_locked_title": "Bloqueado para edición",
|
||||||
|
"drag_locked_message": "No se permite Arrastrar pues la colección está bloqueada para edición."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Escriba el contenido de su nota de código aquí..."
|
"placeholder": "Escriba el contenido de su nota de código aquí..."
|
||||||
@@ -1490,7 +1509,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
|
"oauth_description": "OpenID es una forma estandarizada de permitirle iniciar sesión en sitios web utilizando una cuenta de otro servicio, como Google, para verificar su identidad. Siga estas <a href = \"https://developers.google.com/identity/openid-connect/openid-connect\">instrucciones</a> para configurar un servicio OpenID a través de Google.",
|
||||||
"oauth_description_warning": "Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Para habilitar OAuth/OpenID, necesita establecer la URL base de OAuth/OpenID, ID de cliente y secreto de cliente en el archivo config.ini y reiniciar la aplicación. Si desea establecerlas desde variables de ambiente, por favor establezca TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID y TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Ajustes faltantes: {{variables}}",
|
"oauth_missing_vars": "Ajustes faltantes: {{-variables}}",
|
||||||
"oauth_user_account": "Cuenta de usuario: ",
|
"oauth_user_account": "Cuenta de usuario: ",
|
||||||
"oauth_user_email": "Correo electrónico de usuario: ",
|
"oauth_user_email": "Correo electrónico de usuario: ",
|
||||||
"oauth_user_not_logged_in": "¡No ha iniciado sesión!"
|
"oauth_user_not_logged_in": "¡No ha iniciado sesión!"
|
||||||
@@ -1593,7 +1612,9 @@
|
|||||||
"apply-bulk-actions": "Aplicar acciones en lote",
|
"apply-bulk-actions": "Aplicar acciones en lote",
|
||||||
"converted-to-attachments": "{{count}} notas han sido convertidas en archivos adjuntos.",
|
"converted-to-attachments": "{{count}} notas han sido convertidas en archivos adjuntos.",
|
||||||
"convert-to-attachment-confirm": "¿Está seguro que desea convertir las notas seleccionadas en archivos adjuntos de sus notas padres?",
|
"convert-to-attachment-confirm": "¿Está seguro que desea convertir las notas seleccionadas en archivos adjuntos de sus notas padres?",
|
||||||
"open-in-popup": "Edición rápida"
|
"open-in-popup": "Edición rápida",
|
||||||
|
"archive": "Archivar",
|
||||||
|
"unarchive": "Desarchivar"
|
||||||
},
|
},
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"shared_publicly": "Esta nota está compartida públicamente en {{- link}}",
|
"shared_publicly": "Esta nota está compartida públicamente en {{- link}}",
|
||||||
@@ -1676,7 +1697,8 @@
|
|||||||
"hoist-this-note-workspace": "Anclar esta nota (espacio de trabajo)",
|
"hoist-this-note-workspace": "Anclar esta nota (espacio de trabajo)",
|
||||||
"refresh-saved-search-results": "Refrescar resultados de búsqueda guardados",
|
"refresh-saved-search-results": "Refrescar resultados de búsqueda guardados",
|
||||||
"create-child-note": "Crear subnota",
|
"create-child-note": "Crear subnota",
|
||||||
"unhoist": "Desanclar"
|
"unhoist": "Desanclar",
|
||||||
|
"toggle-sidebar": "Alternar barra lateral"
|
||||||
},
|
},
|
||||||
"title_bar_buttons": {
|
"title_bar_buttons": {
|
||||||
"window-on-top": "Mantener esta ventana en la parte superior"
|
"window-on-top": "Mantener esta ventana en la parte superior"
|
||||||
@@ -1751,13 +1773,15 @@
|
|||||||
"undeleting-notes-finished-successfully": "La recuperación de notas finalizó exitosamente."
|
"undeleting-notes-finished-successfully": "La recuperación de notas finalizó exitosamente."
|
||||||
},
|
},
|
||||||
"frontend_script_api": {
|
"frontend_script_api": {
|
||||||
"async_warning": "Está pasando una función asíncrona a `api.runOnBackend ()` que probablemente no funcionará como pretendía.",
|
"async_warning": "Está pasando una función asíncrona a `api.runOnBackend ()` que probablemente no funcionará como pretendía.\\nO haga la función sincrónica (removiendo la palabra `async`), o use `api.runAsyncOnBackendWithManualTransactionHandling()`.",
|
||||||
"sync_warning": "Estás pasando una función sincrónica a `api.runasynconbackendwithmanualTransactionHandling ()`, \\ n while debería usar `api.runonbackend ()` en su lugar."
|
"sync_warning": "Estás pasando una función sincrónica a `api.runasynconbackendwithmanualTransactionHandling ()`, \\n while debería usar `api.runonbackend ()` en su lugar."
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "¡La comprobación de sincronización falló!",
|
"sync-check-failed": "¡La comprobación de sincronización falló!",
|
||||||
"consistency-checks-failed": "¡Las comprobaciones de consistencia fallaron! Vea los registros para más detalles.",
|
"consistency-checks-failed": "¡Las comprobaciones de consistencia fallaron! Vea los registros para más detalles.",
|
||||||
"encountered-error": "Error encontrado \"{{message}}\", compruebe la consola."
|
"encountered-error": "Error encontrado \"{{message}}\", compruebe la consola.",
|
||||||
|
"lost-websocket-connection-title": "Se ha perdido la conexión con el servidor",
|
||||||
|
"lost-websocket-connection-message": "Compruebe la configuración de su proxy inverso (por ejemplo, nginx o Apache) para asegurarse de que las conexiones WebSocket están correctamente permitidas y no están bloqueadas."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "La nota requerida '{{requestedNote}}' está fuera del subárbol de la nota anclada '{{hoistedNote}}' y debe desanclarla para acceder a la nota. ¿Desea proceder con el desanclaje?"
|
"confirm_unhoisting": "La nota requerida '{{requestedNote}}' está fuera del subárbol de la nota anclada '{{hoistedNote}}' y debe desanclarla para acceder a la nota. ¿Desea proceder con el desanclaje?"
|
||||||
@@ -1833,7 +1857,7 @@
|
|||||||
"native-title-bar": "Barra de título nativa",
|
"native-title-bar": "Barra de título nativa",
|
||||||
"native-title-bar-description": "Para Windows y macOS, quitar la barra de título nativa hace que la aplicación se vea más compacta. En Linux, mantener la barra de título nativa hace que se integre mejor con el resto del sistema.",
|
"native-title-bar-description": "Para Windows y macOS, quitar la barra de título nativa hace que la aplicación se vea más compacta. En Linux, mantener la barra de título nativa hace que se integre mejor con el resto del sistema.",
|
||||||
"background-effects": "Habilitar efectos de fondo (sólo en Windows 11)",
|
"background-effects": "Habilitar efectos de fondo (sólo en Windows 11)",
|
||||||
"background-effects-description": "El efecto Mica agrega un fondo borroso y elegante a las ventanas de aplicaciones, creando profundidad y un aspecto moderno.",
|
"background-effects-description": "El efecto Mica agrega un fondo borroso y elegante a las ventanas de la aplicación, creando profundidad y un aspecto moderno. \"Título nativo de la barra\" debe deshabilitarse.",
|
||||||
"restart-app-button": "Reiniciar la aplicación para ver los cambios",
|
"restart-app-button": "Reiniciar la aplicación para ver los cambios",
|
||||||
"zoom-factor": "Factor de zoom"
|
"zoom-factor": "Factor de zoom"
|
||||||
},
|
},
|
||||||
@@ -1943,14 +1967,20 @@
|
|||||||
"delete_row": "Eliminar fila"
|
"delete_row": "Eliminar fila"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "Eliminar nota",
|
"delete-note": "Eliminar nota...",
|
||||||
"move-to": "Mover a",
|
"move-to": "Mover a",
|
||||||
"insert-above": "Insertar arriba",
|
"insert-above": "Insertar arriba",
|
||||||
"insert-below": "Insertar abajo",
|
"insert-below": "Insertar abajo",
|
||||||
"delete-column": "Eliminar columna",
|
"delete-column": "Eliminar columna",
|
||||||
"delete-column-confirmation": "¿Seguro que desea eliminar esta columna? El atributo correspondiente también se eliminará de las notas de esta columna.",
|
"delete-column-confirmation": "¿Seguro que desea eliminar esta columna? El atributo correspondiente también se eliminará de las notas de esta columna.",
|
||||||
"add-column": "Añadir columna",
|
"add-column": "Añadir columna",
|
||||||
"new-item": "Nuevo elemento"
|
"new-item": "Nuevo elemento",
|
||||||
|
"archive-note": "Archivar nota",
|
||||||
|
"unarchive-note": "Desarchivar nota",
|
||||||
|
"new-item-placeholder": "Ingresar título de la nota...",
|
||||||
|
"add-column-placeholder": "Ingresar título de la columna...",
|
||||||
|
"edit-note-title": "Haga clic para editar el título de la nota",
|
||||||
|
"edit-column-title": "Haga clic para editar el título de la columna"
|
||||||
},
|
},
|
||||||
"content_renderer": {
|
"content_renderer": {
|
||||||
"open_externally": "Abrir externamente"
|
"open_externally": "Abrir externamente"
|
||||||
@@ -1978,7 +2008,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"note_completion_enabled": "Activar autocompletado de notas",
|
"note_completion_enabled": "Activar autocompletado de notas",
|
||||||
"emoji_completion_enabled": "Activar autocompletado de emojis",
|
"emoji_completion_enabled": "Activar autocompletado de emojis",
|
||||||
"title": "Funciones"
|
"title": "Funciones",
|
||||||
|
"emoji_completion_description": "Si está habilitado, los emojis pueden fácilmente insertarse en el texto escribiendo `:`, seguido del nombre de un emoji.",
|
||||||
|
"note_completion_description": "Si está habilitado, los vínculos a notas pueden crearse escribiendo `@` seguido del título de una nota.",
|
||||||
|
"slash_commands_enabled": "Habilitar comandos de barra",
|
||||||
|
"slash_commands_description": "Si está habilitado, editar comandos como insertar saltos de línea o títulos, puede alternarse escribiendo `/`."
|
||||||
},
|
},
|
||||||
"command_palette": {
|
"command_palette": {
|
||||||
"tree-action-name": "Árbol:{{name}}",
|
"tree-action-name": "Árbol:{{name}}",
|
||||||
@@ -2012,7 +2046,9 @@
|
|||||||
"title": "Rendimiento",
|
"title": "Rendimiento",
|
||||||
"enable-motion": "Habilitar transiciones y animaciones",
|
"enable-motion": "Habilitar transiciones y animaciones",
|
||||||
"enable-shadows": "Activar sombras",
|
"enable-shadows": "Activar sombras",
|
||||||
"enable-backdrop-effects": "Habilitar efectos de fondo para menús, ventanas emergentes y paneles"
|
"enable-backdrop-effects": "Habilitar efectos de fondo para menús, ventanas emergentes y paneles",
|
||||||
|
"enable-smooth-scroll": "Habilitar desplazamiento suave",
|
||||||
|
"app-restart-required": "(es necesario reiniciar la aplicación para que el cambio surta efecto)"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"related_settings": "Configuración relacionada"
|
"related_settings": "Configuración relacionada"
|
||||||
@@ -2023,5 +2059,9 @@
|
|||||||
},
|
},
|
||||||
"units": {
|
"units": {
|
||||||
"percentage": "%"
|
"percentage": "%"
|
||||||
|
},
|
||||||
|
"pagination": {
|
||||||
|
"total_notes": "{{count}} notas",
|
||||||
|
"page_title": "Página de {{startIndex}} - {{endIndex}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
},
|
},
|
||||||
"widget-error": {
|
"widget-error": {
|
||||||
"title": "Widgetin luonti epäonnistui"
|
"title": "Widgetin luonti epäonnistui"
|
||||||
|
},
|
||||||
|
"bundle-error": {
|
||||||
|
"title": "Mukautetun skriptin lataus epäonnistui"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"add_link": {
|
"add_link": {
|
||||||
|
|||||||
@@ -576,7 +576,7 @@
|
|||||||
"sun": "Dim",
|
"sun": "Dim",
|
||||||
"cannot_find_day_note": "Note journalière introuvable",
|
"cannot_find_day_note": "Note journalière introuvable",
|
||||||
"january": "Janvier",
|
"january": "Janvier",
|
||||||
"febuary": "Février",
|
"february": "Février",
|
||||||
"march": "Mars",
|
"march": "Mars",
|
||||||
"april": "Avril",
|
"april": "Avril",
|
||||||
"may": "Mai",
|
"may": "Mai",
|
||||||
@@ -587,7 +587,18 @@
|
|||||||
"october": "Octobre",
|
"october": "Octobre",
|
||||||
"november": "Novembre",
|
"november": "Novembre",
|
||||||
"december": "Décembre",
|
"december": "Décembre",
|
||||||
"cannot_find_week_note": "Impossible de trouver la note de la semaine"
|
"cannot_find_week_note": "Impossible de trouver la note de la semaine",
|
||||||
|
"week": "Semaine",
|
||||||
|
"week_previous": "Semaine précédente",
|
||||||
|
"week_next": "Semaine suivante",
|
||||||
|
"month": "Mois",
|
||||||
|
"month_previous": "Mois précédent",
|
||||||
|
"month_next": "Mois suivant",
|
||||||
|
"year": "Année",
|
||||||
|
"year_previous": "Année précédente",
|
||||||
|
"year_next": "Année suivante",
|
||||||
|
"list": "Liste",
|
||||||
|
"today": "Aujourd'hui"
|
||||||
},
|
},
|
||||||
"close_pane_button": {
|
"close_pane_button": {
|
||||||
"close_this_pane": "Fermer ce volet"
|
"close_this_pane": "Fermer ce volet"
|
||||||
@@ -732,7 +743,8 @@
|
|||||||
"note_type": "Type de note",
|
"note_type": "Type de note",
|
||||||
"editable": "Modifiable",
|
"editable": "Modifiable",
|
||||||
"basic_properties": "Propriétés de base",
|
"basic_properties": "Propriétés de base",
|
||||||
"language": "Langage"
|
"language": "Langage",
|
||||||
|
"configure_code_notes": "Configurer les notes de code..."
|
||||||
},
|
},
|
||||||
"book_properties": {
|
"book_properties": {
|
||||||
"view_type": "Type d'affichage",
|
"view_type": "Type d'affichage",
|
||||||
@@ -747,7 +759,8 @@
|
|||||||
"book_properties": "Propriétés de la collection",
|
"book_properties": "Propriétés de la collection",
|
||||||
"table": "Tableau",
|
"table": "Tableau",
|
||||||
"geo-map": "Carte géographique",
|
"geo-map": "Carte géographique",
|
||||||
"board": "Tableau de bord"
|
"board": "Tableau de bord",
|
||||||
|
"include_archived_notes": "Afficher les notes archivées"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "Aucune note modifiée ce jour-là...",
|
"no_edited_notes_found": "Aucune note modifiée ce jour-là...",
|
||||||
@@ -948,7 +961,9 @@
|
|||||||
"no_attachments": "Cette note ne contient aucune pièce jointe."
|
"no_attachments": "Cette note ne contient aucune pièce jointe."
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails."
|
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails.",
|
||||||
|
"drag_locked_title": "Edition verrouillée",
|
||||||
|
"drag_locked_message": "Le glisser-déposer n'est pas autorisé car l'édition de cette collection est verrouillé."
|
||||||
},
|
},
|
||||||
"editable_code": {
|
"editable_code": {
|
||||||
"placeholder": "Saisir le contenu de votre note de code ici..."
|
"placeholder": "Saisir le contenu de votre note de code ici..."
|
||||||
@@ -1690,6 +1705,72 @@
|
|||||||
"anthropic_configuration": "Configuration Anthropic",
|
"anthropic_configuration": "Configuration Anthropic",
|
||||||
"voyage_configuration": "Configuration IA Voyage",
|
"voyage_configuration": "Configuration IA Voyage",
|
||||||
"voyage_url_description": "Défaut: https://api.voyageai.com/v1",
|
"voyage_url_description": "Défaut: https://api.voyageai.com/v1",
|
||||||
"ollama_configuration": "Configuration Ollama"
|
"ollama_configuration": "Configuration Ollama",
|
||||||
|
"total_notes": "Notes totales",
|
||||||
|
"progress": "Progrès",
|
||||||
|
"queued_notes": "Notes dans la file d'attente",
|
||||||
|
"refresh_stats": "Rafraîchir les statistiques",
|
||||||
|
"enable_ai_features": "Activer les fonctionnalités IA/LLM",
|
||||||
|
"enable_ai_description": "Activer les fonctionnalités IA telles que le résumé des notes, la génération de contenu et autres fonctionnalités LLM",
|
||||||
|
"openai_tab": "OpenAI",
|
||||||
|
"anthropic_tab": "Anthropic",
|
||||||
|
"voyage_tab": "Voyage AI",
|
||||||
|
"ollama_tab": "Ollama",
|
||||||
|
"enable_ai": "Activer les fonctionnalités IA/LLM",
|
||||||
|
"enable_ai_desc": "Activer les fonctionnalités IA telles que le résumé des notes, la génération de contenu et autres fonctionnalités LLM",
|
||||||
|
"provider_configuration": "Configuration du fournisseur IA",
|
||||||
|
"provider_precedence_description": "Liste de fournisseurs séparés par virgule, par ordre de préférence (ex. 'openai,anthopic,ollama')",
|
||||||
|
"temperature": "Température",
|
||||||
|
"temperature_description": "Contrôle de l'aléatoirité dans les réponses (0 = déterministe, 2 = hasard maximum)",
|
||||||
|
"system_prompt": "Prompt système",
|
||||||
|
"system_prompt_description": "Prompt système par défaut pour toutes les intéractions IA",
|
||||||
|
"openai_configuration": "Configuration OpenAI",
|
||||||
|
"openai_settings": "Options OpenAI",
|
||||||
|
"api_key": "Clef API",
|
||||||
|
"url": "URL de base",
|
||||||
|
"model": "Modèle",
|
||||||
|
"openai_api_key_description": "Votre clef API OpenAI pour accéder à leurs services IA",
|
||||||
|
"anthropic_api_key_description": "Votre clef API Anthropic pour accéder aux modèles Claude",
|
||||||
|
"default_model": "Modèle par défaut",
|
||||||
|
"openai_model_description": "Exemples : gpt-4o, gpt-4-turbo, gpt-3.5-turbo",
|
||||||
|
"base_url": "URL de base",
|
||||||
|
"openai_url_description": "Défaut : https://api.openai.com/v1",
|
||||||
|
"anthropic_settings": "Réglages Anthropic",
|
||||||
|
"enable_ollama": "Activer Ollama",
|
||||||
|
"enable_ollama_description": "Activer Ollama comme modèle d'IA local",
|
||||||
|
"ollama_url": "URL Ollama",
|
||||||
|
"ollama_model": "Modèle Ollama",
|
||||||
|
"refresh_models": "Rafraîchir les modèles",
|
||||||
|
"refreshing_models": "Mise à jour...",
|
||||||
|
"enable_automatic_indexing": "Activer l'indexage automatique",
|
||||||
|
"rebuild_index": "Rafraîchir l'index",
|
||||||
|
"rebuild_index_error": "Erreur dans le démarrage du rafraichissement de l'index. Veuillez consulter les logs pour plus de détails.",
|
||||||
|
"note_title": "Titre de la note",
|
||||||
|
"error": "Erreur",
|
||||||
|
"last_attempt": "Dernier essai",
|
||||||
|
"actions": "Actions",
|
||||||
|
"retry": "Réessayer",
|
||||||
|
"partial": "Complété à {{ percentage }}%",
|
||||||
|
"retry_queued": "Note ajoutée à la file d'attente",
|
||||||
|
"retry_failed": "Echec de l'ajout de la note à la file d'attente",
|
||||||
|
"max_notes_per_llm_query": "Notes maximum par requête",
|
||||||
|
"max_notes_per_llm_query_description": "Nombre maximum de notes similaires à inclure dans le contexte IA",
|
||||||
|
"active_providers": "Fournisseurs actifs",
|
||||||
|
"disabled_providers": "Fournisseurs désactivés",
|
||||||
|
"remove_provider": "Retirer le fournisseur de la recherche",
|
||||||
|
"similarity_threshold": "Seuil de similarité",
|
||||||
|
"similarity_threshold_description": "Seuil de similarité minimum (0-1) pour que inclure les notes dans le contexte d'une requête IA",
|
||||||
|
"reprocess_index": "Rafraîchir l'index de recherche",
|
||||||
|
"reprocessing_index": "Mise à jour...",
|
||||||
|
"reprocess_index_started": "L'optimisation de l'indice de recherche à commencer en arrière-plan",
|
||||||
|
"reprocess_index_error": "Erreur dans le rafraichissement de l'indice de recherche"
|
||||||
|
},
|
||||||
|
"ui-performance": {
|
||||||
|
"title": "Performance",
|
||||||
|
"enable-motion": "Activer les transitions et animations",
|
||||||
|
"enable-shadows": "Activer les ombres",
|
||||||
|
"enable-backdrop-effects": "Activer les effets d'arrière plan pour les menus, popups et panneaux",
|
||||||
|
"enable-smooth-scroll": "Active le défilement fluide",
|
||||||
|
"app-restart-required": "(redémarrer l'application pour appliquer les changements)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
apps/client/src/translations/hr/translation.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
"link_title_mirrors": "il titolo del collegamento rispecchia il titolo della nota corrente",
|
"link_title_mirrors": "il titolo del collegamento rispecchia il titolo della nota corrente",
|
||||||
"link_title_arbitrary": "il titolo del collegamento può essere modificato arbitrariamente",
|
"link_title_arbitrary": "il titolo del collegamento può essere modificato arbitrariamente",
|
||||||
"link_title": "Titolo del collegamento",
|
"link_title": "Titolo del collegamento",
|
||||||
"button_add_link": "Aggiungi il collegamento <kbd>invio</kbd>",
|
"button_add_link": "Aggiungi il collegamento",
|
||||||
"help_on_links": "Aiuto sui collegamenti"
|
"help_on_links": "Aiuto sui collegamenti"
|
||||||
},
|
},
|
||||||
"branch_prefix": {
|
"branch_prefix": {
|
||||||
|
|||||||
@@ -38,12 +38,12 @@
|
|||||||
"save": "保存",
|
"save": "保存",
|
||||||
"edit_branch_prefix": "ブランチ接頭辞の編集",
|
"edit_branch_prefix": "ブランチ接頭辞の編集",
|
||||||
"help_on_tree_prefix": "ツリー接頭辞に関するヘルプ",
|
"help_on_tree_prefix": "ツリー接頭辞に関するヘルプ",
|
||||||
"prefix": "接頭辞: ",
|
"prefix": "接頭辞: ",
|
||||||
"branch_prefix_saved": "ブランチ接頭辞が保存されました。"
|
"branch_prefix_saved": "ブランチの接頭辞が保存されました。"
|
||||||
},
|
},
|
||||||
"global_menu": {
|
"global_menu": {
|
||||||
"menu": "メニュー",
|
"menu": "メニュー",
|
||||||
"options": "オプション",
|
"options": "設定",
|
||||||
"open_new_window": "新しいウィンドウを開く",
|
"open_new_window": "新しいウィンドウを開く",
|
||||||
"zoom": "ズーム",
|
"zoom": "ズーム",
|
||||||
"toggle_fullscreen": "フルスクリーンの切り替え",
|
"toggle_fullscreen": "フルスクリーンの切り替え",
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
"clone_to_selected_note": "選択したノートにクローン",
|
"clone_to_selected_note": "選択したノートにクローン",
|
||||||
"no_path_to_clone_to": "クローン先のパスが存在しません。",
|
"no_path_to_clone_to": "クローン先のパスが存在しません。",
|
||||||
"note_cloned": "ノート \"{{clonedTitle}}\" は \"{{targetTitle}}\" にクローンされました",
|
"note_cloned": "ノート \"{{clonedTitle}}\" は \"{{targetTitle}}\" にクローンされました",
|
||||||
"clone_notes_to": "ノートをクローンして...",
|
"clone_notes_to": "ノートをクローン...",
|
||||||
"help_on_links": "ヘルプへのリンク"
|
"help_on_links": "ヘルプへのリンク"
|
||||||
},
|
},
|
||||||
"delete_notes": {
|
"delete_notes": {
|
||||||
@@ -111,7 +111,7 @@
|
|||||||
"sat": "土",
|
"sat": "土",
|
||||||
"sun": "日",
|
"sun": "日",
|
||||||
"january": "1月",
|
"january": "1月",
|
||||||
"febuary": "2月",
|
"february": "2月",
|
||||||
"march": "3月",
|
"march": "3月",
|
||||||
"april": "4月",
|
"april": "4月",
|
||||||
"may": "5月",
|
"may": "5月",
|
||||||
@@ -123,7 +123,18 @@
|
|||||||
"november": "11月",
|
"november": "11月",
|
||||||
"december": "12月",
|
"december": "12月",
|
||||||
"cannot_find_day_note": "dayノートが見つかりません",
|
"cannot_find_day_note": "dayノートが見つかりません",
|
||||||
"cannot_find_week_note": "weekノートが見つかりません"
|
"cannot_find_week_note": "weekノートが見つかりません",
|
||||||
|
"week": "週",
|
||||||
|
"week_previous": "前の週",
|
||||||
|
"week_next": "次の週",
|
||||||
|
"month": "月",
|
||||||
|
"month_previous": "前の月",
|
||||||
|
"month_next": "次の月",
|
||||||
|
"year": "年",
|
||||||
|
"year_previous": "前の年",
|
||||||
|
"year_next": "次の年",
|
||||||
|
"list": "リスト",
|
||||||
|
"today": "今日"
|
||||||
},
|
},
|
||||||
"note_icon": {
|
"note_icon": {
|
||||||
"change_note_icon": "ノートアイコンの変更",
|
"change_note_icon": "ノートアイコンの変更",
|
||||||
@@ -135,7 +146,8 @@
|
|||||||
"note_type": "ノートタイプ",
|
"note_type": "ノートタイプ",
|
||||||
"editable": "編集可能",
|
"editable": "編集可能",
|
||||||
"basic_properties": "基本プロパティ",
|
"basic_properties": "基本プロパティ",
|
||||||
"language": "言語"
|
"language": "言語",
|
||||||
|
"configure_code_notes": "コードノートを設定しています..."
|
||||||
},
|
},
|
||||||
"i18n": {
|
"i18n": {
|
||||||
"title": "ローカライゼーション",
|
"title": "ローカライゼーション",
|
||||||
@@ -324,8 +336,8 @@
|
|||||||
},
|
},
|
||||||
"recent_changes": {
|
"recent_changes": {
|
||||||
"title": "最近の変更",
|
"title": "最近の変更",
|
||||||
"erase_notes_button": "削除したメモを今すぐ消去する",
|
"erase_notes_button": "削除したノートを今すぐ消去",
|
||||||
"deleted_notes_message": "削除されたメモは完全に消去されました。",
|
"deleted_notes_message": "削除されたノートは完全に消去されました。",
|
||||||
"no_changes_message": "変更はまだありません...",
|
"no_changes_message": "変更はまだありません...",
|
||||||
"undelete_link": "削除を取り消す",
|
"undelete_link": "削除を取り消す",
|
||||||
"confirm_undelete": "このノートとサブノートを復元しますか?"
|
"confirm_undelete": "このノートとサブノートを復元しますか?"
|
||||||
@@ -384,9 +396,9 @@
|
|||||||
"protect-subtree": "サブツリーを保護",
|
"protect-subtree": "サブツリーを保護",
|
||||||
"unprotect-subtree": "サブツリーの保護を解除",
|
"unprotect-subtree": "サブツリーの保護を解除",
|
||||||
"copy-clone": "コピー/クローン",
|
"copy-clone": "コピー/クローン",
|
||||||
"clone-to": "クローンして...",
|
"clone-to": "クローン先...",
|
||||||
"cut": "カット",
|
"cut": "カット",
|
||||||
"move-to": "移動して...",
|
"move-to": "移動先...",
|
||||||
"paste-into": "貼り付け",
|
"paste-into": "貼り付け",
|
||||||
"paste-after": "後ろに貼り付け",
|
"paste-after": "後ろに貼り付け",
|
||||||
"duplicate": "複製",
|
"duplicate": "複製",
|
||||||
@@ -399,7 +411,9 @@
|
|||||||
"open-in-popup": "クイックエディット",
|
"open-in-popup": "クイックエディット",
|
||||||
"hoist-note": "ホイストノート",
|
"hoist-note": "ホイストノート",
|
||||||
"unhoist-note": "ノートをホイストしない",
|
"unhoist-note": "ノートをホイストしない",
|
||||||
"edit-branch-prefix": "ブランチの接頭辞を編集"
|
"edit-branch-prefix": "ブランチの接頭辞を編集",
|
||||||
|
"archive": "アーカイブ",
|
||||||
|
"unarchive": "アーカイブ解除"
|
||||||
},
|
},
|
||||||
"zen_mode": {
|
"zen_mode": {
|
||||||
"button_exit": "禅モードを退出"
|
"button_exit": "禅モードを退出"
|
||||||
@@ -449,10 +463,12 @@
|
|||||||
"delete_note": {
|
"delete_note": {
|
||||||
"delete_note": "ノートを削除",
|
"delete_note": "ノートを削除",
|
||||||
"delete_matched_notes": "一致したノートを削除",
|
"delete_matched_notes": "一致したノートを削除",
|
||||||
"delete_matched_notes_description": "これにより、一致したノートが削除されます。"
|
"delete_matched_notes_description": "これにより、一致したノートが削除されます。",
|
||||||
|
"undelete_notes_instruction": "削除後、「最近の変更」ダイアログから削除を取り消すことができます。",
|
||||||
|
"erase_notes_instruction": "ノートを完全に消去するには、削除後に「設定」->「その他」に移動し、「削除したノートを今すぐ消去」ボタンをクリックします。"
|
||||||
},
|
},
|
||||||
"board_view": {
|
"board_view": {
|
||||||
"delete-note": "ノートを削除",
|
"delete-note": "ノートを削除...",
|
||||||
"insert-above": "上に挿入",
|
"insert-above": "上に挿入",
|
||||||
"insert-below": "下に挿入",
|
"insert-below": "下に挿入",
|
||||||
"delete-column": "列を削除",
|
"delete-column": "列を削除",
|
||||||
@@ -478,7 +494,8 @@
|
|||||||
"execute_script": {
|
"execute_script": {
|
||||||
"execute_script": "スクリプトを実行",
|
"execute_script": "スクリプトを実行",
|
||||||
"help_text": "一致したノートに対して簡単なスクリプトを実行できます。",
|
"help_text": "一致したノートに対して簡単なスクリプトを実行できます。",
|
||||||
"example_2": "より複雑な例としては、一致したノートの属性をすべて削除することが挙げられます:"
|
"example_2": "より複雑な例としては、一致したノートの属性をすべて削除することが挙げられます:",
|
||||||
|
"example_1": "例えば、ノートのタイトルに文字列を追加するには、この小さなスクリプトを使用します:"
|
||||||
},
|
},
|
||||||
"script_executor": {
|
"script_executor": {
|
||||||
"execute_script": "スクリプトを実行",
|
"execute_script": "スクリプトを実行",
|
||||||
@@ -533,11 +550,11 @@
|
|||||||
"beta-feature": "Beta",
|
"beta-feature": "Beta",
|
||||||
"ai-chat": "AI チャット",
|
"ai-chat": "AI チャット",
|
||||||
"task-list": "タスクリスト",
|
"task-list": "タスクリスト",
|
||||||
"new-feature": "新しい",
|
"new-feature": "New",
|
||||||
"collections": "コレクション"
|
"collections": "コレクション"
|
||||||
},
|
},
|
||||||
"edited_notes": {
|
"edited_notes": {
|
||||||
"no_edited_notes_found": "この日の編集されたメモはまだありません...",
|
"no_edited_notes_found": "この日の編集されたノートはまだありません...",
|
||||||
"title": "編集されたノート",
|
"title": "編集されたノート",
|
||||||
"deleted": "(削除済み)"
|
"deleted": "(削除済み)"
|
||||||
},
|
},
|
||||||
@@ -548,7 +565,10 @@
|
|||||||
"download": "ダウンロード",
|
"download": "ダウンロード",
|
||||||
"open": "開く",
|
"open": "開く",
|
||||||
"title": "ファイル",
|
"title": "ファイル",
|
||||||
"upload_new_revision": "編集履歴をアップロード"
|
"upload_new_revision": "編集履歴をアップロード",
|
||||||
|
"original_file_name": "元のファイル名",
|
||||||
|
"upload_success": "新しいファイルの変更がアップロードされました。",
|
||||||
|
"upload_failed": "新しいファイルの変更のアップロードに失敗しました。"
|
||||||
},
|
},
|
||||||
"note_info_widget": {
|
"note_info_widget": {
|
||||||
"note_id": "ノート ID",
|
"note_id": "ノート ID",
|
||||||
@@ -567,7 +587,11 @@
|
|||||||
"download": "ダウンロード",
|
"download": "ダウンロード",
|
||||||
"open": "開く",
|
"open": "開く",
|
||||||
"title": "画像",
|
"title": "画像",
|
||||||
"upload_new_revision": "編集履歴をアップロード"
|
"upload_new_revision": "編集履歴をアップロード",
|
||||||
|
"original_file_name": "元のファイル名",
|
||||||
|
"copy_reference_to_clipboard": "参照をクリップボードにコピー",
|
||||||
|
"upload_success": "新しい画像の変更がアップロードされました。",
|
||||||
|
"upload_failed": "新しい画像の変更のアップロードに失敗しました: {{message}}"
|
||||||
},
|
},
|
||||||
"revisions": {
|
"revisions": {
|
||||||
"download_button": "ダウンロード",
|
"download_button": "ダウンロード",
|
||||||
@@ -595,7 +619,8 @@
|
|||||||
"diff_off_hint": "クリックしてノートの内容を表示",
|
"diff_off_hint": "クリックしてノートの内容を表示",
|
||||||
"diff_not_available": "差分は利用できません。",
|
"diff_not_available": "差分は利用できません。",
|
||||||
"snapshot_interval": "ノートの変更履歴の記録間隔: {{seconds}} 秒。",
|
"snapshot_interval": "ノートの変更履歴の記録間隔: {{seconds}} 秒。",
|
||||||
"maximum_revisions": "ノートの変更履歴の記録制限: {{number}}."
|
"maximum_revisions": "ノートの変更履歴の記録制限: {{number}}.",
|
||||||
|
"mime": "MIME: "
|
||||||
},
|
},
|
||||||
"attachments_actions": {
|
"attachments_actions": {
|
||||||
"download": "ダウンロード",
|
"download": "ダウンロード",
|
||||||
@@ -612,7 +637,11 @@
|
|||||||
"delete_confirm": "本当に添付ファイル '{{title}}' を削除しますか?",
|
"delete_confirm": "本当に添付ファイル '{{title}}' を削除しますか?",
|
||||||
"delete_success": "添付ファイル '{{title}}' は削除されました。",
|
"delete_success": "添付ファイル '{{title}}' は削除されました。",
|
||||||
"enter_new_name": "新しい添付ファイルの名前を入力してください",
|
"enter_new_name": "新しい添付ファイルの名前を入力してください",
|
||||||
"upload_new_revision": "編集履歴をアップロード"
|
"upload_new_revision": "編集履歴をアップロード",
|
||||||
|
"upload_success": "新しい添付ファイルの変更がアップロードされました。",
|
||||||
|
"upload_failed": "新しい添付ファイルの変更のアップロードに失敗しました。",
|
||||||
|
"convert_confirm": "添付ファイル「{{title}}」を別のノートに変換してもよろしいですか?",
|
||||||
|
"convert_success": "添付ファイル「{{title}}」がノートに変換されました。"
|
||||||
},
|
},
|
||||||
"etapi": {
|
"etapi": {
|
||||||
"created": "作成日時",
|
"created": "作成日時",
|
||||||
@@ -642,21 +671,23 @@
|
|||||||
"note_paths": {
|
"note_paths": {
|
||||||
"title": "ノートパス",
|
"title": "ノートパス",
|
||||||
"clone_button": "ノートを新しい場所にクローン...",
|
"clone_button": "ノートを新しい場所にクローン...",
|
||||||
"intro_placed": "このノートは以下のパスに置かれる:",
|
"intro_placed": "このノートは以下のパスに置かれています:",
|
||||||
"intro_not_placed": "このノートはまだノートツリーに配置されていません。",
|
"intro_not_placed": "このノートはまだノートツリーに配置されていません。",
|
||||||
"archived": "アーカイブされた",
|
"archived": "アーカイブされた",
|
||||||
"search": "検索",
|
"search": "検索",
|
||||||
"outside_hoisted": "このパスはホイストされたノートの外側にあるため、ホイストを解除する必要があります。"
|
"outside_hoisted": "このパスはホイストされたノートの外側にあるため、ホイストを解除する必要があります。"
|
||||||
},
|
},
|
||||||
"note_properties": {
|
"note_properties": {
|
||||||
"info": "情報"
|
"info": "情報",
|
||||||
|
"this_note_was_originally_taken_from": "このノートは元々以下から引用したものです:"
|
||||||
},
|
},
|
||||||
"similar_notes": {
|
"similar_notes": {
|
||||||
"title": "類似ノート",
|
"title": "類似ノート",
|
||||||
"no_similar_notes_found": "類似したノートが見つかりません。"
|
"no_similar_notes_found": "類似したノートが見つかりません。"
|
||||||
},
|
},
|
||||||
"abstract_search_option": {
|
"abstract_search_option": {
|
||||||
"remove_this_search_option": "この検索オプションを削除"
|
"remove_this_search_option": "この検索オプションを削除",
|
||||||
|
"failed_rendering": "検索オプションのレンダリングに失敗しました: {{dto}} エラー: {{error}}{{stack}}"
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"debug": "デバッグ",
|
"debug": "デバッグ",
|
||||||
@@ -690,7 +721,8 @@
|
|||||||
"content_and_attachments_and_revisions_size": "添付ファイルと編集履歴を含むノート内容のサイズ",
|
"content_and_attachments_and_revisions_size": "添付ファイルと編集履歴を含むノート内容のサイズ",
|
||||||
"revision_count": "編集履歴の回数",
|
"revision_count": "編集履歴の回数",
|
||||||
"owned_label_count": "ラベルの数",
|
"owned_label_count": "ラベルの数",
|
||||||
"owned_relation_count": "関係の数"
|
"owned_relation_count": "リレーションの数",
|
||||||
|
"target_relation_count": "ノートを対象とするリレーションの数"
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"sort-column-descending": "降順",
|
"sort-column-descending": "降順",
|
||||||
@@ -710,7 +742,7 @@
|
|||||||
"delete_column_confirmation": "この列を本当に削除してもよろしいですか?対応する属性はすべてのノートから削除されます。",
|
"delete_column_confirmation": "この列を本当に削除してもよろしいですか?対応する属性はすべてのノートから削除されます。",
|
||||||
"delete-column": "列を削除",
|
"delete-column": "列を削除",
|
||||||
"new-column-label": "ラベル",
|
"new-column-label": "ラベル",
|
||||||
"new-column-relation": "関係"
|
"new-column-relation": "リレーション"
|
||||||
},
|
},
|
||||||
"search_script": {
|
"search_script": {
|
||||||
"title": "検索スクリプト:",
|
"title": "検索スクリプト:",
|
||||||
@@ -735,7 +767,7 @@
|
|||||||
"placeholder": "ノート名で検索",
|
"placeholder": "ノート名で検索",
|
||||||
"label": "祖先",
|
"label": "祖先",
|
||||||
"depth_label": "深さ",
|
"depth_label": "深さ",
|
||||||
"depth_doesnt_matter": "関係ない",
|
"depth_doesnt_matter": "関係なし",
|
||||||
"depth_eq": "ちょうど {{count}} つ下の階層",
|
"depth_eq": "ちょうど {{count}} つ下の階層",
|
||||||
"direct_children": "直接の子",
|
"direct_children": "直接の子",
|
||||||
"depth_gt": "{{count}} より下の階層",
|
"depth_gt": "{{count}} より下の階層",
|
||||||
@@ -759,7 +791,14 @@
|
|||||||
"refresh": "リフレッシュ"
|
"refresh": "リフレッシュ"
|
||||||
},
|
},
|
||||||
"sync": {
|
"sync": {
|
||||||
"title": "同期"
|
"title": "同期",
|
||||||
|
"force_full_sync_button": "完全同期を強制する",
|
||||||
|
"fill_entity_changes_button": "エンティティ変更レコードを入力",
|
||||||
|
"full_sync_triggered": "完全同期がトリガーされました",
|
||||||
|
"filling_entity_changes": "エンティティ変更行を入力中...",
|
||||||
|
"sync_rows_filled_successfully": "同期行が正常に入力されました",
|
||||||
|
"finished-successfully": "同期が正常に完了しました。",
|
||||||
|
"failed": "同期に失敗しました: {{message}}"
|
||||||
},
|
},
|
||||||
"fonts": {
|
"fonts": {
|
||||||
"fonts": "フォント",
|
"fonts": "フォント",
|
||||||
@@ -781,7 +820,8 @@
|
|||||||
"serif": "セリフ",
|
"serif": "セリフ",
|
||||||
"sans-serif": "サンセリフ",
|
"sans-serif": "サンセリフ",
|
||||||
"monospace": "等幅",
|
"monospace": "等幅",
|
||||||
"system-default": "システムのデフォルト"
|
"system-default": "システムのデフォルト",
|
||||||
|
"theme_defined": "テーマが定義されました"
|
||||||
},
|
},
|
||||||
"max_content_width": {
|
"max_content_width": {
|
||||||
"reload_button": "フロントエンドをリロード",
|
"reload_button": "フロントエンドをリロード",
|
||||||
@@ -790,7 +830,7 @@
|
|||||||
"max_width_label": "最大コンテンツ幅",
|
"max_width_label": "最大コンテンツ幅",
|
||||||
"max_width_unit": "ピクセル",
|
"max_width_unit": "ピクセル",
|
||||||
"apply_changes_description": "コンテンツ幅の変更を適用するには、クリックしてください",
|
"apply_changes_description": "コンテンツ幅の変更を適用するには、クリックしてください",
|
||||||
"reload_description": "外観オプションからの変更"
|
"reload_description": "外観設定から変更"
|
||||||
},
|
},
|
||||||
"theme": {
|
"theme": {
|
||||||
"title": "アプリのテーマ",
|
"title": "アプリのテーマ",
|
||||||
@@ -859,14 +899,14 @@
|
|||||||
"bg_color": "背景色付きテキスト",
|
"bg_color": "背景色付きテキスト",
|
||||||
"visibility_title": "ハイライトリスト表示",
|
"visibility_title": "ハイライトリスト表示",
|
||||||
"visibility_description": "#hideHighlightWidget ラベルを追加することで、ノートごとにハイライトウィジェットを非表示にできます。",
|
"visibility_description": "#hideHighlightWidget ラベルを追加することで、ノートごとにハイライトウィジェットを非表示にできます。",
|
||||||
"shortcut_info": "オプション -> ショートカット('右ペイン切り替え')で、右ペイン(ハイライトを含む)を素早く切り替えるキーボードショートカットを設定できます。"
|
"shortcut_info": "設定 -> ショートカット(右ペイン切り替え)で、右ペイン(ハイライトを含む)を素早く切り替えるキーボードショートカットを設定できます。"
|
||||||
},
|
},
|
||||||
"table_of_contents": {
|
"table_of_contents": {
|
||||||
"title": "目次",
|
"title": "目次",
|
||||||
"description": "ノートに定義された数以上の見出しがある場合、テキストノートに目次が表示されます。この数はカスタマイズできます:",
|
"description": "ノートに定義された数以上の見出しがある場合、テキストノートに目次が表示されます。この数はカスタマイズできます:",
|
||||||
"unit": "見出し",
|
"unit": "見出し",
|
||||||
"disable_info": "このオプションに非常に大きな数値を設定することで、目次を効果的に無効にすることもできる。",
|
"disable_info": "このオプションに非常に大きな数値を設定することで、目次を効果的に無効にすることもできます。",
|
||||||
"shortcut_info": "オプション -> ショートカット('右ペイン切り替え')で、右ペイン(目次を含む)を素早く切り替えるキーボードショートカットを設定できます。"
|
"shortcut_info": "設定 -> ショートカット(右ペイン切り替え)で、右ペイン(目次を含む)を素早く切り替えるキーボードショートカットを設定できます。"
|
||||||
},
|
},
|
||||||
"toc": {
|
"toc": {
|
||||||
"table_of_contents": "目次",
|
"table_of_contents": "目次",
|
||||||
@@ -1033,7 +1073,7 @@
|
|||||||
"read_only": "エディターは読み取り専用モードです。テキストとコードノートのみ機能します。",
|
"read_only": "エディターは読み取り専用モードです。テキストとコードノートのみ機能します。",
|
||||||
"auto_read_only_disabled": "テキスト/コードノートは、サイズが大きすぎる場合、自動的に読み取りモードに設定されます。このラベルをノートに追加することで、ノートごとにこの動作を無効にすることができます",
|
"auto_read_only_disabled": "テキスト/コードノートは、サイズが大きすぎる場合、自動的に読み取りモードに設定されます。このラベルをノートに追加することで、ノートごとにこの動作を無効にすることができます",
|
||||||
"app_css": "Trilium アプリケーションに読み込まれ、Trilium の外観を変更するために使用できる CSS ノートをマークします。",
|
"app_css": "Trilium アプリケーションに読み込まれ、Trilium の外観を変更するために使用できる CSS ノートをマークします。",
|
||||||
"app_theme": "Trilium のフルテーマである CSS ノートをマークし、Trilium オプションで利用できるようにします。",
|
"app_theme": "Trilium のフルテーマである CSS ノートをマークし、Trilium の設定で利用できるようにします。",
|
||||||
"app_theme_base": "「next」、「next-light」、または「next-dark」に設定すると、従来のテーマではなく、対応する TriliumNext テーマ (auto、light、または dark) がカスタム テーマのベースとして使用されます。",
|
"app_theme_base": "「next」、「next-light」、または「next-dark」に設定すると、従来のテーマではなく、対応する TriliumNext テーマ (auto、light、または dark) がカスタム テーマのベースとして使用されます。",
|
||||||
"css_class": "このラベルの値は、ツリー内の特定のノートを表すノードにCSSクラスとして追加されます。これは高度なテーマ設定に役立ちます。テンプレートノートで使用できます。",
|
"css_class": "このラベルの値は、ツリー内の特定のノートを表すノードにCSSクラスとして追加されます。これは高度なテーマ設定に役立ちます。テンプレートノートで使用できます。",
|
||||||
"icon_class": "このラベルの値は、ツリー上のアイコンにCSSクラスとして追加され、ツリー内のノートを視覚的に区別するのに役立ちます。例えば、bx bx-home のように、アイコンは boxicons から取得されます。テンプレートノートで使用できます。",
|
"icon_class": "このラベルの値は、ツリー上のアイコンにCSSクラスとして追加され、ツリー内のノートを視覚的に区別するのに役立ちます。例えば、bx bx-home のように、アイコンは boxicons から取得されます。テンプレートノートで使用できます。",
|
||||||
@@ -1064,7 +1104,7 @@
|
|||||||
"display_relations": "表示するリレーション名をカンマで区切って指定します。それ以外のリレーション名は非表示になります。",
|
"display_relations": "表示するリレーション名をカンマで区切って指定します。それ以外のリレーション名は非表示になります。",
|
||||||
"hide_relations": "非表示にするリレーション名をカンマで区切って指定します。それ以外のリレーションは表示されます。",
|
"hide_relations": "非表示にするリレーション名をカンマで区切って指定します。それ以外のリレーションは表示されます。",
|
||||||
"template": "このノートは、新しいノートを作成するときに利用可能なテンプレートの選択肢に表示されます",
|
"template": "このノートは、新しいノートを作成するときに利用可能なテンプレートの選択肢に表示されます",
|
||||||
"toc": "<code>#toc</code> または <code>#toc=show</code><code> は目次を強制的に表示し、<code>#toc=hide</code> は目次を強制的に非表示にします。ラベルが存在しない場合は、グローバル設定が適用されます",
|
"toc": "<code>#toc</code> または <code>#toc=show</code> は目次を強制的に表示し、<code>#toc=hide</code> は目次を強制的に非表示にします。ラベルが存在しない場合は、グローバル設定が適用されます",
|
||||||
"color": "ノートツリー、リンクなどのノートの色を定義します。 'red' や #a13d5f などの有効な CSS カラー値を使用します",
|
"color": "ノートツリー、リンクなどのノートの色を定義します。 'red' や #a13d5f などの有効な CSS カラー値を使用します",
|
||||||
"keyboard_shortcut": "このノートにすぐにジャンプするキーボードショートカットを定義します。例: 「ctrl+alt+e」。変更を有効にするには、フロントエンドをリロードする必要があります。",
|
"keyboard_shortcut": "このノートにすぐにジャンプするキーボードショートカットを定義します。例: 「ctrl+alt+e」。変更を有効にするには、フロントエンドをリロードする必要があります。",
|
||||||
"keep_current_hoisting": "このリンクを開いても、ノートが現在のホイストされたサブツリーに表示できない場合でも、ホイストは変更されません。",
|
"keep_current_hoisting": "このリンクを開いても、ノートが現在のホイストされたサブツリーに表示できない場合でも、ホイストは変更されません。",
|
||||||
@@ -1077,7 +1117,29 @@
|
|||||||
"run_on_child_note_creation": "このリレーションが定義されているノートの下に新しいノートが作成されたときに実行されます",
|
"run_on_child_note_creation": "このリレーションが定義されているノートの下に新しいノートが作成されたときに実行されます",
|
||||||
"render_note": "「HTMLノートをレンダリング」タイプのノートは、コードノート(HTMLまたはスクリプト)を使用してレンダリングされます。このリレーションを使用して、どのノートをレンダリングするかを指定する必要があります",
|
"render_note": "「HTMLノートをレンダリング」タイプのノートは、コードノート(HTMLまたはスクリプト)を使用してレンダリングされます。このリレーションを使用して、どのノートをレンダリングするかを指定する必要があります",
|
||||||
"other_notes_with_name": "{{attributeType}} の名前が「{{attributeName}}」であるその他のノート",
|
"other_notes_with_name": "{{attributeType}} の名前が「{{attributeName}}」であるその他のノート",
|
||||||
"color_type": "色"
|
"color_type": "色",
|
||||||
|
"share_description": "説明用にHTMLメタタグに追加するテキストを定義します",
|
||||||
|
"title_template": "このノートの子として作成されるノートのデフォルトのタイトルです。値は JavaScript 文字列として評価されるため、\n 挿入された <code>now</code> および <code>parentNote</code> 変数を介して動的なコンテンツを追加できます。例: \n \n <ul> \n <li><code>${parentNote.getLabelValue('authorName')} の文学作品</code></li> \n <li><code>${now.format('YYYY-MM-DD HH:mm:ss')} のログ</code></li> \n </ul> \n \n 詳細については <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\"> Wiki の詳細 </a> 、および <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> と <a href=\"https://day.js.org/docs/en/display/format\">now</a> の API ドキュメントを参照してください。",
|
||||||
|
"run_on_note_title_change": "ノートのタイトルが変更されたときに実行されます(ノートの作成も含む)",
|
||||||
|
"run_on_note_content_change": "ノートの内容が変更されたときに実行されます(ノートの作成も含む)。",
|
||||||
|
"run_on_note_change": "ノートが変更されたときに実行されます(ノートの作成も含む)。内容の変更は含まれません",
|
||||||
|
"run_on_note_deletion": "ノートが削除されたときに実行されます",
|
||||||
|
"run_on_branch_creation": "ブランチが作成されたときに実行されます。ブランチは親ノートと子ノート間のリンクであり、例えばノートの複製や移動の際に作成されます。",
|
||||||
|
"run_on_branch_change": "ブランチが更新されたときに実行されます。",
|
||||||
|
"run_on_branch_deletion": "ブランチが削除されたときに実行されます。ブランチは親ノートと子ノート間のリンクであり、ノートを移動した場合などに削除されます(古いブランチ/リンクは削除されます)。",
|
||||||
|
"run_on_attribute_creation": "このリレーションを定義するノートに新しい属性が作成された場合に実行されます",
|
||||||
|
"run_on_attribute_change": " このリレーションを定義するノートの属性が変更されたときに実行されます。属性が削除された場合にも実行されます",
|
||||||
|
"relation_template": "ノートの属性は親子関係がなくても継承されます。ノートの内容とサブツリーは、空の場合はインスタンスノートに追加されます。詳細はドキュメントをご覧ください。",
|
||||||
|
"inherit": "親子関係がなくても、ノートの属性は継承されます。同様の概念については、テンプレートリレーションを参照してください。ドキュメントの属性継承を参照してください。",
|
||||||
|
"widget_relation": "このリレーションのターゲットが実行され、サイドバーのウィジェットとしてレンダリングされます",
|
||||||
|
"share_css": "共有ページに挿入されるCSSノートです。CSSノートは共有サブツリーにも含まれている必要があります。「share_hidden_from_tree」と「share_omit_default_css」の使用も検討してください。",
|
||||||
|
"share_js": "共有ページに挿入されるJavaScriptノートです。JavaScriptノートは共有サブツリー内にも存在する必要があります。「share_hidden_from_tree」の使用を検討してください。",
|
||||||
|
"share_template": "共有ノートを表示するためのテンプレートとして使用される埋め込みJavaScriptノートです。デフォルトのテンプレートにフォールバックします。「share_hidden_from_tree」の使用を検討してください。",
|
||||||
|
"share_favicon": "共有ページに設定するファビコンのノートです。通常は共有ルートに設定し、継承可能にします。ファビコンのノートは共有サブツリーにも設定する必要があります。「share_hidden_from_tree」の使用を検討してください。",
|
||||||
|
"is_owned_by_note": "ノートによって所有されています",
|
||||||
|
"and_more": "...その他 {{count}} 件。",
|
||||||
|
"print_landscape": "PDF にエクスポートするときに、ページの向きを縦向きではなく横向きに変更します。",
|
||||||
|
"print_page_size": "PDF にエクスポートするときに、ページのサイズを変更します。サポートされる値: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>。"
|
||||||
},
|
},
|
||||||
"link_context_menu": {
|
"link_context_menu": {
|
||||||
"open_note_in_popup": "クイックエディット",
|
"open_note_in_popup": "クイックエディット",
|
||||||
@@ -1104,11 +1166,14 @@
|
|||||||
},
|
},
|
||||||
"template_switch": {
|
"template_switch": {
|
||||||
"template": "テンプレート",
|
"template": "テンプレート",
|
||||||
"toggle-on-hint": "ノートをテンプレート化する"
|
"toggle-on-hint": "ノートをテンプレート化する",
|
||||||
|
"toggle-off-hint": "テンプレートとしてのノートを削除する"
|
||||||
},
|
},
|
||||||
"open-help-page": "ヘルプページを開く",
|
"open-help-page": "ヘルプページを開く",
|
||||||
"shared_info": {
|
"shared_info": {
|
||||||
"help_link": "ヘルプについては、<a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>をご覧ください。"
|
"help_link": "ヘルプについては、<a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>をご覧ください。",
|
||||||
|
"shared_locally": "このノートは {{- link}} でローカルに共有されています。",
|
||||||
|
"shared_publicly": "このノートは {{- link}} で一般公開されています。"
|
||||||
},
|
},
|
||||||
"highlights_list_2": {
|
"highlights_list_2": {
|
||||||
"title": "ハイライトリスト",
|
"title": "ハイライトリスト",
|
||||||
@@ -1132,7 +1197,10 @@
|
|||||||
"auto-collapsing-notes-after-inactivity": "非アクティブ状態が続いたためノートが自動で折りたたまれます...",
|
"auto-collapsing-notes-after-inactivity": "非アクティブ状態が続いたためノートが自動で折りたたまれます...",
|
||||||
"create-child-note": "子ノートを作成",
|
"create-child-note": "子ノートを作成",
|
||||||
"hoist-this-note-workspace": "このノートをホイストする(ワークスペース)",
|
"hoist-this-note-workspace": "このノートをホイストする(ワークスペース)",
|
||||||
"unhoist": "ホイスト解除"
|
"unhoist": "ホイスト解除",
|
||||||
|
"saved-search-note-refreshed": "保存した検索ノートが更新されました。",
|
||||||
|
"refresh-saved-search-results": "保存した検索結果を更新",
|
||||||
|
"toggle-sidebar": "サイドバーを切り替え"
|
||||||
},
|
},
|
||||||
"bulk_actions": {
|
"bulk_actions": {
|
||||||
"bulk_actions": "一括操作",
|
"bulk_actions": "一括操作",
|
||||||
@@ -1143,7 +1211,7 @@
|
|||||||
"execute_bulk_actions": "一括操作を実行",
|
"execute_bulk_actions": "一括操作を実行",
|
||||||
"bulk_actions_executed": "一括操作が成功に実行されました。",
|
"bulk_actions_executed": "一括操作が成功に実行されました。",
|
||||||
"labels": "ラベル",
|
"labels": "ラベル",
|
||||||
"relations": "関係",
|
"relations": "リレーション",
|
||||||
"notes": "ノート",
|
"notes": "ノート",
|
||||||
"other": "その他",
|
"other": "その他",
|
||||||
"none_yet": "アクションを上のリストからクリックして追加。"
|
"none_yet": "アクションを上のリストからクリックして追加。"
|
||||||
@@ -1207,7 +1275,7 @@
|
|||||||
"editor_type": {
|
"editor_type": {
|
||||||
"label": "書式設定ツールバー",
|
"label": "書式設定ツールバー",
|
||||||
"floating": {
|
"floating": {
|
||||||
"description": "編集ツールがカーソル付近に表示されます;",
|
"description": "編集ツールがカーソル付近に表示されます。",
|
||||||
"title": "フローティング"
|
"title": "フローティング"
|
||||||
},
|
},
|
||||||
"fixed": {
|
"fixed": {
|
||||||
@@ -1272,11 +1340,17 @@
|
|||||||
"continue_anyway": "とにかく続ける",
|
"continue_anyway": "とにかく続ける",
|
||||||
"message_windows": "TriliumNext は現在エミュレーションを実行しています。つまり、ARM版WindowsデバイスでIntel(x64)版を使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。",
|
"message_windows": "TriliumNext は現在エミュレーションを実行しています。つまり、ARM版WindowsデバイスでIntel(x64)版を使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。",
|
||||||
"recommendation": "最適なエクスペリエンスを得るには、リリース ページから TriliumNext のネイティブ ARM64 バージョンをダウンロードしてください。",
|
"recommendation": "最適なエクスペリエンスを得るには、リリース ページから TriliumNext のネイティブ ARM64 バージョンをダウンロードしてください。",
|
||||||
"download_link": "ネイティブ版をダウンロード"
|
"download_link": "ネイティブ版をダウンロード",
|
||||||
|
"message_macos": "TriliumNext は現在、Rosetta 2による翻訳環境で実行されています。つまり、Apple Silicon MacではIntel (x64)バージョンを使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。"
|
||||||
},
|
},
|
||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"emoji_completion_enabled": "絵文字のオートコンプリートを有効",
|
"emoji_completion_enabled": "絵文字のオートコンプリートを有効",
|
||||||
"note_completion_enabled": "ノートのオートコンプリートを有効"
|
"note_completion_enabled": "ノートのオートコンプリートを有効",
|
||||||
|
"emoji_completion_description": "有効にすると、「:」に続けて絵文字の名前を入力することで、テキストに絵文字を簡単に挿入できます。",
|
||||||
|
"note_completion_description": "有効にすると、「@」 に続けてノートのタイトルを入力することで、ノートへのリンクを作成できます。",
|
||||||
|
"slash_commands_enabled": "スラッシュコマンドを有効",
|
||||||
|
"slash_commands_description": "有効にすると、改行や見出しの挿入などの編集コマンドは、「/」 と入力して切り替えることができます。",
|
||||||
|
"title": "機能"
|
||||||
},
|
},
|
||||||
"table_context_menu": {
|
"table_context_menu": {
|
||||||
"delete_row": "行を削除"
|
"delete_row": "行を削除"
|
||||||
@@ -1344,7 +1418,8 @@
|
|||||||
"agent": {
|
"agent": {
|
||||||
"processing": "処理中...",
|
"processing": "処理中...",
|
||||||
"loading": "読み込み中...",
|
"loading": "読み込み中...",
|
||||||
"generating": "生成中..."
|
"generating": "生成中...",
|
||||||
|
"thinking": "考え中..."
|
||||||
},
|
},
|
||||||
"name": "AI",
|
"name": "AI",
|
||||||
"openai": "OpenAI",
|
"openai": "OpenAI",
|
||||||
@@ -1352,7 +1427,7 @@
|
|||||||
"ollama_no_url": "Ollamaは設定されていません。有効なURLを入力してください。",
|
"ollama_no_url": "Ollamaは設定されていません。有効なURLを入力してください。",
|
||||||
"chat": {
|
"chat": {
|
||||||
"root_note_title": "AIチャット",
|
"root_note_title": "AIチャット",
|
||||||
"root_note_content": "このメモには、保存されたAIチャットの会話が含まれています。",
|
"root_note_content": "このノートには、保存されたAIチャットの会話が含まれています。",
|
||||||
"new_chat_title": "新しいチャット",
|
"new_chat_title": "新しいチャット",
|
||||||
"create_new_ai_chat": "新しいAIチャットを作成"
|
"create_new_ai_chat": "新しいAIチャットを作成"
|
||||||
},
|
},
|
||||||
@@ -1362,7 +1437,71 @@
|
|||||||
"selected_provider_description": "チャットおよび補完機能のAIプロバイダーを選択する",
|
"selected_provider_description": "チャットおよび補完機能のAIプロバイダーを選択する",
|
||||||
"selected_provider": "プロバイダーを選択",
|
"selected_provider": "プロバイダーを選択",
|
||||||
"select_model": "モデルを選択...",
|
"select_model": "モデルを選択...",
|
||||||
"select_provider": "プロバイダーを選択..."
|
"select_provider": "プロバイダーを選択...",
|
||||||
|
"not_started": "開始されていません",
|
||||||
|
"processed_notes": "処理済みノート",
|
||||||
|
"total_notes": "ノートの総数",
|
||||||
|
"progress": "進行状況",
|
||||||
|
"queued_notes": "キューに登録されたノート",
|
||||||
|
"failed_notes": "失敗したノート",
|
||||||
|
"last_processed": "最終処理日時",
|
||||||
|
"refresh_stats": "統計情報を更新",
|
||||||
|
"temperature": "Temperature(温度)",
|
||||||
|
"url": "ベースURL",
|
||||||
|
"base_url": "ベースURL",
|
||||||
|
"enable_automatic_indexing": "自動インデックス作成を有効にする",
|
||||||
|
"rebuild_index": "インデックスの再構築",
|
||||||
|
"rebuild_index_error": "インデックスの再構築開始時にエラーが発生しました。詳細はログをご確認ください。",
|
||||||
|
"note_title": "ノートのタイトル",
|
||||||
|
"last_attempt": "最終試行日時",
|
||||||
|
"actions": "アクション",
|
||||||
|
"retry_queued": "ノートが再試行キューに追加されました",
|
||||||
|
"retry_failed": "ノートを再試行キューに追加できませんでした",
|
||||||
|
"max_notes_per_llm_query": "クエリあたりの最大ノート数",
|
||||||
|
"max_notes_per_llm_query_description": "AIコンテキストに含める類似ノートの最大数",
|
||||||
|
"active_providers": "アクティブなプロバイダー",
|
||||||
|
"disabled_providers": "無効なプロバイダー",
|
||||||
|
"remove_provider": "検索からプロバイダーを削除",
|
||||||
|
"restore_provider": "検索にプロバイダーを復元",
|
||||||
|
"similarity_threshold": "類似度のしきい値",
|
||||||
|
"similarity_threshold_description": "LLMクエリのコンテキストに含めるノートの最小類似度スコア(0~1)",
|
||||||
|
"reprocess_index": "検索インデックスを再構築",
|
||||||
|
"reprocessing_index": "再構築中...",
|
||||||
|
"reprocess_index_started": "検索インデックスの最適化がバックグラウンドで開始されました",
|
||||||
|
"reprocess_index_error": "検索インデックスの再構築中にエラーが発生しました",
|
||||||
|
"index_rebuild_progress": "インデックスの再構築の進行状況",
|
||||||
|
"index_rebuilding": "インデックスの最適化中({{percentage}}%)",
|
||||||
|
"index_rebuild_complete": "インデックスの最適化が完了しました",
|
||||||
|
"index_rebuild_status_error": "インデックスの再構築ステータスの確認中にエラーが発生しました",
|
||||||
|
"never": "なし",
|
||||||
|
"incomplete": "未完了 ({{percentage}}%)",
|
||||||
|
"note_queued_for_retry": "ノートが再試行キューに追加されました",
|
||||||
|
"failed_to_retry_note": "ノートの再試行に失敗しました",
|
||||||
|
"all_notes_queued_for_retry": "失敗したすべてのノートは再試行のためにキューに入れられました",
|
||||||
|
"failed_to_retry_all": "ノートの再試行に失敗しました",
|
||||||
|
"use_enhanced_context": "拡張されたコンテキストを使用する",
|
||||||
|
"enhanced_context_description": "ノートとその関連ノートからより多くのコンテキストをAIに提供し、より良い応答を実現します",
|
||||||
|
"show_thinking": "思考を表示",
|
||||||
|
"show_thinking_description": "AIの思考プロセスをチェーン表示",
|
||||||
|
"enter_message": "メッセージを入力...",
|
||||||
|
"error_generating_response": "AI応答の生成中にエラーが発生しました",
|
||||||
|
"index_all_notes": "すべてのノートをインデックスに登録",
|
||||||
|
"index_status": "インデックスのステータス",
|
||||||
|
"indexed_notes": "インデックス登録済みのノート",
|
||||||
|
"indexing_stopped": "インデックス登録を停止しました",
|
||||||
|
"indexing_in_progress": "インデックス登録中です...",
|
||||||
|
"last_indexed": "最終インデックス作成日時",
|
||||||
|
"n_notes_queued_0": "{{ count }} 件のノートがインデックス作成待ちです",
|
||||||
|
"note_chat": "ノートチャット",
|
||||||
|
"notes_indexed_0": "{{ count }} 件のノートをインデックスしました",
|
||||||
|
"sources": "ソース",
|
||||||
|
"start_indexing": "インデックス作成を開始",
|
||||||
|
"use_advanced_context": "高度なコンテキストを使用",
|
||||||
|
"ai_enabled": "AI 機能が有効",
|
||||||
|
"ai_disabled": "AI 機能が無効",
|
||||||
|
"no_models_found_online": "モデルが見つかりません。API キーと設定を確認してください。",
|
||||||
|
"no_models_found_ollama": "Ollama モデルが見つかりません。Ollama が実行中かどうかを確認してください。",
|
||||||
|
"error_fetching": "モデルの取得エラー: {{error}}"
|
||||||
},
|
},
|
||||||
"add_label": {
|
"add_label": {
|
||||||
"add_label": "ラベルを追加",
|
"add_label": "ラベルを追加",
|
||||||
@@ -1370,7 +1509,10 @@
|
|||||||
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
||||||
"new_value_placeholder": "新しい値",
|
"new_value_placeholder": "新しい値",
|
||||||
"help_text": "一致したすべてのノートに:",
|
"help_text": "一致したすべてのノートに:",
|
||||||
"help_text_note": "このメソッドを値なしで呼び出すこともできます。その場合、ラベルは値なしでノートに割り当てられます。"
|
"help_text_note": "このメソッドを値なしで呼び出すこともできます。その場合、ラベルは値なしでノートに割り当てられます。",
|
||||||
|
"to_value": "値",
|
||||||
|
"help_text_item1": "ノートにまだラベルがない場合は、指定されたラベルを作成します",
|
||||||
|
"help_text_item2": "または既存のラベルの値を変更する"
|
||||||
},
|
},
|
||||||
"delete_label": {
|
"delete_label": {
|
||||||
"delete_label": "ラベルを削除",
|
"delete_label": "ラベルを削除",
|
||||||
@@ -1391,32 +1533,39 @@
|
|||||||
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
"label_name_title": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
||||||
"new_value_placeholder": "新しい値",
|
"new_value_placeholder": "新しい値",
|
||||||
"help_text_note": "このメソッドは値なしで呼び出すこともできます。その場合、値なしでラベルがノートに割り当てられます。",
|
"help_text_note": "このメソッドは値なしで呼び出すこともできます。その場合、値なしでラベルがノートに割り当てられます。",
|
||||||
"help_text": "一致したすべてのノートで、既存のラベルの値を変更する。"
|
"help_text": "一致したすべてのノートで、既存のラベルの値を変更する。",
|
||||||
|
"to_value": "値"
|
||||||
},
|
},
|
||||||
"add_relation": {
|
"add_relation": {
|
||||||
"add_relation": "関係を追加",
|
"add_relation": "リレーションを追加",
|
||||||
"relation_name": "関係の名前",
|
"relation_name": "リレーションの名前",
|
||||||
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
||||||
"create_relation_on_all_matched_notes": "一致したすべてのノートに対して、指定されたリレーションを作成します。"
|
"create_relation_on_all_matched_notes": "一致したすべてのノートに対して、指定されたリレーションを作成します。",
|
||||||
|
"target_note": "対象のノート",
|
||||||
|
"to": "を"
|
||||||
},
|
},
|
||||||
"delete_relation": {
|
"delete_relation": {
|
||||||
"delete_relation": "関係を削除",
|
"delete_relation": "リレーションを削除",
|
||||||
"relation_name": "関係の名前",
|
"relation_name": "リレーションの名前",
|
||||||
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
|
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
|
||||||
},
|
},
|
||||||
"rename_relation": {
|
"rename_relation": {
|
||||||
"rename_relation": "関係の名前を変更",
|
"rename_relation": "リレーションの名前を変更",
|
||||||
"rename_relation_from": "関係の名前を",
|
"rename_relation_from": "リレーションの名前を",
|
||||||
"old_name": "古い名前",
|
"old_name": "古い名前",
|
||||||
"to": "から",
|
"to": "から",
|
||||||
"new_name": "新しい名前",
|
"new_name": "新しい名前",
|
||||||
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
|
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。"
|
||||||
},
|
},
|
||||||
"update_relation_target": {
|
"update_relation_target": {
|
||||||
"update_relation": "関係の更新",
|
"update_relation": "リレーションの更新",
|
||||||
"relation_name": "関係の名前",
|
"relation_name": "リレーションの名前",
|
||||||
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
"allowed_characters": "英数字、アンダーバー、コロンが使用可能な文字です。",
|
||||||
"on_all_matched_notes": "一致したすべてのノートに"
|
"on_all_matched_notes": "一致したすべてのノートに",
|
||||||
|
"target_note": "対象のノート",
|
||||||
|
"change_target_note": "既存のリレーション対象のノートを変更する",
|
||||||
|
"update_relation_target": "リレーション対象の更新",
|
||||||
|
"to": "を"
|
||||||
},
|
},
|
||||||
"revisions_button": {
|
"revisions_button": {
|
||||||
"note_revisions": "ノートの変更履歴"
|
"note_revisions": "ノートの変更履歴"
|
||||||
@@ -1427,21 +1576,24 @@
|
|||||||
"zpetne_odkazy": {
|
"zpetne_odkazy": {
|
||||||
"backlink": "{{count}} バックリンク",
|
"backlink": "{{count}} バックリンク",
|
||||||
"backlinks": "{{count}} バックリンク",
|
"backlinks": "{{count}} バックリンク",
|
||||||
"relation": "関係"
|
"relation": "リレーション"
|
||||||
},
|
},
|
||||||
"mobile_detail_menu": {
|
"mobile_detail_menu": {
|
||||||
"delete_this_note": "このノートを削除",
|
"delete_this_note": "このノートを削除",
|
||||||
"error_unrecognized_command": "認識されないコマンド {{command}}"
|
"error_unrecognized_command": "認識されないコマンド {{command}}",
|
||||||
|
"insert_child_note": "子ノートを挿入",
|
||||||
|
"error_cannot_get_branch_id": "ノートパス 「{{notePath}} のbranchIdを取得できません"
|
||||||
},
|
},
|
||||||
"inherited_attribute_list": {
|
"inherited_attribute_list": {
|
||||||
"title": "継承属性",
|
"title": "継承属性",
|
||||||
"no_inherited_attributes": "継承属性ではありません。"
|
"no_inherited_attributes": "継承属性はありません。"
|
||||||
},
|
},
|
||||||
"note_map": {
|
"note_map": {
|
||||||
"open_full": "拡大表示",
|
"open_full": "拡大表示",
|
||||||
"collapse": "通常サイズに折りたたむ",
|
"collapse": "通常サイズに折りたたむ",
|
||||||
"title": "ノートマップ",
|
"title": "ノートマップ",
|
||||||
"link-distance": "リンク距離"
|
"link-distance": "リンク距離",
|
||||||
|
"fix-nodes": "ノードを修正"
|
||||||
},
|
},
|
||||||
"owned_attribute_list": {
|
"owned_attribute_list": {
|
||||||
"owned_attributes": "所有属性"
|
"owned_attributes": "所有属性"
|
||||||
@@ -1453,7 +1605,9 @@
|
|||||||
"unknown_attribute_type": "不明な属性タイプ '{{type}}'",
|
"unknown_attribute_type": "不明な属性タイプ '{{type}}'",
|
||||||
"add_new_attribute": "新しい属性を追加",
|
"add_new_attribute": "新しい属性を追加",
|
||||||
"remove_this_attribute": "この属性を削除",
|
"remove_this_attribute": "この属性を削除",
|
||||||
"remove_color": "このカラーラベルを削除"
|
"remove_color": "このカラーラベルを削除",
|
||||||
|
"promoted_attributes": "プロモート属性",
|
||||||
|
"url_placeholder": "http://ウェブサイト..."
|
||||||
},
|
},
|
||||||
"relation_map": {
|
"relation_map": {
|
||||||
"open_in_new_tab": "新しいタブで開く",
|
"open_in_new_tab": "新しいタブで開く",
|
||||||
@@ -1461,14 +1615,17 @@
|
|||||||
"edit_title": "タイトルを編集",
|
"edit_title": "タイトルを編集",
|
||||||
"rename_note": "ノート名を変更",
|
"rename_note": "ノート名を変更",
|
||||||
"enter_new_title": "新しいノート名を入力:",
|
"enter_new_title": "新しいノート名を入力:",
|
||||||
"remove_relation": "関係を削除",
|
"remove_relation": "リレーションを削除",
|
||||||
"confirm_remove_relation": "本当にこの関係を削除しますか?",
|
"confirm_remove_relation": "本当にこのリレーションを削除しますか?",
|
||||||
"specify_new_relation_name": "新しい関係の名前(使用可能な文字: 英数字、コロン、アンダースコア)を指定:",
|
"specify_new_relation_name": "新しいリレーションの名前(使用可能な文字: 英数字、コロン、アンダースコア)を指定:",
|
||||||
"note_not_found": "ノート {{noteId}} が見つかりません!",
|
"note_not_found": "ノート {{noteId}} が見つかりません!",
|
||||||
"enter_title_of_new_note": "新しいノートのタイトルを入力",
|
"enter_title_of_new_note": "新しいノートのタイトルを入力",
|
||||||
"default_new_note_title": "新しいノート",
|
"default_new_note_title": "新しいノート",
|
||||||
"cannot_match_transform": "変換を一致させることができません: {{transform}}",
|
"cannot_match_transform": "変換を一致させることができません: {{transform}}",
|
||||||
"click_on_canvas_to_place_new_note": "キャンバスをクリックして新しいノートを配置"
|
"click_on_canvas_to_place_new_note": "キャンバスをクリックして新しいノートを配置",
|
||||||
|
"connection_exists": "これらのノート間の接続 '{{name}}' は既に存在します。",
|
||||||
|
"start_dragging_relations": "ここからリレーションをドラッグして、別のノートにドロップします。",
|
||||||
|
"note_already_in_diagram": "ノート「{{title}}」はすでに図に含まれています。"
|
||||||
},
|
},
|
||||||
"database_anonymization": {
|
"database_anonymization": {
|
||||||
"title": "データベースの匿名化",
|
"title": "データベースの匿名化",
|
||||||
@@ -1534,7 +1691,7 @@
|
|||||||
"native-title-bar": "ネイティブタイトルバー",
|
"native-title-bar": "ネイティブタイトルバー",
|
||||||
"native-title-bar-description": "WindowsとmacOSでは、ネイティブタイトルバーをオフにしておくと、アプリケーションがよりコンパクトに見えます。Linuxでは、ネイティブタイトルバーを表示したままの方が、他のシステムとの統一性が高まります。",
|
"native-title-bar-description": "WindowsとmacOSでは、ネイティブタイトルバーをオフにしておくと、アプリケーションがよりコンパクトに見えます。Linuxでは、ネイティブタイトルバーを表示したままの方が、他のシステムとの統一性が高まります。",
|
||||||
"background-effects": "背景効果を有効化(Windows 11のみ)",
|
"background-effects": "背景効果を有効化(Windows 11のみ)",
|
||||||
"background-effects-description": "Mica効果は、アプリのウィンドウにぼかされたスタイリッシュな背景を追加し、奥行きとモダンな外観を作り出します。",
|
"background-effects-description": "Mica効果は、アプリのウィンドウにぼかされたスタイリッシュな背景を追加し、奥行きとモダンな外観を演出します。「ネイティブタイトルバー」を無効にする必要があります。",
|
||||||
"restart-app-button": "アプリケーションを再起動して変更を反映",
|
"restart-app-button": "アプリケーションを再起動して変更を反映",
|
||||||
"zoom-factor": "ズーム倍率"
|
"zoom-factor": "ズーム倍率"
|
||||||
},
|
},
|
||||||
@@ -1577,10 +1734,23 @@
|
|||||||
"attribute_editor": {
|
"attribute_editor": {
|
||||||
"help_text_body1": "ラベルを追加するには、例 <code>#rock</code> と入力します。値も追加したい場合は、例 <code>#year = 2020</code> と入力します",
|
"help_text_body1": "ラベルを追加するには、例 <code>#rock</code> と入力します。値も追加したい場合は、例 <code>#year = 2020</code> と入力します",
|
||||||
"help_text_body2": "リレーションについては、<code>~author = @</code> と入力すると、オートコンプリートが表示され、目的のノートを検索できるようになります。",
|
"help_text_body2": "リレーションについては、<code>~author = @</code> と入力すると、オートコンプリートが表示され、目的のノートを検索できるようになります。",
|
||||||
"placeholder": "ここにラベルとリレーションを入力"
|
"placeholder": "ここにラベルとリレーションを入力",
|
||||||
|
"help_text_body3": "代わりに、右側の <code>+</code> ボタンを使用してラベルとリレーションを追加することもできます。",
|
||||||
|
"save_attributes": "属性を保存 <enter>",
|
||||||
|
"add_a_new_attribute": "新しい属性を追加",
|
||||||
|
"add_new_label": "新しいラベルを追加 <kbd data-command=\"addNewLabel\"></kbd>",
|
||||||
|
"add_new_relation": "新しいリレーションを追加 <kbd data-command=\"addNewRelation\"></kbd>",
|
||||||
|
"add_new_label_definition": "新しいラベル定義を追加",
|
||||||
|
"add_new_relation_definition": "新しいリレーション定義を追加"
|
||||||
},
|
},
|
||||||
"move_note": {
|
"move_note": {
|
||||||
"on_all_matched_notes": "一致したすべてのノートに"
|
"on_all_matched_notes": "一致したすべてのノートに",
|
||||||
|
"move_note": "ノートを移動",
|
||||||
|
"target_parent_note": "対象の親ノート",
|
||||||
|
"move_note_new_parent": "ノートに親が 1 つしかない場合は、ノートを新しい親に移動します (つまり、古いブランチが削除され、新しい親に新しいブランチが作成されます)",
|
||||||
|
"clone_note_new_parent": "ノートに複数のクローン/ブランチがある場合、ノートを新しい親にクローンします(どのブランチを削除すべきか不明なため)",
|
||||||
|
"nothing_will_happen": "ノートをターゲットノートに移動できない場合は何も起こりません(つまり、ツリーサイクルが生じるため)",
|
||||||
|
"to": "次へ"
|
||||||
},
|
},
|
||||||
"onclick_button": {
|
"onclick_button": {
|
||||||
"no_click_handler": "ボタン ウィジェット '{{componentId}}' にはクリック ハンドラーが定義されていません"
|
"no_click_handler": "ボタン ウィジェット '{{componentId}}' にはクリック ハンドラーが定義されていません"
|
||||||
@@ -1596,20 +1766,35 @@
|
|||||||
"placeholder": "ここにノートの内容を入力..."
|
"placeholder": "ここにノートの内容を入力..."
|
||||||
},
|
},
|
||||||
"empty": {
|
"empty": {
|
||||||
"open_note_instruction": "以下の入力欄にノートのタイトルを入力するか、ツリー内のノートを選択してノートを開きます。"
|
"open_note_instruction": "以下の入力欄にノートのタイトルを入力するか、ツリー内のノートを選択してノートを開きます。",
|
||||||
|
"search_placeholder": "名前でノートを検索",
|
||||||
|
"enter_workspace": "ワークスペース {{title}} に入る"
|
||||||
},
|
},
|
||||||
"file": {
|
"file": {
|
||||||
"too_big": "パフォーマンス上の理由により、プレビューではファイルの最初の {{maxNumChars}} 文字のみが表示されます。ファイル全体を表示するには、ファイルをダウンロードして外部で開いてください。"
|
"too_big": "パフォーマンス上の理由により、プレビューではファイルの最初の {{maxNumChars}} 文字のみが表示されます。ファイル全体を表示するには、ファイルをダウンロードして外部で開いてください。",
|
||||||
|
"file_preview_not_available": "このファイル形式ではファイルプレビューは利用できません。"
|
||||||
},
|
},
|
||||||
"protected_session": {
|
"protected_session": {
|
||||||
"enter_password_instruction": "保護されたノートを表示するにはパスワードを入力する必要があります:"
|
"enter_password_instruction": "保護されたノートを表示するにはパスワードを入力する必要があります:",
|
||||||
|
"start_session_button": "保護されたセッションを開始 <kbd>enter</kbd>",
|
||||||
|
"started": "保護されたセッションが開始されました。",
|
||||||
|
"wrong_password": "パスワードが間違っています。",
|
||||||
|
"protecting-finished-successfully": "保護が正常に完了しました。",
|
||||||
|
"unprotecting-finished-successfully": "保護の解除が正常に完了しました。",
|
||||||
|
"protecting-in-progress": "保護中: {{count}}",
|
||||||
|
"unprotecting-in-progress-count": "保護解除中: {{count}}",
|
||||||
|
"protecting-title": "保護の状態",
|
||||||
|
"unprotecting-title": "保護解除の状態"
|
||||||
},
|
},
|
||||||
"render": {
|
"render": {
|
||||||
"note_detail_render_help_1": "このヘルプノートが表示されるのは、このノートの「HTML のレンダリング」タイプには、正常に機能するために必要なリレーションがないためです。"
|
"note_detail_render_help_1": "このヘルプノートが表示されるのは、このノートの「HTML のレンダリング」タイプには、正常に機能するために必要なリレーションがないためです。",
|
||||||
|
"note_detail_render_help_2": "レンダリングHTMLノートタイプは、<a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/scripts.html\">スクリプティング</a>に使用されます。簡単に言うと、HTMLコードノート(オプションでJavaScriptを含む)があり、このノートがそれをレンダリングします。これを動作させるには、レンダリングするHTMLノートを指す「renderNote」という<a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/attributes.html\">リレーション</a>を定義する必要があります。"
|
||||||
},
|
},
|
||||||
"consistency_checks": {
|
"consistency_checks": {
|
||||||
"find_and_fix_button": "一貫性の問題を見つけて修正する",
|
"find_and_fix_button": "一貫性の問題を見つけて修正する",
|
||||||
"finding_and_fixing_message": "一貫性の問題を見つけて修正中…"
|
"finding_and_fixing_message": "一貫性の問題を見つけて修正中…",
|
||||||
|
"title": "一貫性をチェック",
|
||||||
|
"issues_fixed_message": "発見された可能性のある一貫性の問題はすべて修正されました。"
|
||||||
},
|
},
|
||||||
"vacuum_database": {
|
"vacuum_database": {
|
||||||
"title": "データベースのバキューム",
|
"title": "データベースのバキューム",
|
||||||
@@ -1620,12 +1805,16 @@
|
|||||||
},
|
},
|
||||||
"ribbon": {
|
"ribbon": {
|
||||||
"promoted_attributes_message": "プロモート属性がノートに存在する場合、プロモート属性のリボンタブが自動的に開きます",
|
"promoted_attributes_message": "プロモート属性がノートに存在する場合、プロモート属性のリボンタブが自動的に開きます",
|
||||||
"edited_notes_message": "編集したノートのリボンタブは、dayノートで自動的に開きます"
|
"edited_notes_message": "編集したノートのリボンタブは、dayノートで自動的に開きます",
|
||||||
|
"widgets": "リボンウィジェット"
|
||||||
},
|
},
|
||||||
"ui-performance": {
|
"ui-performance": {
|
||||||
"enable-motion": "トランジションとアニメーションを有効にする",
|
"enable-motion": "トランジションとアニメーションを有効にする",
|
||||||
"enable-shadows": "影を有効にする",
|
"enable-shadows": "影を有効にする",
|
||||||
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果を有効にする"
|
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果を有効にする",
|
||||||
|
"title": "パフォーマンス",
|
||||||
|
"enable-smooth-scroll": "スムーズスクロールを有効にする",
|
||||||
|
"app-restart-required": "(変更を有効にするにはアプリケーションの再起動が必要です)"
|
||||||
},
|
},
|
||||||
"code_mime_types": {
|
"code_mime_types": {
|
||||||
"title": "ドロップダウンで利用可能なMIMEタイプ"
|
"title": "ドロップダウンで利用可能なMIMEタイプ"
|
||||||
@@ -1664,7 +1853,12 @@
|
|||||||
"erase_excess_revision_snapshots_prompt": "余分な変更履歴が消去されました。"
|
"erase_excess_revision_snapshots_prompt": "余分な変更履歴が消去されました。"
|
||||||
},
|
},
|
||||||
"editability_select": {
|
"editability_select": {
|
||||||
"note_is_read_only": "ノートは読み取り専用ですが、ボタンをクリックすると編集できます。"
|
"note_is_read_only": "ノートは読み取り専用ですが、ボタンをクリックすると編集できます。",
|
||||||
|
"auto": "自動",
|
||||||
|
"read_only": "読み取り専用",
|
||||||
|
"always_editable": "常に編集可能",
|
||||||
|
"note_is_editable": "ノートは長すぎなければ編集可能です。",
|
||||||
|
"note_is_always_editable": "ノートは長さに関係なく常に編集可能です。"
|
||||||
},
|
},
|
||||||
"find": {
|
"find": {
|
||||||
"case_sensitive": "大文字と小文字を区別",
|
"case_sensitive": "大文字と小文字を区別",
|
||||||
@@ -1681,7 +1875,9 @@
|
|||||||
"could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした"
|
"could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした"
|
||||||
},
|
},
|
||||||
"watched_file_update_status": {
|
"watched_file_update_status": {
|
||||||
"ignore_this_change": "この変更を無視する"
|
"ignore_this_change": "この変更を無視する",
|
||||||
|
"file_last_modified": "ファイル <code class=\"file-path\"></code> は <span class=\"file-last-modified\"></span> に最後に変更されました。",
|
||||||
|
"upload_modified_file": "変更したファイルをアップロード"
|
||||||
},
|
},
|
||||||
"image": {
|
"image": {
|
||||||
"copied-to-clipboard": "画像への参照がクリップボードにコピーされました。これは任意のテキストノートに貼り付けることができます。",
|
"copied-to-clipboard": "画像への参照がクリップボードにコピーされました。これは任意のテキストノートに貼り付けることができます。",
|
||||||
@@ -1689,7 +1885,8 @@
|
|||||||
},
|
},
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"note-revision-created": "ノートの改訂版が作成されました。",
|
"note-revision-created": "ノートの改訂版が作成されました。",
|
||||||
"sql-error": "SQL クエリの実行中にエラーが発生しました: {{message}}"
|
"sql-error": "SQL クエリの実行中にエラーが発生しました: {{message}}",
|
||||||
|
"note-executed": "ノートが実行されました。"
|
||||||
},
|
},
|
||||||
"branches": {
|
"branches": {
|
||||||
"cannot-move-notes-here": "ここにノートを移動することはできません。",
|
"cannot-move-notes-here": "ここにノートを移動することはできません。",
|
||||||
@@ -1706,7 +1903,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "同期チェックに失敗しました!",
|
"sync-check-failed": "同期チェックに失敗しました!",
|
||||||
"consistency-checks-failed": "整合性チェックに失敗しました! 詳細はログを参照してください。",
|
"consistency-checks-failed": "整合性チェックに失敗しました! 詳細はログを参照してください。",
|
||||||
"encountered-error": "エラー「{{message}}」が発生しました。コンソールを確認してください。"
|
"encountered-error": "エラー「{{message}}」が発生しました。コンソールを確認してください。",
|
||||||
|
"lost-websocket-connection-title": "サーバーへの接続が失われました",
|
||||||
|
"lost-websocket-connection-message": "リバースプロキシ(例: nginx や Apache など)の設定を確認し、WebSocket 接続が適切に許可され、ブロックされていないことを確認してください。"
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "要求されたノート「{{requestedNote}}」は、ホイストされたノート「{{hoistedNote}}」サブツリーの外部にあるため、ノートにアクセスするにはホイストを解除する必要があります。ホイスト解除を続行しますか?"
|
"confirm_unhoisting": "要求されたノート「{{requestedNote}}」は、ホイストされたノート「{{hoistedNote}}」サブツリーの外部にあるため、ノートにアクセスするにはホイストを解除する必要があります。ホイスト解除を続行しますか?"
|
||||||
@@ -1752,7 +1951,10 @@
|
|||||||
"display-week-numbers": "週番号を表示",
|
"display-week-numbers": "週番号を表示",
|
||||||
"map-style": "マップスタイル:",
|
"map-style": "マップスタイル:",
|
||||||
"max-nesting-depth": "最大階層の深さ:",
|
"max-nesting-depth": "最大階層の深さ:",
|
||||||
"show-scale": "スケールを表示"
|
"show-scale": "スケールを表示",
|
||||||
|
"raster": "Raster",
|
||||||
|
"vector_light": "Vector(ライト)",
|
||||||
|
"vector_dark": "Vector (ダーク)"
|
||||||
},
|
},
|
||||||
"call_to_action": {
|
"call_to_action": {
|
||||||
"next_theme_title": "新しいTriliumテーマをお試しください",
|
"next_theme_title": "新しいTriliumテーマをお試しください",
|
||||||
@@ -1779,5 +1981,89 @@
|
|||||||
},
|
},
|
||||||
"collections": {
|
"collections": {
|
||||||
"rendering_error": "エラーのためコンテンツを表示できません。"
|
"rendering_error": "エラーのためコンテンツを表示できません。"
|
||||||
|
},
|
||||||
|
"abstract_bulk_action": {
|
||||||
|
"remove_this_search_action": "この検索アクションを削除"
|
||||||
|
},
|
||||||
|
"update_available": {
|
||||||
|
"update_available": "アップデートが利用可能"
|
||||||
|
},
|
||||||
|
"copy_image_reference_button": {
|
||||||
|
"button_title": "画像参照をクリップボードにコピーし、テキストノートに貼り付けることができます。"
|
||||||
|
},
|
||||||
|
"attachment_detail": {
|
||||||
|
"open_help_page": "添付ファイルのヘルプページを開く",
|
||||||
|
"owning_note": "所有ノート: ",
|
||||||
|
"you_can_also_open": "、開くこともできます ",
|
||||||
|
"list_of_all_attachments": "すべての添付ファイルのリスト",
|
||||||
|
"attachment_deleted": "この添付ファイルは削除されました。"
|
||||||
|
},
|
||||||
|
"attachment_list": {
|
||||||
|
"open_help_page": "添付ファイルのヘルプページを開く",
|
||||||
|
"owning_note": "所有ノート: ",
|
||||||
|
"upload_attachments": "添付ファイルをアップロード",
|
||||||
|
"no_attachments": "このノートには添付ファイルはありません。"
|
||||||
|
},
|
||||||
|
"book": {
|
||||||
|
"no_children_help": "このコレクションには子ノートがないため、表示するものがありません。詳細は<a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>をご覧ください。",
|
||||||
|
"drag_locked_title": "編集をロック中",
|
||||||
|
"drag_locked_message": "コレクションは編集がロックされているため、ドラッグは許可されていません。"
|
||||||
|
},
|
||||||
|
"native_title_bar": {
|
||||||
|
"title": "ネイティブタイトルバー(アプリの再起動が必要です)",
|
||||||
|
"enabled": "有効",
|
||||||
|
"disabled": "無効"
|
||||||
|
},
|
||||||
|
"options_widget": {
|
||||||
|
"options_change_saved": "オプションの変更が保存されました。",
|
||||||
|
"options_status": "オプションステータス"
|
||||||
|
},
|
||||||
|
"multi_factor_authentication": {
|
||||||
|
"title": "多要素認証",
|
||||||
|
"description": "多要素認証(MFA)は、アカウントのセキュリティをさらに強化します。ログイン時にパスワードを入力するだけでなく、MFAでは本人確認のために1つ以上の追加情報の入力を求められます。これにより、たとえ誰かがパスワードを入手したとしても、2つ目の情報がなければアカウントにアクセスできません。まるでドアに鍵を追加したようなもので、他人が侵入するのがはるかに困難になります。<br><br>MFAを有効にするには、以下の手順に従ってください。正しく設定しないと、ログインはパスワードのみで行われます。",
|
||||||
|
"mfa_enabled": "多要素認証を有効にする",
|
||||||
|
"mfa_method": "MFAメソッド",
|
||||||
|
"electron_disabled": "現在、デスクトップ ビルドでは多要素認証はサポートされていません。",
|
||||||
|
"totp_title": "時間ベースのワンタイムパスワード (TOTP)",
|
||||||
|
"totp_description": "TOTP(時間ベースのワンタイムパスワード)は、30秒ごとに変化する一意の一時的なコードを生成するセキュリティ機能です。このコードとパスワードを使用してアカウントにログインすることで、他人がアクセスするのを大幅に困難にします。",
|
||||||
|
"totp_secret_title": "TOTPシークレットを生成する",
|
||||||
|
"totp_secret_generate": "TOTPシークレットを生成する",
|
||||||
|
"totp_secret_regenerate": "TOTPシークレットを再生成する",
|
||||||
|
"no_totp_secret_warning": "TOTP を有効にするには、まず TOTP シークレットを生成する必要があります。",
|
||||||
|
"totp_secret_description_warning": "新しい TOTP シークレットを生成したら、新しい TOTP シークレットを使用して再度ログインする必要があります。",
|
||||||
|
"totp_secret_generated": "TOTPシークレットが生成されました",
|
||||||
|
"totp_secret_warning": "生成されたシークレットは安全な場所に保存してください。再度表示されることはありません。",
|
||||||
|
"totp_secret_regenerate_confirm": "OTP シークレットを再生成してもよろしいですか?これにより、以前の TOTP シークレットと既存のすべての回復コードが無効になります。",
|
||||||
|
"recovery_keys_title": "シングルサインオン回復キー",
|
||||||
|
"recovery_keys_description": "シングル サインオン回復キーは、認証コードにアクセスできない場合でもログインするために使用されます。",
|
||||||
|
"recovery_keys_description_warning": "回復キーはページを離れた後は再度表示されませんので、安全な場所に保管してください。<br>回復キーは一度使用すると再度使用できなくなります。",
|
||||||
|
"recovery_keys_error": "回復コードの生成中にエラーが発生しました",
|
||||||
|
"recovery_keys_no_key_set": "回復コードが設定されていません",
|
||||||
|
"recovery_keys_generate": "回復コードを生成する",
|
||||||
|
"recovery_keys_regenerate": "回復コードの再生成",
|
||||||
|
"recovery_keys_used": "使用日: {{date}}",
|
||||||
|
"recovery_keys_unused": "回復コード {{index}} は未使用です",
|
||||||
|
"oauth_title": "OAuth/OpenID",
|
||||||
|
"oauth_description": "OpenIDは、Googleなどの他のサービスのアカウントを使用してウェブサイトにログインし、本人確認を行うための標準化された方法です。デフォルトの発行者はGoogleですが、他のOpenIDプロバイダに変更できます。詳しくは<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">こちら</a>をご覧ください。Google経由でOpenIDサービスを設定するには、<a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">こちらの手順</a>に従ってください。",
|
||||||
|
"oauth_description_warning": "OAuth/OpenIDを有効にするには、config.iniファイルにOAuth/OpenIDのベースURL、クライアントID、クライアントシークレットを設定し、アプリケーションを再起動する必要があります。環境変数から設定する場合は、TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID and TRILIUM_OAUTH_CLIENT_SECRET を設定してください。",
|
||||||
|
"oauth_missing_vars": "設定がありません: {{-variables}}",
|
||||||
|
"oauth_user_account": "ユーザーアカウント: ",
|
||||||
|
"oauth_user_email": "ユーザーEメール: ",
|
||||||
|
"oauth_user_not_logged_in": "ログインしていません!"
|
||||||
|
},
|
||||||
|
"note-map": {
|
||||||
|
"button-link-map": "リンクマップ",
|
||||||
|
"button-tree-map": "ツリーマップ"
|
||||||
|
},
|
||||||
|
"spacer": {
|
||||||
|
"configure_launchbar": "ランチャーバーを設定"
|
||||||
|
},
|
||||||
|
"attachment_detail_2": {
|
||||||
|
"will_be_deleted_in": "この添付ファイルは {{time}} 後に自動的に削除されます",
|
||||||
|
"will_be_deleted_soon": "この添付ファイルはすぐに自動的に削除されます",
|
||||||
|
"deletion_reason": "、添付ファイルがノートのコンテンツにリンクされていないためです。削除されないようにするには、添付ファイルのリンクをコンテンツに再度追加するか、添付ファイルをノートに変換してください。",
|
||||||
|
"role_and_size": "ロール: {{role}},サイズ: {{size}}",
|
||||||
|
"link_copied": "添付ファイルのリンクをクリップボードにコピーしました。",
|
||||||
|
"unrecognized_role": "添付ファイルのロール「{{role}}」は認識されません。"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,9 +29,25 @@
|
|||||||
"note": "노트",
|
"note": "노트",
|
||||||
"search_note": "이름으로 노트 검색하기",
|
"search_note": "이름으로 노트 검색하기",
|
||||||
"help_on_links": "링크 관련 도움말",
|
"help_on_links": "링크 관련 도움말",
|
||||||
"link_title_mirrors": "링크 제목은 노트의 현재 제목을 반영합니다"
|
"link_title_mirrors": "링크 제목은 노트의 현재 제목을 반영합니다",
|
||||||
|
"link_title_arbitrary": "링크 제목은 임의로 변경될 수 있습니다",
|
||||||
|
"link_title": "링크 제목",
|
||||||
|
"button_add_link": "링크 추가"
|
||||||
},
|
},
|
||||||
"branch_prefix": {
|
"branch_prefix": {
|
||||||
"save": "저장"
|
"save": "저장",
|
||||||
|
"edit_branch_prefix": "브랜치 접두사 편집",
|
||||||
|
"help_on_tree_prefix": "트리 접두사에 대한 도움말",
|
||||||
|
"prefix": "접두사: ",
|
||||||
|
"branch_prefix_saved": "브랜치 접두사가 저장되었습니다."
|
||||||
|
},
|
||||||
|
"bulk_actions": {
|
||||||
|
"bulk_actions": "대량 작업",
|
||||||
|
"affected_notes": "영향을 받은 노트들",
|
||||||
|
"include_descendants": "선택한 노트의 자손 포함",
|
||||||
|
"available_actions": "가능한 액션들",
|
||||||
|
"chosen_actions": "선택한 액션들",
|
||||||
|
"execute_bulk_actions": "대량 액션들 실행",
|
||||||
|
"bulk_actions_executed": "대량 액션들이 성공적으로 실행되었습니다."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
apps/client/src/translations/md/translation.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
1
apps/client/src/translations/nb-NO/translation.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{}
|
||||||
@@ -840,7 +840,7 @@
|
|||||||
"cannot_find_day_note": "Nota do dia não encontrada",
|
"cannot_find_day_note": "Nota do dia não encontrada",
|
||||||
"cannot_find_week_note": "Nota semanal não encontrada",
|
"cannot_find_week_note": "Nota semanal não encontrada",
|
||||||
"january": "Janeiro",
|
"january": "Janeiro",
|
||||||
"febuary": "Fevereiro",
|
"february": "Fevereiro",
|
||||||
"march": "Março",
|
"march": "Março",
|
||||||
"april": "Abril",
|
"april": "Abril",
|
||||||
"may": "Maio",
|
"may": "Maio",
|
||||||
@@ -2008,7 +2008,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID é uma forma padronizada de permitir que você faça login em sites usando uma conta de outro serviço, como o Google, para verificar sua identidade. O emissor padrão é o Google, mas você pode alterá-lo para qualquer outro provedor OpenID. Consulte <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">aqui</a> para mais informações. Siga estas <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instruções</a> para configurar um serviço OpenID através do Google.",
|
"oauth_description": "OpenID é uma forma padronizada de permitir que você faça login em sites usando uma conta de outro serviço, como o Google, para verificar sua identidade. O emissor padrão é o Google, mas você pode alterá-lo para qualquer outro provedor OpenID. Consulte <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">aqui</a> para mais informações. Siga estas <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">instruções</a> para configurar um serviço OpenID através do Google.",
|
||||||
"oauth_description_warning": "Para habilitar o OAuth/OpenID, você precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no arquivo config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Para habilitar o OAuth/OpenID, você precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no arquivo config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Configurações ausentes: {{variables}}",
|
"oauth_missing_vars": "Configurações ausentes: {{-variables}}",
|
||||||
"oauth_user_account": "Conta do Usuário: ",
|
"oauth_user_account": "Conta do Usuário: ",
|
||||||
"oauth_user_email": "E-mail do Usuário: ",
|
"oauth_user_email": "E-mail do Usuário: ",
|
||||||
"oauth_user_not_logged_in": "Não está logado!"
|
"oauth_user_not_logged_in": "Não está logado!"
|
||||||
|
|||||||
@@ -322,7 +322,7 @@
|
|||||||
"august": "August",
|
"august": "August",
|
||||||
"cannot_find_day_note": "Nu se poate găsi notița acelei zile",
|
"cannot_find_day_note": "Nu se poate găsi notița acelei zile",
|
||||||
"december": "Decembrie",
|
"december": "Decembrie",
|
||||||
"febuary": "Februarie",
|
"february": "Februarie",
|
||||||
"fri": "Vin",
|
"fri": "Vin",
|
||||||
"january": "Ianuarie",
|
"january": "Ianuarie",
|
||||||
"july": "Iulie",
|
"july": "Iulie",
|
||||||
@@ -1587,7 +1587,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"consistency-checks-failed": "Au fost identificate erori de consistență! Vedeți mai multe detalii în loguri.",
|
"consistency-checks-failed": "Au fost identificate erori de consistență! Vedeți mai multe detalii în loguri.",
|
||||||
"encountered-error": "A fost întâmpinată o eroare: „{{message}}”. Vedeți în loguri pentru mai multe detalii.",
|
"encountered-error": "A fost întâmpinată o eroare: „{{message}}”. Vedeți în loguri pentru mai multe detalii.",
|
||||||
"sync-check-failed": "Verificările de sincronizare au eșuat!"
|
"sync-check-failed": "Verificările de sincronizare au eșuat!",
|
||||||
|
"lost-websocket-connection-title": "S-a pierdut conexiunea la server",
|
||||||
|
"lost-websocket-connection-message": "Verificați configurația reverse proxy-ului (e.g. nginx sau Apache) astfel încât să permită comunicarea prin WebSocket."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Notița dorită „{{requestedNote}}” este în afara ierarhiei notiței focalizate „{{hoistedNote}}”. Doriți defocalizarea pentru a accesa notița?"
|
"confirm_unhoisting": "Notița dorită „{{requestedNote}}” este în afara ierarhiei notiței focalizate „{{hoistedNote}}”. Doriți defocalizarea pentru a accesa notița?"
|
||||||
@@ -1668,7 +1670,7 @@
|
|||||||
},
|
},
|
||||||
"electron_integration": {
|
"electron_integration": {
|
||||||
"background-effects": "Activează efectele de fundal (doar pentru Windows 11)",
|
"background-effects": "Activează efectele de fundal (doar pentru Windows 11)",
|
||||||
"background-effects-description": "Efectul Mica adaugă un fundal estompat și elegant ferestrelor aplicațiilor, creând profunzime și un aspect modern.",
|
"background-effects-description": "Efectul Mica adaugă un fundal estompat și elegant ferestrelor aplicațiilor, creând profunzime și un aspect modern. Opțiunea „Bară de titlu nativă” trebuie să fie dezactivată.",
|
||||||
"desktop-application": "Aplicația desktop",
|
"desktop-application": "Aplicația desktop",
|
||||||
"native-title-bar": "Bară de titlu nativă",
|
"native-title-bar": "Bară de titlu nativă",
|
||||||
"native-title-bar-description": "Pentru Windows și macOS, dezactivarea bării de titlu native face aplicația să pară mai compactă. Pe Linux, păstrarea bării integrează mai bine aplicația cu restul sistemului de operare.",
|
"native-title-bar-description": "Pentru Windows și macOS, dezactivarea bării de titlu native face aplicația să pară mai compactă. Pe Linux, păstrarea bării integrează mai bine aplicația cu restul sistemului de operare.",
|
||||||
@@ -1931,7 +1933,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID este o cale standardizată ce permite autentificarea într-un site folosind un cont dintr-un alt serviciu, precum Google, pentru a verifica identitatea. În mod implicit furnizorul este Google, dar se poate schimba cu orice furnizor OpenID. Pentru mai multe informații, consultați <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">ghidul</a>. Urmați <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">aceste instrucțiuni</a> pentru a putea configura OpenID prin Google.",
|
"oauth_description": "OpenID este o cale standardizată ce permite autentificarea într-un site folosind un cont dintr-un alt serviciu, precum Google, pentru a verifica identitatea. În mod implicit furnizorul este Google, dar se poate schimba cu orice furnizor OpenID. Pentru mai multe informații, consultați <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">ghidul</a>. Urmați <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">aceste instrucțiuni</a> pentru a putea configura OpenID prin Google.",
|
||||||
"oauth_description_warning": "Pentru a activa OAuth sau OpenID, trebuie să configurați URL-ul de bază, ID-ul de client și secretul de client în fișierul config.ini și să reporniți aplicația. Dacă doriți să utilizați variabile de environment, puteți seta TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID și TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Pentru a activa OAuth sau OpenID, trebuie să configurați URL-ul de bază, ID-ul de client și secretul de client în fișierul config.ini și să reporniți aplicația. Dacă doriți să utilizați variabile de environment, puteți seta TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID și TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Setări lipsă: {{variables}}",
|
"oauth_missing_vars": "Setări lipsă: {{-variables}}",
|
||||||
"oauth_user_account": "Cont: ",
|
"oauth_user_account": "Cont: ",
|
||||||
"oauth_user_email": "Email: ",
|
"oauth_user_email": "Email: ",
|
||||||
"oauth_user_not_logged_in": "Neautentificat!"
|
"oauth_user_not_logged_in": "Neautentificat!"
|
||||||
@@ -1956,7 +1958,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Funcții",
|
"title": "Funcții",
|
||||||
"emoji_completion_enabled": "Activează auto-completarea pentru emoji-uri",
|
"emoji_completion_enabled": "Activează auto-completarea pentru emoji-uri",
|
||||||
"note_completion_enabled": "Activează auto-completarea pentru notițe"
|
"note_completion_enabled": "Activează auto-completarea pentru notițe",
|
||||||
|
"emoji_completion_description": "Dacă această funcție este pornită, emoji-urile pot fi inserate rapid prin tastarea caracterului „:”, urmat de denumirea emoji-ului.",
|
||||||
|
"note_completion_description": "Dacă această funcție este pornită, se pot crea ușor legături către notițe prin tastarea „@”, urmată de titlul notiței dorite.",
|
||||||
|
"slash_commands_enabled": "Activează comenzi rapide prin tasta slash",
|
||||||
|
"slash_commands_description": "Dacă această funcție este pornită, se poate folosi tasta „/” pentru a rula rapid comenzi de editare precum inserarea de întreruperi de pagină sau titluri."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "Rând nou",
|
"new-row": "Rând nou",
|
||||||
|
|||||||
@@ -282,13 +282,13 @@
|
|||||||
"editBranchPrefix": "изменить <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">префикс</a> клона активной заметки",
|
"editBranchPrefix": "изменить <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">префикс</a> клона активной заметки",
|
||||||
"multiSelectNote": "множественный выбор заметки выше/ниже",
|
"multiSelectNote": "множественный выбор заметки выше/ниже",
|
||||||
"selectNote": "выбрать заметку",
|
"selectNote": "выбрать заметку",
|
||||||
"copyNotes": "скопировать активную заметку (или выделение) в буфер обмер (используется для <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">клонирования</a>)",
|
"copyNotes": "скопировать активную заметку (или выделение) в буфер обмена (используется для <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">клонирования</a>)",
|
||||||
"createEditLink": "создать/редактировать внешнюю ссылку",
|
"createEditLink": "создать/редактировать внешнюю ссылку",
|
||||||
"headings": "<code>##</code>, <code>###</code>, <code>####</code> и т. д., за которыми следует пробел для заголовков",
|
"headings": "<code>##</code>, <code>###</code>, <code>####</code> и т. д., за которыми следует пробел для заголовков",
|
||||||
"bulletList": "<code>*</code> или <code>-</code> с последующим пробелом для маркированного списка",
|
"bulletList": "<code>*</code> или <code>-</code> с последующим пробелом для маркированного списка",
|
||||||
"numberedList": "<code>1.</code> или <code>1)</code> с последующим пробелом для нумерованного списка",
|
"numberedList": "<code>1.</code> или <code>1)</code> с последующим пробелом для нумерованного списка",
|
||||||
"blockQuote": "начните строку с <code>></code>, а затем пробела для блока цитаты",
|
"blockQuote": "начните строку с <code>></code>, а затем пробела для блока цитаты",
|
||||||
"quickSearch": "сфокусироваться на полее ввода быстрого поиска",
|
"quickSearch": "сфокусироваться на поле ввода быстрого поиска",
|
||||||
"editNoteTitle": "в области дерева переключится с области дерева на заголовок заметки. Сочетание клавиш Enter из области заголовка заметки переключит фокус на текстовый редактор. <kbd>Ctrl+.</kbd> переключит обратно с редактора на область дерева.",
|
"editNoteTitle": "в области дерева переключится с области дерева на заголовок заметки. Сочетание клавиш Enter из области заголовка заметки переключит фокус на текстовый редактор. <kbd>Ctrl+.</kbd> переключит обратно с редактора на область дерева.",
|
||||||
"title": "Справка"
|
"title": "Справка"
|
||||||
},
|
},
|
||||||
@@ -370,7 +370,7 @@
|
|||||||
"confirm_delete": "Вы хотите удалить эту версию?",
|
"confirm_delete": "Вы хотите удалить эту версию?",
|
||||||
"revisions_deleted": "Версии заметки были удалены.",
|
"revisions_deleted": "Версии заметки были удалены.",
|
||||||
"revision_restored": "Версия заметки была восстановлена.",
|
"revision_restored": "Версия заметки была восстановлена.",
|
||||||
"revision_deleted": "Версия заметки были удалены.",
|
"revision_deleted": "Версия заметки была удалена.",
|
||||||
"download_button": "Скачать",
|
"download_button": "Скачать",
|
||||||
"file_size": "Размер файла:",
|
"file_size": "Размер файла:",
|
||||||
"preview": "Предпросмотр:",
|
"preview": "Предпросмотр:",
|
||||||
@@ -463,7 +463,7 @@
|
|||||||
"run_at_hour": "В какой час это должно выполняться? Следует использовать вместе с <code>#run=hourly</code>. Можно задать несколько раз для большего количества запусков в течение дня.",
|
"run_at_hour": "В какой час это должно выполняться? Следует использовать вместе с <code>#run=hourly</code>. Можно задать несколько раз для большего количества запусков в течение дня.",
|
||||||
"disable_inclusion": "скрипты с этой меткой не будут включены в выполнение родительского скрипта.",
|
"disable_inclusion": "скрипты с этой меткой не будут включены в выполнение родительского скрипта.",
|
||||||
"sorted": "сохраняет алфавитную сортировку дочерних заметок",
|
"sorted": "сохраняет алфавитную сортировку дочерних заметок",
|
||||||
"sort_direction": "ASC (по возрастани, по умолчанию) или DESC (по убыванию)",
|
"sort_direction": "ASC (по возрастанию, по умолчанию) или DESC (по убыванию)",
|
||||||
"sort_folders_first": "Папки (заметки, включая дочерние) должны быть отсортированы вверх",
|
"sort_folders_first": "Папки (заметки, включая дочерние) должны быть отсортированы вверх",
|
||||||
"top": "закрепить заданную заметку наверху в ее родителе (применяется только к отсортированным родительским заметкам)",
|
"top": "закрепить заданную заметку наверху в ее родителе (применяется только к отсортированным родительским заметкам)",
|
||||||
"hide_promoted_attributes": "Скрыть продвигаемых атрибуты в этой заметке",
|
"hide_promoted_attributes": "Скрыть продвигаемых атрибуты в этой заметке",
|
||||||
@@ -479,7 +479,7 @@
|
|||||||
"workspace_search_home": "новые заметки поиска будут созданы как дочерние записи этой заметки при перемещении их к какому-либо предку этой заметки рабочей области",
|
"workspace_search_home": "новые заметки поиска будут созданы как дочерние записи этой заметки при перемещении их к какому-либо предку этой заметки рабочей области",
|
||||||
"workspace_calendar_root": "Определяет корень календаря для каждого рабочего пространства",
|
"workspace_calendar_root": "Определяет корень календаря для каждого рабочего пространства",
|
||||||
"hide_highlight_widget": "Скрыть виджет «Выделенное»",
|
"hide_highlight_widget": "Скрыть виджет «Выделенное»",
|
||||||
"is_owned_by_note": "принадлежит записке",
|
"is_owned_by_note": "принадлежит заметке",
|
||||||
"and_more": "... и ещё {{count}}.",
|
"and_more": "... и ещё {{count}}.",
|
||||||
"app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.",
|
"app_theme": "отмечает заметки CSS, которые являются полноценными темами Trilium и, таким образом, доступны в опциях Trilium.",
|
||||||
"title_template": "Заголовок по умолчанию для заметок, создаваемых как дочерние элементы данной заметки. Значение вычисляется как строка JavaScript\n и, таким образом, может быть дополнено динамическим контентом с помощью внедренных переменных <code>now</code> и <code>parentNote</code>. Примеры:\n \n <ul>\n <li><code>Литературные произведения ${parentNote.getLabelValue('authorName')}</code></li>\n <li><code>Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}</code></li>\n </ul>\n \n Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\">вики</a>, документации API для <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> и <a href=\"https://day.js.org/docs/en/display/format\">now</a>.",
|
"title_template": "Заголовок по умолчанию для заметок, создаваемых как дочерние элементы данной заметки. Значение вычисляется как строка JavaScript\n и, таким образом, может быть дополнено динамическим контентом с помощью внедренных переменных <code>now</code> и <code>parentNote</code>. Примеры:\n \n <ul>\n <li><code>Литературные произведения ${parentNote.getLabelValue('authorName')}</code></li>\n <li><code>Лог для ${now.format('YYYY-MM-DD HH:mm:ss')}</code></li>\n </ul>\n \n Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\">вики</a>, документации API для <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> и <a href=\"https://day.js.org/docs/en/display/format\">now</a>.",
|
||||||
@@ -528,7 +528,7 @@
|
|||||||
"run_on_note_deletion": "выполняется при удалении заметки",
|
"run_on_note_deletion": "выполняется при удалении заметки",
|
||||||
"run_on_branch_creation": "выполняется при создании ветви. Ветвь — это связующее звено между родительской и дочерней заметками и создаётся, например, при клонировании или перемещении заметки.",
|
"run_on_branch_creation": "выполняется при создании ветви. Ветвь — это связующее звено между родительской и дочерней заметками и создаётся, например, при клонировании или перемещении заметки.",
|
||||||
"run_on_branch_change": "выполняется при обновлении ветки.",
|
"run_on_branch_change": "выполняется при обновлении ветки.",
|
||||||
"run_on_attribute_creation": "выполняется, когда создается новый атрибут для заметка, определяющей это отношение",
|
"run_on_attribute_creation": "выполняется, когда создается новый атрибут для заметки, определяющей это отношение",
|
||||||
"run_on_attribute_change": " выполняется при изменении атрибута заметки, определяющей это отношение. Также срабатывает при удалении атрибута",
|
"run_on_attribute_change": " выполняется при изменении атрибута заметки, определяющей это отношение. Также срабатывает при удалении атрибута",
|
||||||
"relation_template": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. Содержимое заметки и её поддерево будут добавлены к экземпляру заметки, если оно пустое. Подробности см. в документации.",
|
"relation_template": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. Содержимое заметки и её поддерево будут добавлены к экземпляру заметки, если оно пустое. Подробности см. в документации.",
|
||||||
"inherit": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. См. описание шаблонных отношений для получения аналогичной информации. См. раздел «Наследование атрибутов» в документации.",
|
"inherit": "атрибуты заметки будут унаследованы даже без родительско-дочерних отношений. См. описание шаблонных отношений для получения аналогичной информации. См. раздел «Наследование атрибутов» в документации.",
|
||||||
@@ -585,7 +585,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"note_completion_enabled": "Включить автодополнение",
|
"note_completion_enabled": "Включить автодополнение",
|
||||||
"emoji_completion_enabled": "Включить автодополнение эмодзи",
|
"emoji_completion_enabled": "Включить автодополнение эмодзи",
|
||||||
"title": "Особенности"
|
"title": "Особенности",
|
||||||
|
"slash_commands_description": "Если эта опция включена, команды редактирования, такие как вставка переносов строк или заголовков, можно переключать, вводя `/`.",
|
||||||
|
"slash_commands_enabled": "Включить слэш-команды",
|
||||||
|
"note_completion_description": "Если эта опция включена, ссылки на заметки можно создавать, вводя `@`, а затем название заметки.",
|
||||||
|
"emoji_completion_description": "Если эта функция включена, эмодзи можно легко вставлять в текст, набрав `:`, а затем название эмодзи."
|
||||||
},
|
},
|
||||||
"cpu_arch_warning": {
|
"cpu_arch_warning": {
|
||||||
"dont_show_again": "Больше не показывать это предупреждение",
|
"dont_show_again": "Больше не показывать это предупреждение",
|
||||||
@@ -712,7 +716,7 @@
|
|||||||
},
|
},
|
||||||
"code_block": {
|
"code_block": {
|
||||||
"copy_title": "Копировать в буфер обмена",
|
"copy_title": "Копировать в буфер обмена",
|
||||||
"theme_group_dark": "Темныце темы",
|
"theme_group_dark": "Темные темы",
|
||||||
"theme_group_light": "Светлые темы",
|
"theme_group_light": "Светлые темы",
|
||||||
"theme_none": "Нет подсветки синтаксиса",
|
"theme_none": "Нет подсветки синтаксиса",
|
||||||
"word_wrapping": "Перенос слов"
|
"word_wrapping": "Перенос слов"
|
||||||
@@ -783,7 +787,7 @@
|
|||||||
"beta-feature": "Бета",
|
"beta-feature": "Бета",
|
||||||
"widget": "Виджет",
|
"widget": "Виджет",
|
||||||
"image": "Изображение",
|
"image": "Изображение",
|
||||||
"file": "Файд",
|
"file": "Файл",
|
||||||
"canvas": "Холст",
|
"canvas": "Холст",
|
||||||
"mermaid-diagram": "Диаграмма Mermaid",
|
"mermaid-diagram": "Диаграмма Mermaid",
|
||||||
"book": "Коллекция",
|
"book": "Коллекция",
|
||||||
@@ -811,7 +815,7 @@
|
|||||||
"export": "Экспорт",
|
"export": "Экспорт",
|
||||||
"open-in-a-new-tab": "Открыть в новой вкладке",
|
"open-in-a-new-tab": "Открыть в новой вкладке",
|
||||||
"open-in-a-new-split": "Открыть в новой панели",
|
"open-in-a-new-split": "Открыть в новой панели",
|
||||||
"unhoist-note": "Отрепить заметку",
|
"unhoist-note": "Открепить заметку",
|
||||||
"hoist-note": "Закрепить заметку",
|
"hoist-note": "Закрепить заметку",
|
||||||
"protect-subtree": "Защитить поддерево",
|
"protect-subtree": "Защитить поддерево",
|
||||||
"unprotect-subtree": "Снять защиту с поддерева",
|
"unprotect-subtree": "Снять защиту с поддерева",
|
||||||
@@ -864,7 +868,7 @@
|
|||||||
"to": "в",
|
"to": "в",
|
||||||
"move_note": "Переместить заметку",
|
"move_note": "Переместить заметку",
|
||||||
"target_parent_note": "целевая версии заметки",
|
"target_parent_note": "целевая версии заметки",
|
||||||
"on_all_matched_notes": "На всех совпадающих нотах",
|
"on_all_matched_notes": "На всех совпадающих заметках",
|
||||||
"move_note_new_parent": "переместить заметку в новый родительский элемент, если у заметки есть только один родительский элемент (т. е. старая ветвь удаляется и создается новая ветвь в новом родительском элементе)",
|
"move_note_new_parent": "переместить заметку в новый родительский элемент, если у заметки есть только один родительский элемент (т. е. старая ветвь удаляется и создается новая ветвь в новом родительском элементе)",
|
||||||
"clone_note_new_parent": "клонировать заметку в новый родительский элемент, если у заметки есть несколько клонов/ветвей (неясно, какую ветвь следует удалить)",
|
"clone_note_new_parent": "клонировать заметку в новый родительский элемент, если у заметки есть несколько клонов/ветвей (неясно, какую ветвь следует удалить)",
|
||||||
"nothing_will_happen": "ничего не произойдет, если эту заметку невозможно переместить в целевую заметку (т.е. это создаст цикл дерева)"
|
"nothing_will_happen": "ничего не произойдет, если эту заметку невозможно переместить в целевую заметку (т.е. это создаст цикл дерева)"
|
||||||
@@ -902,7 +906,7 @@
|
|||||||
"delete_attachment": "Удалить вложение",
|
"delete_attachment": "Удалить вложение",
|
||||||
"upload_new_revision": "Загрузить новую версию",
|
"upload_new_revision": "Загрузить новую версию",
|
||||||
"open_custom": "Открыть как...",
|
"open_custom": "Открыть как...",
|
||||||
"open_custom_client_only": "Иной способ открытие вложений возможен только из десктопного приложения.",
|
"open_custom_client_only": "Открытие вложений другим способом возможно только в десктопном приложении.",
|
||||||
"open_externally_detail_page": "Открытие вложения извне доступно только из детальной страницы. Для этого сначала нажмите на сведения о вложении и повторите действие.",
|
"open_externally_detail_page": "Открытие вложения извне доступно только из детальной страницы. Для этого сначала нажмите на сведения о вложении и повторите действие.",
|
||||||
"open_custom_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
"open_custom_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
||||||
"open_externally_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
"open_externally_title": "Файл будет открыт во внешнем приложении и отслеживаться на наличие изменений. После этого вы сможете загрузить изменённую версию обратно в Trilium.",
|
||||||
@@ -925,7 +929,7 @@
|
|||||||
"sat": "Сбт",
|
"sat": "Сбт",
|
||||||
"sun": "Вс",
|
"sun": "Вс",
|
||||||
"january": "Январь",
|
"january": "Январь",
|
||||||
"febuary": "Февраль",
|
"february": "Февраль",
|
||||||
"march": "Март",
|
"march": "Март",
|
||||||
"april": "Апрель",
|
"april": "Апрель",
|
||||||
"may": "Май",
|
"may": "Май",
|
||||||
@@ -1020,8 +1024,8 @@
|
|||||||
"file_properties": {
|
"file_properties": {
|
||||||
"download": "Скачать",
|
"download": "Скачать",
|
||||||
"open": "Открыть",
|
"open": "Открыть",
|
||||||
"title": "Файд",
|
"title": "Файл",
|
||||||
"upload_success": "Загрузка новой версии файла не удалась.",
|
"upload_success": "Новая версия файла успешно загружена.",
|
||||||
"upload_new_revision": "Загрузить новую версию",
|
"upload_new_revision": "Загрузить новую версию",
|
||||||
"file_size": "Размер файла",
|
"file_size": "Размер файла",
|
||||||
"file_type": "Тип файла",
|
"file_type": "Тип файла",
|
||||||
@@ -1153,7 +1157,7 @@
|
|||||||
"label_abc": "возвращает заметки с меткой abc",
|
"label_abc": "возвращает заметки с меткой abc",
|
||||||
"label_year": "ищет заметки с меткой year, имеющей значение 2019",
|
"label_year": "ищет заметки с меткой year, имеющей значение 2019",
|
||||||
"label_rock_pop": "соответствует заметкам с метками как rock, так и pop",
|
"label_rock_pop": "соответствует заметкам с метками как rock, так и pop",
|
||||||
"label_rock_or_pop": "должна присутствовать только одна из vtnjr",
|
"label_rock_or_pop": "должна присутствовать только одна из меток",
|
||||||
"label_year_comparison": "числовое сравнение (также >, >=, <).",
|
"label_year_comparison": "числовое сравнение (также >, >=, <).",
|
||||||
"label_date_created": "заметки, созданные за последний месяц",
|
"label_date_created": "заметки, созданные за последний месяц",
|
||||||
"error": "Ошибка поиска: {{error}}",
|
"error": "Ошибка поиска: {{error}}",
|
||||||
@@ -1413,7 +1417,7 @@
|
|||||||
"first-week-contains-first-day": "Первая неделя содержит первый день года",
|
"first-week-contains-first-day": "Первая неделя содержит первый день года",
|
||||||
"first-week-contains-first-thursday": "Первая неделя содержит первый четверг года",
|
"first-week-contains-first-thursday": "Первая неделя содержит первый четверг года",
|
||||||
"first-week-has-minimum-days": "Первая неделя имеет минимальное количество дней",
|
"first-week-has-minimum-days": "Первая неделя имеет минимальное количество дней",
|
||||||
"min-days-in-first-week": "Минимальное количество дней в первую неделю",
|
"min-days-in-first-week": "Минимальное количество дней в первой неделе",
|
||||||
"first-week-info": "Первая неделя содержит первый четверг года в соответствии со стандартом <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
"first-week-info": "Первая неделя содержит первый четверг года в соответствии со стандартом <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
||||||
"first-week-warning": "Изменение параметров первой недели может привести к дублированию существующих недельных заметок, и существующие недельные заметки не будут обновлены соответствующим образом.",
|
"first-week-warning": "Изменение параметров первой недели может привести к дублированию существующих недельных заметок, и существующие недельные заметки не будут обновлены соответствующим образом.",
|
||||||
"formatting-locale": "Формат даты и числа"
|
"formatting-locale": "Формат даты и числа"
|
||||||
@@ -1475,7 +1479,7 @@
|
|||||||
"totp_secret_generated": "Создан секрет TOTP",
|
"totp_secret_generated": "Создан секрет TOTP",
|
||||||
"recovery_keys_generate": "Генерация кодов восстановления",
|
"recovery_keys_generate": "Генерация кодов восстановления",
|
||||||
"recovery_keys_regenerate": "Регенерация кодов восстановления",
|
"recovery_keys_regenerate": "Регенерация кодов восстановления",
|
||||||
"oauth_missing_vars": "Отсутствуют настройки: {{variables}}",
|
"oauth_missing_vars": "Отсутствуют настройки: {{-variables}}",
|
||||||
"oauth_user_not_logged_in": "Не выполнен вход!",
|
"oauth_user_not_logged_in": "Не выполнен вход!",
|
||||||
"totp_title": "Одноразовый пароль с ограничением по времени (TOTP)",
|
"totp_title": "Одноразовый пароль с ограничением по времени (TOTP)",
|
||||||
"recovery_keys_title": "Ключи восстановления единого входа",
|
"recovery_keys_title": "Ключи восстановления единого входа",
|
||||||
@@ -1719,7 +1723,7 @@
|
|||||||
"database_vacuumed": "База данных была сжата"
|
"database_vacuumed": "База данных была сжата"
|
||||||
},
|
},
|
||||||
"vim_key_bindings": {
|
"vim_key_bindings": {
|
||||||
"use_vim_keybindings_in_code_notes": "Раскладка клавиш VIM",
|
"use_vim_keybindings_in_code_notes": "Сочетания клавиш Vim",
|
||||||
"enable_vim_keybindings": "Включить сочетания клавиш Vim в заметках кода (без режима ex)"
|
"enable_vim_keybindings": "Включить сочетания клавиш Vim в заметках кода (без режима ex)"
|
||||||
},
|
},
|
||||||
"network_connections": {
|
"network_connections": {
|
||||||
@@ -1802,7 +1806,7 @@
|
|||||||
"button_title": "Экспортировать диаграмму как SVG"
|
"button_title": "Экспортировать диаграмму как SVG"
|
||||||
},
|
},
|
||||||
"copy_image_reference_button": {
|
"copy_image_reference_button": {
|
||||||
"button_title": "Скопировать ссылку на изображение в буфер обмена, можент быть вставлена в текстовую заметку."
|
"button_title": "Скопировать ссылку на изображение в буфер обмена, может быть вставлена в текстовую заметку."
|
||||||
},
|
},
|
||||||
"note_launcher": {
|
"note_launcher": {
|
||||||
"this_launcher_doesnt_define_target_note": "Этот лаунчер не определяет целевую заметку."
|
"this_launcher_doesnt_define_target_note": "Этот лаунчер не определяет целевую заметку."
|
||||||
@@ -1973,7 +1977,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Проверка синхронизации не удалась!",
|
"sync-check-failed": "Проверка синхронизации не удалась!",
|
||||||
"encountered-error": "Обнаружена ошибка \"{{message}}\", проверьте консоль.",
|
"encountered-error": "Обнаружена ошибка \"{{message}}\", проверьте консоль.",
|
||||||
"consistency-checks-failed": "Проверка целостности не пройдена! Подробности смотрите в логах."
|
"consistency-checks-failed": "Проверка целостности не пройдена! Подробности смотрите в логах.",
|
||||||
|
"lost-websocket-connection-title": "Потеряно соединение с сервером",
|
||||||
|
"lost-websocket-connection-message": "Проверьте конфигурацию обратного прокси (например, nginx или Apache), чтобы убедиться, что соединения WebSocket должным образом разрешены и не заблокированы."
|
||||||
},
|
},
|
||||||
"attachment_detail_2": {
|
"attachment_detail_2": {
|
||||||
"role_and_size": "Роль: {{role}}, Размер: {{size}}",
|
"role_and_size": "Роль: {{role}}, Размер: {{size}}",
|
||||||
@@ -2045,7 +2051,7 @@
|
|||||||
"could_not_find_typewidget": "Не удалось найти typeWidget для типа '{{type}}'"
|
"could_not_find_typewidget": "Не удалось найти typeWidget для типа '{{type}}'"
|
||||||
},
|
},
|
||||||
"book": {
|
"book": {
|
||||||
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. на <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>.",
|
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. в <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a>.",
|
||||||
"drag_locked_title": "Защищено от изменения",
|
"drag_locked_title": "Защищено от изменения",
|
||||||
"drag_locked_message": "Перетаскивание не допускается, так как коллекция защищена от редактирования."
|
"drag_locked_message": "Перетаскивание не допускается, так как коллекция защищена от редактирования."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -581,7 +581,7 @@
|
|||||||
"sun": "日",
|
"sun": "日",
|
||||||
"cannot_find_day_note": "無法找到日記",
|
"cannot_find_day_note": "無法找到日記",
|
||||||
"january": "一月",
|
"january": "一月",
|
||||||
"febuary": "二月",
|
"february": "二月",
|
||||||
"march": "三月",
|
"march": "三月",
|
||||||
"april": "四月",
|
"april": "四月",
|
||||||
"may": "五月",
|
"may": "五月",
|
||||||
@@ -1582,7 +1582,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "同步檢查失敗!",
|
"sync-check-failed": "同步檢查失敗!",
|
||||||
"consistency-checks-failed": "一致性檢查失敗!請查看日誌以了解詳細資訊。",
|
"consistency-checks-failed": "一致性檢查失敗!請查看日誌以了解詳細資訊。",
|
||||||
"encountered-error": "遇到錯誤 \"{{message}}\",請查看控制台。"
|
"encountered-error": "遇到錯誤 \"{{message}}\",請查看控制台。",
|
||||||
|
"lost-websocket-connection-title": "與伺服器的連線中斷",
|
||||||
|
"lost-websocket-connection-message": "檢查您的反向代理(如 nginx 或 Apache)設定以確保 Websocket 連線沒有被阻擋。"
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "請求的筆記 '{{requestedNote}}' 位於聚焦的筆記 '{{hoistedNote}}' 的子階層之外,您必須取消聚焦才能訪問該筆記。是否繼續取消聚焦?"
|
"confirm_unhoisting": "請求的筆記 '{{requestedNote}}' 位於聚焦的筆記 '{{hoistedNote}}' 的子階層之外,您必須取消聚焦才能訪問該筆記。是否繼續取消聚焦?"
|
||||||
@@ -1843,7 +1845,7 @@
|
|||||||
"oauth_title": "OAuth / OpenID 驗證",
|
"oauth_title": "OAuth / OpenID 驗證",
|
||||||
"oauth_description": "OpenID 是一種標準化的方式,可讓您使用其他服務(如 Google)的帳號登入網站,以驗證您的身份。預設的提供者是 Google,但您可以將其變更為任何其他 OpenID 提供者。查看<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">此處</a>以瞭解更多資訊。依照這些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指示</a>以透過 Google 設定 OpenID 服務。",
|
"oauth_description": "OpenID 是一種標準化的方式,可讓您使用其他服務(如 Google)的帳號登入網站,以驗證您的身份。預設的提供者是 Google,但您可以將其變更為任何其他 OpenID 提供者。查看<a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">此處</a>以瞭解更多資訊。依照這些 <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">指示</a>以透過 Google 設定 OpenID 服務。",
|
||||||
"oauth_description_warning": "要啟用 OAuth / OpenID,您需要設定 config.ini 文件中的 OAuth / OpenID 基礎 URL、客戶端 ID 和客戶端金鑰,並重新啟動應用程式。如果要從環境變數設置,請設定 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 環境變數。",
|
"oauth_description_warning": "要啟用 OAuth / OpenID,您需要設定 config.ini 文件中的 OAuth / OpenID 基礎 URL、客戶端 ID 和客戶端金鑰,並重新啟動應用程式。如果要從環境變數設置,請設定 TRILIUM_OAUTH_BASE_URL、TRILIUM_OAUTH_CLIENT_ID 和 TRILIUM_OAUTH_CLIENT_SECRET 環境變數。",
|
||||||
"oauth_missing_vars": "缺少以下設定:{{variables}}",
|
"oauth_missing_vars": "缺少以下設定:{{-variables}}",
|
||||||
"oauth_user_account": "用戶帳號: ",
|
"oauth_user_account": "用戶帳號: ",
|
||||||
"oauth_user_email": "用戶信箱: ",
|
"oauth_user_email": "用戶信箱: ",
|
||||||
"oauth_user_not_logged_in": "尚未登入!"
|
"oauth_user_not_logged_in": "尚未登入!"
|
||||||
@@ -1952,7 +1954,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "功能",
|
"title": "功能",
|
||||||
"emoji_completion_enabled": "啟用 Emoji 自動完成",
|
"emoji_completion_enabled": "啟用 Emoji 自動完成",
|
||||||
"note_completion_enabled": "啟用筆記自動完成"
|
"note_completion_enabled": "啟用筆記自動完成",
|
||||||
|
"emoji_completion_description": "如果啟用,emoji 可以輕易地經由輸入 `:` 加上 emoji 名稱來插入。",
|
||||||
|
"note_completion_description": "如果啟用,導向筆記的連結可以經由輸入 `@` 加上筆記標題來建立。",
|
||||||
|
"slash_commands_enabled": "啟用斜線命令",
|
||||||
|
"slash_commands_description": "如果啟用,可以經由輸入 `/` 來觸發命令,如插入換行符或標題。"
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "新增列",
|
"new-row": "新增列",
|
||||||
|
|||||||
@@ -560,7 +560,7 @@
|
|||||||
"oauth_title": "OAuth/OpenID",
|
"oauth_title": "OAuth/OpenID",
|
||||||
"oauth_description": "OpenID – це стандартизований спосіб входу на веб-сайти за допомогою облікового запису з іншого сервісу, такого як Google, для підтвердження вашої особи. Емітентом за замовчуванням є Google, але ви можете змінити його на будь-якого іншого постачальника OpenID. Перегляньте <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">тут</a> для отримання додаткової інформації. Дотримуйтесь цих <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">інструкцій</a>, щоб налаштувати сервіс OpenID через Google.",
|
"oauth_description": "OpenID – це стандартизований спосіб входу на веб-сайти за допомогою облікового запису з іншого сервісу, такого як Google, для підтвердження вашої особи. Емітентом за замовчуванням є Google, але ви можете змінити його на будь-якого іншого постачальника OpenID. Перегляньте <a href=\"#root/_hidden/_help/_help_Otzi9La2YAUX/_help_WOcw2SLH6tbX/_help_7DAiwaf8Z7Rz\">тут</a> для отримання додаткової інформації. Дотримуйтесь цих <a href=\"https://developers.google.com/identity/openid-connect/openid-connect\">інструкцій</a>, щоб налаштувати сервіс OpenID через Google.",
|
||||||
"oauth_description_warning": "Щоб увімкнути OAuth/OpenID, потрібно встановити базову URL-адресу OAuth/OpenID, ідентифікатор клієнта та секрет клієнта у файлі config.ini та перезапустити програму. Якщо ви хочете встановити зі змінних середовища, встановіть TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID та TRILIUM_OAUTH_CLIENT_SECRET.",
|
"oauth_description_warning": "Щоб увімкнути OAuth/OpenID, потрібно встановити базову URL-адресу OAuth/OpenID, ідентифікатор клієнта та секрет клієнта у файлі config.ini та перезапустити програму. Якщо ви хочете встановити зі змінних середовища, встановіть TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID та TRILIUM_OAUTH_CLIENT_SECRET.",
|
||||||
"oauth_missing_vars": "Відсутні налаштування: {{variables}}",
|
"oauth_missing_vars": "Відсутні налаштування: {{-variables}}",
|
||||||
"oauth_user_account": "Обліковий запис користувача: ",
|
"oauth_user_account": "Обліковий запис користувача: ",
|
||||||
"oauth_user_email": "Електронна пошта користувача: ",
|
"oauth_user_email": "Електронна пошта користувача: ",
|
||||||
"oauth_user_not_logged_in": "Ви не ввійшли в систему!"
|
"oauth_user_not_logged_in": "Ви не ввійшли в систему!"
|
||||||
@@ -722,7 +722,7 @@
|
|||||||
"cannot_find_day_note": "Не вдається знайти денну нотатку",
|
"cannot_find_day_note": "Не вдається знайти денну нотатку",
|
||||||
"cannot_find_week_note": "Не вдається знайти тижневу нотатку",
|
"cannot_find_week_note": "Не вдається знайти тижневу нотатку",
|
||||||
"january": "Січень",
|
"january": "Січень",
|
||||||
"febuary": "Лютий",
|
"february": "Лютий",
|
||||||
"march": "Березень",
|
"march": "Березень",
|
||||||
"april": "Квітень",
|
"april": "Квітень",
|
||||||
"may": "Травень",
|
"may": "Травень",
|
||||||
@@ -1669,7 +1669,9 @@
|
|||||||
"ws": {
|
"ws": {
|
||||||
"sync-check-failed": "Перевірка синхронізації не вдалася!",
|
"sync-check-failed": "Перевірка синхронізації не вдалася!",
|
||||||
"consistency-checks-failed": "Перевірка узгодженості не вдалася! Див. logs для отримання інформації.",
|
"consistency-checks-failed": "Перевірка узгодженості не вдалася! Див. logs для отримання інформації.",
|
||||||
"encountered-error": "Виникла помилка \"{{message}}\", перевірте консоль."
|
"encountered-error": "Виникла помилка \"{{message}}\", перевірте консоль.",
|
||||||
|
"lost-websocket-connection-title": "Втрачено з'єднання із сервером",
|
||||||
|
"lost-websocket-connection-message": "Перевірте конфігурацію вашого зворотного проксі-сервера (наприклад, nginx або Apache), щоб переконатися, що з’єднання WebSocket належним чином дозволені та не блокуються."
|
||||||
},
|
},
|
||||||
"hoisted_note": {
|
"hoisted_note": {
|
||||||
"confirm_unhoisting": "Запитана нотатка '{{requestedNote}}' знаходиться поза піддеревом закріплених нотаток '{{hoistedNote}}', і вам потрібно відкріпити нотатку, щоб отримати до неї доступ. Ви хочете продовжити відкріплення?"
|
"confirm_unhoisting": "Запитана нотатка '{{requestedNote}}' знаходиться поза піддеревом закріплених нотаток '{{hoistedNote}}', і вам потрібно відкріпити нотатку, щоб отримати до неї доступ. Ви хочете продовжити відкріплення?"
|
||||||
@@ -1797,7 +1799,11 @@
|
|||||||
"editorfeatures": {
|
"editorfeatures": {
|
||||||
"title": "Особливості",
|
"title": "Особливості",
|
||||||
"emoji_completion_enabled": "Увімкнути автозаповнення емодзі",
|
"emoji_completion_enabled": "Увімкнути автозаповнення емодзі",
|
||||||
"note_completion_enabled": "Увімкнути автозаповнення нотаток"
|
"note_completion_enabled": "Увімкнути автозаповнення нотаток",
|
||||||
|
"emoji_completion_description": "Якщо цю функцію ввімкнено, емодзі можна легко вставляти в текст, ввівши `:`, а потім назву емодзі.",
|
||||||
|
"note_completion_description": "Якщо ввімкнено, посилання на нотатки можна створювати, вводячи `@`, а потім назву нотатки.",
|
||||||
|
"slash_commands_enabled": "Увімкнути команди зі слеш",
|
||||||
|
"slash_commands_description": "Якщо ввімкнено, команди редагування, такі як вставка розривів рядків або заголовків, можна перемикати, натискаючи `/`."
|
||||||
},
|
},
|
||||||
"table_view": {
|
"table_view": {
|
||||||
"new-row": "Новий рядок",
|
"new-row": "Новий рядок",
|
||||||
|
|||||||
@@ -218,8 +218,8 @@ function SaveToNoteButton({ note }: FloatingButtonContext) {
|
|||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
|
|
||||||
function RelationMapButtons({ note, triggerEvent }: FloatingButtonContext) {
|
function RelationMapButtons({ note, isDefaultViewMode, triggerEvent }: FloatingButtonContext) {
|
||||||
const isEnabled = (note.type === "relationMap");
|
const isEnabled = (note.type === "relationMap" && isDefaultViewMode);
|
||||||
return isEnabled && (
|
return isEnabled && (
|
||||||
<>
|
<>
|
||||||
<FloatingButton
|
<FloatingButton
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ dayjs.extend(isSameOrAfter);
|
|||||||
|
|
||||||
const MONTHS = [
|
const MONTHS = [
|
||||||
t("calendar.january"),
|
t("calendar.january"),
|
||||||
t("calendar.febuary"),
|
t("calendar.february"),
|
||||||
t("calendar.march"),
|
t("calendar.march"),
|
||||||
t("calendar.april"),
|
t("calendar.april"),
|
||||||
t("calendar.may"),
|
t("calendar.may"),
|
||||||
|
|||||||
@@ -189,6 +189,7 @@ function useViewModeConfig<T extends object>(note: FNote | null | undefined, vie
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!note || !viewType) return;
|
if (!note || !viewType) return;
|
||||||
|
setViewConfig(undefined);
|
||||||
const viewStorage = new ViewModeStorage<T>(note, viewType);
|
const viewStorage = new ViewModeStorage<T>(note, viewType);
|
||||||
viewStorage.restore().then(config => {
|
viewStorage.restore().then(config => {
|
||||||
const storeFn = (config: T) => {
|
const storeFn = (config: T) => {
|
||||||
|
|||||||
@@ -63,6 +63,14 @@ 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 ]);
|
||||||
@@ -83,9 +91,11 @@ 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,6 +50,12 @@ 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;
|
||||||
@@ -82,7 +88,6 @@ 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
|
||||||
}}
|
}}
|
||||||
@@ -93,6 +98,8 @@ export default function Column({
|
|||||||
onDragStart={handleColumnDragStart}
|
onDragStart={handleColumnDragStart}
|
||||||
onDragEnd={handleColumnDragEnd}
|
onDragEnd={handleColumnDragEnd}
|
||||||
onContextMenu={handleContextMenu}
|
onContextMenu={handleContextMenu}
|
||||||
|
onKeyDown={handleTitleKeyDown}
|
||||||
|
tabIndex={300}
|
||||||
>
|
>
|
||||||
{!isEditing ? (
|
{!isEditing ? (
|
||||||
<>
|
<>
|
||||||
@@ -112,33 +119,35 @@ export default function Column({
|
|||||||
)}
|
)}
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
{(columnItems ?? []).map(({ note, branch }, index) => {
|
<div className="board-column-content" onWheel={handleScroll}>
|
||||||
const showIndicatorBefore = dropPosition?.column === column &&
|
{(columnItems ?? []).map(({ note, branch }, index) => {
|
||||||
dropPosition.index === index &&
|
const showIndicatorBefore = dropPosition?.column === column &&
|
||||||
draggedCard?.noteId !== note.noteId;
|
dropPosition.index === index &&
|
||||||
|
draggedCard?.noteId !== note.noteId;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{showIndicatorBefore && (
|
{showIndicatorBefore && (
|
||||||
<div className="board-drop-placeholder show" />
|
<div className="board-drop-placeholder show" />
|
||||||
)}
|
)}
|
||||||
<Card
|
<Card
|
||||||
key={note.noteId}
|
key={note.noteId}
|
||||||
api={api}
|
api={api}
|
||||||
note={note}
|
note={note}
|
||||||
branch={branch}
|
branch={branch}
|
||||||
column={column}
|
column={column}
|
||||||
index={index}
|
index={index}
|
||||||
isDragging={draggedCard?.noteId === note.noteId}
|
isDragging={draggedCard?.noteId === note.noteId}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
{dropPosition?.column === column && dropPosition.index === (columnItems?.length ?? 0) && (
|
{dropPosition?.column === column && dropPosition.index === (columnItems?.length ?? 0) && (
|
||||||
<div className="board-drop-placeholder show" />
|
<div className="board-drop-placeholder show" />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<AddNewItem api={api} column={column} />
|
<AddNewItem api={api} column={column} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -146,11 +155,18 @@ export default function Column({
|
|||||||
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,10 +24,13 @@
|
|||||||
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 {
|
||||||
@@ -37,7 +40,7 @@
|
|||||||
|
|
||||||
.board-view-container .board-column h3 {
|
.board-view-container .board-column h3 {
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
margin-bottom: 0.75em;
|
margin: 0;
|
||||||
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;
|
||||||
@@ -98,6 +101,12 @@
|
|||||||
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;
|
||||||
@@ -121,6 +130,11 @@
|
|||||||
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,10 +227,12 @@ 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 ]);
|
||||||
@@ -254,8 +256,11 @@ 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");
|
||||||
e.currentTarget.blur();
|
if (focusElRef.current instanceof HTMLElement) {
|
||||||
|
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.
|
// Reset expand state if switching to another note, or if user manually toggled expansion state.
|
||||||
useEffect(() => setExpanded(expand), [ note ]);
|
useEffect(() => setExpanded(expand), [ note, expand ]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ const labelTypeMappings: Record<ColumnType, Partial<ColumnDefinition>> = {
|
|||||||
editor: "datetime"
|
editor: "datetime"
|
||||||
},
|
},
|
||||||
number: {
|
number: {
|
||||||
editor: "number"
|
editor: "number",
|
||||||
|
sorter: "number"
|
||||||
},
|
},
|
||||||
time: {
|
time: {
|
||||||
editor: "input"
|
editor: "input"
|
||||||
|
|||||||
@@ -16,9 +16,10 @@ import useColTableEditing from "./col_editing";
|
|||||||
import AttributeDetailWidget from "../../attribute_widgets/attribute_detail";
|
import AttributeDetailWidget from "../../attribute_widgets/attribute_detail";
|
||||||
import attributes from "../../../services/attributes";
|
import attributes from "../../../services/attributes";
|
||||||
import { RefObject } from "preact";
|
import { RefObject } from "preact";
|
||||||
|
import SpacedUpdate from "../../../services/spaced_update";
|
||||||
|
|
||||||
interface TableConfig {
|
interface TableConfig {
|
||||||
tableData?: {
|
tableData: {
|
||||||
columns?: ColumnDefinition[];
|
columns?: ColumnDefinition[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -53,12 +54,12 @@ export default function TableView({ note, noteIds, notePath, viewConfig, saveCon
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="table-view">
|
<div className="table-view">
|
||||||
{columnDefs && (
|
{rowData !== undefined && persistenceProps && (
|
||||||
<>
|
<>
|
||||||
<Tabulator
|
<Tabulator
|
||||||
tabulatorRef={tabulatorRef}
|
tabulatorRef={tabulatorRef}
|
||||||
className="table-view-container"
|
className="table-view-container"
|
||||||
columns={columnDefs}
|
columns={columnDefs ?? []}
|
||||||
data={rowData}
|
data={rowData}
|
||||||
modules={[ SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MoveRowsModule, DataTreeModule ]}
|
modules={[ SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MoveRowsModule, DataTreeModule ]}
|
||||||
footerElement={<TableFooter note={note} />}
|
footerElement={<TableFooter note={note} />}
|
||||||
@@ -94,23 +95,31 @@ function TableFooter({ note }: { note: FNote }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function usePersistence(initialConfig: TableConfig | null | undefined, saveConfig: (newConfig: TableConfig) => void) {
|
function usePersistence(viewConfig: TableConfig | null | undefined, saveConfig: (newConfig: TableConfig) => void) {
|
||||||
const config = useRef<TableConfig | null | undefined>(initialConfig);
|
const [ persistenceProps, setPersistenceProps ] = useState<Pick<Options, "persistenceReaderFunc" | "persistenceWriterFunc">>();
|
||||||
const spacedUpdate = useSpacedUpdate(() => {
|
|
||||||
if (config.current) {
|
useEffect(() => {
|
||||||
saveConfig(config.current);
|
const viewConfigLocal = viewConfig ?? { tableData: {} };
|
||||||
}
|
const spacedUpdate = new SpacedUpdate(() => {
|
||||||
}, 5_000);
|
saveConfig(viewConfigLocal);
|
||||||
const persistenceWriterFunc = useCallback((_id, type: string, data: object) => {
|
}, 5_000);
|
||||||
if (!config.current) config.current = {};
|
|
||||||
if (!config.current.tableData) config.current.tableData = {};
|
setPersistenceProps({
|
||||||
(config.current.tableData as Record<string, {}>)[type] = data;
|
persistenceReaderFunc(_, type) {
|
||||||
spacedUpdate.scheduleUpdate();
|
return viewConfigLocal.tableData?.[type];
|
||||||
}, []);
|
},
|
||||||
const persistenceReaderFunc = useCallback((_id, type: string) => {
|
persistenceWriterFunc(_, type, data) {
|
||||||
return config.current?.tableData?.[type];
|
(viewConfigLocal.tableData as Record<string, {}>)[type] = data;
|
||||||
}, []);
|
spacedUpdate.scheduleUpdate();
|
||||||
return { persistenceReaderFunc, persistenceWriterFunc };
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
spacedUpdate.updateNowIfNecessary();
|
||||||
|
};
|
||||||
|
}, [ viewConfig, saveConfig ])
|
||||||
|
|
||||||
|
return persistenceProps;
|
||||||
}
|
}
|
||||||
|
|
||||||
function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undefined, newAttributePosition: RefObject<number | undefined>, resetNewAttributePosition: () => void) {
|
function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undefined, newAttributePosition: RefObject<number | undefined>, resetNewAttributePosition: () => void) {
|
||||||
@@ -125,6 +134,7 @@ function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undef
|
|||||||
|
|
||||||
function refresh() {
|
function refresh() {
|
||||||
const info = getAttributeDefinitionInformation(note);
|
const info = getAttributeDefinitionInformation(note);
|
||||||
|
|
||||||
buildRowDefinitions(note, info, includeArchived, maxDepth).then(({ definitions: rowData, hasSubtree: hasChildren, rowNumber }) => {
|
buildRowDefinitions(note, info, includeArchived, maxDepth).then(({ definitions: rowData, hasSubtree: hasChildren, rowNumber }) => {
|
||||||
const columnDefs = buildColumnDefinitions({
|
const columnDefs = buildColumnDefinitions({
|
||||||
info,
|
info,
|
||||||
|
|||||||
@@ -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, ...restProps }: TableProps<T>) {
|
export default function Tabulator<T>({ className, columns, data, modules, tabulatorRef: externalTabulatorRef, footerElement, events, index, dataTree, ...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,6 +36,7 @@ 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
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -45,7 +46,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;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export default function AddLinkDialog() {
|
|||||||
const [ linkType, setLinkType ] = useState<LinkType>(hasSelection ? "hyper-link" : "reference-link");
|
const [ linkType, setLinkType ] = useState<LinkType>(hasSelection ? "hyper-link" : "reference-link");
|
||||||
const [ suggestion, setSuggestion ] = useState<Suggestion | null>(null);
|
const [ suggestion, setSuggestion ] = useState<Suggestion | null>(null);
|
||||||
const [ shown, setShown ] = useState(false);
|
const [ shown, setShown ] = useState(false);
|
||||||
|
const hasSubmittedRef = useRef(false);
|
||||||
|
|
||||||
useTriliumEvent("showAddLinkDialog", ( { textTypeWidget, text }) => {
|
useTriliumEvent("showAddLinkDialog", ( { textTypeWidget, text }) => {
|
||||||
setTextTypeWidget(textTypeWidget);
|
setTextTypeWidget(textTypeWidget);
|
||||||
@@ -83,14 +84,11 @@ export default function AddLinkDialog() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onSubmit() {
|
function onSubmit() {
|
||||||
if (suggestion?.notePath) {
|
hasSubmittedRef.current = true;
|
||||||
// Handle note link
|
|
||||||
|
if (suggestion) {
|
||||||
|
// Insertion logic in onHidden because it needs focus.
|
||||||
setShown(false);
|
setShown(false);
|
||||||
textTypeWidget?.addLink(suggestion.notePath, linkType === "reference-link" ? null : linkTitle);
|
|
||||||
} else if (suggestion?.externalLink) {
|
|
||||||
// Handle external link
|
|
||||||
setShown(false);
|
|
||||||
textTypeWidget?.addLink(suggestion.externalLink, linkTitle, true);
|
|
||||||
} else {
|
} else {
|
||||||
logError("No link to add.");
|
logError("No link to add.");
|
||||||
}
|
}
|
||||||
@@ -109,6 +107,19 @@ export default function AddLinkDialog() {
|
|||||||
onSubmit={onSubmit}
|
onSubmit={onSubmit}
|
||||||
onShown={onShown}
|
onShown={onShown}
|
||||||
onHidden={() => {
|
onHidden={() => {
|
||||||
|
// Insert the link.
|
||||||
|
if (hasSubmittedRef.current && suggestion && textTypeWidget) {
|
||||||
|
hasSubmittedRef.current = false;
|
||||||
|
|
||||||
|
if (suggestion.notePath) {
|
||||||
|
// Handle note link
|
||||||
|
textTypeWidget.addLink(suggestion.notePath, linkType === "reference-link" ? null : linkTitle);
|
||||||
|
} else if (suggestion.externalLink) {
|
||||||
|
// Handle external link
|
||||||
|
textTypeWidget.addLink(suggestion.externalLink, linkTitle, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setSuggestion(null);
|
setSuggestion(null);
|
||||||
setShown(false);
|
setShown(false);
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ ws.subscribeToMessages(async (message) => {
|
|||||||
id: id,
|
id: id,
|
||||||
title: t("export.export_status"),
|
title: t("export.export_status"),
|
||||||
message: message,
|
message: message,
|
||||||
icon: "arrow-square-up-right"
|
icon: "export"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget {
|
|||||||
// https://github.com/zadam/trilium/issues/2522
|
// https://github.com/zadam/trilium/issues/2522
|
||||||
const isBackendNote = this.noteContext?.noteId === "_backendLog";
|
const isBackendNote = this.noteContext?.noteId === "_backendLog";
|
||||||
const isSqlNote = this.mime === "text/x-sqlite;schema=trilium";
|
const isSqlNote = this.mime === "text/x-sqlite;schema=trilium";
|
||||||
const isFullHeightNoteType = ["canvas", "webView", "noteMap", "mindMap", "mermaid", "file"].includes(this.type ?? "");
|
const isFullHeightNoteType = ["canvas", "webView", "noteMap", "mindMap", "mermaid", "file", "aiChat"].includes(this.type ?? "");
|
||||||
const isFullHeight = (!this.noteContext?.hasNoteList() && isFullHeightNoteType && !isSqlNote)
|
const isFullHeight = (!this.noteContext?.hasNoteList() && isFullHeightNoteType && !isSqlNote)
|
||||||
|| this.noteContext?.viewScope?.viewMode === "attachments"
|
|| this.noteContext?.viewScope?.viewMode === "attachments"
|
||||||
|| isBackendNote;
|
|| isBackendNote;
|
||||||
|
|||||||
@@ -23,7 +23,10 @@ export default function HelpRemoveButtons({ help, removeText, onRemove }: HelpRe
|
|||||||
icon="bx bx-x"
|
icon="bx bx-x"
|
||||||
className="search-option-del"
|
className="search-option-del"
|
||||||
text={removeText ?? ""}
|
text={removeText ?? ""}
|
||||||
onClick={onRemove}
|
onClick={(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
onRemove?.();
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -71,23 +71,25 @@ export default function Modal({ children, className, size, title, header, footer
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const modalElement = modalRef.current;
|
const modalElement = modalRef.current;
|
||||||
if (!modalElement) {
|
if (!modalElement) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (onShown) {
|
if (onShown) {
|
||||||
modalElement.addEventListener("shown.bs.modal", onShown);
|
modalElement.addEventListener("shown.bs.modal", onShown);
|
||||||
}
|
}
|
||||||
modalElement.addEventListener("hidden.bs.modal", () => {
|
|
||||||
|
function onModalHidden() {
|
||||||
onHidden();
|
onHidden();
|
||||||
if (elementToFocus.current && "focus" in elementToFocus.current) {
|
if (elementToFocus.current && "focus" in elementToFocus.current) {
|
||||||
(elementToFocus.current as HTMLElement).focus();
|
(elementToFocus.current as HTMLElement).focus();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
modalElement.addEventListener("hidden.bs.modal", onModalHidden);
|
||||||
return () => {
|
return () => {
|
||||||
if (onShown) {
|
if (onShown) {
|
||||||
modalElement.removeEventListener("shown.bs.modal", onShown);
|
modalElement.removeEventListener("shown.bs.modal", onShown);
|
||||||
}
|
}
|
||||||
modalElement.removeEventListener("hidden.bs.modal", onHidden);
|
modalElement.removeEventListener("hidden.bs.modal", onModalHidden);
|
||||||
};
|
};
|
||||||
}, [ onShown, onHidden ]);
|
}, [ onShown, onHidden ]);
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import Mark from "mark.js";
|
|||||||
import { DragData } from "../note_tree";
|
import { DragData } from "../note_tree";
|
||||||
import Component from "../../components/component";
|
import Component from "../../components/component";
|
||||||
import toast, { ToastOptions } from "../../services/toast";
|
import toast, { ToastOptions } from "../../services/toast";
|
||||||
|
import { ViewMode } from "../../services/link";
|
||||||
|
|
||||||
export function useTriliumEvent<T extends EventNames>(eventName: T, handler: (data: EventData<T>) => void) {
|
export function useTriliumEvent<T extends EventNames>(eventName: T, handler: (data: EventData<T>) => void) {
|
||||||
const parentComponent = useContext(ParentComponent);
|
const parentComponent = useContext(ParentComponent);
|
||||||
@@ -196,6 +197,7 @@ export function useNoteContext() {
|
|||||||
const [ noteContext, setNoteContext ] = useState<NoteContext>();
|
const [ noteContext, setNoteContext ] = useState<NoteContext>();
|
||||||
const [ notePath, setNotePath ] = useState<string | null | undefined>();
|
const [ notePath, setNotePath ] = useState<string | null | undefined>();
|
||||||
const [ note, setNote ] = useState<FNote | null | undefined>();
|
const [ note, setNote ] = useState<FNote | null | undefined>();
|
||||||
|
const [ , setViewMode ] = useState<ViewMode>();
|
||||||
const [ refreshCounter, setRefreshCounter ] = useState(0);
|
const [ refreshCounter, setRefreshCounter ] = useState(0);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -205,6 +207,7 @@ export function useNoteContext() {
|
|||||||
useTriliumEvents([ "setNoteContext", "activeContextChanged", "noteSwitchedAndActivated", "noteSwitched" ], ({ noteContext }) => {
|
useTriliumEvents([ "setNoteContext", "activeContextChanged", "noteSwitchedAndActivated", "noteSwitched" ], ({ noteContext }) => {
|
||||||
setNoteContext(noteContext);
|
setNoteContext(noteContext);
|
||||||
setNotePath(noteContext.notePath);
|
setNotePath(noteContext.notePath);
|
||||||
|
setViewMode(noteContext.viewScope?.viewMode);
|
||||||
});
|
});
|
||||||
useTriliumEvent("frocaReloaded", () => {
|
useTriliumEvent("frocaReloaded", () => {
|
||||||
setNote(noteContext?.note);
|
setNote(noteContext?.note);
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ const TAB_CONFIGURATION = numberObjectsInPlace<TabConfiguration>([
|
|||||||
show: ({ note }) => note?.type === "text" && options.get("textNoteEditorType") === "ckeditor-classic",
|
show: ({ note }) => note?.type === "text" && options.get("textNoteEditorType") === "ckeditor-classic",
|
||||||
toggleCommand: "toggleRibbonTabClassicEditor",
|
toggleCommand: "toggleRibbonTabClassicEditor",
|
||||||
content: FormattingToolbar,
|
content: FormattingToolbar,
|
||||||
|
activate: true,
|
||||||
stayInDom: true
|
stayInDom: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import TypeWidget from "./type_widget.js";
|
import TypeWidget from "./type_widget.js";
|
||||||
import appContext, { type EventData } from "../../components/app_context.js";
|
import appContext, { type EventData } from "../../components/app_context.js";
|
||||||
import froca from "../../services/froca.js";
|
import froca from "../../services/froca.js";
|
||||||
import linkService from "../../services/link.js";
|
import linkService, { type ViewScope } from "../../services/link.js";
|
||||||
import contentRenderer from "../../services/content_renderer.js";
|
import contentRenderer from "../../services/content_renderer.js";
|
||||||
import utils from "../../services/utils.js";
|
import utils from "../../services/utils.js";
|
||||||
import options from "../../services/options.js";
|
import options from "../../services/options.js";
|
||||||
@@ -44,14 +44,14 @@ export default class AbstractTextTypeWidget extends TypeWidget {
|
|||||||
async openImageInNewTab($img: JQuery<HTMLElement>, activate: boolean = false) {
|
async openImageInNewTab($img: JQuery<HTMLElement>, activate: boolean = false) {
|
||||||
const parsedImage = await this.parseFromImage($img);
|
const parsedImage = await this.parseFromImage($img);
|
||||||
|
|
||||||
if (parsedImage) {
|
if (parsedImage?.noteId) {
|
||||||
appContext.tabManager.openTabWithNoteWithHoisting(parsedImage.noteId, { activate, viewScope: parsedImage.viewScope });
|
appContext.tabManager.openTabWithNoteWithHoisting(parsedImage.noteId, { activate, viewScope: parsedImage.viewScope });
|
||||||
} else {
|
} else {
|
||||||
window.open($img.prop("src"), "_blank");
|
window.open($img.prop("src"), "_blank");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseFromImage($img: JQuery<HTMLElement>) {
|
async parseFromImage($img: JQuery<HTMLElement>): Promise<{ noteId?: string, viewScope: ViewScope } | null> {
|
||||||
const imgSrc = $img.prop("src");
|
const imgSrc = $img.prop("src");
|
||||||
|
|
||||||
const imageNoteMatch = imgSrc.match(/\/api\/images\/([A-Za-z0-9_]+)\//);
|
const imageNoteMatch = imgSrc.match(/\/api\/images\/([A-Za-z0-9_]+)\//);
|
||||||
|
|||||||
@@ -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 {
|
.classic-toolbar-widget::-webkit-scrollbar:horizontal {
|
||||||
height: 0 !important;
|
height: 0 !important;
|
||||||
width: 0 !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.classic-toolbar-widget.dropdown-active {
|
.classic-toolbar-widget.dropdown-active {
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ export default function AppearanceSettings() {
|
|||||||
{isElectron() && <ElectronIntegration /> }
|
{isElectron() && <ElectronIntegration /> }
|
||||||
<Performance />
|
<Performance />
|
||||||
<MaxContentWidth />
|
<MaxContentWidth />
|
||||||
|
<RibbonOptions />
|
||||||
<RelatedSettings items={[
|
<RelatedSettings items={[
|
||||||
{
|
{
|
||||||
title: t("settings_appearance.related_code_blocks"),
|
title: t("settings_appearance.related_code_blocks"),
|
||||||
@@ -305,3 +306,16 @@ function MaxContentWidth() {
|
|||||||
</OptionsSection>
|
</OptionsSection>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function RibbonOptions() {
|
||||||
|
const [ editedNotesOpenInRibbon, setEditedNotesOpenInRibbon ] = useTriliumOptionBool("editedNotesOpenInRibbon");
|
||||||
|
|
||||||
|
return (
|
||||||
|
<OptionsSection title={t('ribbon.widgets')}>
|
||||||
|
<FormCheckbox
|
||||||
|
label={t('ribbon.edited_notes_message')}
|
||||||
|
currentValue={editedNotesOpenInRibbon} onChange={setEditedNotesOpenInRibbon}
|
||||||
|
/>
|
||||||
|
</OptionsSection>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
@@ -45,14 +45,4 @@ export default class ReadOnlyCodeTypeWidget extends AbstractCodeTypeWidget {
|
|||||||
readOnly: true
|
readOnly: true
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async executeWithContentElementEvent({ resolve, ntxId }: EventData<"executeWithContentElement">) {
|
|
||||||
if (!this.isNoteContext(ntxId)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.initialized;
|
|
||||||
|
|
||||||
resolve(this.$editor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,12 @@ import utils from "../../services/utils.js";
|
|||||||
|
|
||||||
const TPL = /*html*/`
|
const TPL = /*html*/`
|
||||||
<div class="note-detail-web-view note-detail-printable" style="height: 100%">
|
<div class="note-detail-web-view note-detail-printable" style="height: 100%">
|
||||||
|
<style>
|
||||||
|
.note-detail-web-view-content {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<div class="note-detail-web-view-help alert alert-warning" style="margin: 50px; padding: 20px 20px 0px 20px;">
|
<div class="note-detail-web-view-help alert alert-warning" style="margin: 50px; padding: 20px 20px 0px 20px;">
|
||||||
<h4>${t("web_view.web_view")}</h4>
|
<h4>${t("web_view.web_view")}</h4>
|
||||||
|
|
||||||
@@ -40,8 +46,6 @@ export default class WebViewTypeWidget extends TypeWidget {
|
|||||||
this.$noteDetailWebViewHelp = this.$widget.find(".note-detail-web-view-help");
|
this.$noteDetailWebViewHelp = this.$widget.find(".note-detail-web-view-help");
|
||||||
this.$noteDetailWebViewContent = this.$widget.find(".note-detail-web-view-content");
|
this.$noteDetailWebViewContent = this.$widget.find(".note-detail-web-view-content");
|
||||||
|
|
||||||
window.addEventListener("resize", () => this.setDimensions(), false);
|
|
||||||
|
|
||||||
super.doRender();
|
super.doRender();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,24 +66,12 @@ export default class WebViewTypeWidget extends TypeWidget {
|
|||||||
this.$noteDetailWebViewContent.hide();
|
this.$noteDetailWebViewContent.hide();
|
||||||
this.$noteDetailWebViewHelp.show();
|
this.$noteDetailWebViewHelp.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setDimensions();
|
|
||||||
|
|
||||||
setTimeout(() => this.setDimensions(), 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
this.$noteDetailWebViewContent.removeAttr("src");
|
this.$noteDetailWebViewContent.removeAttr("src");
|
||||||
}
|
}
|
||||||
|
|
||||||
setDimensions() {
|
|
||||||
const $parent = this.$widget;
|
|
||||||
|
|
||||||
this.$noteDetailWebViewContent
|
|
||||||
.height($parent.height() ?? 0)
|
|
||||||
.width($parent.width() ?? 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) {
|
entitiesReloadedEvent({ loadResults }: EventData<"entitiesReloaded">) {
|
||||||
if (loadResults.getAttributeRows().find((attr) => attr.name === "webViewSrc" && attributeService.isAffecting(attr, this.noteContext?.note))) {
|
if (loadResults.getAttributeRows().find((attr) => attr.name === "webViewSrc" && attributeService.isAffecting(attr, this.noteContext?.note))) {
|
||||||
this.refresh();
|
this.refresh();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"extends": "../../tsconfig.base.json",
|
"extends": "../../tsconfig.base.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"lib": [ "ESNext" ],
|
"lib": [ "ESNext", "DOM.Iterable" ],
|
||||||
"outDir": "dist",
|
"outDir": "dist",
|
||||||
"types": [
|
"types": [
|
||||||
"node",
|
"node",
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ const config: ForgeConfig = {
|
|||||||
config: {
|
config: {
|
||||||
name: EXECUTABLE_NAME,
|
name: EXECUTABLE_NAME,
|
||||||
productName: PRODUCT_NAME,
|
productName: PRODUCT_NAME,
|
||||||
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Notes/develop/images/app-icons/icon.ico",
|
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/icon.ico",
|
||||||
setupIcon: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup.ico"),
|
setupIcon: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup.ico"),
|
||||||
loadingGif: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup-banner.gif"),
|
loadingGif: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup-banner.gif"),
|
||||||
windowsSign: windowsSignConfiguration
|
windowsSign: windowsSignConfiguration
|
||||||
@@ -130,7 +130,7 @@ const config: ForgeConfig = {
|
|||||||
name: "@electron-forge/maker-zip",
|
name: "@electron-forge/maker-zip",
|
||||||
config: {
|
config: {
|
||||||
options: {
|
options: {
|
||||||
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Notes/develop/images/app-icons/icon.ico",
|
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/icon.ico",
|
||||||
icon: path.join(APP_ICON_PATH, "icon.ico")
|
icon: path.join(APP_ICON_PATH, "icon.ico")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@triliumnext/desktop",
|
"name": "@triliumnext/desktop",
|
||||||
"version": "0.99.0",
|
"version": "0.99.1",
|
||||||
"description": "Build your personal knowledge base with Trilium Notes",
|
"description": "Build your personal knowledge base with Trilium Notes",
|
||||||
"private": true,
|
"private": true,
|
||||||
"main": "src/main.ts",
|
"main": "src/main.ts",
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
"author": {
|
"author": {
|
||||||
"name": "Trilium Notes Team",
|
"name": "Trilium Notes Team",
|
||||||
"email": "contact@eliandoran.me",
|
"email": "contact@eliandoran.me",
|
||||||
"url": "https://github.com/TriliumNext/Notes"
|
"url": "https://triliumnotes.org"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env TRILIUM_PORT=37742 TRILIUM_DATA_DIR=data tsx ../../scripts/electron-start.mts src/main.ts",
|
"dev": "cross-env TRILIUM_PORT=37742 TRILIUM_DATA_DIR=data tsx ../../scripts/electron-start.mts src/main.ts",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/remote": "2.1.3",
|
"@electron/remote": "2.1.3",
|
||||||
"better-sqlite3": "^12.0.0",
|
"better-sqlite3": "12.4.1",
|
||||||
"electron-debug": "4.1.0",
|
"electron-debug": "4.1.0",
|
||||||
"electron-dl": "4.0.0",
|
"electron-dl": "4.0.0",
|
||||||
"electron-squirrel-startup": "1.0.1",
|
"electron-squirrel-startup": "1.0.1",
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
"@triliumnext/commons": "workspace:*",
|
"@triliumnext/commons": "workspace:*",
|
||||||
"@triliumnext/server": "workspace:*",
|
"@triliumnext/server": "workspace:*",
|
||||||
"copy-webpack-plugin": "13.0.1",
|
"copy-webpack-plugin": "13.0.1",
|
||||||
"electron": "37.5.1",
|
"electron": "38.2.1",
|
||||||
"@electron-forge/cli": "7.9.0",
|
"@electron-forge/cli": "7.9.0",
|
||||||
"@electron-forge/maker-deb": "7.9.0",
|
"@electron-forge/maker-deb": "7.9.0",
|
||||||
"@electron-forge/maker-dmg": "7.9.0",
|
"@electron-forge/maker-dmg": "7.9.0",
|
||||||
@@ -43,6 +43,6 @@
|
|||||||
"@electron-forge/maker-squirrel": "7.9.0",
|
"@electron-forge/maker-squirrel": "7.9.0",
|
||||||
"@electron-forge/maker-zip": "7.9.0",
|
"@electron-forge/maker-zip": "7.9.0",
|
||||||
"@electron-forge/plugin-auto-unpack-natives": "7.9.0",
|
"@electron-forge/plugin-auto-unpack-natives": "7.9.0",
|
||||||
"prebuild-install": "^7.1.1"
|
"prebuild-install": "7.1.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,7 +15,6 @@ async function main() {
|
|||||||
|
|
||||||
// Copy node modules dependencies
|
// Copy node modules dependencies
|
||||||
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path", "@electron/remote" ]);
|
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path", "@electron/remote" ]);
|
||||||
build.copy("/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
|
|
||||||
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
||||||
|
|
||||||
// Integrate the client.
|
// Integrate the client.
|
||||||
|
|||||||
@@ -4,16 +4,16 @@
|
|||||||
"description": "Standalone tool to dump contents of Trilium document.db file into a directory tree of notes",
|
"description": "Standalone tool to dump contents of Trilium document.db file into a directory tree of notes",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-sqlite3": "^12.0.0",
|
"better-sqlite3": "12.4.1",
|
||||||
"mime-types": "^3.0.0",
|
"mime-types": "3.0.1",
|
||||||
"sanitize-filename": "^1.6.3",
|
"sanitize-filename": "1.6.3",
|
||||||
"tsx": "^4.19.3",
|
"tsx": "4.20.6",
|
||||||
"yargs": "^18.0.0"
|
"yargs": "18.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/better-sqlite3": "^7.6.11",
|
"@types/better-sqlite3": "7.6.13",
|
||||||
"@types/mime-types": "^3.0.0",
|
"@types/mime-types": "3.0.1",
|
||||||
"@types/yargs": "^17.0.33"
|
"@types/yargs": "17.0.33"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "tsx src/main.ts",
|
"dev": "tsx src/main.ts",
|
||||||
|
|||||||
@@ -5,14 +5,14 @@
|
|||||||
"description": "Desktop version of Trilium which imports the demo database (presented to new users at start-up) or the user guide and other documentation and saves the modifications for committing.",
|
"description": "Desktop version of Trilium which imports the demo database (presented to new users at start-up) or the user guide and other documentation and saves the modifications for committing.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"archiver": "7.0.1",
|
"archiver": "7.0.1",
|
||||||
"better-sqlite3": "^12.0.0"
|
"better-sqlite3": "12.4.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@triliumnext/client": "workspace:*",
|
"@triliumnext/client": "workspace:*",
|
||||||
"@triliumnext/desktop": "workspace:*",
|
"@triliumnext/desktop": "workspace:*",
|
||||||
"@types/fs-extra": "11.0.4",
|
"@types/fs-extra": "11.0.4",
|
||||||
"copy-webpack-plugin": "13.0.1",
|
"copy-webpack-plugin": "13.0.1",
|
||||||
"electron": "37.5.1",
|
"electron": "38.2.1",
|
||||||
"fs-extra": "11.3.2"
|
"fs-extra": "11.3.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -6,6 +6,6 @@
|
|||||||
"e2e": "playwright test"
|
"e2e": "playwright test"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"dotenv": "17.2.2"
|
"dotenv": "17.2.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM node:22.19.0-bullseye-slim AS builder
|
FROM node:22.20.0-bullseye-slim AS builder
|
||||||
RUN corepack enable
|
RUN corepack enable
|
||||||
|
|
||||||
# Install native dependencies since we might be building cross-platform.
|
# Install native dependencies since we might be building cross-platform.
|
||||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
|||||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||||
|
|
||||||
FROM node:22.19.0-bullseye-slim
|
FROM node:22.20.0-bullseye-slim
|
||||||
# Install only runtime dependencies
|
# Install only runtime dependencies
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y --no-install-recommends \
|
apt-get install -y --no-install-recommends \
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM node:22.19.0-alpine AS builder
|
FROM node:22.20.0-alpine AS builder
|
||||||
RUN corepack enable
|
RUN corepack enable
|
||||||
|
|
||||||
# Install native dependencies since we might be building cross-platform.
|
# Install native dependencies since we might be building cross-platform.
|
||||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
|||||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||||
|
|
||||||
FROM node:22.19.0-alpine
|
FROM node:22.20.0-alpine
|
||||||
# Install runtime dependencies
|
# Install runtime dependencies
|
||||||
RUN apk add --no-cache su-exec shadow
|
RUN apk add --no-cache su-exec shadow
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM node:22.19.0-alpine AS builder
|
FROM node:22.20.0-alpine AS builder
|
||||||
RUN corepack enable
|
RUN corepack enable
|
||||||
|
|
||||||
# Install native dependencies since we might be building cross-platform.
|
# Install native dependencies since we might be building cross-platform.
|
||||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
|||||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||||
|
|
||||||
FROM node:22.19.0-alpine
|
FROM node:22.20.0-alpine
|
||||||
# Create a non-root user with configurable UID/GID
|
# Create a non-root user with configurable UID/GID
|
||||||
ARG USER=trilium
|
ARG USER=trilium
|
||||||
ARG UID=1001
|
ARG UID=1001
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM node:22.19.0-bullseye-slim AS builder
|
FROM node:22.20.0-bullseye-slim AS builder
|
||||||
RUN corepack enable
|
RUN corepack enable
|
||||||
|
|
||||||
# Install native dependencies since we might be building cross-platform.
|
# Install native dependencies since we might be building cross-platform.
|
||||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
|||||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||||
|
|
||||||
FROM node:22.19.0-bullseye-slim
|
FROM node:22.20.0-bullseye-slim
|
||||||
# Create a non-root user with configurable UID/GID
|
# Create a non-root user with configurable UID/GID
|
||||||
ARG USER=trilium
|
ARG USER=trilium
|
||||||
ARG UID=1001
|
ARG UID=1001
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-sqlite3": "12.2.0"
|
"better-sqlite3": "12.4.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@triliumnext/server",
|
"name": "@triliumnext/server",
|
||||||
"version": "0.99.0",
|
"version": "0.99.1",
|
||||||
"description": "The server-side component of TriliumNext, which exposes the client via the web, allows for sync and provides a REST API for both internal and external use.",
|
"description": "The server-side component of TriliumNext, which exposes the client via the web, allows for sync and provides a REST API for both internal and external use.",
|
||||||
"private": true,
|
"private": true,
|
||||||
"main": "./src/main.ts",
|
"main": "./src/main.ts",
|
||||||
@@ -25,10 +25,11 @@
|
|||||||
"docker-start-rootless-alpine": "pnpm docker-build-rootless-alpine && docker run -p 8081:8080 triliumnext-rootless-alpine"
|
"docker-start-rootless-alpine": "pnpm docker-build-rootless-alpine && docker run -p 8081:8080 triliumnext-rootless-alpine"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"better-sqlite3": "12.2.0"
|
"better-sqlite3": "12.4.1",
|
||||||
|
"node-html-parser": "7.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@anthropic-ai/sdk": "0.63.0",
|
"@anthropic-ai/sdk": "0.65.0",
|
||||||
"@braintree/sanitize-url": "7.1.1",
|
"@braintree/sanitize-url": "7.1.1",
|
||||||
"@electron/remote": "2.1.3",
|
"@electron/remote": "2.1.3",
|
||||||
"@preact/preset-vite": "2.10.2",
|
"@preact/preset-vite": "2.10.2",
|
||||||
@@ -49,14 +50,13 @@
|
|||||||
"@types/html": "1.0.4",
|
"@types/html": "1.0.4",
|
||||||
"@types/ini": "4.1.1",
|
"@types/ini": "4.1.1",
|
||||||
"@types/js-yaml": "4.0.9",
|
"@types/js-yaml": "4.0.9",
|
||||||
"@types/jsdom": "21.1.7",
|
|
||||||
"@types/mime-types": "3.0.1",
|
"@types/mime-types": "3.0.1",
|
||||||
"@types/multer": "2.0.0",
|
"@types/multer": "2.0.0",
|
||||||
"@types/safe-compare": "1.1.2",
|
"@types/safe-compare": "1.1.2",
|
||||||
"@types/sanitize-html": "2.16.0",
|
"@types/sanitize-html": "2.16.0",
|
||||||
"@types/sax": "1.2.7",
|
"@types/sax": "1.2.7",
|
||||||
"@types/serve-favicon": "2.5.7",
|
"@types/serve-favicon": "2.5.7",
|
||||||
"@types/serve-static": "1.15.8",
|
"@types/serve-static": "1.15.9",
|
||||||
"@types/session-file-store": "1.2.5",
|
"@types/session-file-store": "1.2.5",
|
||||||
"@types/stream-throttle": "0.1.4",
|
"@types/stream-throttle": "0.1.4",
|
||||||
"@types/supertest": "6.0.3",
|
"@types/supertest": "6.0.3",
|
||||||
@@ -81,13 +81,13 @@
|
|||||||
"debounce": "2.2.0",
|
"debounce": "2.2.0",
|
||||||
"debug": "4.4.3",
|
"debug": "4.4.3",
|
||||||
"ejs": "3.1.10",
|
"ejs": "3.1.10",
|
||||||
"electron": "37.5.1",
|
"electron": "38.2.1",
|
||||||
"electron-debug": "4.1.0",
|
"electron-debug": "4.1.0",
|
||||||
"electron-window-state": "5.0.3",
|
"electron-window-state": "5.0.3",
|
||||||
"escape-html": "1.0.3",
|
"escape-html": "1.0.3",
|
||||||
"express": "5.1.0",
|
"express": "5.1.0",
|
||||||
"express-http-proxy": "2.1.2",
|
"express-http-proxy": "2.1.2",
|
||||||
"express-openid-connect": "^2.17.1",
|
"express-openid-connect": "2.19.2",
|
||||||
"express-rate-limit": "8.1.0",
|
"express-rate-limit": "8.1.0",
|
||||||
"express-session": "1.18.2",
|
"express-session": "1.18.2",
|
||||||
"file-uri-to-path": "2.0.0",
|
"file-uri-to-path": "2.0.0",
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
"html2plaintext": "2.1.4",
|
"html2plaintext": "2.1.4",
|
||||||
"http-proxy-agent": "7.0.2",
|
"http-proxy-agent": "7.0.2",
|
||||||
"https-proxy-agent": "7.0.6",
|
"https-proxy-agent": "7.0.6",
|
||||||
"i18next": "25.5.2",
|
"i18next": "25.5.3",
|
||||||
"i18next-fs-backend": "2.6.0",
|
"i18next-fs-backend": "2.6.0",
|
||||||
"image-type": "6.0.0",
|
"image-type": "6.0.0",
|
||||||
"ini": "5.0.0",
|
"ini": "5.0.0",
|
||||||
@@ -105,13 +105,12 @@
|
|||||||
"is-svg": "6.1.0",
|
"is-svg": "6.1.0",
|
||||||
"jimp": "1.6.0",
|
"jimp": "1.6.0",
|
||||||
"js-yaml": "4.1.0",
|
"js-yaml": "4.1.0",
|
||||||
"jsdom": "26.1.0",
|
|
||||||
"marked": "16.3.0",
|
"marked": "16.3.0",
|
||||||
"mime-types": "3.0.1",
|
"mime-types": "3.0.1",
|
||||||
"multer": "2.0.2",
|
"multer": "2.0.2",
|
||||||
"normalize-strings": "1.1.1",
|
"normalize-strings": "1.1.1",
|
||||||
"ollama": "0.5.18",
|
"ollama": "0.6.0",
|
||||||
"openai": "5.12.0",
|
"openai": "6.1.0",
|
||||||
"rand-token": "1.0.1",
|
"rand-token": "1.0.1",
|
||||||
"safe-compare": "1.1.4",
|
"safe-compare": "1.1.4",
|
||||||
"sanitize-filename": "1.6.3",
|
"sanitize-filename": "1.6.3",
|
||||||
@@ -124,11 +123,11 @@
|
|||||||
"supertest": "7.1.4",
|
"supertest": "7.1.4",
|
||||||
"swagger-jsdoc": "6.2.8",
|
"swagger-jsdoc": "6.2.8",
|
||||||
"swagger-ui-express": "5.0.1",
|
"swagger-ui-express": "5.0.1",
|
||||||
"time2fa": "^1.3.0",
|
"time2fa": "1.4.2",
|
||||||
"tmp": "0.2.5",
|
"tmp": "0.2.5",
|
||||||
"turndown": "7.2.1",
|
"turndown": "7.2.1",
|
||||||
"unescape": "1.0.1",
|
"unescape": "1.0.1",
|
||||||
"vite": "^7.1.3",
|
"vite": "7.1.9",
|
||||||
"ws": "8.18.3",
|
"ws": "8.18.3",
|
||||||
"xml2js": "0.6.2",
|
"xml2js": "0.6.2",
|
||||||
"yauzl": "3.2.0"
|
"yauzl": "3.2.0"
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ async function main() {
|
|||||||
|
|
||||||
// Copy node modules dependencies
|
// Copy node modules dependencies
|
||||||
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
|
build.copyNodeModules([ "better-sqlite3", "bindings", "file-uri-to-path" ]);
|
||||||
build.copy("/node_modules/jsdom/lib/jsdom/living/xhr/xhr-sync-worker.js", "xhr-sync-worker.js");
|
|
||||||
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css");
|
||||||
|
|
||||||
// Integrate the client.
|
// Integrate the client.
|
||||||
|
|||||||
2
apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json
generated
vendored
@@ -116,6 +116,13 @@ 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>
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
<p>Trilium supports configuration via a file named <code>config.ini</code> and
|
<p>Trilium supports configuration via a file named <code>config.ini</code> and
|
||||||
environment variables. This document provides a comprehensive reference
|
environment variables. This document provides a comprehensive reference
|
||||||
for all configuration options.</p>
|
for all configuration options.</p>
|
||||||
|
<h2>Location of the configuration file</h2>
|
||||||
|
<p>The configuration file is not located in the same directory as the application.
|
||||||
|
Instead, the <code>config.ini</code> is located in the <a class="reference-link"
|
||||||
|
href="#root/_help_tAassRL4RSQL">Data directory</a>. As such, the configuration
|
||||||
|
file is only available after starting the application and creating a database.</p>
|
||||||
<h2>Configuration Precedence</h2>
|
<h2>Configuration Precedence</h2>
|
||||||
<p>Configuration values are loaded in the following order of precedence (highest
|
<p>Configuration values are loaded in the following order of precedence (highest
|
||||||
to lowest):</p>
|
to lowest):</p>
|
||||||
|
|||||||
118
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html
generated
vendored
@@ -38,16 +38,17 @@ class="image">
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Table of contents.</li>
|
<li data-list-item-id="e26b4ce9ba4e9dfe224d04e0f341925ed">Table of contents.</li>
|
||||||
<li>Syntax highlight of code blocks, provided a language is selected (does
|
<li data-list-item-id="e9707fdfa2c92d66690cf932f7e647253">Syntax highlight of code blocks, provided a language is selected (does
|
||||||
not work if “Auto-detected” is enabled).</li>
|
not work if “Auto-detected” is enabled).</li>
|
||||||
<li>Rendering for math equations.</li>
|
<li data-list-item-id="e84420a10c6d64bd107edb6e867c91d4b">Rendering for math equations.</li>
|
||||||
|
<li data-list-item-id="e10834dcd0619d77ae2e94d3695bedf58"><a href="#root/_help_nBAXQFj20hS1">Including notes</a> (only if the included
|
||||||
|
notes are also shared).</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Including notes is not supported.</li>
|
<li data-list-item-id="e41cc4139377f9f88d653d1eb8ca47bb4">Inline Mermaid diagrams are not rendered.</li>
|
||||||
<li>Inline Mermaid diagrams are not rendered.</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -56,12 +57,12 @@ class="image">
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Basic support (displaying the contents of the note in a monospace font).</li>
|
<li data-list-item-id="e291ae6d5130677b4c99f7c3bdbe974b4">Basic support (displaying the contents of the note in a monospace font).</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>No syntax highlight.</li>
|
<li data-list-item-id="e0270680bbdd7a129306e61e11691e36d">No syntax highlight.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -94,12 +95,12 @@ class="image">
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>The child notes are displayed in a fixed format. </li>
|
<li data-list-item-id="ea031e1d4149eb443ace756234490c5a4">The child notes are displayed in a fixed format. </li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>More advanced view types such as the calendar view are not supported.</li>
|
<li data-list-item-id="ea4a9d424aec2afbaecc07bbf64b7bebd">More advanced view types such as the calendar view are not supported.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -108,12 +109,12 @@ class="image">
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>The diagram is displayed as a vector image.</li>
|
<li data-list-item-id="e582d283f2b1b30cbe5ae35d8e01b2bf2">The diagram is displayed as a vector image.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>No further interaction supported.</li>
|
<li data-list-item-id="e33268686446e3c217077201bb5964364">No further interaction supported.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -122,12 +123,12 @@ class="image">
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>The diagram is displayed as a vector image.</li>
|
<li data-list-item-id="e443dd0e97c30cb12c77e8906a71569ea">The diagram is displayed as a vector image.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>No further interaction supported.</li>
|
<li data-list-item-id="efe151ef3f3826c825416417525fb5fb2">No further interaction supported.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -143,7 +144,7 @@ class="image">
|
|||||||
<td>The diagram is displayed as a vector image.</td>
|
<td>The diagram is displayed as a vector image.</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>No further interaction supported.</li>
|
<li data-list-item-id="ed3b4fb473042f6e32b4502d4fa11a767">No further interaction supported.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -159,7 +160,7 @@ class="image">
|
|||||||
<td>Basic interaction (downloading the file).</td>
|
<td>Basic interaction (downloading the file).</td>
|
||||||
<td>
|
<td>
|
||||||
<ul>
|
<ul>
|
||||||
<li>No further interaction supported.</li>
|
<li data-list-item-id="ed87e836a39d127ebcbb33e9e59045afb">No further interaction supported.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -178,7 +179,7 @@ class="image">
|
|||||||
<p>To use the sharing feature, you must have a <a class="reference-link"
|
<p>To use the sharing feature, you must have a <a class="reference-link"
|
||||||
href="#root/_help_WOcw2SLH6tbX">Server Installation</a> of Trilium.
|
href="#root/_help_WOcw2SLH6tbX">Server Installation</a> of Trilium.
|
||||||
This is necessary because the notes will be hosted from the server.</p>
|
This is necessary because the notes will be hosted from the server.</p>
|
||||||
<h2>How to Share a Note</h2>
|
<h2>Sharing a note</h2>
|
||||||
<ol>
|
<ol>
|
||||||
<li>
|
<li>
|
||||||
<p><strong>Enable Sharing</strong>: To share a note, toggle the <code>Shared</code> switch
|
<p><strong>Enable Sharing</strong>: To share a note, toggle the <code>Shared</code> switch
|
||||||
@@ -194,26 +195,27 @@ class="image">
|
|||||||
the URL will refer to <code>localhost (127.0.0.1)</code>.</p>
|
the URL will refer to <code>localhost (127.0.0.1)</code>.</p>
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h2>Sharing a Note Subtree</h2>
|
<h2>Sharing a note subtree</h2>
|
||||||
<p>When you share a note, you actually share the entire subtree of notes
|
<p>When you share a note, you actually share the entire subtree of notes
|
||||||
beneath it. If the note has child notes, they will also be included in
|
beneath it. If the note has child notes, they will also be included in
|
||||||
the shared content. For example, sharing the "Formatting" subtree will
|
the shared content. For example, sharing the "Formatting" subtree will
|
||||||
display a page with basic navigation for exploring all the notes within
|
display a page with basic navigation for exploring all the notes within
|
||||||
that subtree.</p>
|
that subtree.</p>
|
||||||
<h2>Viewing All Shared Notes</h2>
|
<h2>Viewing and managing shared notes</h2>
|
||||||
<p>You can view a list of all shared notes by clicking on "Show Shared Notes
|
<p>You can view a list of all shared notes by clicking on "Show Shared Notes
|
||||||
Subtree." This allows you to manage and navigate through all the notes
|
Subtree" in the <a class="reference-link" href="#root/_help_x3i7MxGccDuM">Global menu</a>.
|
||||||
you have made public.</p>
|
This allows you to manage and navigate through all the notes you have made
|
||||||
<h2>Security Considerations</h2>
|
public.</p>
|
||||||
|
<h2>Security considerations</h2>
|
||||||
<p>Shared notes are published on the open internet and can be accessed by
|
<p>Shared notes are published on the open internet and can be accessed by
|
||||||
anyone with the URL. The URL's randomness does not provide security, so
|
anyone with the URL. The URL's randomness does not provide security, so
|
||||||
it is crucial not to share sensitive information through this feature.</p>
|
it is crucial not to share sensitive information through this feature.</p>
|
||||||
<h3>Password Protection</h3>
|
<h3>Password protection</h3>
|
||||||
<p>To protect shared notes with a username and password, you can use the <code>#shareCredentials</code> attribute.
|
<p>To protect shared notes with a username and password, you can use the <code>#shareCredentials</code> attribute.
|
||||||
Add this label to the note with the format <code>#shareCredentials="username:password"</code>.
|
Add this label to the note with the format <code>#shareCredentials="username:password"</code>.
|
||||||
To protect an entire subtree, make sure the label is <a href="#root/_help_bwZpz2ajCEwO">inheritable</a>.</p>
|
To protect an entire subtree, make sure the label is <a href="#root/_help_bwZpz2ajCEwO">inheritable</a>.</p>
|
||||||
<h2>Advanced Sharing Options</h2>
|
<h2>Advanced sharing options</h2>
|
||||||
<h3>Customizing the Appearance of Shared Notes</h3>
|
<h3>Customizing the appearance of shared notes</h3>
|
||||||
<p>The default design should be a good starting point, but you can customize
|
<p>The default design should be a good starting point, but you can customize
|
||||||
it using your own CSS:</p>
|
it using your own CSS:</p>
|
||||||
<ul>
|
<ul>
|
||||||
@@ -232,13 +234,41 @@ 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]);
|
||||||
|
|
||||||
for (const attr of parentNote.attributes) {
|
for (const attr of parentNote.attributes) {
|
||||||
console.log(attr.type, attr.name, attr.value);
|
console.log(attr.type, attr.name, attr.value);
|
||||||
}</code></pre>
|
}</code></pre>
|
||||||
<h3>Creating Human-Readable URL Aliases</h3>
|
<h3>Creating human-readable URL aliases</h3>
|
||||||
<p>Shared notes typically have URLs like <code>http://domain.tld/share/knvU8aJy4dJ7</code>,
|
<p>Shared notes typically have URLs like <code>http://domain.tld/share/knvU8aJy4dJ7</code>,
|
||||||
where the last part is the note's ID. You can make these URLs more user-friendly
|
where the last part is the note's ID. You can make these URLs more user-friendly
|
||||||
by adding the <code>#shareAlias</code> label to individual notes (e.g., <code>#shareAlias=highlighting</code>).
|
by adding the <code>#shareAlias</code> label to individual notes (e.g., <code>#shareAlias=highlighting</code>).
|
||||||
@@ -249,23 +279,25 @@ for (const attr of parentNote.attributes) {
|
|||||||
<li>Using slashes (<code>/</code>) within aliases to create subpaths is not
|
<li>Using slashes (<code>/</code>) within aliases to create subpaths is not
|
||||||
supported.</li>
|
supported.</li>
|
||||||
</ol>
|
</ol>
|
||||||
<h3>Viewing and Managing Shared Notes</h3>
|
<h3>Setting a custom favicon</h3>
|
||||||
<p>All shared notes are grouped under an automatically managed "Shared Notes"
|
|
||||||
section. From here, you can view, share, or unshare notes by moving or
|
|
||||||
cloning them within this section.</p>
|
|
||||||
<p>
|
|
||||||
<img src="Sharing_shared-list.png" alt="Shared Notes List">
|
|
||||||
</p>
|
|
||||||
<h3>Setting a Custom Favicon</h3>
|
|
||||||
<p>To customize the favicon for your shared pages, create a relation <code>~shareFavicon</code> pointing
|
<p>To customize the favicon for your shared pages, create a relation <code>~shareFavicon</code> pointing
|
||||||
to a file note containing the favicon (e.g., in <code>.ico</code> format).</p>
|
to a file note containing the favicon (e.g., in <code>.ico</code> format).</p>
|
||||||
<h3>Sharing a Note as the Root</h3>
|
<h3>Sharing a note as the root</h3>
|
||||||
<p>You can designate a specific note or folder as the root of your shared
|
<p>You can designate a specific note or folder as the root of your shared
|
||||||
content by adding the <code>#shareRoot</code> label. This note will be linked
|
content by adding the <code>#shareRoot</code> label. This note will be linked
|
||||||
when visiting <code>[http://domain.tld/share](http://domain/share)</code>,
|
when visiting <code>[http://domain.tld/share](http://domain/share)</code>,
|
||||||
making it easier to use Trilium as a fully-fledged website. Consider combining
|
making it easier to use Trilium as a fully-fledged website.</p>
|
||||||
this with the <code>#shareIndex</code> label, which will display a list of
|
<aside class="admonition tip">
|
||||||
all shared notes.</p>
|
<p>Consider combining this with the <code>#shareIndex</code> label, which will
|
||||||
|
display a list of all shared notes.</p>
|
||||||
|
</aside>
|
||||||
|
<h3>Displaying an index of shared notes</h3>
|
||||||
|
<p>When accessing a share, the sub-notes will be displayed in a tree on the
|
||||||
|
left. But since multiple note trees can be shared, it might be useful to
|
||||||
|
display a list of all the different share trees.</p>
|
||||||
|
<p>To do so, create a shared text note and apply the <code>shareIndex</code> label.
|
||||||
|
When viewed, the list of shared roots will be displayed at the bottom of
|
||||||
|
the note.</p>
|
||||||
<h2>Attribute reference</h2>
|
<h2>Attribute reference</h2>
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
@@ -323,8 +355,8 @@ for (const attr of parentNote.attributes) {
|
|||||||
<p>Indicates to web crawlers that the page should not be indexed of this
|
<p>Indicates to web crawlers that the page should not be indexed of this
|
||||||
note by:</p>
|
note by:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li>
|
<li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li>
|
||||||
<li>Setting the <code>noindex, follow</code> meta tag.</li>
|
<li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -340,6 +372,14 @@ 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>
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 8.7 KiB |
@@ -15,61 +15,74 @@
|
|||||||
in a hierarchy.</p>
|
in a hierarchy.</p>
|
||||||
<h2>Interaction with columns</h2>
|
<h2>Interaction with columns</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Create a new column by pressing <em>Add Column</em> near the last column.
|
<li data-list-item-id="e53cd56f64ad0a087af5c123894261ff1">Create a new column by pressing <em>Add Column</em> near the last column.
|
||||||
<ul>
|
<ul>
|
||||||
<li>Once pressed, a text box will be displayed to set the name of the column.
|
<li data-list-item-id="eaf5a55c795e0cfe57a2a05d6b9f89761">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>To reorder a column, simply hold the mouse over the title and drag it
|
<li data-list-item-id="e2d7f17b56a6a8027d26e5d30f16bd7f6">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>To delete a column, right click on its title and select <em>Delete column</em>.</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 rename a column, click on the note title.
|
<li
|
||||||
|
data-list-item-id="e00cb99d9b34dbf63523f053a57f28fe8">To rename a column, click on the note title.
|
||||||
<ul>
|
<ul>
|
||||||
<li>Press Enter to confirm.</li>
|
<li data-list-item-id="ea86b1d902db4bbab1fe85bcf669c595c">Press Enter to confirm.</li>
|
||||||
<li>Upon renaming a column, the corresponding status attribute of all its
|
<li data-list-item-id="e6d1bc52b0a8b3d554fd4be0f1f009b04">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>If there are many columns, use the mouse wheel to scroll.</li>
|
<li data-list-item-id="ea1dd557786a534468e61f445aaea665f">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>Create a new note in any column by pressing <em>New item</em>
|
<li data-list-item-id="ec25f6e597c61e1f56422d72a91777cb8">Create a new note in any column by pressing <em>New item</em>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Enter the name of the note and press <kbd>Enter</kbd> or click away. To
|
<li data-list-item-id="e3027de7ac16543b3a3be526c6700f22e">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>Once created, the new note will have an attribute (<code>status</code> label
|
<li data-list-item-id="ef97c736e327952225517534711a8e329">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>To open the note, simply click on it.</li>
|
<li data-list-item-id="e0558241e1901ee6a5b765644c115f95c">To open the note, simply click on it.</li>
|
||||||
<li>To change the title of the note directly from the board, hover the mouse
|
<li data-list-item-id="e1580878e9963e2039332f9c3ff40dc9d">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>To change the state of a note, simply drag a note from one column to the
|
<li data-list-item-id="e817b2e5103fd08622477663a5a8b9683">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>The order of the notes in each column corresponds to their position in
|
<li data-list-item-id="e5f86d7f2f545470451040860ca3e8890">The order of the notes in each column corresponds to their position in
|
||||||
the tree.
|
the tree.
|
||||||
<ul>
|
<ul>
|
||||||
<li>It's possible to reorder notes simply by dragging them to the desired
|
<li data-list-item-id="e0b47ff4af56dc7cd21a118fbc9b1808a">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>It's also possible to drag notes across columns, at the desired position.</li>
|
<li data-list-item-id="e9eb4fa22b9ed927a24aee3e94d5a1b5d">It's also possible to drag notes across columns, at the desired position.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>For more options, right click on a note to display a context menu with
|
<li data-list-item-id="e94ebbbe060ccfe7fbb1c67616e272b35">For more options, right click on a note to display a context menu with
|
||||||
the following options:
|
the following options:
|
||||||
<ul>
|
<ul>
|
||||||
<li>Open the note in a new tab/split/window or quick edit.</li>
|
<li data-list-item-id="e5516bb20b5c4534580854c6422107b1d">Open the note in a new tab/split/window or quick edit.</li>
|
||||||
<li>Move the note to any column.</li>
|
<li data-list-item-id="e8419784dbd01baae6c1e1e8875baa84a">Move the note to any column.</li>
|
||||||
<li>Insert a new note above/below the current one.</li>
|
<li data-list-item-id="e6ab7181ef973bbd96e3bbbfed5e302d1">Insert a new note above/below the current one.</li>
|
||||||
<li>Archive/unarchive the current note.</li>
|
<li data-list-item-id="e8aae7a4c6ddb5f191d6dcd914f0c3b78">Archive/unarchive the current note.</li>
|
||||||
<li>Delete the current note.</li>
|
<li data-list-item-id="e0bf5bc2c60b27a7fd0078001816d8ca4">Delete the current note.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>If there are many notes within the column, move the mouse over the column
|
<li data-list-item-id="ec32b9f786e2c612fb63677c8c5089365">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>.
|
||||||
@@ -83,5 +96,5 @@ class="admonition note">
|
|||||||
<h2>Interaction</h2>
|
<h2>Interaction</h2>
|
||||||
<h2>Limitations</h2>
|
<h2>Limitations</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>It is not possible yet to use group by a relation, only by label.</li>
|
<li data-list-item-id="e61ec93de3282934fd37d302933d208b8">It is not possible yet to use group by a relation, only by label.</li>
|
||||||
</ul>
|
</ul>
|
||||||
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/10_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 8.5 KiB |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/1_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 172 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/2_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 158 B After Width: | Height: | Size: 147 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/4_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 154 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/7_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 158 B |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/8_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 172 B After Width: | Height: | Size: 9.0 KiB |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/9_Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 3.9 KiB |
@@ -25,6 +25,19 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<h2>Exiting out of the code block</h2>
|
||||||
|
<ul>
|
||||||
|
<li>To exit out of a code block and enter a normal paragraph, move the cursor
|
||||||
|
at the end of the code block and press <kbd>Enter</kbd> twice.</li>
|
||||||
|
<li>Similarly, to insert a paragraph above the note block, move the cursor
|
||||||
|
at the beginning of the code block and press <kbd>Enter</kbd> twice.</li>
|
||||||
|
</ul>
|
||||||
|
<aside class="admonition note">
|
||||||
|
<p>If you've pasted a code block with a more complex HTML structure, exiting
|
||||||
|
out of the code block by pressing <kbd>Enter</kbd> multiple times might not
|
||||||
|
work. In that case the best approach is to delete the code block entirely
|
||||||
|
and use <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>V</kbd> (paste as plain text).</p>
|
||||||
|
</aside>
|
||||||
<h2>Syntax highlighting & color schemes</h2>
|
<h2>Syntax highlighting & color schemes</h2>
|
||||||
<p>Since TriliumNext v0.90.12, Trilium will try to offer syntax highlighting
|
<p>Since TriliumNext v0.90.12, Trilium will try to offer syntax highlighting
|
||||||
to the code block. Note that the syntax highlighting mechanism is slightly
|
to the code block. Note that the syntax highlighting mechanism is slightly
|
||||||
|
|||||||
@@ -6,3 +6,10 @@
|
|||||||
look for the
|
look for the
|
||||||
<img src="Include Note_image.png">button. There is also a keyboard shortcut defined for it but it is not
|
<img src="Include Note_image.png">button. There is also a keyboard shortcut defined for it but it is not
|
||||||
allocated by default.</p>
|
allocated by default.</p>
|
||||||
|
<h2>Included notes in the share functionality</h2>
|
||||||
|
<p>If a <a href="#root/_help_R9pX4DGra2Vt">shared note</a> contains one or
|
||||||
|
more included notes, they will be displayed in the content of the note
|
||||||
|
as if they were part of the note itself.</p>
|
||||||
|
<p>For this to work, the included notes must also be shared, otherwise they
|
||||||
|
will not be shown. However, the included notes can still be hidden from
|
||||||
|
the note tree via <code>#shareHiddenFromTree</code>.</p>
|
||||||
25
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Lists.html
generated
vendored
@@ -1,15 +1,15 @@
|
|||||||
<p>There are three types of lists supported by text notes:</p>
|
<p>There are three types of lists supported by text notes:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<img src="7_Lists_image.png" width="17" height="13">Bulleted lists (also known as unordered lists).</li>
|
<img src="4_Lists_image.png" width="17" height="13">Bulleted lists (also known as unordered lists).</li>
|
||||||
<li>
|
<li>
|
||||||
<img src="8_Lists_image.png" width="18" height="16">Numbered lists (or ordered lists).</li>
|
<img src="1_Lists_image.png" width="18" height="16">Numbered lists (or ordered lists).</li>
|
||||||
<li>
|
<li>
|
||||||
<img src="10_Lists_image.png" width="19" height="13">To-do lists</li>
|
<img src="Lists_image.png" width="19" height="13">To-do lists</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>For bulleted and numbered lists, it's possible to configure an alternative
|
<p>For bulleted and numbered lists, it's possible to configure an alternative
|
||||||
marker such as squares or Roman numbering by pressing the
|
marker such as squares or Roman numbering by pressing the
|
||||||
<img src="9_Lists_image.png"
|
<img src="2_Lists_image.png"
|
||||||
width="10" height="6">icon. For numbered lists, it's also possible to specify the number to
|
width="10" height="6">icon. For numbered lists, it's also possible to specify the number to
|
||||||
start at or whether to count in reverse order.</p>
|
start at or whether to count in reverse order.</p>
|
||||||
<h2>Keyboard interaction</h2>
|
<h2>Keyboard interaction</h2>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
by a space;</li>
|
by a space;</li>
|
||||||
<li>Numbered list: Start a line with <code>1.</code> or <code>1)</code> followed
|
<li>Numbered list: Start a line with <code>1.</code> or <code>1)</code> followed
|
||||||
by a space;</li>
|
by a space;</li>
|
||||||
<li>To-do list: Start a line with <code>[ ]</code> for an unchecked item or <code>[x]</code> for
|
<li>To-do list: Start a line with <code>- [ ]</code> for an unchecked item or <code>[x]</code> for
|
||||||
a checked item.</li>
|
a checked item.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
<li>To exit out of the list, press <kbd>Enter</kbd> twice.</li>
|
<li>To exit out of the list, press <kbd>Enter</kbd> twice.</li>
|
||||||
<li>To merge two lists, simply delete the gap between them.</li>
|
<li>To merge two lists, simply delete the gap between them.</li>
|
||||||
<li>To create nested lists, simply use the
|
<li>To create nested lists, simply use the
|
||||||
<img src="2_Lists_image.png" width="17"
|
<img src="7_Lists_image.png" width="17"
|
||||||
height="14">button (see <em>Indentation</em> in <a class="reference-link" href="#root/_help_dEHYtoWWi8ct">Other features</a>)
|
height="14">button (see <em>Indentation</em> in <a class="reference-link" href="#root/_help_dEHYtoWWi8ct">Other features</a>)
|
||||||
or the <kbd>Tab</kbd> key. To decrease the nesting level for the current
|
or the <kbd>Tab</kbd> key. To decrease the nesting level for the current
|
||||||
element, press <kbd>Shift</kbd>+<kbd>Tab</kbd>.</li>
|
element, press <kbd>Shift</kbd>+<kbd>Tab</kbd>.</li>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td>2</td>
|
<td>2</td>
|
||||||
<td>
|
<td>
|
||||||
<img src="4_Lists_image.png">
|
<img src="9_Lists_image.png">
|
||||||
</td>
|
</td>
|
||||||
<td>Press Enter to create a new list item.</td>
|
<td>Press Enter to create a new list item.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
<td>4</td>
|
<td>4</td>
|
||||||
<td>
|
<td>
|
||||||
<img class="image_resized" style="aspect-ratio:676/112;width:98.29%;"
|
<img class="image_resized" style="aspect-ratio:676/112;width:98.29%;"
|
||||||
src="1_Lists_image.png" width="676" height="112">
|
src="10_Lists_image.png" width="676" height="112">
|
||||||
</td>
|
</td>
|
||||||
<td>At this point, insert any desired block-level item such as a code block.</td>
|
<td>At this point, insert any desired block-level item such as a code block.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<td>5</td>
|
<td>5</td>
|
||||||
<td>
|
<td>
|
||||||
<img class="image_resized" style="aspect-ratio:675/129;width:94.22%;"
|
<img class="image_resized" style="aspect-ratio:675/129;width:94.22%;"
|
||||||
src="Lists_image.png" width="675" height="129">
|
src="8_Lists_image.png" width="675" height="129">
|
||||||
</td>
|
</td>
|
||||||
<td>To continue with a new bullet point, press Enter until the cursor moves
|
<td>To continue with a new bullet point, press Enter until the cursor moves
|
||||||
to a new blank position.</td>
|
to a new blank position.</td>
|
||||||
@@ -96,3 +96,10 @@
|
|||||||
</table>
|
</table>
|
||||||
<p>The same principle applies to all three list types (bullet, numbered and
|
<p>The same principle applies to all three list types (bullet, numbered and
|
||||||
to-do).</p>
|
to-do).</p>
|
||||||
|
<h2>To-do lists</h2>
|
||||||
|
<ul>
|
||||||
|
<li>To insert a to-do list from the keyboard, type <code>- [ ]</code> for an
|
||||||
|
unchecked item or <code>[x]</code> for a checked item while on an empty paragraph.</li>
|
||||||
|
<li>To reorder the item under the cursor, press <kbd>Alt</kbd>+<kbd>Up</kbd> or <kbd>Alt</kbd>+<kbd>Down</kbd>.
|
||||||
|
To reorder multiple items, select them first.</li>
|
||||||
|
</ul>
|
||||||
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Lists_image.png
generated
vendored
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 160 B |
@@ -6,12 +6,6 @@
|
|||||||
the
|
the
|
||||||
<img src="1_Math Equations_image.png" width="20" height="15">button from the <a class="reference-link" href="#root/_help_nRhnJkTT8cPs">Formatting toolbar</a> (generally
|
<img src="1_Math Equations_image.png" width="20" height="15">button from the <a class="reference-link" href="#root/_help_nRhnJkTT8cPs">Formatting toolbar</a> (generally
|
||||||
found under the <a class="reference-link" href="#root/_help_CohkqWQC1iBv">Insert buttons</a>).</p>
|
found under the <a class="reference-link" href="#root/_help_CohkqWQC1iBv">Insert buttons</a>).</p>
|
||||||
<p>If inserting equations frequently, using the <kbd>Ctrl</kbd>+<kbd>M</kbd> keyboard
|
|
||||||
shortcut can be more comfortable. Alternatively, type <code>$$</code> or <code>\[</code> to
|
|
||||||
trigger the popup directly.</p>
|
|
||||||
<p>There is currently no quick way to insert an equation, such as surrounding
|
|
||||||
it with <code>$</code> or pressing <kbd>Ctrl</kbd>+<kbd>M</kbd> on an already
|
|
||||||
typed-out equation.</p>
|
|
||||||
<p>The mathematical expression must be written in the TeX format. There is
|
<p>The mathematical expression must be written in the TeX format. There is
|
||||||
no visual editor for the math equations, only a preview. </p>
|
no visual editor for the math equations, only a preview. </p>
|
||||||
<p>Enabling <em>Display mode</em> will render the equation slightly bigger
|
<p>Enabling <em>Display mode</em> will render the equation slightly bigger
|
||||||
@@ -19,6 +13,12 @@
|
|||||||
center it. Display mode equations will act as blocks (i.e. like paragraphs,
|
center it. Display mode equations will act as blocks (i.e. like paragraphs,
|
||||||
or tables) and can be inserted for example in lists. Non-display equations
|
or tables) and can be inserted for example in lists. Non-display equations
|
||||||
can be part of the text.</p>
|
can be part of the text.</p>
|
||||||
|
<h2>Keyboard shortcuts</h2>
|
||||||
|
<p>If inserting equations frequently, using the <kbd>Ctrl</kbd>+<kbd>M</kbd> keyboard
|
||||||
|
shortcut can be more comfortable. Alternatively, type <code>$$</code> or <code>\[</code> to
|
||||||
|
trigger the popup directly.</p>
|
||||||
|
<p>There is currently no quick way to turn an already typed-out equation,
|
||||||
|
such as surrounding it with <code>$</code> or pressing <kbd>Ctrl</kbd>+<kbd>M</kbd>.</p>
|
||||||
<h2>Supported math features</h2>
|
<h2>Supported math features</h2>
|
||||||
<p>Technically we are using the KaTeX library which allows for a subset of
|
<p>Technically we are using the KaTeX library which allows for a subset of
|
||||||
the TeX format. To see the full list of supported features, consult the
|
the TeX format. To see the full list of supported features, consult the
|
||||||
@@ -27,8 +27,12 @@
|
|||||||
the official documentation.</p>
|
the official documentation.</p>
|
||||||
<h2>Markdown support</h2>
|
<h2>Markdown support</h2>
|
||||||
<p>Math equations will be preserved when exporting to or importing from Markdown,
|
<p>Math equations will be preserved when exporting to or importing from Markdown,
|
||||||
surrounded by <code>\(</code> characters for inline math expressions, and <code>$\)</code> for
|
surrounded by <code>$</code> characters for inline math expressions, and <code>$$</code> for
|
||||||
display mode.</p>
|
display mode.</p>
|
||||||
<p>If you notice any issue with the Markdown import/export for equations,
|
<p>If you notice any issue with the Markdown import/export for equations,
|
||||||
feel free to <a href="#root/_help_wy8So3yZZlH9">report</a> it while providing
|
feel free to <a href="#root/_help_wy8So3yZZlH9">report</a> it while providing
|
||||||
the equation that causes issues.</p>
|
the equation that causes issues.</p>
|
||||||
|
<h2>Formatting the equation</h2>
|
||||||
|
<p>It is possible to customize the font size and foreground color for both
|
||||||
|
inline and display-mode equations, just like any other text. For inline
|
||||||
|
equations, the background color/highlight can also be adjusted.</p>
|
||||||
24
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Logging.html
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<p>Both front-end and back-end notes can log messages for debugging.</p>
|
||||||
|
<h2>UI logging via <code>api.log</code></h2>
|
||||||
|
<figure class="image image_resized image-style-align-center" style="width:57.74%;">
|
||||||
|
<img style="aspect-ratio:749/545;" src="Logging_image.png" width="749"
|
||||||
|
height="545">
|
||||||
|
</figure>
|
||||||
|
<p>The API log feature integrates with the script editor and it displays
|
||||||
|
all the messages logged via <code>api.log</code>. This works for both back-end
|
||||||
|
and front-end scripts.</p>
|
||||||
|
<p>The API log panel will appear after executing a script that uses <code>api.log</code> and
|
||||||
|
it can be dismissed temporarily by pressing the close button in the top-right
|
||||||
|
of the panel.</p>
|
||||||
|
<p>Apart from strings, an object can be passed as well in which case it will
|
||||||
|
be pretty-formatted if possible (e.g. recursive objects are not supported).</p>
|
||||||
|
<h2>Console logging</h2>
|
||||||
|
<p>For logs that are not directly visible to the user, the standard <code>console.log</code> can
|
||||||
|
be used as well.</p>
|
||||||
|
<ul>
|
||||||
|
<li>For front-end scripts, the log will be shown in the Developer Tools (also
|
||||||
|
known as Inspect).</li>
|
||||||
|
<li>For back-end scripts, the log will be shown in the server output while
|
||||||
|
running but <strong>will not</strong> be visible in the <a class="reference-link"
|
||||||
|
href="#root/_help_bnyigUA2UK7s">Backend (server) logs</a>.</li>
|
||||||
|
</ul>
|
||||||
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Logging_image.png
generated
vendored
Normal file
|
After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 3.9 KiB |
BIN
apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/3_Custom app-wide CSS_image.png
generated
vendored
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
@@ -16,15 +16,15 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<img src="1_Custom app-wide CSS_image.png">
|
<img src="2_Custom app-wide CSS_image.png">
|
||||||
</td>
|
</td>
|
||||||
<td>In the ribbon, press the “Owned Attributes” section and type <code>#appCss</code>.</td>
|
<td>In the ribbon, press the “Owned Attributes” section and type <code>#appCss</code>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<img src="2_Custom app-wide CSS_image.png">
|
<img src="3_Custom app-wide CSS_image.png">
|
||||||
</td>
|
</td>
|
||||||
<td>Type the desired CSS.
|
<td>Type the desired CSS.
|
||||||
<br>
|
<br>
|
||||||
<br>Generally it's a good idea to append <code>!important</code> for the styles
|
<br>Generally it's a good idea to append <code>!important</code> for the styles
|
||||||
that are being changed, in order to prevent other</td>
|
that are being changed, in order to prevent other</td>
|
||||||
@@ -36,18 +36,55 @@
|
|||||||
<p>Adding a new <em>app CSS note</em> or modifying an existing one does not
|
<p>Adding a new <em>app CSS note</em> or modifying an existing one does not
|
||||||
immediately apply changes. To see the changes, press Ctrl+Shift+R to refresh
|
immediately apply changes. To see the changes, press Ctrl+Shift+R to refresh
|
||||||
the page first.</p>
|
the page first.</p>
|
||||||
<h2>Example use-case: customizing the printing stylesheet</h2>
|
<h2>Sample use cases</h2>
|
||||||
|
<h3>Customizing the printing stylesheet</h3>
|
||||||
<p>When printing a document or exporting as PDF, it is possible to adjust
|
<p>When printing a document or exporting as PDF, it is possible to adjust
|
||||||
the style by creating a CSS note that uses the <code>@media</code> selector.</p>
|
the style by creating a CSS note that uses the <code>@media</code> selector.</p>
|
||||||
<p>For example, to change the font of the document from the one defined by
|
<p>For example, to change the font of the document from the one defined by
|
||||||
the theme or the user to a serif one:</p><pre><code class="language-text-x-trilium-auto">@media print {
|
the theme or the user to a serif one:</p><pre><code class="language-text-x-trilium-auto">@media print {
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
|
||||||
--main-font-family: serif !important;
|
--main-font-family: serif !important;
|
||||||
|
|
||||||
--detail-font-family: var(--main-font-family) !important;
|
--detail-font-family: var(--main-font-family) !important;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}</code></pre>
|
||||||
|
<h3>Per-workspace styles</h3>
|
||||||
|
<p>When using <a class="reference-link" href="#root/_help_9sRHySam5fXb">Workspaces</a>,
|
||||||
|
it can be helpful to create a visual distinction between notes in different
|
||||||
|
workspaces.</p>
|
||||||
|
<p>To do so:</p>
|
||||||
|
<ol>
|
||||||
|
<li>In the note with <code>#workspace</code>, add an inheritable attribute <code>#cssClass(inheritable)</code> with
|
||||||
|
a value that uniquely identifies the workspace (say <code>my-workspace</code>).</li>
|
||||||
|
<li>Anywhere in the note structure, create a CSS note with <code>#appCss</code>.</li>
|
||||||
|
</ol>
|
||||||
|
<h4>Change the color of the icons in the <a class="reference-link" href="#root/_help_oPVyFC7WL2Lp">Note Tree</a></h4><pre><code class="language-text-x-trilium-auto">.fancytree-node.my-workspace.fancytree-custom-icon {
|
||||||
|
color: #ff0000;
|
||||||
|
}</code></pre>
|
||||||
|
<h4>Change the color of the note title and the icon</h4>
|
||||||
|
<p>To change the color of the note title and the icon (above the content):</p><pre><code class="language-text-x-trilium-auto">.note-split.my-workspace .note-icon-widget button.note-icon,
|
||||||
|
.note-split.my-workspace .note-title-widget input.note-title {
|
||||||
|
color: #ff0000;
|
||||||
|
}</code></pre>
|
||||||
|
<h4>Add a watermark to the note content</h4>
|
||||||
|
<figure class="image image-style-align-right image_resized" style="width:39.97%;">
|
||||||
|
<img style="aspect-ratio:641/630;" src="1_Custom app-wide CSS_image.png"
|
||||||
|
width="641" height="630">
|
||||||
|
</figure>
|
||||||
|
<ol>
|
||||||
|
<li>Insert an image in any note and take the URL of the image.</li>
|
||||||
|
<li>Use the following CSS, adjusting the <code>background-image</code> and <code>width</code> and <code>height</code> to
|
||||||
|
the desired values.</li>
|
||||||
|
</ol><pre><code class="language-text-x-trilium-auto">.note-split.my-workspace .scrolling-container:after {
|
||||||
|
position: fixed;
|
||||||
|
content: "";
|
||||||
|
background-image: url("/api/attachments/Rvm3zJNITQI1/image/logo.png");
|
||||||
|
background-size: contain;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
width: 237px;
|
||||||
|
height: 44px;
|
||||||
|
bottom: 1em;
|
||||||
|
right: 1em;
|
||||||
|
opacity: 0.5;
|
||||||
|
z-index: 0;
|
||||||
}</code></pre>
|
}</code></pre>
|
||||||