Compare commits

...

1240 Commits

Author SHA1 Message Date
Elian Doran
a6e7f98f69 chore(release): 0.92.3-beta 2025-03-07 23:59:10 +02:00
Elian Doran
e76601cd21 fix(bin): empty package.json 2025-03-07 23:58:41 +02:00
Elian Doran
e252b491ba chore(bin): make less error-tolerant 2025-03-07 23:57:31 +02:00
Elian Doran
555dcc956e chore(release): 0.92.3-beta 2025-03-07 23:55:26 +02:00
Elian Doran
3958312651 fix(e2e): flaky test due to navigation 2025-03-07 20:34:08 +02:00
Elian Doran
eb19e31fc3 fix(e2e): tests failing when run locally 2025-03-07 20:34:01 +02:00
Elian Doran
9d05fedc69 Merge pull request #1355 from TriliumNext/renovate/npm-axios-vulnerability
fix(deps): update dependency axios to v1.8.2 [security]
2025-03-07 20:25:21 +02:00
Elian Doran
cbd6278a0b Merge pull request #1348 from TriliumNext/renovate/electron-34.x
chore(deps): update dependency electron to v34.3.1
2025-03-07 20:14:30 +02:00
Elian Doran
f6b52f5ce9 Merge pull request #1349 from TriliumNext/renovate/vitest-monorepo
chore(deps): update vitest monorepo to v3.0.8
2025-03-07 20:14:17 +02:00
renovate[bot]
efc57e383c fix(deps): update dependency axios to v1.8.2 [security] 2025-03-07 18:13:51 +00:00
Elian Doran
40d6a28751 Merge pull request #1350 from TriliumNext/renovate/force-graph-1.x
fix(deps): update dependency force-graph to v1.49.3
2025-03-07 20:13:43 +02:00
Elian Doran
73791211c5 Merge pull request #1351 from TriliumNext/renovate/playwright-monorepo
chore(deps): update dependency @playwright/test to v1.51.0
2025-03-07 20:13:18 +02:00
Elian Doran
b0f86af57e Merge branch 'develop' into renovate/playwright-monorepo 2025-03-07 20:13:10 +02:00
Elian Doran
4c6556cf18 Merge pull request #1352 from TriliumNext/renovate/happy-dom-monorepo
chore(deps): update dependency happy-dom to v17.3.0
2025-03-07 20:12:57 +02:00
Elian Doran
3465bc3f1a Merge branch 'develop' into renovate/happy-dom-monorepo 2025-03-07 19:44:26 +02:00
Elian Doran
c1c9bf9122 Merge branch 'develop' into renovate/playwright-monorepo 2025-03-07 19:44:24 +02:00
Elian Doran
02b50703b2 Merge branch 'develop' into renovate/force-graph-1.x 2025-03-07 19:44:19 +02:00
Elian Doran
ab104af9ac Merge branch 'develop' into renovate/vitest-monorepo 2025-03-07 19:44:16 +02:00
Elian Doran
178a58375a Merge branch 'develop' into renovate/electron-34.x 2025-03-07 19:43:42 +02:00
Elian Doran
313d418345 fix(test): rollback database version 2025-03-07 10:23:02 +02:00
renovate[bot]
633369b5bd chore(deps): update dependency happy-dom to v17.3.0 2025-03-07 01:27:34 +00:00
renovate[bot]
06d5abded4 chore(deps): update dependency @playwright/test to v1.51.0 2025-03-07 01:27:24 +00:00
renovate[bot]
41368db8b6 fix(deps): update dependency force-graph to v1.49.3 2025-03-07 01:27:12 +00:00
renovate[bot]
4ff3b87f23 chore(deps): update vitest monorepo to v3.0.8 2025-03-07 01:27:02 +00:00
renovate[bot]
a40dc2047b chore(deps): update dependency electron to v34.3.1 2025-03-07 01:26:47 +00:00
Elian Doran
00e576b052 Revert "Merge pull request #1234 from TriliumNext/feature/task_list"
This reverts commit 58a8821c22, reversing
changes made to 50d491b432.
2025-03-06 23:52:01 +02:00
Elian Doran
ee7b97ae56 revert(db): back to 228 (no tasks) 2025-03-06 23:45:06 +02:00
Elian Doran
89767d0135 feat(client): allow triggering search on hash change 2025-03-06 22:21:50 +02:00
Elian Doran
79cc1cbf17 fix(link): search from URL not working (closes #1335) 2025-03-06 22:17:14 +02:00
Elian Doran
1ba6104e36 feat(vscode): set XML formatter 2025-03-06 21:19:35 +02:00
Elian Doran
f209e4f14d feat(vscode): add vitest integration 2025-03-06 21:19:28 +02:00
Elian Doran
a162fbfe42 fix(mermaid): <br> breaking diagram rendering (closes #1345) 2025-03-06 21:18:36 +02:00
Elian Doran
e795caa2f3 fix(note_language): no separator when no languages 2025-03-06 20:50:58 +02:00
Elian Doran
ddd0c3a878 Merge pull request #1319 from TriliumNext/feature/rtl
Right-to-left support
2025-03-06 18:12:44 +02:00
Elian Doran
7c5430ba49 Merge pull request #1341 from TriliumNext/renovate/node-22.x
chore(deps): update dependency @types/node to v22.13.9
2025-03-06 08:22:03 +02:00
Elian Doran
c155702d91 Merge pull request #1342 from TriliumNext/renovate/ws-8.x
chore(deps): update dependency @types/ws to v8.18.0
2025-03-06 08:21:37 +02:00
renovate[bot]
ab578f9379 chore(deps): update dependency @types/ws to v8.18.0 2025-03-06 02:50:55 +00:00
renovate[bot]
ebaa909488 chore(deps): update dependency @types/node to v22.13.9 2025-03-06 02:50:47 +00:00
Adorian Doran
c463106ccc style(next): tweak modals 2025-03-06 03:02:41 +02:00
Adorian Doran
283d192fe8 style(next)/jump to note: fix modal footer background 2025-03-06 02:30:32 +02:00
Adorian Doran
fbba1021cc style(next): restyle modals 2025-03-06 02:28:19 +02:00
Elian Doran
a3a34cfab0 fix(rtl): wrong content when switching to an empty note 2025-03-05 23:06:18 +02:00
Elian Doran
77d6cdc546 fix(note_language): double separator when only RTL languages 2025-03-05 23:00:48 +02:00
Elian Doran
deb5d82c02 fix(test): broken after adding content-only languages 2025-03-05 22:18:24 +02:00
Elian Doran
ca757b20d5 fix(note_language): duplicate separators if no language selected 2025-03-05 22:16:31 +02:00
Elian Doran
15075c8626 fix(build): tests failing due to cyclic dependencies 2025-03-05 22:11:03 +02:00
Elian Doran
07dbacb61f fix(build): incorrect import 2025-03-05 22:05:12 +02:00
Elian Doran
1976fe6729 Merge remote-tracking branch 'origin/develop' into feature/rtl
; Conflicts:
;	src/public/app/widgets/floating_buttons/help_button.ts
2025-03-05 21:57:53 +02:00
Elian Doran
c99c4a4302 Revert "feat(rtl): add language switcher toolbar"
This reverts commit e930ae5f40.
2025-03-05 21:57:08 +02:00
Elian Doran
8d60429b9c style(note_language): size and positioning of the help button 2025-03-05 21:51:08 +02:00
Elian Doran
84c480c4c6 feat(in-app-help): remove "contextual-help" suffix 2025-03-05 21:44:40 +02:00
Elian Doran
01f9ddaea7 fix(in-app-help): unnecessary bottom padding 2025-03-05 21:39:26 +02:00
Elian Doran
07b1f69f7a fix(in-app-help): fix image max width 2025-03-05 21:38:56 +02:00
Elian Doran
dd28ce9e5d feat(note_language): add in-app help 2025-03-05 21:38:41 +02:00
Elian Doran
e514396c42 feat(docs): prepare documentation for RTL text support 2025-03-05 21:27:53 +02:00
Adorian Doran
f2d1726852 style(next)/tab bar: do not use a distinct visual state for tabs being dragged in horizontal toolbar layout 2025-03-05 21:15:35 +02:00
Adorian Doran
6b9311f9ef style(next)/toolbar: rollback the sync status icon animation 2025-03-05 21:03:23 +02:00
Elian Doran
9ced699751 feat(rtl): reposition buttons for read-only language change 2025-03-05 19:23:04 +02:00
Elian Doran
c217d1c037 chore(i18n: rename localization setting 2025-03-05 19:20:34 +02:00
Elian Doran
a9938cbf7d feat(options/language): improve description & add translations 2025-03-05 18:54:59 +02:00
Elian Doran
3d600c885a feat(note_language): refresh rtl for read-only notes 2025-03-05 17:33:46 +02:00
Elian Doran
24c2b54bc9 feat(note_language): reload list of languages when changed 2025-03-05 17:23:22 +02:00
Elian Doran
8e2517459f feat(rtl): align floating buttons properly 2025-03-05 17:12:14 +02:00
Elian Doran
25c9f52cf4 feat(note_language): add a button to configure the language 2025-03-05 16:44:36 +02:00
Elian Doran
4a75f9f48b feat(rtl): adjust padding for read-only text 2025-03-05 14:39:26 +02:00
Elian Doran
51813099b3 feat(note_language): reinitialize editor when switching between RTL and LTR notes 2025-03-05 14:35:05 +02:00
Elian Doran
93e2515190 Merge pull request #1332 from TriliumNext/port_dialogs
port dialogs
2025-03-05 14:21:02 +02:00
JYC333
883a67bcfe Merge branch 'develop' into port_dialogs 2025-03-05 13:09:00 +01:00
Elian Doran
17e3bd9f6d Merge pull request #1339 from TriliumNext/build_server-build-dump-db
build(build-server): stop copying dump-db during build
2025-03-05 13:48:13 +02:00
Jin
d4fe8cf4b9 refactor: 💡 add event data and remove redundant code 2025-03-05 12:44:36 +01:00
Elian Doran
4c0ecc4df9 Merge pull request #1315 from TriliumNext/chore_add-eslint
chore: add eslint as linter
2025-03-05 12:55:48 +02:00
Elian Doran
2b0cb8225f Merge branch 'develop' into build_server-build-dump-db 2025-03-05 12:55:14 +02:00
Elian Doran
3d7798859f Merge pull request #1338 from TriliumNext/chore_move-deps-to-dev
chore(deps): move deps to devDeps
2025-03-05 12:54:59 +02:00
Panagiotis Papadopoulos
f8c8b9eb3f build(build-server): stop copying dump-db during build 2025-03-05 09:28:41 +01:00
Panagiotis Papadopoulos
33eb8fe820 chore(deps): move deps to devDeps
* happy-dom → only needed for tests
* knockout → this is now bundled by webpack during build stage
* ts-loader → only needed during build stage
2025-03-05 09:24:20 +01:00
Panagiotis Papadopoulos
d8ea415b84 Merge branch 'develop' into chore_add-eslint 2025-03-05 09:16:02 +01:00
Elian Doran
7bcbf29f21 fix(canvas): unable to copy-paste 2025-03-05 09:27:20 +02:00
Elian Doran
ea3364ab09 feat(note_language): support RTL in read-only text 2025-03-04 23:13:23 +02:00
Elian Doran
115c3bbeb0 chore(client/ts): port read_only_text 2025-03-04 22:59:46 +02:00
Elian Doran
f150ec15bc refactor(client): move finding by locale in service 2025-03-04 22:45:38 +02:00
Elian Doran
d582fdea02 feat(settings/i18n): filter only display languages 2025-03-04 22:19:37 +02:00
Elian Doran
775fd3f22b feat(note_language): filter by enabled languages 2025-03-04 21:56:21 +02:00
Elian Doran
9f6b97cdfa feat(note_language): display checkbox to the right 2025-03-04 21:31:19 +02:00
Elian Doran
d31ba6f47c feat(note_language): add checkbox 2025-03-04 21:04:50 +02:00
Elian Doran
b150a05a55 feat(note_language): group right-to-left languages 2025-03-04 20:58:32 +02:00
Elian Doran
4c89a2ac27 feat(i18n): sort languages alphabetically 2025-03-04 20:51:22 +02:00
Elian Doran
951f4c4921 feat(note_language): align list of languages to the right 2025-03-04 20:48:36 +02:00
Elian Doran
856410120c feat(note_language): improve layout of list of languages 2025-03-04 20:39:30 +02:00
Elian Doran
427b7fe992 feat(note_language): rebuild editor when language is switched 2025-03-04 20:34:36 +02:00
Elian Doran
c6b3c1bf88 feat(note_language): add right-to-left languages 2025-03-04 20:31:51 +02:00
Elian Doran
42d3334c9d feat(note_language): initialize CKEditor with right language 2025-03-04 19:29:02 +02:00
Elian Doran
3546ac6ded refactor(note_language): remove unnecessary fields 2025-03-04 18:40:26 +02:00
Elian Doran
b81fd69981 fix(note_language): crash if user entered invalid locale 2025-03-04 18:38:07 +02:00
Elian Doran
bb42b5fb19 feat(note_language): allow removing language tag 2025-03-04 18:35:42 +02:00
Elian Doran
598586f735 feat(note_language): update value of combobox 2025-03-04 18:30:43 +02:00
Elian Doran
bccfeed431 feat(note_language): set language attribute for note 2025-03-04 17:54:52 +02:00
Elian Doran
dbea35f9f3 feat(note_language): set a default value for the combo 2025-03-04 17:49:58 +02:00
Elian Doran
acc76f9b74 feat(note_language): add an option for no language set 2025-03-04 17:48:04 +02:00
Elian Doran
5b4d323936 feat(client): display list of languages 2025-03-04 17:43:24 +02:00
Elian Doran
fd652ea7a5 feat(client): hide language for non-text notes 2025-03-04 17:29:37 +02:00
Elian Doran
642b84ce6b feat(client): create an empty language switcher at note level 2025-03-04 17:27:00 +02:00
Elian Doran
c0c85e96ce chore(client/ts): port basic_properties 2025-03-04 17:18:17 +02:00
Panagiotis Papadopoulos
2c7a25b7fc chore(eslint): add rule for unused vars
this is already used across codebase: using "_" as placeholder for deliberately unused vars (e.g. when destructuring arrays)
2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
6a5e622637 scripts(linter): remove "--cache" flag
using it is not recommended for ts-eslint:
https://typescript-eslint.io/troubleshooting/faqs/eslint#can-i-use-eslints---cache-with-typescript-eslint
2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
b2ac5b6337 chore(eslint): ignore certain folders 2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
40144fc171 deps: update typescript-eslint to 8.26.0 2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
1e599af480 chore(eslint): disable 'no-undef' rule
For TS projects this is already enforced by tsc, see:
https://eslint.org/docs/latest/rules/no-undef#handled_by_typescript
2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
744a0b8042 chore: ignore build related folder in eslint config 2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
0d66f9d4eb chore(scripts): add dev:linter-check and dev:linter-fix
purposely *not* named as dev:eslint, just to "decouple" the script from eslint, in case there ever is the need to change that :-)
2025-03-04 12:19:23 +01:00
Panagiotis Papadopoulos
aed835b6c2 chore: add initial eslint configuration
rules will need some finetuning still
2025-03-04 12:19:23 +01:00
Adorian Doran
ce2961ebd6 style(next)/toolbar: animate the sync status icon 2025-03-04 11:55:37 +02:00
Adorian Doran
b03c75c09b style(next): fix note menu artifacts in split view 2025-03-04 11:19:33 +02:00
Adorian Doran
77c4b50215 style(next)/SQL Console: tweak appearance 2025-03-04 11:14:10 +02:00
Elian Doran
901d2d72ae feat(print): improve code block style 2025-03-04 09:29:53 +02:00
Adorian Doran
6555add2aa client/options/other: tweak the "HTML Import Tags" section 2025-03-04 01:48:09 +02:00
Jin
c4d2c2b8de refactor: 💡 remove redundant code 2025-03-04 00:42:31 +01:00
Jin
f1ecab84d9 refactor: 💡 remove unused code 2025-03-04 00:35:29 +01:00
Jin
f1f55fd4f8 fix: 🐛 fix add external link
fix can't add external link from add link dialog
2025-03-04 00:33:09 +01:00
Adorian Doran
a97c8087a1 style(next)/shell: correct border offset, add entrance animation for notes 2025-03-04 01:31:36 +02:00
Adorian Doran
ee40bb3b33 style(next)/ribbon/note info: improve the layout on constrained width 2025-03-04 00:55:24 +02:00
Jin
5543650166 chore: 🤖 (ts) port add_link dialog 2025-03-03 23:54:09 +01:00
Adorian Doran
dcea67fa9d Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-03-04 00:12:15 +02:00
Adorian Doran
3d2801096f style(next): add a border to separate note splits 2025-03-04 00:12:02 +02:00
Elian Doran
c41fbe8e45 fix(client): build error due to null 2025-03-03 23:40:32 +02:00
Elian Doran
3855f0e75f Revert "port tab manager to ts"
This reverts commit 45a50f3aa1.
2025-03-03 23:34:54 +02:00
Adorian Doran
3f641c98fb Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-03-03 23:08:25 +02:00
Adorian Doran
9ca43aceed style(next)/search in note: tweak the border line 2025-03-03 23:08:16 +02:00
Jin
0e81f086c0 chore: 🤖 (ts) port about dialog 2025-03-03 22:06:04 +01:00
Elian Doran
5289f94553 Merge pull request #1320 from TriliumNext/porting_js
chore: port more js to ts
2025-03-03 23:04:14 +02:00
Adorian Doran
d779cc1854 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-03-03 22:49:16 +02:00
Adorian Doran
3b16ad508e style(next)/search in note: gracefully handle narrow widths 2025-03-03 22:47:32 +02:00
Elian Doran
cf554fc4af Merge branch 'develop' into porting_js 2025-03-03 22:46:10 +02:00
Jin
1b76442367 chore: 🤖 fix webpack build error 2025-03-03 21:03:45 +01:00
Elian Doran
2213c500c2 fix(client): allow overriding position using getter (closes #1321) 2025-03-03 21:03:45 +01:00
Elian Doran
3c290c9fc5 fix(client): allow overriding position using getter (closes #1321) 2025-03-03 21:20:42 +02:00
Elian Doran
8e66dc300f Merge branch 'develop' into porting_js 2025-03-03 20:30:15 +02:00
Elian Doran
ef9eebc030 Merge pull request #1283 from TriliumNext/chore_prettier
chore: fix prettier code style issues
2025-03-03 20:28:33 +02:00
Elian Doran
65a51153b3 Merge remote-tracking branch 'origin/develop' into chore_prettier 2025-03-03 20:21:47 +02:00
Elian Doran
741a4af570 fix(build): an argument was not provided 2025-03-03 20:00:52 +02:00
Elian Doran
2a4d3b71f2 Merge pull request #1324 from TriliumNext/renovate/prettier-3.x
chore(deps): update dependency prettier to v3.5.3
2025-03-03 19:57:33 +02:00
JYC333
0d5bef422a Merge branch 'develop' into renovate/prettier-3.x 2025-03-03 18:30:58 +01:00
Adorian Doran
605d99a7e8 style(next): horizontal toolbar layout tweaks 2025-03-03 18:17:13 +02:00
Elian Doran
e930ae5f40 feat(rtl): add language switcher toolbar 2025-03-03 18:12:15 +02:00
Adorian Doran
4d6e115208 style(next)/attribute detail dialog: tweak input labels 2025-03-03 18:04:21 +02:00
Adorian Doran
495a394d79 style(next)/search in note: remove the italic font style from the match counters 2025-03-03 17:50:59 +02:00
Adorian Doran
e55708f79f client/settings/appearance: fix restart application button style 2025-03-03 16:04:23 +02:00
Adorian Doran
c7e9963db1 client/setup dialog: add a margin after the password field 2025-03-03 16:00:03 +02:00
Jin
ad711ff00c chore: 🤖 clean up debug code 2025-03-03 11:29:37 +01:00
renovate[bot]
125eef234b chore(deps): update dependency prettier to v3.5.3 2025-03-03 02:26:21 +00:00
Jin
45a50f3aa1 port tab manager to ts 2025-03-03 01:04:42 +01:00
Jin
8e0b9d17a4 port split note container to ts 2025-03-02 21:52:48 +01:00
Elian Doran
b99ead6a84 feat(setings): add option section for settings 2025-03-02 22:23:47 +02:00
Elian Doran
e7d2be4663 feat(options/language): store list of languages 2025-03-02 21:58:40 +02:00
Panagiotis Papadopoulos
2efc1a0e2e chore(prettier): ignore public/app/doc_notes 2025-03-02 20:48:07 +01:00
Panagiotis Papadopoulos
2beaaa95bf chore(prettier): fix code style 2025-03-02 20:47:57 +01:00
Elian Doran
bc787213f4 feat(options/language): display list of languages 2025-03-02 21:47:53 +02:00
Elian Doran
73daec6644 feat(settings): create a language settings section 2025-03-02 21:24:31 +02:00
Elian Doran
43d8affcc8 feat(i18n): translate unknown content widget message 2025-03-02 21:17:04 +02:00
Elian Doran
67509bc92f fix(migration): no such table "tasks" 2025-03-02 20:43:52 +02:00
Elian Doran
1ca485e4b5 fix(migration): using async in transaction 2025-03-02 20:43:01 +02:00
Elian Doran
16ad054d2a refactor(migration): remove async import from migration scripts 2025-03-02 20:28:41 +02:00
Elian Doran
b4310b5275 fix(migration): ESM imports not working on Windows 2025-03-02 20:23:38 +02:00
Elian Doran
f04e747786 fix(migration): TypeScript migrations not run 2025-03-02 19:59:50 +02:00
Elian Doran
a80c3e32f1 fix(migration): JavaScript-based migrations not working 2025-03-02 19:39:06 +02:00
Elian Doran
01ff3d396d chore(test): add database testing migration 2025-03-02 17:11:07 +02:00
Elian Doran
49a22bce80 Merge pull request #1316 from TriliumNext/renovate/force-graph-1.x
fix(deps): update dependency force-graph to v1.49.2
2025-03-02 11:43:36 +02:00
renovate[bot]
436788cf96 fix(deps): update dependency force-graph to v1.49.2 2025-03-02 02:33:14 +00:00
Elian Doran
c8a7f893e1 Merge pull request #1312 from TriliumNext/renovate/node-22.x
chore(deps): update dependency @types/node to v22.13.8
2025-03-01 10:18:47 +02:00
Elian Doran
17884558ad fix(server): build errors after newer types 2025-03-01 10:16:24 +02:00
Elian Doran
8e4530293d Merge pull request #1314 from hasecilu/i18n/Spanish
chore(i18n): update Spanish translation
2025-03-01 10:07:11 +02:00
Elian Doran
072b5b2035 Merge pull request #1313 from TriliumNext/renovate/typescript-5.x
chore(deps): update dependency typescript to v5.8.2
2025-03-01 10:06:30 +02:00
renovate[bot]
455b2bf338 chore(deps): update dependency @types/node to v22.13.8 2025-03-01 08:05:52 +00:00
Elian Doran
9a5c08f117 Merge pull request #1304 from TriliumNext/chore_ts-port_read_only_code
chore(ts): start porting read_only_code
2025-03-01 10:05:11 +02:00
hasecilu
038e3a15cd chore(i18n): update Spanish translation 2025-02-28 22:44:48 -06:00
renovate[bot]
6c67c9a41f chore(deps): update dependency typescript to v5.8.2 2025-03-01 01:31:56 +00:00
Panagiotis Papadopoulos
d6b164413e chore(ts): port read_only_code 2025-02-28 23:19:42 +01:00
Elian Doran
259ce440c5 fix(build): type error due to test 2025-02-28 22:02:41 +02:00
Elian Doran
2a75819734 chore(docs): start writing entrypoint for editing docs 2025-02-28 22:02:29 +02:00
Elian Doran
4211e4e11c chore(deps): npm audit fix 2025-02-28 21:24:26 +02:00
Elian Doran
f76f679800 feat(calendar): allow relations in promoted attributes 2025-02-28 20:46:41 +02:00
Elian Doran
e7d06fceba test(calendar): labels as promoted attributes 2025-02-28 20:34:30 +02:00
Elian Doran
a8b119e4df test(calendar): relation as custom title with attribute relation 2025-02-28 20:13:37 +02:00
Elian Doran
f953f6514f test(calendar): relation as custom title with attribute label 2025-02-28 20:11:45 +02:00
Elian Doran
ca7cff45c9 test(calendar): relation as custom title 2025-02-28 19:55:02 +02:00
Elian Doran
6f2a0f9ee1 refactor(types): better type definitions 2025-02-28 19:44:32 +02:00
Elian Doran
5b9bfac1f8 test(calendar): custom label as title 2025-02-28 19:36:50 +02:00
Elian Doran
f674ba0d4a test(calendar): custom start/end date 2025-02-28 19:32:32 +02:00
Elian Doran
5731cb9b4d test(calendar): start date & end date 2025-02-28 19:23:45 +02:00
Elian Doran
d83b2a6a38 refactor(test): dedicated helper for froca 2025-02-28 19:18:37 +02:00
Elian Doran
ad18916973 refactor(test): dedicated folder for test support 2025-02-28 19:13:33 +02:00
Elian Doran
2531e5617f refactor(test): remove need for async import 2025-02-28 19:12:19 +02:00
Elian Doran
f646e0f724 refactor(test): global initialisation 2025-02-28 19:11:12 +02:00
Elian Doran
7a34a2f59c Merge branch 'develop' of ssh://github.com/TriliumNext/Notes into develop 2025-02-28 19:03:50 +02:00
Elian Doran
85882d843b chore(test): basic test harness for calendar view event testing 2025-02-28 19:03:08 +02:00
Elian Doran
f60667b618 Merge pull request #1306 from clsty/develop
Translation: Fix, improve and finish for zh-CN
2025-02-28 18:56:19 +02:00
clsty
c8c7680a10 Fix missing translation on zh-CN translation 2025-03-01 00:13:25 +08:00
Elian Doran
6df588da22 chore(client/ts): port backend_log 2025-02-28 17:59:38 +02:00
Elian Doran
423037b9d6 chore(client/ts): port search_options 2025-02-28 17:58:51 +02:00
Elian Doran
2c714afa21 chore(client/ts): port floating buttons 2025-02-28 17:55:47 +02:00
Elian Doran
83d25964c7 Merge pull request #1307 from TriliumNext/porting_js
porting js
2025-02-28 17:49:35 +02:00
Elian Doran
e58a61051b Merge pull request #1302 from TriliumNext/build_webpack-i18n-dayjs-splitjs
build: let webpack handle `dayjs`, `split.js` and `i18next`
2025-02-28 17:44:33 +02:00
clsty
77c0bfe93b Minor improves on zh-CN translation 2025-02-28 23:23:29 +08:00
clsty
9826256e29 Fix indent 2025-02-28 23:03:59 +08:00
Jin
a3d9b04d96 port history navigation, remove redundance 2025-02-28 15:45:26 +01:00
Jin
c67445f511 optimize month selector behavior 2025-02-28 15:09:28 +01:00
Jin
a99c86ea9f port calender to ts 2025-02-28 15:09:01 +01:00
clsty
23553692ac Update zh-CN translation. 2025-02-28 19:30:14 +08:00
Panagiotis Papadopoulos
1450e57a6a chore(deps): move "i18next-http-backend" to devDependencies
since it is not used in server side code and it is bundled by webpack, it is only needed during build stage -> devDependency
on server-side we use i18next and i18next-fs-backend -> so these need to stay in dependencies
2025-02-28 08:35:57 +01:00
Panagiotis Papadopoulos
d3283746fc fix(type_widgets/doc): import i18next
since we don't export the full i18n object (not sure why?),
I had to add an additional export "getCurrentLanguage"

-> needs to be a function, because otherwise it will be a static value (being set to undefined),
which is *not* what we want
2025-02-28 08:30:35 +01:00
Panagiotis Papadopoulos
f3148bf478 build: let webpack bundle i18next 2025-02-28 08:26:48 +01:00
Panagiotis Papadopoulos
b60f22c6b9 chore(deps): move "split.js" to devDependencies
since it is not used in server side code and it is bundled by webpack, it is only needed during build stage -> devDependency
2025-02-28 08:09:36 +01:00
Panagiotis Papadopoulos
559517ace1 build: let webpack bundle split.js 2025-02-27 23:00:44 +01:00
Panagiotis Papadopoulos
49a2eb0ccf build: let webpack bundle dayjs 2025-02-27 22:44:18 +01:00
Elian Doran
06a439e95d feat(options/apperance): hide layout orientation section 2025-02-27 19:31:36 +02:00
Elian Doran
a615b473a7 Merge pull request #1297 from TriliumNext/renovate/force-graph-1.x
fix(deps): update dependency force-graph to v1.49.1
2025-02-27 19:17:05 +02:00
Elian Doran
1a9c28f9bd Merge pull request #1298 from TriliumNext/renovate/electron-34.x
chore(deps): update dependency electron to v34.3.0
2025-02-27 19:16:29 +02:00
Elian Doran
93d5b20362 Merge pull request #1299 from TriliumNext/renovate/axios-1.x
fix(deps): update dependency axios to v1.8.1
2025-02-27 19:14:51 +02:00
Elian Doran
6501b95eac Merge pull request #1300 from TriliumNext/renovate/mind-elixir-4.x
fix(deps): update dependency mind-elixir to v4.4.1
2025-02-27 19:14:08 +02:00
renovate[bot]
b0fa70870c fix(deps): update dependency mind-elixir to v4.4.1 2025-02-27 02:27:48 +00:00
renovate[bot]
74fc5562b2 fix(deps): update dependency axios to v1.8.1 2025-02-27 02:27:39 +00:00
renovate[bot]
c033ad261c chore(deps): update dependency electron to v34.3.0 2025-02-27 02:27:30 +00:00
renovate[bot]
fe7f2e43be fix(deps): update dependency force-graph to v1.49.1 2025-02-27 02:27:17 +00:00
Elian Doran
5435b3c8fd feat(calendar): allow customisable start & end dates 2025-02-27 00:02:58 +02:00
Elian Doran
7d5b0f825c Merge pull request #1295 from TriliumNext/feat_add-link-to-swagger-ui
feat(options/etapi): improve etapi options page description
2025-02-26 23:42:38 +02:00
Elian Doran
fd66da95f3 fix(options/etapi): comments being visible to the user 2025-02-26 23:42:03 +02:00
Elian Doran
8e5762b125 chore(i18n/ro): translate new messages 2025-02-26 23:09:39 +02:00
Elian Doran
bee1df4fdf feat(options/etapi): open swagger UI in in-app-help 2025-02-26 23:06:35 +02:00
Elian Doran
4df76fafe1 Merge branch 'develop' into feat_add-link-to-swagger-ui 2025-02-26 22:46:31 +02:00
Elian Doran
3d36d6d121 Merge pull request #1276 from TriliumNext/renovate/apple-actions-import-codesign-certs-3.x
chore(deps): update apple-actions/import-codesign-certs action to v3
2025-02-26 22:46:15 +02:00
Elian Doran
995d963450 Merge pull request #1294 from TriliumNext/fix-macos-artifact-names
Fix MacOS artifact names
2025-02-26 22:45:02 +02:00
Elian Doran
5d61f9fb12 fix(tasks): alignment of checkbox 2025-02-26 22:43:38 +02:00
Elian Doran
09f7645925 feat(tasks): improve layout 2025-02-26 22:43:38 +02:00
Elian Doran
2ea85dc238 feat(tasks): trim task name 2025-02-26 22:43:38 +02:00
Elian Doran
d0c703515b feat(tasks): display due date without time 2025-02-26 22:43:38 +02:00
Elian Doran
d73c9308a9 chore(server/test): adjust includes/excludes 2025-02-26 22:43:38 +02:00
Elian Doran
89eab387ba chore(test): html coverage 2025-02-26 22:43:38 +02:00
Elian Doran
6f9fd76465 fix(share): double request of credentials 2025-02-26 22:43:38 +02:00
Elian Doran
7ea3cb71f3 chore(server/test): password protected share 2025-02-26 22:43:38 +02:00
Elian Doran
fa60295ab2 feat(note_list): improve file footer 2025-02-26 22:43:38 +02:00
Elian Doran
ab5df9e010 feat(note_list): improve video preview 2025-02-26 22:43:38 +02:00
Elian Doran
e330d91df2 feat(file): display videos in full width 2025-02-26 22:43:38 +02:00
Elian Doran
07c2342b7b feat(file): display video in full-width & full-height 2025-02-26 22:43:38 +02:00
Elian Doran
9cc3598095 chore(ci): separate client & server coverage 2025-02-26 22:43:38 +02:00
Panagiotis Papadopoulos
0f1b4614fb chore(options/etapi): add TODO notice to get rid of current workaround 2025-02-26 21:07:56 +01:00
Panagiotis Papadopoulos
f1f5839ea2 feat(options/etapi): link to the swagger UI that we ship
since we are shipping it, why not link to it as well :-)
2025-02-26 21:07:56 +01:00
Panagiotis Papadopoulos
ba84c694b2 i18n(options/etapi): improve translatability of description string
convert the split up string into a single interpolated string,
which improves translatability (and allows LTR translations)
2025-02-26 21:07:56 +01:00
perf3ct
5109f865c7 Fix MacOS artifact names 2025-02-26 20:06:18 +00:00
Elian Doran
47f84fe4b4 Merge pull request #1292 from TriliumNext/bugfix/macos-fix2
Pass the required `APPLE` secrets to the `build-electron` action
2025-02-26 21:01:29 +02:00
perf3ct
1056176624 we have to pass the secret values to the composite github actions 2025-02-26 18:51:14 +00:00
perf3ct
634b57ce5d let's see if we can contain the signing explosion to just build-electron 2025-02-26 18:33:57 +00:00
Elian Doran
6fcd229b52 chore(ci): run unit tests in dev workflow 2025-02-26 18:58:27 +02:00
Elian Doran
bd933dde28 chore(test): disable download of images 2025-02-26 18:58:08 +02:00
Elian Doran
ef736edf09 chore(test): separate client & server tests 2025-02-26 18:39:00 +02:00
Elian Doran
909a74e8ac chore(test): disable regularly scheduled backup 2025-02-26 18:00:53 +02:00
Elian Doran
180c02d647 chore(test): migrate database to new version 2025-02-26 18:00:45 +02:00
Elian Doran
d92959e23a chore(i18n): reach 100% for Romanian 2025-02-26 17:44:25 +02:00
Elian Doran
3c8a42ed73 Merge pull request #1289 from Potjoe-97/FR-tra
Translation : FR update & tweaks
2025-02-26 17:33:27 +02:00
Elian Doran
43b1b8a306 Merge pull request #1286 from TriliumNext/fix_views_appPath_#1285
fix: EJS crash after failed login
2025-02-26 17:32:53 +02:00
Elian Doran
bb8277d035 Merge pull request #1281 from TriliumNext/porting_js
port toc widget button
2025-02-26 17:28:36 +02:00
Potjoe-97
9d188f9ecc Merge pull request #8 from Potjoe-97/patch-2
Translation: Update FR translation.json
2025-02-26 15:52:15 +01:00
Potjoe-97
f04d749440 Update translation.json 2025-02-26 15:47:25 +01:00
Potjoe-97
631a4ed9b2 Update server.json 2025-02-26 15:13:20 +01:00
Panagiotis Papadopoulos
1a0c35f43d refactor(routes/login): use "shorter" syntax for passing to ejs render 2025-02-26 08:50:36 +01:00
Panagiotis Papadopoulos
0aa1d602a1 fix(routes/login): add missing "appPath" to ejs render 2025-02-26 08:45:35 +01:00
Jin
d28dfc2b64 port toc widget button 2025-02-26 00:53:15 +01:00
Elian Doran
8b2788fa8c chore(scripts): fix start-prod environment 2025-02-25 20:44:10 +02:00
Elian Doran
ea04457c06 chore(i18n): refine error message for DB migration 2025-02-25 20:18:23 +02:00
Elian Doran
c935cb65a0 fix(tasks): not being able to mark tasks as done 2025-02-25 20:10:57 +02:00
Elian Doran
e7601f65bb feat(tasks): highlight overdue tasks 2025-02-25 19:55:10 +02:00
Elian Doran
64647df043 feat(tasks): sort by due date 2025-02-25 19:48:26 +02:00
Elian Doran
5838ac3bca feat(tasks): display due date in calendar-relative format 2025-02-25 19:38:15 +02:00
Elian Doran
7bc9114976 feat(tasks): display due date 2025-02-25 19:19:09 +02:00
Elian Doran
637ba78100 feat(tasks): display due date in editable textbox 2025-02-25 18:40:20 +02:00
Elian Doran
fcd7b986aa feat(tasks): make due date editable 2025-02-25 18:36:46 +02:00
Elian Doran
84e8559401 feat(tasks): allow only one editable section at one time 2025-02-25 17:46:17 +02:00
Elian Doran
06831ddc76 feat(tasks): start implementing expandable edit container 2025-02-25 17:43:28 +02:00
Elian Doran
cd78955080 Merge pull request #1270 from TriliumNext/porting_js
port js to ts
2025-02-25 17:21:22 +02:00
Elian Doran
175852f6cb refactor(client): remove unnecessary return type 2025-02-25 17:20:13 +02:00
Elian Doran
4149ebdc69 Merge pull request #1277 from TriliumNext/build_fix-missing-types-webpack
build(webpack): fix missing type declarations
2025-02-25 17:19:29 +02:00
Elian Doran
6d52d7943b Merge pull request #1275 from TriliumNext/renovate/chardet-2.x
fix(deps): update dependency chardet to v2.1.0
2025-02-25 17:18:26 +02:00
Elian Doran
8e4aead110 Merge pull request #1274 from TriliumNext/renovate/vitest-monorepo
chore(deps): update vitest monorepo to v3.0.7
2025-02-25 17:17:51 +02:00
Elian Doran
d434b416f3 Merge pull request #1273 from TriliumNext/renovate/typedoc-0.x
chore(deps): update dependency typedoc to v0.27.9
2025-02-25 17:17:28 +02:00
Elian Doran
ac050bca3b Merge pull request #1272 from TriliumNext/renovate/sass-1.x
chore(deps): update dependency sass to v1.85.1
2025-02-25 17:17:05 +02:00
Panagiotis Papadopoulos
194640db66 build(webpack): fix missing type declarations 2025-02-25 08:58:37 +01:00
renovate[bot]
05975a02fb chore(deps): update apple-actions/import-codesign-certs action to v3 2025-02-25 02:37:14 +00:00
renovate[bot]
7345cddc0a fix(deps): update dependency chardet to v2.1.0 2025-02-25 02:37:10 +00:00
renovate[bot]
a01da98b37 chore(deps): update vitest monorepo to v3.0.7 2025-02-25 02:37:01 +00:00
renovate[bot]
c80ec03126 chore(deps): update dependency typedoc to v0.27.9 2025-02-25 02:36:48 +00:00
renovate[bot]
cd5df24e6a chore(deps): update dependency sass to v1.85.1 2025-02-25 02:36:38 +00:00
Jin
1be92baf4a remove edit_button.js 2025-02-25 02:11:53 +01:00
Jin
16b58a58a3 port js to ts 2025-02-25 02:02:20 +01:00
Elian Doran
34762236d1 fix(build): errors due to missing command 2025-02-24 22:50:16 +02:00
Elian Doran
4240af6c43 Merge pull request #1267 from perfectra1n/develop
Enable MacOS code signing and notarization in GitHub Actions
2025-02-24 22:37:09 +02:00
Elian Doran
d85c670d7b Merge pull request #1268 from TriliumNext/port/client_ts
Port note tree to TypeScript
2025-02-24 21:59:31 +02:00
Elian Doran
23d01ec351 fix(build): type definitions for context menu 2025-02-24 21:35:35 +02:00
Elian Doran
7874e88b4a fix(build): fancytree's JQuery UI interfering with bootstrap 2025-02-24 21:35:23 +02:00
Jon Fuller
9d6caa84cd Merge branch 'develop' into develop 2025-02-24 08:13:59 -08:00
perf3ct
36ce2a3342 add back prettier-ignore comment for pano 2025-02-24 16:12:53 +00:00
Elian Doran
65804f9c2a chore(deps): revert changges to package-lock 2025-02-24 17:46:44 +02:00
Elian Doran
28ed616fa6 feat(search): focus on search string by default 2025-02-24 13:51:02 +02:00
Elian Doran
675a5e96e6 chore(client/ts): port search_string 2025-02-24 13:50:08 +02:00
Elian Doran
8ab0084e10 chore(client/ts): port search_definition 2025-02-24 13:45:36 +02:00
Elian Doran
2ab22e7b0e fix(client): type errors due to command change 2025-02-24 12:39:40 +02:00
Elian Doran
147c340529 Merge remote-tracking branch 'origin/develop' into port/client_ts 2025-02-24 10:14:52 +02:00
Elian Doran
87e687147d Merge remote-tracking branch 'origin/develop' into port/client_ts 2025-02-24 10:10:34 +02:00
perf3ct
b88980ea49 Clean up some of the verbosity 2025-02-24 00:59:08 +00:00
perf3ct
fe93ee90c7 Update Entitlements for MacOS 2025-02-24 00:59:02 +00:00
perf3ct
e9d4356492 Now we'll try the name with a space in it? 2025-02-24 00:44:50 +00:00
perf3ct
226cf8dfd7 Set up Signing and Notarizing for MacOS 2025-02-23 23:36:30 +00:00
Elian Doran
b91b243432 fix(tasks): selection contains spaces 2025-02-23 22:00:50 +02:00
Elian Doran
0ba4c9b9c7 fix(tasks): content flash when updating list of tasks 2025-02-23 21:54:58 +02:00
Elian Doran
31fcf7ea60 feat(tasks): clear text box when entering a task 2025-02-23 21:39:05 +02:00
Elian Doran
24c02e013b fix(import/enex): "Missing or wrong content type for resource" (fixes #943) 2025-02-23 19:58:43 +02:00
Elian Doran
d319eede1f style(views/calendar): disable link underline 2025-02-23 19:23:00 +02:00
Elian Doran
143b91936c Merge pull request #1261 from rom1dep/calendar_enh_attributes
feat(view/calendar): let the user specify attributes to be promoted o…
2025-02-23 19:16:35 +02:00
Elian Doran
95e6919dcf chore(calendar/view): remove unnecessary comment 2025-02-23 19:15:33 +02:00
Elian Doran
07147bf857 fix(view/calendar): add basic support for promoted attributes 2025-02-23 19:14:09 +02:00
Elian Doran
249c42e781 fix(view/calendar): guard condition breaking recursion 2025-02-23 18:39:34 +02:00
Elian Doran
2578d480a8 Merge remote-tracking branch 'origin/develop' into calendar_enh_attributes 2025-02-23 18:38:11 +02:00
Elian Doran
937a314260 Merge pull request #1260 from TriliumNext/chore_port-to-ts_attach
chore(ts): port various attachment related files to TS
2025-02-23 18:33:41 +02:00
Elian Doran
560b7ebe35 refactor(client): use workaround for TS error 2025-02-23 18:32:53 +02:00
Elian Doran
4883debd8d Merge remote-tracking branch 'origin/develop' into chore_port-to-ts_attach 2025-02-23 18:28:29 +02:00
Elian Doran
637845c396 Merge pull request #1258 from TriliumNext/fix_zenmode-ui-fixes
fix/i18n: tiny zen mode UI fixes
2025-02-23 18:27:56 +02:00
Elian Doran
d16026f8e6 Merge pull request #1257 from TriliumNext/chore_deps-update
chore: package.json maintenance
2025-02-23 18:26:59 +02:00
Elian Doran
e5aed0a3fc Merge pull request #1167 from TriliumNext/chore_ts-port_sync_status
chore(ts): port sync_status.ts
2025-02-23 18:26:23 +02:00
Elian Doran
8a08664dd5 Merge pull request #1263 from TriliumNext/renovate/prettier-3.x
chore(deps): update dependency prettier to v3.5.2
2025-02-23 18:24:51 +02:00
Elian Doran
b9f30fc501 chore(build): update Electron version for nix 2025-02-23 18:22:56 +02:00
Adorian Doran
70af260f0f style(next): note map: tweak the color of the "fix nodes" button while toggled 2025-02-23 17:48:58 +02:00
Adorian Doran
474b44608b style(next): forms: remove the background for range inputs 2025-02-23 17:13:56 +02:00
Adorian Doran
12f7119427 style(next): forms: fix tool buttons wrapped inside button groups 2025-02-23 17:01:32 +02:00
Panagiotis Papadopoulos
223a1fb203 refactor: FAttachment/Attachment_details - make fields public and get rid of getters
as per
https://github.com/TriliumNext/Notes/pull/1260#discussion_r1966615186
2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
fb0487ca36 chore(ts): port widgets/attachment_detail to TS 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
add6f80aeb chore(ts/content_renderer): add FAttachment types as used in attachment_detail 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
5d4dc91cc3 chore(ts/Fattachment): add getContentLength, since contentLength is private 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
99e520cbbc chore(ts/Fattachment): add getUtcDateScheduledForErasureSince, since UtcDateScheduledForErasureSince is private 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
1e7dee51fc chore(ts/Fattachment): add getOwnerId, since ownerId is private 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
4ddc36f6b8 chore(ts): import AttachmentRow type in load_results 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
3f2ae81fe4 chore(ts): start port of widgets/attachment_detail 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
d99a44867c chore(ts): add temporary ts-ignore to widgets/buttons/attachments_actions 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
8f643c62e3 chore(ts): port of type_widgets/attachment_list 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
f6785f7980 chore(ts): add missing isDeleted and deleteId types to AttachmentRow 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
bf15192b25 chore(ts): start port of widgets/buttons/attachment_actions 2025-02-23 12:52:37 +01:00
Panagiotis Papadopoulos
70756fe795 chore(ts): start port of type_widgets/attachment_detail 2025-02-23 12:52:36 +01:00
Panagiotis Papadopoulos
31170744d1 chore(ts): allow link.createLink notePath type to accept undefined
it can also accept undefined -> it is even handled in that first if block.
change required for upcoming port of attachment_*.js files
2025-02-23 12:52:36 +01:00
Adorian Doran
1dfa4a8bc2 client: note map: improve the appearance 2025-02-23 06:17:57 +02:00
renovate[bot]
e9f5272d98 chore(deps): update dependency prettier to v3.5.2 2025-02-23 02:09:16 +00:00
Romain DEP.
07443042a1 feat(view/calendar): let the user specify attributes to be promoted onto the calendar view, and render them inside the event title 2025-02-22 23:34:14 +01:00
Panagiotis Papadopoulos
4523307ead i18n(close_zen_button): add a translatable title to the button
previously it only displayed the keyboard shortcut, without any extra info
2025-02-22 16:12:12 +01:00
Panagiotis Papadopoulos
755b20bbab fix(global_menu): add missing <kbd> to zen mode 2025-02-22 16:01:49 +01:00
Panagiotis Papadopoulos
49b52d3124 chore: run npm audit fix
1 vuln fixed, 6 still open, but there is no fix for these yet
https://github.com/advisories/GHSA-67mh-4wv8-2f99
2025-02-22 15:47:30 +01:00
Panagiotis Papadopoulos
da69ee3285 chore(types): move types to devDependencies 2025-02-22 15:44:35 +01:00
Panagiotis Papadopoulos
9fb95585f5 chore(ts): port sync_status.ts 2025-02-22 14:21:56 +01:00
Elian Doran
2380d0af85 Merge pull request #1254 from TriliumNext/ci_remove-extra-arm64-handling
ci: remove unneeded extra arm64 handling
2025-02-22 14:58:50 +02:00
Elian Doran
f6224d9ec4 Merge pull request #1168 from TriliumNext/chore_bootstrap-ts-ignore
build: bundle bootstrap with webpack
2025-02-22 14:57:47 +02:00
Elian Doran
58a8821c22 Merge pull request #1234 from TriliumNext/feature/task_list
Task List
2025-02-22 14:37:44 +02:00
Elian Doran
fc27c4fc7b feat(db): create task database in schema 2025-02-22 14:36:15 +02:00
Elian Doran
0b11f4d9c7 chore(server): bump sync version 2025-02-22 14:34:44 +02:00
Elian Doran
50d491b432 build(release): update master branch automatically 2025-02-22 14:25:31 +02:00
Panagiotis Papadopoulos
2492bf60df chore(ci): add zip to description 2025-02-22 13:15:45 +01:00
Panagiotis Papadopoulos
49550e8e69 chore(ci): remove now unneeded arm64 workaround
the change is now part of electron-forge 7.7.0 which we depend on since
fa05f15753
2025-02-22 13:15:45 +01:00
Panagiotis Papadopoulos
a0442ded58 chore: get rid of bootstrap related ts-ignore 2025-02-22 13:09:28 +01:00
Panagiotis Papadopoulos
cdb988ff64 webpack: revert accidental changing of devtool 2025-02-22 13:02:40 +01:00
Elian Doran
899ad6450a build(release): use different commit message 2025-02-22 14:02:13 +02:00
Elian Doran
8390807212 release 0.92.2-beta 2025-02-22 13:59:41 +02:00
Elian Doran
60da367570 Merge pull request #1253 from TriliumNext/ci_fix-missing-windows-zip
fix(ci): add missing windows zip build target
2025-02-22 13:56:01 +02:00
Panagiotis Papadopoulos
36b0970835 fix(ci): add missing windows zip build target 2025-02-22 12:41:24 +01:00
Elian Doran
3bea6af20e chore(release): 0.92.1-beta 2025-02-22 12:58:30 +02:00
Panagiotis Papadopoulos
e7d204dfd2 chore(copy-dist): remove now unneeded manual copying of bootstrap dir
webpack is taking care of that for us
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
1ded78975e deps: remove now unused style-loader 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
55bdd4fffc views: add TODO comment 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
0b4f5e998e webpack: add filename option to miniCssExtractPlugin
commented out for now, because it currently does not make sense yet.
This will be working, when I change webpack output to the "build" folder
instead of the current (messy) way, where it outputs into src/public/app-dist
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
dde24785b8 entrypoint: add missing login entry point and port to TS 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
f6d9b42911 entrypoint: add missing, currently required set_password entry point
TODO: I think this can actually be part of the setup entrypoint/view at some point
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
f78a6ed14b views: import webpack created entrypoint css
→ this is currently only consisting of bootstrap, but should in future be more useful
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
837697c503 bootstrap: import bootstrap css in entry points 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
1b309675c8 fix(webpackMiddleware): add (now) missing plugins declaration from productionConfig
required since we used `mini-css-extract-plugin` now
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
ac53079a39 webpack: replace style-loader with mini-css-extract-plugin
will allow to have css files instead of style blocks in the html file
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
19e19ca052 assets: remove bootstrap reference 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
5361161433 views: remove bootstrap references 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
762c7dab83 build: add bootstrap webpack related dependencies
https://getbootstrap.com/docs/5.3/getting-started/webpack/
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
ba3599911f chore(bootstrap): import Bootstrap modules 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
fc6b9e00bc webpack: add bootstrap webpack config
https://getbootstrap.com/docs/5.3/getting-started/webpack/
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
17860e6715 fix(note_type_choosers): fix glob.activeDialog assignment
the same thing is done in `confirm.ts` as well, where glob.activeDialog is set to `this.$widget`
2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
ad8adeda0a fix(global_menu): fix non-existing option (according to TS) 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
bc28f323b8 chore(ts): get rid of bootstrap related ts-ignores 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
4f171fd966 chore(ts): get rid of bootstrap related ts-ignores 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
65ad4c3a2b chore(ts): get rid of bootstrap related ts-ignores 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
cc1a01955a chore(ts): get rid of bootstrap related ts-ignores 2025-02-22 11:56:56 +01:00
Panagiotis Papadopoulos
cf11be7f35 chore(ts): get rid of bootstrap related ts-ignores 2025-02-22 11:56:56 +01:00
Elian Doran
3c83112240 Merge pull request #1250 from TriliumNext/feat_typescript-codenote
feat(options_init): add typescript as default set codeNotesMimeTypes value
2025-02-22 12:55:40 +02:00
Elian Doran
4e876ed24d fix(build): build errors after changing meta data type 2025-02-22 12:52:25 +02:00
Elian Doran
94ce01bbc2 chore(docs): update documentation 2025-02-22 12:49:09 +02:00
Elian Doran
411e3dfa0e server(export): export Markdown using ATX heading syntax (closes #1251) 2025-02-22 12:45:21 +02:00
Elian Doran
a1bfc6aae7 feat(hidden_subtree): update help note icons 2025-02-22 12:31:39 +02:00
Elian Doran
97bc103e76 feat(in_app_help): support folder icons 2025-02-22 12:30:47 +02:00
Panagiotis Papadopoulos
9da1f55409 feat(options_init): add typescript as default set codeNotesMimeTypes value
since it is a very widespread/popular language, it makes sense to have it on by default.

closes #1219
2025-02-22 11:19:32 +01:00
Elian Doran
017fba518d feat(in_app_help): remove help notes that are no longer present in structure 2025-02-22 12:09:11 +02:00
Elian Doran
63584c153c feat(views/calendar): filter notes by ancestor 2025-02-22 11:31:36 +02:00
Adorian Doran
a4a2e55415 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-22 11:13:24 +02:00
Adorian Doran
4a1691ac31 style(next): promoted attributes widget: update narrow view breakpoint 2025-02-22 11:13:20 +02:00
Elian Doran
a3fbf15902 Merge remote-tracking branch 'origin/develop' into feature/task_list 2025-02-22 11:03:18 +02:00
Elian Doran
5a8d5c59f5 feat(views/calendar): support workspaceCalendarRoot 2025-02-22 10:59:03 +02:00
Elian Doran
a9cebe312f refactor(views/calendar): use specific API for date notes for performance 2025-02-22 10:59:03 +02:00
Elian Doran
43f79ca813 feat(views/calendar): click to go to day note 2025-02-22 10:59:03 +02:00
Elian Doran
5c1db3cab2 feat(views/calendar): disable interaction in calendar root mode 2025-02-22 10:59:03 +02:00
Elian Doran
bc4d820cb0 feat(views/calendar): display child notes of days 2025-02-22 10:59:03 +02:00
Elian Doran
f4e6edd19e feat(views/calendar): basic recursion for calendar root 2025-02-22 10:59:03 +02:00
Elian Doran
530340f753 fix(client): sporadious crash with classic toolbar not being available 2025-02-22 10:59:03 +02:00
Adorian Doran
fcc1068b06 style(next): promoted attributes widget: improve appearance 2025-02-22 10:55:01 +02:00
Adorian Doran
6d19e315f4 style(next): promoted attributes widget: improve appearance on narrow width 2025-02-22 10:19:26 +02:00
Adorian Doran
7269c1b0aa style(next): promoted attributes widget: improve appearance 2025-02-22 10:10:58 +02:00
Adorian Doran
8e69cf79a6 client: promoted attributes widget: add placeholder for blank input fields 2025-02-22 10:05:14 +02:00
Elian Doran
46f543ad54 Merge pull request #1207 from maphew/bare2share2
Bare2share - Redirect bare domain to defined #shareRoot
2025-02-22 09:25:30 +02:00
Elian Doran
38dbf6efcd Merge pull request #1220 from TriliumNext/feat_friendly-numbers-note-revision
feat: friendly numbers note revision
2025-02-22 09:24:37 +02:00
Elian Doran
8e68ddafd5 Merge pull request #1239 from TriliumNext/i18n_use-empty-string-instead-of-english
i18n: use empty string instead of English string
2025-02-22 09:24:14 +02:00
Elian Doran
0c43b387ce Merge pull request #1228 from TriliumNext/feat_friendly-numbers-protected_session_timeout
feat: friendly numbers protected session timeout
2025-02-22 09:23:23 +02:00
Elian Doran
8aa560eb82 Merge pull request #1243 from TriliumNext/renovate/typedoc-0.x
chore(deps): update dependency typedoc to v0.27.8
2025-02-22 09:22:23 +02:00
Elian Doran
3a2b8e9791 Merge pull request #1242 from TriliumNext/renovate/node-22.x
chore(deps): update dependency @types/node to v22.13.5
2025-02-22 09:22:09 +02:00
Elian Doran
468b3b6027 Merge pull request #1244 from TriliumNext/renovate/swagger-ui-express-4.x
fix(deps): update dependency @types/swagger-ui-express to v4.1.8
2025-02-22 09:21:48 +02:00
Elian Doran
f872073f65 Merge pull request #1245 from TriliumNext/renovate/ws-8.x
fix(deps): update dependency ws to v8.18.1
2025-02-22 09:21:23 +02:00
Elian Doran
ef4fc0a180 feat(html_sanitizer): enforce strict style rules (closes #931) 2025-02-22 09:18:47 +02:00
Adorian Doran
1d47df5f28 style(next): forms/input groups: improve CSS 2025-02-22 02:37:13 +02:00
Adorian Doran
77264b5385 style(next): forms/input groups: fix icons being skewed in certain conditions 2025-02-22 02:35:24 +02:00
Adorian Doran
41e925dc94 style(next): forms: add support for date and time input fields 2025-02-22 02:31:20 +02:00
Adorian Doran
789178061b style(next): promoted attributes widget: improve CSS, add right margin 2025-02-22 02:21:19 +02:00
renovate[bot]
8011969b9d fix(deps): update dependency ws to v8.18.1 2025-02-22 00:06:30 +00:00
renovate[bot]
9ab2fe85bd fix(deps): update dependency @types/swagger-ui-express to v4.1.8 2025-02-22 00:06:21 +00:00
renovate[bot]
6c818427fc chore(deps): update dependency typedoc to v0.27.8 2025-02-22 00:06:14 +00:00
renovate[bot]
7dab171a0c chore(deps): update dependency @types/node to v22.13.5 2025-02-22 00:06:04 +00:00
Adorian Doran
c680c3476b Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-22 02:05:22 +02:00
Adorian Doran
bf0b6ce554 style(next): promoted attributes widget: improve appearance 2025-02-22 02:05:19 +02:00
Elian Doran
bedc61c3d0 feat(import/zip): support UTF-16 LE with BOM (closes #1241) 2025-02-22 01:37:22 +02:00
Elian Doran
c925ae5f15 feat(import/single): support UTF-16 LE with BOM for markdown notes 2025-02-22 01:37:22 +02:00
Elian Doran
77ee7f96c1 feat(import/single): support UTF-16 LE with BOM for text notes 2025-02-22 01:37:22 +02:00
Elian Doran
cadd78524c feat(import/single): support UTF-16 LE with BOM for code notes 2025-02-22 01:37:22 +02:00
Elian Doran
fd4f35e879 feat(import/single): support UTF-16 LE with BOM for HTML 2025-02-22 01:37:22 +02:00
Adorian Doran
39f00bd568 style(next): promoted attributes widget: tweak input groups 2025-02-22 01:35:10 +02:00
Adorian Doran
ee2d4c6830 style(next): promoted attributes widget: tweak checkboxes 2025-02-22 01:30:55 +02:00
Adorian Doran
e93d47f664 style(next): promoted attributes widget: tweak buttons 2025-02-22 00:53:24 +02:00
Adorian Doran
0c88c4c3ee style(next): partially restyle the promoted attributes widget 2025-02-21 21:31:26 +02:00
Elian Doran
81bdd57398 feat(views/calendar): display event icon 2025-02-21 18:40:54 +02:00
Elian Doran
fe5182ebc6 feat(views/calendar): add option to show week numbers 2025-02-21 17:56:34 +02:00
Elian Doran
42d46bdb72 feat(views/calendar): add option to hide weekends 2025-02-21 17:56:34 +02:00
Elian Doran
710cf68c06 feat(views/calendar): make calendar full height 2025-02-21 17:56:34 +02:00
Elian Doran
300bb561bb Merge pull request #1240 from rom1dep/calendar_enh_color
feat(view/calendar): support coloring
2025-02-21 17:56:24 +02:00
Panagiotis Papadopoulos
96961898ca i18n: use empty string instead of English string
it will fallback to the English string by default
2025-02-21 08:04:43 +01:00
Panagiotis Papadopoulos
1520913686 i18n: use empty string instead of English string
it will fallback to the English string by default
2025-02-21 07:57:07 +01:00
Elian Doran
0e5b8af3a4 Merge remote-tracking branch 'origin/develop' into feature/task_list 2025-02-21 08:53:51 +02:00
Panagiotis Papadopoulos
6fae7a98f5 i18n: use empty string instead of English string
it will fallback to the English string by default
2025-02-21 07:41:50 +01:00
Elian Doran
57dc168c26 Merge pull request #1223 from TriliumNext/feat_timeSelector-min-input
feat: time selector add support for handling min required input
2025-02-20 22:49:14 +02:00
Elian Doran
946d9aee40 feat(settings/share): add subtitles 2025-02-20 22:34:51 +02:00
Elian Doran
16b16927ef feat(settings/share): add title to section 2025-02-20 22:08:04 +02:00
Elian Doran
c2e4def523 Merge branch 'develop' into feat_friendly-numbers-note-revision 2025-02-20 21:45:49 +02:00
Elian Doran
1e11625f14 Merge branch 'develop' into feat_friendly-numbers-protected_session_timeout 2025-02-20 21:45:30 +02:00
Elian Doran
5495677fc2 Merge branch 'develop' into feat_timeSelector-min-input 2025-02-20 21:45:24 +02:00
Elian Doran
2cefdf8b9f Merge pull request #1229 from McSido/feature/colorful-marker-icons
Enhance geomap marker icons with color
2025-02-20 21:43:42 +02:00
Elian Doran
57b3035559 feat(geomap): refresh map if color attribute is changed 2025-02-20 21:39:35 +02:00
Elian Doran
4f84ad8b81 Merge pull request #1230 from TriliumNext/renovate/tsx-4.x
chore(deps): update dependency tsx to v4.19.3
2025-02-20 21:31:28 +02:00
Elian Doran
1626767f30 Merge pull request #1231 from TriliumNext/renovate/vitest-monorepo
chore(deps): update vitest monorepo to v3.0.6
2025-02-20 21:30:57 +02:00
Elian Doran
91003af092 Merge pull request #1232 from TriliumNext/renovate/electron-forge-monorepo
chore(deps): update electron-forge monorepo to v7.7.0
2025-02-20 21:30:11 +02:00
Elian Doran
860de346a7 feat(import/single): treat mdx as markdown 2025-02-20 20:38:58 +02:00
Elian Doran
324a3d0d8b feat(import): trim .mdx extension from import 2025-02-20 20:29:00 +02:00
Elian Doran
f9e4ae7210 feat(import/zip): treat mdx as markdown (closes #1236) 2025-02-20 20:25:42 +02:00
matt wilkie
bdd6395a76 works! verify shareRoot is set and note is shared 2025-02-20 09:08:24 -07:00
Elian Doran
1c118f2aa9 feat(startup): display migration errors using system modal 2025-02-20 18:06:19 +02:00
Elian Doran
4010cb2789 Merge branch 'develop' into renovate/electron-forge-monorepo 2025-02-20 17:35:40 +02:00
Elian Doran
f83beafd76 Merge branch 'develop' into renovate/vitest-monorepo 2025-02-20 17:35:38 +02:00
Elian Doran
366264f3a9 Merge branch 'develop' into renovate/tsx-4.x 2025-02-20 17:35:35 +02:00
Elian Doran
ba91ed1855 Merge branch 'develop' into feature/colorful-marker-icons 2025-02-20 17:34:54 +02:00
Elian Doran
ef487f46d1 Merge branch 'develop' into feature/task_list 2025-02-20 17:34:36 +02:00
matt wilkie
2734e230ab WIP: 1st step at verifying shareRoot is set 2025-02-20 08:12:51 -07:00
Elian Doran
ca1d5207d8 fix(build): try using ARM runner for building docker 2025-02-20 17:10:16 +02:00
Elian Doran
f6b6b2e740 feat(test): ensure backend translations are valid JSON 2025-02-20 12:42:42 +02:00
Elian Doran
c255af67c9 fix(i18n): Chinese translations missing due to invalid JSON 2025-02-20 12:40:11 +02:00
Elian Doran
34b4e6d069 feat(test): ensure frontend translations are valid JSON 2025-02-20 12:39:56 +02:00
Elian Doran
4e01534d76 refactor(i18n): move list of locales out of options 2025-02-20 12:27:33 +02:00
Elian Doran
a433c9c189 feat(tasks): add SQL migration 2025-02-20 12:07:10 +02:00
renovate[bot]
fa05f15753 chore(deps): update electron-forge monorepo to v7.7.0 2025-02-20 02:57:15 +00:00
renovate[bot]
68c7df797d chore(deps): update vitest monorepo to v3.0.6 2025-02-20 02:57:00 +00:00
renovate[bot]
587a051430 chore(deps): update dependency tsx to v4.19.3 2025-02-20 02:56:46 +00:00
McSido
04a6175630 feat(geomap): enhance icon building to include color class 2025-02-19 22:52:38 +01:00
Panagiotis Papadopoulos
bf6c5dfb20 i18n: adjust protected_session_timeout_label
we are not limited to seconds now anymore (at least in the UI :-))
2025-02-19 22:45:07 +01:00
Panagiotis Papadopoulos
19816493d6 chore: rename ProtectedSessionTimeoutOption to plural
matches the remaining Options widgets
2025-02-19 22:37:08 +01:00
Panagiotis Papadopoulos
cecde349b7 feat: add ProtectedSessionTimeoutOption to content_widget 2025-02-19 22:35:02 +01:00
Panagiotis Papadopoulos
1a80a379dc refactor(password): move password.ts to password subfolder 2025-02-19 22:32:48 +01:00
Panagiotis Papadopoulos
739eaf9fc0 refactor(password): remove protected_session_timeout TPL element
-> now part of protected_session_timeout widget
2025-02-19 22:27:35 +01:00
Panagiotis Papadopoulos
7f173b287a feat(protected_session_timeout): add minimumSeconds 2025-02-19 22:21:49 +01:00
Elian Doran
62c96fc95e feat(tasks): implement basic refresh support 2025-02-19 22:34:52 +02:00
Elian Doran
c0d3e8d834 feat(tasks): filter by parent note 2025-02-19 22:13:13 +02:00
Elian Doran
bb822126cd feat(tasks): store parent note ID 2025-02-19 21:52:33 +02:00
Elian Doran
034b93c99c feat(tasks): support entities reloaded properly 2025-02-19 21:30:53 +02:00
Elian Doran
f743f634b4 feat(tasks): hide completed tasks for now 2025-02-19 20:33:20 +02:00
Elian Doran
9ed075b675 fix(tasks): task list not clearing properly 2025-02-19 20:02:43 +02:00
Elian Doran
7f0df441b5 fix(tasks): initial state for checkbox 2025-02-19 19:45:23 +02:00
Elian Doran
2de46eb5d2 fix(build): task row should be optional 2025-02-19 19:37:07 +02:00
Elian Doran
2a3546edd5 feat(client/tasks): display completed tasks 2025-02-19 19:27:04 +02:00
Elian Doran
7c0b43db85 feat(tasks): mark tasks as completed 2025-02-19 19:22:38 +02:00
Elian Doran
d4ef15212f style(tasks): improve individual items design 2025-02-19 18:40:26 +02:00
Elian Doran
ad492619f5 style(tasks): floating header 2025-02-19 18:30:39 +02:00
Elian Doran
35af12b6e7 fix(vscode): F5 to start server 2025-02-19 18:18:28 +02:00
Elian Doran
0baa804544 fix(server/tasks): becca not updating on task creation 2025-02-19 18:18:20 +02:00
Elian Doran
575ef5e10e fix(build): missing note type in help button 2025-02-19 18:14:49 +02:00
Matt Wilkie
5a6c3ae426 use the standard classes
per @pano9000 advice, https://github.com/TriliumNext/Notes/pull/1207#issuecomment-2667896424
2025-02-19 08:33:03 -07:00
Elian Doran
6b5d905ebe fix(client/file): flicker when too big alert is not needed 2025-02-19 13:43:50 +02:00
Elian Doran
61f2e35717 feat(client/file): trim big files in order to improve performance 2025-02-19 13:41:05 +02:00
Elian Doran
4a34d5b2df Merge pull request #1227 from greg1904/feat/german_translation
feat/german translation - adding missing translations from base english and adding adjustments of inconsistent german translations
2025-02-19 09:39:37 +02:00
greg1904
549917c1f1 small consistency adjustment 2025-02-18 23:56:15 +01:00
greg1904
4ed3a28e29 german adjustments 2025-02-18 23:49:27 +01:00
greg1904
c261bf7f7a Kind --> Unternotiz and some other additions 2025-02-18 23:30:14 +01:00
greg1904
62c9e865f5 added some fields in translation.json + switched "Hinweis" to "Notiz" 2025-02-18 23:12:57 +01:00
Panagiotis Papadopoulos
bd75a26803 feat: use TimeSelector for protected_session_timeout
to be used in the Password options
2025-02-18 22:37:20 +01:00
Panagiotis Papadopoulos
9a1d26e129 feat: add protectedSessionTimeoutScale option
to be used in the protected_session_timeout widget, when it is ported to use TimeSelector
2025-02-18 22:37:20 +01:00
Panagiotis Papadopoulos
bf41c54bd0 feat: set TimeSelector minimumSeconds for revision_snapshot_interval and remove TODO 2025-02-18 22:32:43 +01:00
Panagiotis Papadopoulos
28148b32d2 i18n: adjust labels for update revision_snapshot_interval options
we don't do seconds only anymore, so strings needed adjusting
2025-02-18 22:29:56 +01:00
Panagiotis Papadopoulos
eb08a976dd feat: use TimeSelector for revision_snapshot_interval
added one TODO that needs to be handled in TimeSelector: minimum allowed value (!in seconds!)
2025-02-18 22:29:56 +01:00
Panagiotis Papadopoulos
eeb99cf37c feat: add revisionSnapshotTimeIntervalTimeScale option
to be used in the revision_snapshot_interval widget, when it is ported to use TimeSelector
2025-02-18 22:29:56 +01:00
Panagiotis Papadopoulos
a0c2715980 i18n(time_selector): add i18n for minimum_input 2025-02-18 22:26:32 +01:00
greg1904
e35ff07b9b Launchbar --> Startleiste 2025-02-18 22:25:05 +01:00
Panagiotis Papadopoulos
ce1f418aa7 feat(time_selector): make use of optionsService 2025-02-18 22:18:58 +01:00
greg1904
fbc4206908 adding new fields for launchbar to german translation 2025-02-18 22:18:55 +01:00
Panagiotis Papadopoulos
bb4c3ae6ff feat(time_selector): add minimumSeconds handling 2025-02-18 22:18:11 +01:00
Panagiotis Papadopoulos
0332ade13c refactor(time_selector): simplify setting of includedTimeScales 2025-02-18 22:16:13 +01:00
Panagiotis Papadopoulos
2d968b8e9c refactor(time_selector): mark methods as private 2025-02-18 22:15:36 +01:00
Panagiotis Papadopoulos
fd2c65dcc0 feat(time_selector): add minimumSeconds class property 2025-02-18 22:14:56 +01:00
Elian Doran
0b8e3b976f fix(client/tasks): error due to froca update 2025-02-18 21:16:32 +02:00
Elian Doran
373e0b45f2 fix(server/tasks): missing utcDateModified causing errors on create 2025-02-18 21:07:06 +02:00
Elian Doran
c00505cd7b feat(client/tasks): create flow for creating a task 2025-02-18 21:06:51 +02:00
Elian Doran
fc1ee7c6f0 feat(client/tasks): add a text box for adding a new task 2025-02-18 20:01:04 +02:00
Elian Doran
7cba5a7c7d feat(client/tasks): display tasks 2025-02-18 19:58:00 +02:00
Elian Doran
1024733252 feat(client/tasks): create task list note type 2025-02-18 19:42:27 +02:00
Elian Doran
17f9fa7e89 feat(tasks): add POST API 2025-02-18 19:30:02 +02:00
Elian Doran
98dff61305 feat(tasks): add GET API 2025-02-18 19:06:02 +02:00
Elian Doran
c0e42e23a6 feat(tasks): create backend model for task 2025-02-18 18:42:26 +02:00
Matt Wilkie
aab35955bf remove duplicated sync_2 2025-02-17 16:45:47 -07:00
Romain DEP.
bcb40b531f feat(view/calendar): support coloring 2025-02-17 22:20:20 +01:00
Matt Wilkie
32bb43f9c1 fix indent 2025-02-17 13:55:55 -07:00
Matt Wilkie
86ab2d4008 Merge remote-tracking branch 'origin/develop' into bare2share2
# Conflicts:
#	src/public/translations/en/translation.json
2025-02-17 13:54:40 -07:00
Matt Wilkie
657638ee54 responding to code review (thanks pano!) 2025-02-17 13:46:03 -07:00
Elian Doran
50d37bbcb1 chore(client/ts): port note_type 2025-02-17 22:28:54 +02:00
Elian Doran
6706332be3 Merge pull request #1204 from TriliumNext/feat_timeScaleSelectWidget
feat: add time selector option widget
2025-02-17 22:23:29 +02:00
Matt Wilkie
2ec2d784ec results of npx prettier 2025-02-17 13:19:55 -07:00
Elian Doran
16caae191e fix(geomap): stuck viewport and zoom when switching between two geomaps 2025-02-17 21:59:02 +02:00
Elian Doran
c7d75b759c feat(webview): remove disclaimer 2025-02-17 21:50:59 +02:00
Elian Doran
b837c57d06 chore(lock): update 2025-02-17 21:49:34 +02:00
Elian Doran
ef3a75d58e feat(webview): set up some sandboxing for <iframe> 2025-02-17 21:49:24 +02:00
Elian Doran
59b474df35 feat(webview): render in browser using iframe 2025-02-17 21:26:00 +02:00
Elian Doran
fd47412d51 chore(client/ts): port web_view 2025-02-17 21:22:58 +02:00
Elian Doran
237f2ead73 fix(ci): server platform name missing due to invalid input 2025-02-17 21:16:53 +02:00
Elian Doran
558bee72e9 fix(ci): add missing zip for Windows on nightly 2025-02-17 21:15:12 +02:00
Elian Doran
ed082f34d5 fix(ci): add missing zip for Windows 2025-02-17 21:01:06 +02:00
Elian Doran
fabafeac86 fix(ci): missing os name in server release artifact 2025-02-17 19:53:25 +02:00
Elian Doran
4dd531e036 chore(release): 0.92.0-beta 2025-02-17 19:29:59 +02:00
Elian Doran
7bcfb1df96 chore(docs): minor updates 2025-02-17 19:28:54 +02:00
Elian Doran
e39bee23aa fix(electron): background effects on fixed light/dark mode (closes #1209) 2025-02-17 18:07:36 +02:00
Elian Doran
5550885206 fix(build): run prepare-dist for electron-forge:make 2025-02-17 17:42:15 +02:00
Panagiotis Papadopoulos
d26d668741 feat(time_selector): avoid "template concatenation" 2025-02-17 09:00:44 +01:00
Panagiotis Papadopoulos
fc8f805b28 i18n(time_selector): adjust attachment erasure message
as we now are allowing entering the time in other formats (minutes, hours, days) – it doesn't make sense for the label to say "after X seconds".
2025-02-17 06:52:29 +01:00
matt wilkie
ed8b8e50a4 feature complete; tested and working on local linux machine 2025-02-16 22:47:50 -07:00
matt wilkie
bc66e98533 okay, we can start npm server now, but new db redirects to share 2025-02-16 22:17:59 -07:00
matt wilkie
7af4e52766 brought over changes from 879035d
The last known good state before I got sidetracked into docker changes
2025-02-16 21:29:38 -07:00
Elian Doran
152f3193d1 Merge pull request #1183 from TriliumNext/feature/calendar_view
Calendar view
2025-02-16 20:16:02 +02:00
Elian Doran
725a9fc333 feat(view/calendar): add help 2025-02-16 19:57:44 +02:00
Panagiotis Papadopoulos
ccbed7bbc3 feat(time_selector): use showError since this is an error 2025-02-16 18:30:56 +01:00
Panagiotis Papadopoulos
10ba467202 chore(prettier): run prettier on time_selector related files 2025-02-16 18:30:56 +01:00
Panagiotis Papadopoulos
793b0c9fe8 feat(time_selector): add possibility to omit time scales 2025-02-16 18:30:56 +01:00
Panagiotis Papadopoulos
35a3d326f7 i18n(time_selector): translate invalid_input message 2025-02-16 18:30:56 +01:00
Panagiotis Papadopoulos
f672054441 feat(time_selector): use time_selector in attachment_erasure_timeout 2025-02-16 18:30:56 +01:00
Panagiotis Papadopoulos
e0e530b219 feat(time_selector): use time_selector in note_erasure_timeout 2025-02-16 18:30:56 +01:00
Panagiotis Papadopoulos
c0714a92d5 feat(time_selector): add time_selector options widget 2025-02-16 18:30:56 +01:00
Elian Doran
114a70b442 feat(view/calendar): remove redundant margin when in zen mode 2025-02-16 19:20:59 +02:00
Elian Doran
169b2269b1 feat(view/calendar): improve display when creating empty note 2025-02-16 19:17:15 +02:00
Elian Doran
e73ea36161 feat(in_app_help): contextual help for book types 2025-02-16 18:09:01 +02:00
Elian Doran
c17d10114f feat(mobile): enable prompt dialog for inserting notes 2025-02-16 17:52:04 +02:00
Elian Doran
5677be2dd5 Merge remote-tracking branch 'origin/develop' into feature/calendar_view 2025-02-16 17:43:04 +02:00
Adorian Doran
fbacb5bb71 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-16 15:48:42 +02:00
Adorian Doran
630eb5ac8d style(next): restyle the alert bar 2025-02-16 15:47:44 +02:00
Elian Doran
a532ae6426 Merge pull request #1196 from TriliumNext/feature/zen_mode
Zen Mode
2025-02-16 15:39:54 +02:00
Elian Doran
dc0ac4daa2 fix(zen): buttons on darwin 2025-02-16 15:38:31 +02:00
Elian Doran
753da46935 Merge remote-tracking branch 'origin/develop' into feature/zen_mode 2025-02-16 15:24:28 +02:00
Elian Doran
569ed0868d Merge pull request #1195 from dousha/bugfix-unsharing-hoisted
Allow removing weak branches even if it's hoisted
2025-02-16 15:05:17 +02:00
Elian Doran
324233be50 Merge pull request #1201 from TriliumNext/chore_fix-copy-dist-log
chore(copy-dist): "unpack" log messages before printing
2025-02-16 15:00:41 +02:00
Elian Doran
135f3d913a Merge pull request #1191 from TriliumNext/chore_npm-scripts-namescape
chore: npm scripts namespacing
2025-02-16 14:58:29 +02:00
Elian Doran
ee5cc18ef2 fix(view/calendar): end date offset on display 2025-02-16 13:34:39 +02:00
Elian Doran
6d3325766d feat(view/calendar): refresh calendar when entities change 2025-02-16 13:22:44 +02:00
Elian Doran
eff93d8e27 Merge remote-tracking branch 'origin/develop' into feature/calendar_view 2025-02-16 11:47:54 +02:00
Elian Doran
952ec516ee feat(test): add test for code block mpapings 2025-02-16 11:43:20 +02:00
Elian Doran
a8f9403990 feat(code_block): map a few more themes 2025-02-16 11:43:12 +02:00
Elian Doran
aa5c69d97a feat(view/calendar): add flow to create a note 2025-02-15 23:48:06 +02:00
Elian Doran
b524abb883 feat(view/calendar): use locale translation for buttons 2025-02-15 21:47:44 +02:00
Elian Doran
f8c3587717 feat(view/calendar): add locale support 2025-02-15 21:45:53 +02:00
Elian Doran
9d9b45cafb feat(calendar_view): set first day of the week based on option 2025-02-15 20:18:27 +02:00
Elian Doran
0bcabacd3a feat(calendar_view): translate buttons 2025-02-15 20:15:54 +02:00
Elian Doran
03282e12b7 style(calendar_view): improve layout slightly 2025-02-15 14:15:43 +02:00
Panagiotis Papadopoulos
dd4f8a8c27 chore(copy-dist): "unpack" log messages before printing
previously it was printin all messages as part of an array, i.e.
["message"]
After spreading the array, we get the desired out
"message"
2025-02-15 13:08:13 +01:00
Elian Doran
660a393ca6 fix(calendar_view): double scrollbar 2025-02-15 14:07:39 +02:00
Elian Doran
22c8cf3bee feat(calendar_view): allow resizing & fix date offset 2025-02-15 12:47:46 +02:00
Elian Doran
e71f0cb091 feat(calendar_view): draggable events 2025-02-15 12:05:35 +02:00
Elian Doran
23cbc82708 feat(calendar_view): clickable events 2025-02-15 11:46:17 +02:00
Elian Doran
1b4281cf77 feat(calendar_view): allow rendering multiple events from multiple relation 2025-02-15 11:42:06 +02:00
Elian Doran
a8509d8b1d feat(calendar_view): allow rendering by custom relation 2025-02-15 11:41:08 +02:00
Elian Doran
10b2d19710 feat(calendar_view): allow rendering by custom attribute 2025-02-15 11:13:44 +02:00
Elian Doran
8111352300 feat(calendar_view): render notes by their end date 2025-02-15 10:58:12 +02:00
Elian Doran
64b446315d feat(calendar_view): render notes by their start date 2025-02-15 10:43:46 +02:00
Elian Doran
4dc2803cc6 style(calendar_view): apply a padding 2025-02-15 10:35:14 +02:00
Elian Doran
557e4cdfea style(calendar_view): disable link color 2025-02-15 10:24:40 +02:00
Elian Doran
fd22d05d9b feat(calendar_view): disable user selection 2025-02-15 10:23:57 +02:00
Elian Doran
462a2713a2 feat(calendar_view): integrate fullcalendar 2025-02-15 10:23:33 +02:00
Elian Doran
68ccd23540 refactor(views): pass argument to constructor 2025-02-15 10:13:47 +02:00
Panagiotis Papadopoulos
11a9dfd693 Merge branch 'develop' into chore_npm-scripts-namescape 2025-02-15 09:02:23 +01:00
Elian Doran
fc77f56516 chore(in_app_help): update docs 2025-02-15 01:05:37 +02:00
Elian Doran
ecb2c53c6f feat(in_app_help): support webviews 2025-02-15 01:02:24 +02:00
Elian Doran
9299f90b85 feat(docs): internal API docs 2025-02-15 00:33:12 +02:00
Elian Doran
81d5d16e1a chore(bin): convert generate-openapi to typescript 2025-02-15 00:02:00 +02:00
Elian Doran
2fe6881d73 Merge pull request #1192 from FliegendeWurst/openapi-docs-2
More OpenAPI docs
2025-02-14 23:57:39 +02:00
Elian Doran
552f87e2b3 Merge pull request #1194 from TriliumNext/test-unskip-tests
test: fix and enable ex-flaky tests in `services/search.spec.ts`
2025-02-14 23:43:01 +02:00
Elian Doran
689af591d1 Merge pull request #1190 from TriliumNext/deps_jasmine-types
deps: remove leftover @types/jasmine
2025-02-14 23:41:45 +02:00
Elian Doran
ab2a7a6c4a Merge pull request #1187 from TriliumNext/renovate/webpack-5.x
chore(deps): update dependency webpack to v5.98.0
2025-02-14 23:41:16 +02:00
Elian Doran
a716d97e83 Merge pull request #1188 from TriliumNext/renovate/node-22.x
chore(deps): update node.js to v22.14.0
2025-02-14 23:40:32 +02:00
Elian Doran
9f18eb55cb Merge pull request #1185 from TriliumNext/renovate/prettier-3.x
chore(deps): update dependency prettier to v3.5.1
2025-02-14 23:39:59 +02:00
Elian Doran
2cb27d4b03 Merge pull request #1186 from TriliumNext/renovate/electron-34.x
chore(deps): update dependency electron to v34.2.0
2025-02-14 23:38:17 +02:00
dousha
9d7f1a2d71 Allow removing weak branches even if it's hoisted 2025-02-15 01:52:07 +08:00
Elian Doran
be39668488 feat(zen): add keyboard shortcut 2025-02-14 19:45:57 +02:00
Elian Doran
137aa93451 fix(zen): not working properly when native titlebar is on 2025-02-14 19:07:13 +02:00
Elian Doran
ab7457cf90 fix(next): transparency issue when background effects are off 2025-02-14 19:07:02 +02:00
Elian Doran
9221932abb style(zen): improve position slightly 2025-02-14 18:56:36 +02:00
Elian Doran
1ad8c6b1cb style(next): apply mica to entire zen screen 2025-02-14 18:51:04 +02:00
Panagiotis Papadopoulos
84429e6e90 test: use integration-tests/db as data dir for tests
we have an initialized DB there, so that "integration like" tests that depend on the DB are not failing
2025-02-14 17:47:24 +01:00
Elian Doran
e829abbad3 feat(zen): set up draggable regions 2025-02-14 18:47:15 +02:00
Elian Doran
2c80607bfd feat(zen): use dedicated floating button to stop zen mode 2025-02-14 18:18:28 +02:00
Elian Doran
e8f0af8954 feat(zen): hide some more buttons 2025-02-14 17:39:03 +02:00
Elian Doran
5b5fd77ca8 feat(global_menu): indicate state of zen mode 2025-02-14 14:14:13 +02:00
Elian Doran
f93eef28f3 feat(zen): hide most UI elements 2025-02-14 14:11:22 +02:00
Elian Doran
5c81627112 feat(zen): toggle body class for zen 2025-02-14 13:55:04 +02:00
Elian Doran
568a84f5d2 feat(global-menu): add option to toggle zen mode 2025-02-14 13:45:40 +02:00
Elian Doran
70d6d375f9 chore(i18n/ro): fix translation for landscape 2025-02-14 11:04:28 +02:00
FliegendeWurst
a115214070 Document some note, branch, tree routes 2025-02-14 09:40:38 +01:00
Panagiotis Papadopoulos
0e18c405d8 test: "unskip" skipped tests 2025-02-14 09:17:57 +01:00
Panagiotis Papadopoulos
e89d1b2413 chore(scripts): fix electron:switch in docs 2025-02-14 09:11:35 +01:00
Panagiotis Papadopoulos
21d18b1bdf chore(scripts): add generate-* to namespace "chore:*" 2025-02-14 09:00:42 +01:00
Panagiotis Papadopoulos
0cace7f3f9 chore(scripts): add integration test servers to namespace "test:*" 2025-02-14 08:57:03 +01:00
Panagiotis Papadopoulos
218a889725 chore(scripts): namespace "dev:*" 2025-02-14 08:54:05 +01:00
Panagiotis Papadopoulos
ae41555b51 chore(scripts): namespace "test:*" 2025-02-14 08:50:43 +01:00
Panagiotis Papadopoulos
5f5d7b5432 chore(scripts): namespace "electron-forge:*" 2025-02-14 08:48:14 +01:00
Panagiotis Papadopoulos
d23734dd3f chore(scripts): add some line breaks for better separation 2025-02-14 08:44:25 +01:00
Panagiotis Papadopoulos
4f6085a1a4 chore(scripts): namespace "build:prepare-dist" 2025-02-14 08:43:41 +01:00
Panagiotis Papadopoulos
9cddb1deac chore(scripts): namespace "build:webpack" 2025-02-14 08:41:34 +01:00
Panagiotis Papadopoulos
47002aa95a chore(scripts): namespace "chore:update-build-info" 2025-02-14 08:38:18 +01:00
Panagiotis Papadopoulos
d2e8f946a0 chore(scripts): namespace "chore:ci-update-nightly-version" 2025-02-14 08:35:46 +01:00
Panagiotis Papadopoulos
688eb4d93f chore(scripts): namespace "docs:" 2025-02-14 08:31:07 +01:00
Panagiotis Papadopoulos
58eaf5eb5b test(etapi): mark as TODO for now
fixes typescript build for now
(not even sure, why we are building the tests as well)
2025-02-14 08:01:30 +01:00
Panagiotis Papadopoulos
a30d361b1d deps: remove leftover @types/jasmine 2025-02-14 07:52:34 +01:00
Panagiotis Papadopoulos
0145636fc5 chore(scripts): namespace "electron:"
reorder entries
2025-02-14 07:39:01 +01:00
Panagiotis Papadopoulos
06890585d2 chore(scripts): namespace "electron:" 2025-02-14 07:36:49 +01:00
renovate[bot]
3d320308c9 chore(deps): update node.js to v22.14.0 2025-02-14 02:12:50 +00:00
renovate[bot]
325431f050 chore(deps): update dependency webpack to v5.98.0 2025-02-14 02:12:39 +00:00
renovate[bot]
35f9af15e5 chore(deps): update dependency electron to v34.2.0 2025-02-14 02:12:30 +00:00
renovate[bot]
4dfce746e9 chore(deps): update dependency prettier to v3.5.1 2025-02-14 02:12:18 +00:00
FliegendeWurst
0f0ebed78a Document sync push/pull 2025-02-13 23:51:42 +01:00
Panagiotis Papadopoulos
469519f5df chore(scripts): namespace electron:start 2025-02-13 23:25:38 +01:00
Panagiotis Papadopoulos
7b062badf0 chore(scripts): namespace server
server:switch
2025-02-13 23:18:57 +01:00
Panagiotis Papadopoulos
f3dda940ec chore(scripts): namespace server
server:start-safe
server:start-no-dir
server:start-test
server:qstart
2025-02-13 23:00:53 +01:00
Panagiotis Papadopoulos
786f3e8d40 chore(scripts): namespace server:start 2025-02-13 22:53:40 +01:00
Elian Doran
4592d6750b feat(view/calendar): render a text in calendar view 2025-02-13 23:46:20 +02:00
Elian Doran
e2bbee8e16 refactor(client): move implementation out of note_list_renderer 2025-02-13 23:23:18 +02:00
Elian Doran
27168b0dc5 feat(view/calendar): add calendar entry to views 2025-02-13 22:57:30 +02:00
Elian Doran
e347cdda36 chore(client/ts): port book_properties 2025-02-13 22:45:48 +02:00
Elian Doran
283482caa5 Merge pull request #1163 from TriliumNext/feat_erasure-timeout-ui
feat: friendly number handling for note erasure timeouts
2025-02-13 22:22:27 +02:00
Elian Doran
27b825e511 Merge remote-tracking branch 'origin/develop' into feat_erasure-timeout-ui
; Conflicts:
;	src/public/translations/ro/translation.json
2025-02-13 22:21:38 +02:00
Elian Doran
4b9667b756 feat(settings): make duration selector slightly smaller 2025-02-13 22:21:09 +02:00
Elian Doran
e79c742d56 feat(i18n): translate duration units 2025-02-13 22:19:02 +02:00
Elian Doran
7ffece36f0 Merge branch 'develop' of ssh://github.com/TriliumNext/Notes into develop 2025-02-13 22:09:12 +02:00
Elian Doran
eecbfd0206 fix(client): note autocomplete not working properly on enter (closes #1100) 2025-02-13 22:09:08 +02:00
Elian Doran
bfd894b5eb Merge pull request #1156 from TriliumNext/feat_custom_cookie-session-expiration
feat: allow setting custom session cookie expiration
2025-02-13 21:50:09 +02:00
Elian Doran
508908ded8 Merge pull request #1173 from TriliumNext/fix_etapi-openapi-integration
build: fix missing copying of etapi.openapi.yaml in build process
2025-02-13 21:49:04 +02:00
Elian Doran
4d280f37ea Merge pull request #1179 from FliegendeWurst/openapi-docs
Automated OpenAPI spec generation
2025-02-13 21:48:45 +02:00
Elian Doran
cc74164b94 chore(i18n): achieve 100% completion for Romanian 2025-02-13 21:46:11 +02:00
Elian Doran
3f4458ea2f Merge pull request #1178 from hasecilu/i18n/Spanish
chore(i18n): update Spanish translation
2025-02-13 21:32:35 +02:00
Elian Doran
030e3cb805 fix(i18n): accidentally translated values 2025-02-13 21:31:54 +02:00
Elian Doran
6e17346768 feat(share): allow serving raw file via query parameter (closes #1182) 2025-02-13 21:28:01 +02:00
Elian Doran
4b597c5d2c fix(client/revisions): improper rendering of nested lists (closes #1177) 2025-02-13 20:57:34 +02:00
Elian Doran
e2cd875c03 refactor(client): fix global event handling for modal 2025-02-13 20:39:00 +02:00
Elian Doran
8f6376e537 chore(client/ts): port revisions 2025-02-13 20:25:13 +02:00
FliegendeWurst
be4b74e791 Automated OpenAPI spec generation 2025-02-13 17:02:03 +01:00
hasecilu
4ed71f30f2 chore(i18n): update Spanish translation 2025-02-13 09:39:04 -06:00
Panagiotis Papadopoulos
b692c00b8d feat(config): improve typesafety by definitely returning a number
previously it was either a number like string (in case env or config.ini was used) or a number (the fallback value)

we now parseInt the value -> if any value is NaN (e.g. because it was incorrectly set) it will try with the next, before it uses the fallback value

the strange looking `parseInt(String(process.env.TRILIUM_SESSION_COOKIEMAXAGE))` is required to make TypeScript happy, other variants of trying to get the value into a string were not good enough for typescript :-)

The `String(process.env.TRILIUM_SESSION_COOKIEMAXAGE)` will now either return a number like value or 'undefined' (as string), which parseInt parses into NaN, which is falsy.
2025-02-13 09:46:49 +01:00
Panagiotis Papadopoulos
cab0a5e41f feat(config): improve Session descriptions 2025-02-13 09:25:24 +01:00
Panagiotis Papadopoulos
201663d9ec chore(prettier): fix prettier issues 2025-02-13 09:07:25 +01:00
Panagiotis Papadopoulos
38215c46ae feat(login): make use of default maxAge by sessionParser
cookie will use the default value set in sessionParser middleware, which is controlled by
config.Session.cookieMaxAge

if rememberMe is not set -> the value is unset and the cookie becomes a non-persistent cookie,
which the browser delete after the current session (e.g. when you close the browser)
2025-02-13 09:04:34 +01:00
Panagiotis Papadopoulos
2a740781cb feat(session_parser): use seconds for setting maxAge and update default value to 21 days
21 days was used in the login route previously, when "remember me" was set
2025-02-13 08:52:05 +01:00
Panagiotis Papadopoulos
04827c0ce1 fix(session_parser): FileStore ttl should be ideally the same as session cookies maxAge
this avoids having "unused" dead session on the filesystem
2025-02-13 08:21:29 +01:00
Panagiotis Papadopoulos
4e23b5193d feat(session_parser): use Session.cookieMaxAge from config 2025-02-13 08:21:29 +01:00
Panagiotis Papadopoulos
53576f5578 feat(config): add Session.cookieMaxAge
allows users to control how long their session will be live, before it expires and they are forced to login again

defaults to 1 day  ("24 * 60 * 60 * 1000") as previously set in sessionParser
2025-02-13 08:21:29 +01:00
Panagiotis Papadopoulos
010783102a build: fix missing copying of etapi.openapi.yaml into dist folder
fixes build via electron-forge
2025-02-12 23:09:20 +01:00
Elian Doran
e7f5d1d280 fix(client/ts): load only needed CodeMirror plugins 2025-02-12 22:49:47 +02:00
Elian Doran
69a6739d1f fix(client): markdown code block not working (closes #1164) 2025-02-12 22:49:09 +02:00
Elian Doran
75afdbe093 chore(client/ts): port editable_code 2025-02-12 21:56:58 +02:00
Adorian Doran
cb7b25f054 repo: exclude irrelevant NPM tasks in VS Code 2025-02-12 12:06:55 +02:00
Adorian Doran
9c4aa4f220 style(next): tweak the "Change note icon" button 2025-02-12 01:55:56 +02:00
Adorian Doran
fc1e5ce23b style(next): fix comment 2025-02-12 01:46:17 +02:00
Adorian Doran
faabec5360 style(next): tweak the note icon popup 2025-02-12 01:45:26 +02:00
Adorian Doran
202bb9e126 style(next): combo boxes: fix the dropdown arrow disappearing in certain situations while in the focused state 2025-02-12 01:29:50 +02:00
Adorian Doran
2f00839f52 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-12 01:17:02 +02:00
Adorian Doran
d8962393af style(next): combo boxes: prevent the text overlapping the dropdown arrow 2025-02-12 01:16:57 +02:00
Elian Doran
d9e39fa792 Merge branch 'develop' of ssh://github.com/TriliumNext/Notes into develop 2025-02-11 22:20:38 +02:00
Elian Doran
0ca9809457 feat(client,server): support mid: links 2025-02-11 22:18:29 +02:00
Elian Doran
4d0969da0a refactor(client,server): support for URL schemes 2025-02-11 22:14:44 +02:00
Elian Doran
f517e4a37a refactor(editor): move all options into this repo 2025-02-11 20:34:49 +02:00
Elian Doran
0d26446262 refactor(editor): move all options into this repo 2025-02-11 20:23:48 +02:00
Elian Doran
aad38fdd21 refactor(editor): move floating toolbar config into this repo 2025-02-11 20:17:02 +02:00
Elian Doran
2ac5e860b1 refactor(editor): move classic toolbar config into this repo 2025-02-11 19:48:26 +02:00
Elian Doran
bd5232ed14 feat(mobile): add recent changes dialog 2025-02-11 19:38:06 +02:00
Elian Doran
aafd905c72 Merge pull request #1158 from TriliumNext/renovate/compression-1.x
fix(deps): update dependency compression to v1.8.0
2025-02-11 19:32:28 +02:00
Elian Doran
11e2dcfc64 refactor(client/ts): port a few small files 2025-02-11 19:29:53 +02:00
Elian Doran
44811f4f4b refactor(client/ts): port two containers 2025-02-11 19:09:04 +02:00
Elian Doran
13f7129717 refactor(client/ts): port a few more widgets 2025-02-11 19:04:27 +02:00
Elian Doran
b69641c0e9 refactor(client): remove abstract doRefresh 2025-02-11 18:59:35 +02:00
Elian Doran
8b9b843c2d Merge pull request #1140 from dousha/bugfix-protection-box
Fix the password box not removed after entering protected mode
2025-02-11 18:57:41 +02:00
Panagiotis Papadopoulos
a5cb78c5ec i18n: adjust note_erasure_timeout.erase_notes_after
since we now don't erase after "x" seconds, we need to change the message
2025-02-11 09:07:46 +01:00
Panagiotis Papadopoulos
8b066b1fc8 chore: add i18n TODO
(it does not make sense yet, to expose these as i18n, as I will be refactoring this whole thing into a standalone widget)
2025-02-11 09:07:46 +01:00
Panagiotis Papadopoulos
2bb79c4209 feat: "friendly number handling" for note erasure timeouts 2025-02-11 09:06:29 +01:00
Elian Doran
b1bf6931f2 Merge pull request #1162 from TriliumNext/refactor_routes-login
refactor(routes/login): simplify login function and get rid of deprecated usage of expires
2025-02-11 10:03:09 +02:00
Panagiotis Papadopoulos
e3b7ae018f refactor(routes/login): refactor login fn
I also got rid of the deprecated use of "expires" - setting maxAge to undefined is the preferred way
2025-02-11 07:55:18 +01:00
renovate[bot]
d7399f6bb5 fix(deps): update dependency compression to v1.8.0 2025-02-11 00:34:18 +00:00
Elian Doran
d0399c173e Merge pull request #1144 from TriliumNext/feature/swagger-ui-in-server
Add Swagger UI endpoint
2025-02-10 23:46:18 +02:00
Elian Doran
905983e794 Merge pull request #1155 from TriliumNext/feat_custom-cookie-path
feat: allow setting custom cookiePath
2025-02-10 23:42:08 +02:00
Elian Doran
5390b97730 Merge pull request #1157 from TriliumNext/fix_disable-dropdown-select-text
fix(ui): disallow text selection in dropdown-menus
2025-02-10 23:33:28 +02:00
Panagiotis Papadopoulos
c8f5f8dfcc fix(ui): disallow text selection in dropdown-menus 2025-02-10 20:18:35 +01:00
Panagiotis Papadopoulos
62f8f8f1a7 refactor(config): rename Cookies to Session
as requested in PR #1155
2025-02-10 19:44:19 +01:00
Panagiotis Papadopoulos
b6d73df92e feat(csrf_protection): use cookiePath from config 2025-02-10 19:03:10 +01:00
perf3ct
9c86a03acc Do this thing to make Pano happy :) 2025-02-10 16:03:01 +00:00
Panagiotis Papadopoulos
a600568ab8 feat(session_parser): use cookiePath from config 2025-02-10 08:35:01 +01:00
Panagiotis Papadopoulos
3c8723a404 feat(config): add Cookies.cookiePath option to config
defaults to "/" as previously set by default options
2025-02-10 08:33:31 +01:00
Elian Doran
1e95135720 Merge pull request #1147 from TriliumNext/renovate/typedoc-0.x
chore(deps): update dependency typedoc to v0.27.7
2025-02-10 09:19:43 +02:00
Elian Doran
022f2b6e62 Merge pull request #1148 from TriliumNext/renovate/marked-15.x
fix(deps): update dependency marked to v15.0.7
2025-02-10 09:19:23 +02:00
Elian Doran
4160ff2a8b Merge pull request #1149 from TriliumNext/renovate/mind-elixir-4.x
fix(deps): update dependency mind-elixir to v4.3.7
2025-02-10 09:18:42 +02:00
Elian Doran
d7e134d18e Merge pull request #1151 from TriliumNext/renovate/prettier-3.x
chore(deps): update dependency prettier to v3.5.0
2025-02-10 09:18:14 +02:00
Elian Doran
b9aa976068 Merge pull request #1152 from TriliumNext/chore_remove-jasmine
chore(deps): remove unused jasmine
2025-02-10 09:17:27 +02:00
Elian Doran
df47198616 Merge pull request #1153 from TriliumNext/feat_autofocus-protected-note
feat/fix(protected_session): input improvements
2025-02-10 09:16:53 +02:00
Panagiotis Papadopoulos
6c4c9785ff fix(protected_session): fix input->label association 2025-02-10 07:16:36 +01:00
Panagiotis Papadopoulos
f657b9dec1 feat(protected_session): set autofocus to password field 2025-02-10 07:15:14 +01:00
Panagiotis Papadopoulos
c004adfdff chore(deps): remove unused jasmine 2025-02-10 07:04:09 +01:00
perf3ct
57a34e5c02 use fs/promises instead of fs 2025-02-10 00:50:43 +00:00
renovate[bot]
7083b57ce4 chore(deps): update dependency prettier to v3.5.0 2025-02-10 00:37:05 +00:00
renovate[bot]
316e239a3c fix(deps): update dependency mind-elixir to v4.3.7 2025-02-10 00:36:49 +00:00
renovate[bot]
5632932873 fix(deps): update dependency marked to v15.0.7 2025-02-10 00:36:40 +00:00
renovate[bot]
3ce7fef64b chore(deps): update dependency typedoc to v0.27.7 2025-02-10 00:36:31 +00:00
perf3ct
d859f50c98 Change Swagger endpoint and site title 2025-02-09 22:17:31 +00:00
perf3ct
18f5f1b759 add Swagger UI endpoint and add to router 2025-02-09 21:15:12 +00:00
perf3ct
72fe367988 Add @types/js-yaml, @types/swagger-ui-express, js-yaml, and swagger-ui-express to support Swagger UI 2025-02-09 21:15:01 +00:00
Elian Doran
48d4093274 Merge pull request #1143 from TriliumNext/fix_ts-file-mime-import
fix(import/mime): fix ts file mime import handling
2025-02-09 23:07:49 +02:00
Panagiotis Papadopoulos
2d1381b4f8 fix(import/mime): fix TypeScript handling
.ts file are now treated as code type with text/x-typescript as MIME type

fixes #1142
2025-02-09 17:45:15 +01:00
Panagiotis Papadopoulos
5d019137fa test: add test for .ts file 2025-02-09 17:43:25 +01:00
Elian Doran
c79651add8 fix(print): scrollbar shown in some circumstances 2025-02-09 13:05:42 +02:00
Elian Doran
b6a9df981a feat(login): autofocus the password field 2025-02-09 11:59:09 +02:00
Elian Doran
27397be7f4 feat(export/md): update to latest turndown version (fixes #337) 2025-02-08 22:59:28 +02:00
Elian Doran
9d517988ce style(client): remove 10px padding if full width file 2025-02-08 22:05:02 +02:00
Elian Doran
90ca4e923e chore(client/ts): port file 2025-02-08 22:01:21 +02:00
Elian Doran
659e551cdd feat(client): display PDFs as full width 2025-02-08 21:49:30 +02:00
Elian Doran
2a90f4c6e9 chore(client/ts): port note_wrapper 2025-02-08 21:42:12 +02:00
Elian Doran
4c44ce0ebe fix(mobile): fix closing tab not always working on iOS 2025-02-08 20:31:10 +02:00
Elian Doran
25cf16c101 feat(mobile): reduced tab right margin 2025-02-08 13:24:55 +02:00
Elian Doran
3d531c9bca fix(mobile): switching tabs not working 2025-02-08 13:00:14 +02:00
Elian Doran
ab5a6c59b8 fix(mobile): improve alignment of the title bar 2025-02-08 12:14:58 +02:00
Elian Doran
1bf2f10c98 feat(geo_map): enable retina detection 2025-02-08 12:09:07 +02:00
Elian Doran
f5b0c3b68b fix(doc): tables that break out of bounds 2025-02-08 12:01:27 +02:00
Elian Doran
bf342f7bcf fix(doc): width on mobile with images 2025-02-08 11:58:21 +02:00
Elian Doran
c98df4d6c2 style(next): improve fit of calendar on mobile 2025-02-08 11:54:17 +02:00
Elian Doran
1bc70e9fed fix(mobile): dropdowns on tablet view 2025-02-08 11:46:47 +02:00
Elian Doran
6fcd14c23e feat(mobile): add calendar button (fixes #1128) 2025-02-08 11:42:25 +02:00
Elian Doran
7b8c4d2179 fix(client): freeze if empty doc 2025-02-08 11:16:04 +02:00
Elian Doran
f50f767e79 fix(client): console error if latest version could not be retrieved 2025-02-08 10:50:55 +02:00
Elian Doran
a2995ef267 feat(mobile): add open today's journal note (closes #1129). 2025-02-08 10:46:06 +02:00
Elian Doran
f8f1e537db feat(mobile): add new note launcher bar (fixes #1105) 2025-02-08 10:43:18 +02:00
Elian Doran
96dc063b50 refactor(hidden-subtree): deduplicate launchers 2025-02-08 10:37:17 +02:00
Elian Doran
303cf65020 feat(mobile): improve fixed tree layout 2025-02-08 10:34:08 +02:00
Elian Doran
89db97e97d feat(mobile): make the title smaller 2025-02-08 10:27:22 +02:00
Elian Doran
57c9e0477e feat(mobile): launch bar config now has a fixed tree 2025-02-08 10:24:55 +02:00
Elian Doran
7b36040b26 refactor(hidden_subtree): launch bar config in dedicated file 2025-02-08 10:05:31 +02:00
Elian Doran
914a731094 feat(mobile): collapsible advanced section in global menu 2025-02-08 09:55:38 +02:00
Elian Doran
ab7fc8871a fix(geo_map): zoom buttons overlapping with global menu 2025-02-08 09:55:22 +02:00
Elian Doran
a4021e94ad style(next): improve menu separator width on mobile 2025-02-08 09:35:29 +02:00
Elian Doran
777e504a72 style(mobile): minimal formatting bar scrolll 2025-02-08 09:32:44 +02:00
dousha
e063eb9ac1 Fix the password box not being removed after entering protected mode (#1078) 2025-02-08 15:25:09 +08:00
Adorian Doran
2db3765bd4 style(next): restyle menu item group headings 2025-02-08 02:37:57 +02:00
Adorian Doran
61a2b2cc3a Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-08 01:47:42 +02:00
Adorian Doran
592e58099d client: search/actions/execute script: fix misaligned close button 2025-02-08 01:47:39 +02:00
Elian Doran
45ab9d4395 fix(electron): auto-reload for static assets 2025-02-08 01:41:48 +02:00
Adorian Doran
9ff8b53ae6 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-08 01:33:37 +02:00
Adorian Doran
8f45fb3c40 style(next): tweak the bookmark folder popup 2025-02-08 01:33:26 +02:00
Elian Doran
a1c97142a8 feat(build): set up faster electron build by skipping dist 2025-02-08 00:41:39 +02:00
Elian Doran
7f314d2d75 feat(build): set up webpack cache 2025-02-08 00:41:39 +02:00
Elian Doran
61b7d887cc chore(deps): update electron to 34.1.1 2025-02-08 00:41:39 +02:00
Adorian Doran
172eb8a529 client: quick search results: fix dropdown compatibility with the Next theme 2025-02-08 00:38:18 +02:00
Adorian Doran
02c08e79ae style(next): remove a not longer needed style 2025-02-08 00:34:01 +02:00
Adorian Doran
94d1dcd99b client: quick search results: remove a redundant button 2025-02-08 00:33:23 +02:00
Adorian Doran
1bfce1c8ed style(next): extend the input field style to cover date/time pickers also 2025-02-08 00:05:36 +02:00
Adorian Doran
9f7a218772 style(next): add some margins to the promoted attributes section 2025-02-08 00:02:04 +02:00
Elian Doran
f7397dc2f1 Merge pull request #1124 from TriliumNext/feature/in_app_help
In-app help
2025-02-07 22:56:06 +02:00
Elian Doran
f12aed9ac0 feat(in-app-help): hide #docName from note preview 2025-02-07 22:55:50 +02:00
Elian Doran
50dcc92307 fix(in-app-help): note list when rendering in sidebar 2025-02-07 22:45:41 +02:00
Elian Doran
5552db034b fix(client): regression in new tab 2025-02-07 22:37:43 +02:00
Elian Doran
cecd7eccad Merge remote-tracking branch 'origin/develop' into feature/in_app_help 2025-02-07 22:28:01 +02:00
Elian Doran
0138776a72 feat(tab-bar): prevent user selection 2025-02-07 22:03:22 +02:00
Elian Doran
35207b8df0 feat(geo_map): middle click to open note in new tab 2025-02-07 22:03:00 +02:00
Elian Doran
0dbd136b48 feat(note_tooltip): clickable note title (closes #1063) 2025-02-07 21:44:17 +02:00
Elian Doran
02d16d0125 feat(note_tooltip): improve layout for empty notes 2025-02-07 21:36:22 +02:00
Elian Doran
f77a29d7fe fix(note_tooltip): redundant padding on empty note with no children 2025-02-07 21:19:58 +02:00
Elian Doran
9d097a0ee7 feat(note_tooltip): hide #geolocation 2025-02-07 21:14:40 +02:00
Elian Doran
c3c5ab18ef fix(e2e): broken test after shortcut change 2025-02-07 21:02:30 +02:00
Elian Doran
4463f215d8 fix(demo): broken attributes due to safe import 2025-02-07 20:34:31 +02:00
Elian Doran
d3b55932a6 fix(build): errors after refactoring 2025-02-07 20:27:22 +02:00
Elian Doran
2c5fb7edee fix(in-app-help): navigating to new page breakign scope 2025-02-07 19:33:26 +02:00
Elian Doran
c087d3c331 fix(toc): doc type not rendering the first time 2025-02-07 19:23:12 +02:00
Elian Doran
a98ed6cd29 fix(toc): not hiding if too few headings 2025-02-07 18:27:13 +02:00
Elian Doran
c68cc70f76 chore(build): change flatpak ID 2025-02-07 18:17:06 +02:00
Elian Doran
97b7033959 Merge pull request #1130 from TriliumNext/build_add-flatpak-electron
build: add flatpak build via electron-forge
2025-02-07 18:13:34 +02:00
Elian Doran
56d36c6c11 Merge pull request #1134 from pano9000/fix_ci-linux-server-name
chore(ci): improve server build release file names
2025-02-07 18:12:38 +02:00
Elian Doran
816b0da8ba Merge pull request #1132 from TriliumNext/chore_linux-desktop-category
build(electron): Add "Office" as category for Desktop file
2025-02-07 18:11:32 +02:00
MeIchthys
f7bf2fe614 Update README to include support options. 2025-02-07 09:58:27 -05:00
Panagiotis Papadopoulos
db48e3a987 chore(ci): improve server build release file names 2025-02-07 10:36:28 +01:00
Panagiotis Papadopoulos
8cf6a4bec7 build(electron): Add "Office" as category for Desktop file
as per https://specifications.freedesktop.org/menu-spec/latest/category-registry.html

checked with other NoteTaking apps and they all (e.g. Obsidian, Joplin) use "Office" as main category as well, which makes sense here
2025-02-07 08:57:20 +01:00
Panagiotis Papadopoulos
47e2100920 build(electron): use baseLinuxMakerConfigOptions for flatpak as well 2025-02-07 08:52:55 +01:00
Panagiotis Papadopoulos
f38f9e640b chore: add .flatpak-builder to .gitignore 2025-02-07 08:18:23 +01:00
Panagiotis Papadopoulos
7c721c4aaa fix(ci): add temp arm64 workaround
currently required, because Flatpak arm64 build currently fails – and if it fails, the remaining builds (deb, rpm, zip) fail as well, as they are created in the same run.
once the fix is released in the next electron-forge, we can get rid of this again.
2025-02-07 08:08:38 +01:00
Panagiotis Papadopoulos
1ec2b8b145 feat(ci): add flatpak build via electron-forge
arm64 currently is broken due to a bug in electron-forge's maker-flatpak, but PR with a fix was submitted already
2025-02-06 23:34:36 +01:00
Panagiotis Papadopoulos
1a89a0989d build(electron): update flatpak config to latest base
previously it was defaulting to an EOL version of the Platform/SDK

Explicitly setting it to 24.08 however makes the build fail, because it defaults to using an outdated "zypak" module, so we need to explicitly mention the latest version here too
2025-02-06 23:34:36 +01:00
Panagiotis Papadopoulos
4bf8cdfc39 deps: add @electron-forge/maker-flatpak to package-lock as well 2025-02-06 23:34:36 +01:00
Panagiotis Papadopoulos
7753905df9 build(electron): add flatpak config 2025-02-06 23:34:36 +01:00
Panagiotis Papadopoulos
399fd481ba deps: add @electron-forge/maker-flatpak 2025-02-06 23:34:36 +01:00
Adorian Doran
e288272b22 style(next): attribute detail dialog: add a gap before note paths 2025-02-06 23:01:31 +02:00
Adorian Doran
ead3229c1e style(next): settings/advanced: fix bullet list margin 2025-02-06 22:56:24 +02:00
Adorian Doran
f2021f8ca1 style(next): note revisions dialog: fix the list appeareance 2025-02-06 22:18:01 +02:00
Adorian Doran
e1850281e5 style(next): tweak (again) the note type dropdown 2025-02-06 21:49:19 +02:00
Adorian Doran
919a977643 client: reorder note types 2025-02-06 21:45:17 +02:00
Adorian Doran
48af3e9cf5 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-06 21:24:36 +02:00
Adorian Doran
9ac7369df4 style(next): tweak the note type dropdown 2025-02-06 21:24:32 +02:00
Elian Doran
acb858bc29 chore(test): simplify import of becca_mocking 2025-02-06 20:55:46 +02:00
Elian Doran
a767ee3d2c fix(server): sorting notes by custom attribute with missing value not idempotent 2025-02-06 20:41:35 +02:00
Adorian Doran
5e62f4999d client: use a "Beta" badge for beta note types 2025-02-06 20:24:13 +02:00
Adorian Doran
5d845a81f8 style(next): tweak (again) the editability dropdown 2025-02-06 19:50:19 +02:00
Adorian Doran
97cd79e083 style(next): tweak the editability dropdown 2025-02-06 19:49:23 +02:00
Adorian Doran
2ddac39b65 client: tweak the editability dropdown 2025-02-06 19:32:58 +02:00
Adorian Doran
93ee8ea3af Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-06 19:20:14 +02:00
Adorian Doran
746e8ac5ea style(next): tweak the attribute detail dialog 2025-02-06 19:20:10 +02:00
Elian Doran
e007840d9d Merge pull request #1125 from TriliumNext/renovate/electron-34.x
chore(deps): update dependency electron to v34.1.0
2025-02-06 18:57:04 +02:00
Elian Doran
c964f61155 fix(ci): stop nightly release from being draft 2025-02-06 18:50:49 +02:00
Adorian Doran
8ca00c2138 client: use the icon action style for the help buttons of the attachment pages 2025-02-06 17:29:41 +02:00
Adorian Doran
ef0431fc58 client: fix the style of a checkbox 2025-02-06 16:36:45 +02:00
Adorian Doran
b4929d772a style(next): fix disabled menu items not being grayed out 2025-02-06 16:31:38 +02:00
Adorian Doran
cba504fb24 style(next): file input: change the foreground color depending on the state 2025-02-06 07:28:12 +02:00
Adorian Doran
e4d49cc45d style(next): calendar: remove useless property 2025-02-06 07:19:34 +02:00
Adorian Doran
cd35215819 client: use the new file input fields 2025-02-06 07:17:58 +02:00
Adorian Doran
7d2ace92eb style(next): create a style for file (upload) input fields 2025-02-06 07:13:15 +02:00
Adorian Doran
0dcd2718c8 client: fix some broken checkboxes on the legacy theme 2025-02-06 06:22:30 +02:00
Adorian Doran
09ae998437 style(next): calendar: adapt to the changes from the base theme 2025-02-06 06:07:42 +02:00
Adorian Doran
f628114923 client: fix the calendar appearance on the legacy theme 2025-02-06 06:05:44 +02:00
Adorian Doran
5ab455adf2 style(next): calendar: various tweaks 2025-02-06 05:36:51 +02:00
Adorian Doran
4c1aeaca93 style(next): calendar: tweak the next/previous buttons 2025-02-06 05:25:18 +02:00
Adorian Doran
57bf142c4c style(next): calendar: tweak the month input field 2025-02-06 05:20:22 +02:00
Adorian Doran
abf93dc11d style(next): calendar: tweak the year input field 2025-02-06 05:07:37 +02:00
renovate[bot]
e356a34f0d chore(deps): update dependency electron to v34.1.0 2025-02-06 00:34:24 +00:00
Elian Doran
91073e5e70 feat(electron): larger windows installer 2025-02-05 22:34:17 +02:00
Elian Doran
2e1b2004dc feat(in-app-help): add a custom style for contextual help headings 2025-02-05 21:25:34 +02:00
Elian Doran
b84b7e1cdf chore(client/ts): port content_widget 2025-02-05 21:13:17 +02:00
Elian Doran
5173e37d8f chore(client/ts): port type_widget 2025-02-05 21:06:21 +02:00
Elian Doran
7fa0ad336e Merge remote-tracking branch 'origin/develop' into feature/in_app_help 2025-02-05 19:56:03 +02:00
Elian Doran
780c7377de Merge remote-tracking branch 'origin/master' into develop 2025-02-05 19:25:00 +02:00
Elian Doran
fe85e1e16c refactor(ci): try to deploy nightly with same release action 2025-02-05 19:10:08 +02:00
Elian Doran
7590c1da24 fix(ci): remove debug action 2025-02-05 18:53:40 +02:00
Elian Doran
803f59260d fix(ci): error in building electron due to extensions 2025-02-05 18:47:14 +02:00
Elian Doran
856a8a754e Merge pull request #1122 from TriliumNext/refactor_electron-forge-config
refactor: electron forge config
2025-02-05 18:16:13 +02:00
Elian Doran
e050efd1bd fix(ci): nightly artifact building 2025-02-05 13:36:53 +02:00
Panagiotis Papadopoulos
62099abb29 refactor(forge.config): simplify getExtraResourcesForPlatform 2025-02-05 09:56:08 +01:00
Panagiotis Papadopoulos
2b83470de6 refactor(forge.config): call getExtraResourcesForPlatform once only 2025-02-05 09:33:33 +01:00
Panagiotis Papadopoulos
e0862ce8f3 refactor(forge.config): avoid duplication for linux makers
adds a baseLinuxMakersConfigOptions
2025-02-05 09:30:55 +01:00
Panagiotis Papadopoulos
0c1185df33 refactor(forge.config): make afterComplete more concise 2025-02-05 08:53:06 +01:00
Elian Doran
ddc6ac4590 fix(server): improve tolerance for node version 2025-02-05 08:55:40 +02:00
Adorian Doran
0d62493b77 style(next): ribbon: minor tweaks 2025-02-05 03:43:13 +02:00
Adorian Doran
a8050c9bf8 style(next): input group: fix the color of disabled action buttons 2025-02-05 02:51:08 +02:00
Adorian Doran
d080c763f4 style(next): tweak note's menu icon alignment 2025-02-05 02:43:52 +02:00
Adorian Doran
36b138655c style(next): text notes: fix the table caption colors on dark theme 2025-02-05 02:38:15 +02:00
Adorian Doran
d9f37dfc19 style(next): delete note preview dialog: add some gap between note's name and its path 2025-02-05 02:31:35 +02:00
Adorian Doran
c6787a9cf2 style(next): dropdown menus: fix the scrollbar background for Chromium-based browsers 2025-02-05 02:23:36 +02:00
Elian Doran
b851287100 chore(ci): add debug log 2025-02-04 23:50:03 +02:00
Elian Doran
8ad8041689 Merge pull request #1108 from TriliumNext/build_add-rpm-electron
build: add RPM build via electron-forge
2025-02-04 23:26:14 +02:00
Elian Doran
5d3d9162cb Merge remote-tracking branch 'origin/develop' into build_add-rpm-electron 2025-02-04 23:08:10 +02:00
Elian Doran
a9d667e5a9 fix(ci): nightly build for server ARM 2025-02-04 23:00:38 +02:00
Elian Doran
d847eab697 fix(ci): nightly artifact build 2025-02-04 22:48:17 +02:00
Elian Doran
51cbe12866 fix(ci): nightly not working due to missing deps 2025-02-04 22:30:08 +02:00
Adorian Doran
13239500f9 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-04 22:25:00 +02:00
Adorian Doran
bc82cdbd01 style(next): fix broken backdrop blur when scrolling dropdowns 2025-02-04 22:24:56 +02:00
Elian Doran
ca10d94acb fix(ci): nightly not working due to missing deps 2025-02-04 22:05:10 +02:00
Elian Doran
880c1537d4 Merge remote-tracking branch 'origin/develop' into build_add-rpm-electron 2025-02-04 22:00:00 +02:00
Elian Doran
b818320e43 Merge pull request #1119 from TriliumNext/refactor/deduplicate_ci_workflows
Deduplicate CI workflows
2025-02-04 21:55:59 +02:00
Elian Doran
3fb60b64c0 fix(ci): add missing shell config 2025-02-04 21:55:26 +02:00
Elian Doran
0dfd01858b fix(ci): remove unnecessary artifact upload 2025-02-04 21:50:42 +02:00
Elian Doran
6ae143cc38 refactor(ci): deduplicate server build 2025-02-04 21:49:10 +02:00
Elian Doran
711ab84557 chore(editorconfig): add config for yaml files 2025-02-04 21:41:09 +02:00
Elian Doran
cfdb561bf6 fix(ci): required shell 2025-02-04 21:40:59 +02:00
Elian Doran
ddb42bfe88 fix(ci): add missing file 2025-02-04 21:40:52 +02:00
Elian Doran
836bbba7fe refactor(ci): deduplicate preparing artifacts 2025-02-04 21:37:00 +02:00
Elian Doran
bfdb69292c refactor(ci): deduplicate electron-forge 2025-02-04 21:37:00 +02:00
Elian Doran
f9082fa812 refactor(ci): deduplicate installing dependencies & updating build 2025-02-04 21:37:00 +02:00
Elian Doran
688b5317c1 refactor(ci): deduplicate dmg init 2025-02-04 21:37:00 +02:00
Adorian Doran
7514e2348c Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-04 21:31:19 +02:00
Adorian Doran
f3a0965312 client: mark some checkboxes to use the new style 2025-02-04 21:31:16 +02:00
Elian Doran
dfc6eb8523 Merge pull request #1075 from TriliumNext/test_server-utils
server/utils: add tests and smaller refactors / fixes
2025-02-04 21:29:30 +02:00
Elian Doran
892734bce3 Merge develop into test_server-utils 2025-02-04 21:28:44 +02:00
Elian Doran
0c35714801 Merge pull request #1099 from TriliumNext/refactor_simplify-electron-desktop-ejs
refactor(bin/electron-forge): make desktop.ejs easier to read
2025-02-04 21:24:25 +02:00
Elian Doran
67b46018a2 Merge pull request #1104 from TriliumNext/renovate/node-22.x
chore(deps): update dependency @types/node to v22.13.1
2025-02-04 21:23:11 +02:00
Elian Doran
a3d3f9f231 Merge pull request #1103 from TriliumNext/renovate/playwright-monorepo
chore(deps): update dependency @playwright/test to v1.50.1
2025-02-04 21:22:50 +02:00
Elian Doran
e1ac3e8451 Merge pull request #1118 from TriliumNext/renovate/npm-vitest-vulnerability
chore(deps): update dependency vitest to v3.0.5 [security]
2025-02-04 21:22:14 +02:00
Elian Doran
a0f6534cc9 Merge pull request #1113 from TriliumNext/renovate/vitest-monorepo
chore(deps): update dependency @vitest/coverage-v8 to v3.0.5
2025-02-04 21:22:03 +02:00
Elian Doran
902ee74b27 Merge pull request #1114 from TriliumNext/renovate/semver-7.x
fix(deps): remove dependency semver
2025-02-04 21:16:26 +02:00
Elian Doran
ce45309818 feat(deps): remove dependency on semver 2025-02-04 21:15:47 +02:00
renovate[bot]
0af08c2a7b chore(deps): update dependency vitest to v3.0.5 [security] 2025-02-04 18:56:44 +00:00
renovate[bot]
e126d7be34 chore(deps): update dependency @types/node to v22.13.1 2025-02-04 01:45:31 +00:00
renovate[bot]
d908c9044b fix(deps): update dependency semver to v7.7.1 2025-02-04 01:45:21 +00:00
renovate[bot]
6facc3d05c chore(deps): update vitest monorepo to v3.0.5 2025-02-04 01:45:13 +00:00
Adorian Doran
805405484e client: mark the add and save buttons from the "Owned Attributes" tab to use the icon button style 2025-02-04 00:10:38 +02:00
Adorian Doran
90732a5324 style(next): add an alias CSS class (tn-tool-button) for icon buttons 2025-02-04 00:08:43 +02:00
Adorian Doran
5376abac0b style(next): find & replace: tweak appearance 2025-02-03 23:48:37 +02:00
Adorian Doran
caf613a4ef client: find & replace: move the current index and total results counters inside the "Find in text" input field 2025-02-03 23:47:42 +02:00
Adorian Doran
404c53ddcd Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-03 23:11:40 +02:00
Adorian Doran
4631298ad0 style(next): improve the layout of the find and replace panel 2025-02-03 23:11:37 +02:00
Elian Doran
6953928f7a feat(in_app_help): reuse contextual help if possible 2025-02-03 22:50:00 +02:00
Elian Doran
c649f473b4 style(geo_map): improve floating buttons 2025-02-03 22:40:41 +02:00
Elian Doran
2b5f37e19d style(next): improve global menu update badge on horizontal layout 2025-02-03 22:27:41 +02:00
Adorian Doran
4efc86b9a3 style(next): fix the up / down buttons of the "Find in text" input box 2025-02-03 22:15:53 +02:00
Adorian Doran
59fdc7d048 client: fix broken selector 2025-02-03 20:52:48 +02:00
Adorian Doran
16cc4fadd7 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-03 20:26:09 +02:00
Adorian Doran
631d46028c client: tweak the label definition / relation definition dialog 2025-02-03 20:25:43 +02:00
Elian Doran
79e830b6ea fix(search): empty mindmap note breaking search (closes #1107) 2025-02-03 19:06:51 +02:00
Elian Doran
766473c291 fix(search): empty mindmap note breaking search (closes #1107) 2025-02-03 18:59:56 +02:00
Adorian Doran
c9bfd07722 style(next): tweak the new tab page 2025-02-03 17:49:07 +02:00
Adorian Doran
664b1e32a6 style(next): create a CSS file for the empty note (shown when opening a blank tab) 2025-02-03 17:29:10 +02:00
Adorian Doran
6f1f728c1b client: "Setup" dialog: use a consistent format for radio buttons 2025-02-03 17:17:39 +02:00
Adorian Doran
3ec24231f2 client: "Include note" dialog: use a consistent format for radio buttons 2025-02-03 17:06:04 +02:00
Adorian Doran
4dafb47a36 client: add some gap between protected session password prompt form elements 2025-02-03 17:00:01 +02:00
Adorian Doran
8a51f05bf4 client: mark some links to use the new style 2025-02-03 16:52:15 +02:00
Adorian Doran
9a84dec222 client: "Label detail" dialog: use a consistent checkbox format 2025-02-03 16:44:22 +02:00
Adorian Doran
c832eed0d7 style(next): fix the combo box style being overridden in some particular cases 2025-02-03 16:37:27 +02:00
Panagiotis Papadopoulos
0ce3ae9476 build(release): fix Unix artefact preparation 2025-02-03 09:40:33 +01:00
Panagiotis Papadopoulos
e3c7a72eee build(release): add rpm build for Linux 2025-02-03 09:40:33 +01:00
Panagiotis Papadopoulos
1cd49130dd build(electron): add rpm config 2025-02-03 09:40:33 +01:00
Panagiotis Papadopoulos
aa446f7bd6 deps: add @electron-forge/maker-rpm 2025-02-03 09:40:33 +01:00
Elian Doran
438f28b5b0 chore(release): prepare for 0.91.6 2025-02-03 09:48:06 +02:00
Elian Doran
fd7f3ef2ff Merge pull request #1101 from TriliumNext/bugfix/mac-paste
Remove `mac_init` as it was breaking MacOS
2025-02-03 09:35:58 +02:00
renovate[bot]
528fe1904c chore(deps): update dependency @playwright/test to v1.50.1 2025-02-03 01:09:17 +00:00
Adorian Doran
7d81c65e8e Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-03 01:09:04 +02:00
Adorian Doran
ccbd47e03d desktop app: use a custom user agent string 2025-02-03 01:09:01 +02:00
Elian Doran
c32778eb65 Merge pull request #1101 from TriliumNext/bugfix/mac-paste
Remove `mac_init` as it was breaking MacOS
2025-02-03 00:49:45 +02:00
Panagiotis Papadopoulos
61e56023d4 refactor(electron-forge/deb): make desktop.ejs easier to read
in theory we could use variables in ejs, but unfortunately electron uses lodash template to create the file, which itself DOES NOT like any let/const/var assignments – wasted a bit of time finding this out, before coming up with this solution
2025-02-02 22:25:56 +01:00
Elian Doran
e2c0c6ef92 feat(in-app-help): don't open table of contents when in help view 2025-02-02 21:37:41 +02:00
Elian Doran
b2bbf9cc5b fix(in-app-help): set proper hoist for split help 2025-02-02 20:49:28 +02:00
Elian Doran
868ca2d982 feat(in-app-help): contextual help button for geo notes 2025-02-02 20:44:36 +02:00
perfectra1n
363360f0d5 we can just remove mac_init now since we're not using it 2025-02-02 10:21:59 -08:00
Elian Doran
64654290be fix(client/ts): regression in table of contents 2025-02-02 20:21:35 +02:00
perfectra1n
512440684e remove mac_init functionality as it was overriding paste (and other) functionality, and is no longer needed 2025-02-02 10:19:21 -08:00
Elian Doran
d0317f4bb6 chore(client/ts): port toc 2025-02-02 19:44:18 +02:00
Elian Doran
d901a0f787 fix(in-app-help): style error when loading a note 2025-02-02 19:21:36 +02:00
Elian Doran
3796818a78 fix(in-app-help): headings not always updated properly 2025-02-02 19:08:44 +02:00
Elian Doran
ff0514a7dc fix(in-app-help): jumping to headings in table of contents 2025-02-02 18:35:41 +02:00
Elian Doran
e41a02893f feat(in-app-help): enable table of contents 2025-02-02 18:33:58 +02:00
Elian Doran
aca0588b26 feat(in-app-help): disable adding child notes 2025-02-02 18:13:47 +02:00
Elian Doran
989918efe6 feat(in-app-help): show syntax highlighting 2025-02-02 18:01:42 +02:00
Elian Doran
b298f4acea fix(in-app-help): duplicate icon 2025-02-02 17:56:51 +02:00
Elian Doran
45ddafba6d fix(in-app-help): proper note hoisting 2025-02-02 17:54:14 +02:00
Elian Doran
e24013adf5 feat(in-app-help): integrate into existing help command 2025-02-02 17:49:26 +02:00
Elian Doran
122c1ad1ec feat(in-app-help): render folders as book 2025-02-02 17:34:52 +02:00
Elian Doran
02708d593f feat(in-app-help): add default icon for notes 2025-02-02 17:03:27 +02:00
Elian Doran
6215a21bae feat(in-app-help): add dedicated icon for folders 2025-02-02 17:02:10 +02:00
Elian Doran
62dc11f9b8 feat(in-app-help): add icons for text notes 2025-02-02 16:54:09 +02:00
Elian Doran
bac529f1f1 feat(in-app-help): remove duplicate <h1> 2025-02-02 16:18:07 +02:00
Elian Doran
ebaba4ff4a feat(in-app-help): render images 2025-02-02 16:14:29 +02:00
Elian Doran
7c34a6178a feat(in-app-help): render documentation 2025-02-02 15:34:44 +02:00
Elian Doran
61ee15cc01 feat(in-app-help): update docName attribute if it got changed 2025-02-02 15:32:28 +02:00
Elian Doran
94d53727d1 feat(in-app-help): support child nesting 2025-02-02 14:31:07 +02:00
Elian Doran
f1d641ac32 feat(in-app-help): create notes at root level 2025-02-02 14:20:02 +02:00
Elian Doran
58e82fb0f8 chore(in-app-help): add first draft of the user guide 2025-02-02 14:17:25 +02:00
Elian Doran
acbd936654 chore(types): add type for note meta file 2025-02-02 13:55:15 +02:00
Elian Doran
5afddb4ecc feat(inapp-help): add hidden item for user guide 2025-02-02 13:30:22 +02:00
Elian Doran
00bb7af5bd chore(client/ts): port doc 2025-02-02 12:59:00 +02:00
Elian Doran
2fdac9b438 style(next): small margin to promoted attribute cells 2025-02-02 12:52:50 +02:00
Elian Doran
71cd35c25d style(next): fix italic text for buttons 2025-02-02 12:50:57 +02:00
Elian Doran
ec95f62cd2 fix(server): doc notes not being served in dev mode 2025-02-02 12:47:41 +02:00
Elian Doran
3911c0c22b refactor(geo_map): extract build icon into method 2025-02-02 11:07:28 +02:00
Adorian Doran
6cd2a16155 style(print): skip highlighting Trilium internal links 2025-02-02 02:51:46 +02:00
Adorian Doran
9b775a142d style(print): improve footnotes 2025-02-02 02:37:39 +02:00
Adorian Doran
120b8466ac style(print): improve the TODO list check boxes 2025-02-02 02:04:25 +02:00
Elian Doran
65e593f3ff fix(geo-map): duplicate tracks after refresh 2025-02-01 23:35:34 +02:00
Adorian Doran
c84737b90e Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-01 22:52:48 +02:00
Adorian Doran
72a9004643 style(print): restyle the TODO list check boxes 2025-02-01 22:52:45 +02:00
Elian Doran
7a0199595d feat(geo_map): react to changes in hierarchy 2025-02-01 22:22:19 +02:00
Elian Doran
15881dfb6b feat(geo_map): add basic support for gpx files 2025-02-01 22:13:47 +02:00
Elian Doran
211b557920 refactor(geo_map): move marker processing to dedicated method 2025-02-01 21:46:11 +02:00
Elian Doran
bd638b689f feat(print): improve todo list rendering 2025-02-01 19:45:10 +02:00
Adorian Doran
3eccdd5cff style(print): justify the note's text 2025-02-01 19:41:33 +02:00
Adorian Doran
7702726012 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-01 19:16:49 +02:00
Adorian Doran
ca496e1d12 desktop app/export pdf: enable background colors 2025-02-01 19:16:47 +02:00
Elian Doran
6ac868555f feat(print): fix widowed headings 2025-02-01 19:16:28 +02:00
Elian Doran
2bb006d80e feat(print): better widows & orphans support 2025-02-01 19:16:28 +02:00
Adorian Doran
e3816c30c0 style(print): tweak figure captions 2025-02-01 19:07:51 +02:00
Adorian Doran
170bba1a89 style(print): tweak blockquotes 2025-02-01 19:02:53 +02:00
Adorian Doran
b5ee642c2d style(print): tweak footnotes 2025-02-01 18:58:50 +02:00
Adorian Doran
16f62bdde9 style(print): tweak links 2025-02-01 18:41:43 +02:00
Elian Doran
fa655ea45e feat(pdf): describe the attributes & fix conflict in name 2025-02-01 17:34:42 +02:00
Adorian Doran
2659bd33e8 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-01 17:17:57 +02:00
Adorian Doran
3cd02f6ceb client(print): use a larger page margins 2025-02-01 17:17:49 +02:00
Elian Doran
f41138800f feat(pdf): allow changing page size via attribute 2025-02-01 17:10:49 +02:00
Elian Doran
9a3a6f90ea Add option to export 2025-02-01 16:59:23 +02:00
Elian Doran
eedad4170e Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-01 16:59:17 +02:00
Adorian Doran
f2cc98eeec client(print): fix the content having a left margin when the note is read-only 2025-02-01 16:58:52 +02:00
Adorian Doran
8b8f0c289e client(print): use a different base font size 2025-02-01 16:51:04 +02:00
Adorian Doran
9c4535bade desktop app(export pdf): enable document outline and PDF tags generation 2025-02-01 16:31:25 +02:00
Elian Doran
dd12d7f314 chore(client/ts): port export 2025-02-01 16:23:55 +02:00
Adorian Doran
02d4d011c3 Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-01 16:15:25 +02:00
Adorian Doran
6d6272e5b6 desktop app(export pdf): refactor 2025-02-01 16:14:49 +02:00
Panagiotis Papadopoulos
e710409134 test(server/utils): remove completed TODO 2025-02-01 15:10:31 +01:00
Panagiotis Papadopoulos
08c32da0d2 test(server/utils): fix warnings and explicitly await timeLimit tests 2025-02-01 15:06:07 +01:00
Panagiotis Papadopoulos
13e72c5e0a test(server/utils): add basic test for toObject 2025-02-01 15:00:47 +01:00
Panagiotis Papadopoulos
5c904f100a test(server/utils): add prettier ignore statement to avoid newlines getting mangled 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
4917296d96 test(server/utils): add basic test for deferred
this needs to be expanded, but I don't fully understand
what the exact purpose is of this deferred fn
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
e1795a0ad1 test(server/utils): add tests for toMap 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
ab0c84a57e refactor(server/utils): use a "real" Map for toMap 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
f0ba056bb7 test(server/utils): add tests for escapeHtml & unescapeHtml 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
d71e127828 refactor(server/utils): re-export escape/unescape instead of wrapping them in function
-> since the functions did not do *anything* other than calling the escape/unescape module -> let's just re-export them directly
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
72f0de6b78 test(server/utils): add todo remarks 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
9f2dd21865 test(server/utils): add tests for randomSecureToken
(bit ugly I have to say, as we are essentially partially testing "crypto" module here,
probably should be instead replaced by a version that mocks crypto module and checks, if the called functions match the expectations)
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
a4ce2ddd5e refactor(server/utils): simplify getResourceDir
get rid of unnecessary else branch here
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
6e5e6989ed fix(server/utils): fix potentially "empty looking" title from getNoteTitle
when the noteMeta title consists of just spaces, it will fall back to "normal" handling again → instead of showing " " as title, which would be perceived as "empty"
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
46f28f4f09 test(server/utils): add edge case test for getNoteTitle
when the noteMeta title consists of just spaces, it should fall back to "normal" handling again → currently this fails
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
65be2cf048 refactor(server/utils): simplify getNoteTitle 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
c3587ad536 test(server/utils): add tests for getNoteTitle 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
c15e46bf25 chore(server/utils): improve types for getNoteTitle 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
b812e67794 test(server/utils): adapt tests for getContentDisposition
since we merged these functions, adapt the previous tests of sanitizeFilenameForHeader and use them for the newly merged function getContentDisposition
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
fedaec6c79 refactor(server/utils): merge sanitizeFilenameForHeader into getContentDisposition
sanitizeFilenameForHeader is not used anywhere else and is tiny, so let's merge it
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
29b1befd60 fix(server/utils): missing export for sanitizeFilenameForHeader 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
6ab9a3979d refactor(server/utils): simplify sanitizeFilenameForHeader
since "" is falsy, we can just use "||" here
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
acb7098bb8 test(server/utils): add tests for sanitizeFilenameForHeader 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
df1d479720 chore(server/utils): sort exports alphabetically 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
ef66d330ec chore(server/utils): timeLimit - add TODO comment 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
9a8a27c02c refactor(server/utils): avoid same variable name for error in timeLimit
rename the error created in timeLimit to `errorTimeLimit` to differentiate it from the error that is caught inside the promise

makes it a bit easier to quickly distinguish these
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
9eeedc827c test(server/utils): add tests for timeLimit 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
440dbfd4d4 refactor(server/utils): use Set for isStringNote 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
3094b1779e test(server/utils): add tests for isStringNote 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
5c20a6d5ee test(server/utils): add tests for isDev 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
283b19c716 fix(server/utils): add missed export of isDev in default export object 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
de5ffb591d test(server/utils): add tests for isMac/isWindows/isElectron 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
81db681732 refactor(server/utils): remove unused union
function is not used at all anywhere
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
45cf0334f1 test(server/utils): add tests for stripTags 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
738436061c test(server/utils): add tests for removeDiacritic and normalize 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
92123e1761 refactor(server/utils): get rid of isString
let's use typeof x === "string" → works exactly the same and at the same speed as this custom isString fn
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
41c96fb202 test(server/utils): add tests for envToBoolean 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
9689222fd4 test(server/utils): add tests for removeTextFileExtension 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
05a0acbdb5 test(server/utils): add tests for newEntityId
and randomString
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
33346e0cee test(server/utils): add tests for sanitizeSqlIdentifier 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
03c1128a72 fix(isEmptyOrWhitespace): avoid exception throwing when passed value is undefined
the req.body value from "routes/api/branches" actually seems to never get parsed into a JS object, but arrives as text string, so req.body.prefix could be undefined, which of course would cause an error to be thrown, when trying to call "match" on undefined.
2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
8546fe2333 test(server/utils): add tests for isEmptyOrWhitespace 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
e6f5321444 test(server/utils): move formatDownloadTitle tests to spec file 2025-02-01 14:37:12 +01:00
Panagiotis Papadopoulos
668cc7e1a4 test(import/utils): prepare spec file 2025-02-01 14:37:12 +01:00
Elian Doran
a2f1d71754 chore(client/ts): port mobile_widgets 2025-02-01 14:45:12 +02:00
Elian Doran
2baf75d0c1 feat(electron): custom icon for the windows installer 2025-02-01 14:39:36 +02:00
Adorian Doran
dcf164e2ff Merge branch 'develop' of https://github.com/TriliumNext/Notes into develop 2025-02-01 14:37:36 +02:00
Adorian Doran
a1dfeb14e1 desktop app(export pdf): add page numbering 2025-02-01 14:37:21 +02:00
Elian Doran
72991a5649 fix(tray): improve fit for recent notes 2025-02-01 14:00:56 +02:00
Elian Doran
50514e2418 feat(tray): display recent note date as detail 2025-02-01 13:23:14 +02:00
Elian Doran
495fce7594 feat(tray): use template for menu icons 2025-02-01 12:57:51 +02:00
Elian Doran
ddb277e8e5 feat(tray): use template for main icon 2025-02-01 12:53:11 +02:00
Elian Doran
6db51d648b feat(tray): black icon for macOS 2025-02-01 12:49:01 +02:00
Elian Doran
c80bf48d13 fix(tray): bring back dev icon 2025-02-01 12:45:32 +02:00
Elian Doran
0f2e50d265 feat(tray): higher DPI icon 2025-02-01 12:41:43 +02:00
Elian Doran
e10256e5bd fix(tray): error if today's note was missing 2025-02-01 12:25:12 +02:00
Elian Doran
43ba49833d feat(tray): try add 1.25x and 1.5x for Windows high-DPI 2025-02-01 12:22:13 +02:00
Elian Doran
755774042e feat(tray): support hi-DPI 2025-02-01 11:59:42 +02:00
Elian Doran
0acd3c621e Merge pull request #1086 from TriliumNext/fix_search_of_autocomplete
Fix a bug in the full text search in AutoComplete
2025-02-01 11:41:06 +02:00
Elian Doran
0bf3f890a2 feat(tray): support custom icon for dev mode 2025-02-01 11:34:35 +02:00
Elian Doran
80ddc8b4ef feat(tray): react to language changes 2025-02-01 11:20:29 +02:00
Elian Doran
54f9cf831d feat(i18n): translate tray icon 2025-02-01 11:16:46 +02:00
Elian Doran
60d8bc8238 feat(tray): reload recent notes on change 2025-02-01 11:07:47 +02:00
Elian Doran
ebc523a0fd feat(tray): reload bookmarks on change 2025-02-01 11:04:49 +02:00
Elian Doran
09bf48e5a4 feat(tray): support bookmark folders 2025-02-01 10:54:00 +02:00
Elian Doran
ae4f012390 feat(tray): ensure window is visible 2025-02-01 10:46:27 +02:00
Elian Doran
c1f8c8a0b9 feat(tray): react to dark mode change 2025-02-01 10:41:08 +02:00
Elian Doran
4701edff4c feat(tray): support dark theme for icons 2025-02-01 10:32:57 +02:00
Elian Doran
736f329857 feat(tray): use icons for tray items 2025-02-01 10:21:25 +02:00
Elian Doran
4bd9d32c74 feat(tray): use checkbox for show windows and move to top 2025-02-01 02:46:33 +02:00
Elian Doran
839e8a4143 feat(tray): display recent notes 2025-02-01 02:40:04 +02:00
Elian Doran
cd0c79e3d2 feat(tray): show a list of bookmarks 2025-02-01 02:29:34 +02:00
Elian Doran
84edf0348f feat(tray): open today's journal note 2025-02-01 02:18:10 +02:00
Elian Doran
4b1cbca76d feat(tray): add option to create new note 2025-02-01 02:08:19 +02:00
Elian Doran
9e0d002704 refactor(tray): use named functions instead of arrow fn 2025-02-01 01:54:51 +02:00
Elian Doran
c09ef76f87 Merge pull request #1091 from TriliumNext/feature/different_printing_mechanism
Export as PDF
2025-02-01 01:35:43 +02:00
Elian Doran
b59f98d63b Merge pull request #1092 from lly-c232733/develop
Band-Aid fix for the bootleg eslint
2025-02-01 01:32:03 +02:00
Elian Doran
bd363dac93 chore(review): use async 2025-02-01 01:21:38 +02:00
Elian Doran
81755d804b feat(print): improve code notes 2025-02-01 01:16:35 +02:00
Elian Doran
6ad19198c6 feat(print): improve on mobile 2025-02-01 01:12:53 +02:00
Elian Doran
8e88645fd3 feat(print): hide placeholder if note is empty 2025-02-01 00:55:00 +02:00
Elian Doran
2cc7113c2c refactor(deps): get rid of print-this 2025-02-01 00:52:46 +02:00
Elian Doran
ac5f911d4f fix(print): include note not always full-height 2025-02-01 00:43:51 +02:00
Elian Doran
e20180014b chore(i18n): translate new messages to Romanian 2025-02-01 00:37:32 +02:00
Elian Doran
719046e2ca feat(pdf): add keyboard shortcut 2025-02-01 00:36:06 +02:00
Elian Doran
f3a3906db7 feat(pdf): support landscape mode at note level 2025-02-01 00:28:48 +02:00
Elian Doran
658ce103fc feat(pdf): maintain table heading background 2025-02-01 00:08:38 +02:00
Elian Doran
bfadd36f3d style(next): don't print box shadow for code 2025-02-01 00:01:13 +02:00
Elian Doran
d1a5d317ed feat(print): improve rendering of tables 2025-01-31 23:57:50 +02:00
Elian Doran
3927548afb fix(print): width is not always 100% 2025-01-31 23:50:46 +02:00
Elian Doran
ae5a9df5cc fix(print): sidebar reduces width 2025-01-31 23:49:51 +02:00
Elian Doran
3720ca6fc4 fix(print): hide promoted attributes, note list 2025-01-31 23:45:25 +02:00
Elian Doran
cd031336ab fix(print): disable rounded corners on some containers 2025-01-31 23:44:21 +02:00
Elian Doran
30b1da0f41 fix(print): tabs sometimes visible 2025-01-31 23:43:00 +02:00
Elian Doran
143217be88 fix(print): background color 2025-01-31 23:41:23 +02:00
Elian Doran
84532d42ec feat(pdf): error handling 2025-01-31 23:29:53 +02:00
Elian Doran
d4965e8d41 feat(pdf): improve save filter on Windows 2025-01-31 22:51:58 +02:00
lly-c232733
08133dcf3d Update eslint.js
not sure why 'latest' is not working, but this fixes the annoying errors related to es5 being default
2025-01-31 15:41:41 -05:00
Elian Doran
7813c896c3 feat(pdf): hide the option if not electron 2025-01-31 22:22:45 +02:00
Elian Doran
508ce4c962 feat(pdf): open the exported file 2025-01-31 22:19:19 +02:00
Elian Doran
8ac1beaee7 chore(i18n): translate one message 2025-01-31 22:13:48 +02:00
Elian Doran
edaf030b87 chore(pdf: change icon 2025-01-31 22:01:44 +02:00
Elian Doran
e029a3991a fix(pdf): not disabled for unprintable note types 2025-01-31 22:00:26 +02:00
Elian Doran
615218513a feat(pdf): suggest proper file name 2025-01-31 21:58:52 +02:00
Adorian Doran
46573714a4 style(next): tweak the text segments of input groups 2025-01-31 21:52:53 +02:00
Elian Doran
414a4d7b17 feat(print): add filter for PDF 2025-01-31 21:51:15 +02:00
Adorian Doran
09c14f8663 style(next): settings/appearance: fix the length of font size input boxes 2025-01-31 21:50:07 +02:00
Elian Doran
0f7826d6d0 feat(print): implement basic export as PDF support 2025-01-31 21:44:59 +02:00
Adorian Doran
c5edfbc127 style(next): restyle the text segments of input groups 2025-01-31 21:35:08 +02:00
Adorian Doran
b56b42bea0 style(next): improve the color contrast for switches 2025-01-31 21:26:19 +02:00
Elian Doran
dbf004d673 feat(print): add option to print as PDF (not yet implemented) 2025-01-31 21:18:24 +02:00
Elian Doran
e3dbe21c5a chore(client/ts): port note_actions 2025-01-31 21:08:09 +02:00
Adorian Doran
48b4f37f91 style(next): adjust the vertical offset of the menu item icons to align with the new font metrics 2025-01-31 21:02:11 +02:00
Elian Doran
298634ceaa refactor(print): use dedicated print CSS 2025-01-31 20:47:18 +02:00
Elian Doran
561c50706e feat(print): carry over original print stylesheet 2025-01-31 20:45:18 +02:00
Elian Doran
4a5bf28f06 fix(print): remove title & reduce paddings 2025-01-31 20:43:35 +02:00
Elian Doran
d201fe7a06 fix(print): left padding of text notes 2025-01-31 20:40:11 +02:00
Elian Doran
7dfba9f513 feat(print): respect page breaks 2025-01-31 20:32:12 +02:00
Elian Doran
c06642ba1e fix(print): remove extra spacing 2025-01-31 20:27:32 +02:00
Elian Doran
d5d7c1565e feat(print): implement stylesheet for global note printing 2025-01-31 20:24:19 +02:00
SiriusXT
b44df12148 Fix a bug in the full text search in AutoComplete 2025-01-31 19:10:45 +08:00
Adorian Doran
c878a6d2fd Merge pull request #1074 from TriliumNext/style/next/forms
Style Next: Restyle form elements
2025-01-31 11:19:25 +02:00
Elian Doran
77bbdc3857 chore(client/ts): port new version of switch 2025-01-31 09:57:25 +02:00
Elian Doran
0dd91ad737 revert: accidental changes after merge 2025-01-31 09:41:53 +02:00
Adorian Doran
c6bbc284aa style(next): remove a not longer needed style 2025-01-31 03:32:06 +02:00
Adorian Doran
e742bdf401 client: fix the style of the icon category combo box 2025-01-31 02:54:24 +02:00
Adorian Doran
e270b0b587 style(next): tweak the colors of the dark theme 2025-01-31 00:26:49 +02:00
Adorian Doran
076c9f4d96 style(next): tweak the colors of the dark theme 2025-01-31 00:09:46 +02:00
Adorian Doran
e425f64616 style(next): icon buttons: properly align the buttons in the right panes' header 2025-01-31 00:01:41 +02:00
Adorian Doran
f59515fe36 style(next): use the new icon button style for the help buttons associated to switches 2025-01-30 23:56:41 +02:00
Adorian Doran
67904e16a8 client: rollback some buttons as secondary buttons 2025-01-30 23:49:53 +02:00
Adorian Doran
9c847686a6 style(next): use the new icon button style for the ETAPI token table buttons 2025-01-30 23:49:25 +02:00
Adorian Doran
c8a556723c style(next): icon buttons: use a distinctive style for the "x" buttons 2025-01-30 23:23:12 +02:00
Adorian Doran
ac89c2cb65 style(next): icon buttons: tweak the alignment of the "Create new split" button relative to the note's menu button 2025-01-30 23:08:09 +02:00
Adorian Doran
9cfd01200a style(next): icon buttons: add a style for the visible focus state 2025-01-30 22:50:35 +02:00
Adorian Doran
f2f0bf3e10 style(next): icon buttons: keep the button highlighted while the dropdown is open 2025-01-30 22:47:24 +02:00
Adorian Doran
3311f4f01c style(next): restyle icon buttons 2025-01-30 22:44:11 +02:00
Adorian Doran
b170c234ce style(next): refactor 2025-01-30 21:00:46 +02:00
Adorian Doran
349ae84c8e style(next): tweak combo box-like dropdown buttons 2025-01-30 20:57:36 +02:00
Adorian Doran
c3656e27c8 client: mark a button to by styled as a combo box-like dropdown 2025-01-30 20:46:42 +02:00
Adorian Doran
b27537a9c3 style(next): buttons: fix combo box-like dropdown buttons regression 2025-01-30 20:44:27 +02:00
Adorian Doran
c26dd283fa client: rollback some buttons as secondary buttons 2025-01-30 20:30:51 +02:00
Elian Doran
565989dd4c feat(client/ts): port tree (WIP) 2025-01-30 10:14:10 +02:00
Adorian Doran
ad06eaca5e Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-30 00:17:24 +02:00
Adorian Doran
a889170844 style(next): buttons: remove useless property 2025-01-30 00:17:03 +02:00
Adorian Doran
774249d6ad style(next): buttons: improve layout 2025-01-29 23:41:57 +02:00
Adorian Doran
700598ed63 style(next): buttons: remove the previously defined gap between buttons 2025-01-29 23:23:47 +02:00
Adorian Doran
4988468103 style(next): buttons: refactor, document 2025-01-29 23:21:44 +02:00
Adorian Doran
0fed7842cf Merge branch 'style/next/forms' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-29 23:14:38 +02:00
Adorian Doran
bd37055965 style(next): buttons: style icons 2025-01-29 23:14:27 +02:00
Elian Doran
748162b997 fix(e2e): broken test after style changes 2025-01-29 22:40:43 +02:00
Panagiotis Papadopoulos
092c288df2 chore(issue_templates): add simple Task template 2025-01-29 22:40:43 +02:00
Panagiotis Papadopoulos
818cc30650 refactor(server/utils): isDev move to utils and replace fn with boolean
this value cannot change during runtime,
=> there is no need to have these checks
as dynamic function, instead just
export the boolean value directly
2025-01-29 22:40:43 +02:00
Panagiotis Papadopoulos
13a1b42e12 refactor(server/utils): isElectron - replace fn with boolean
this values cannot change during runtime,
=> there is no need to have these checks
as dynamic function, instead just
export the boolean value directly
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
5630a7b2e3 refactor(server/utils): isMac/isWin - replace fn with boolean
those values cannot change during runtime,
=> there is no need to have these checks
as dynamic function, instead just
export the boolean value directly
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
013b42bdd1 fix(setup): make keyboard navigation work
fixes #94
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
a110161b2e fix(setup): use safer text method instead of html to prevent possible XSS
see also https://api.jquery.com/html/
under "Additional Notes":
"Do not use these methods to insert strings obtained from untrusted sources such as URL query parameters, cookies, or form inputs. Doing so can introduce cross-site-scripting (XSS) vulnerabilities. Remove or escape any user input before adding content to the document. "

fixes #1072
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
328c53b725 chore(assets): remove manual provision of knockout
this is only used in setup.ts and there it is already packed by webpack – so no need to manually provide it as static asset anymore
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
06d9b998de chore(prettier): fix code style for setup.ts 2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
e6103bf11a chore(views/setup): remove knockout src tag
-> this is now handled inside setup.ts and is handled by webpack
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
726683078e chore(views/setup): move syncInProgress to meta tag
makes it easier to hanlde in the setup.ts file
2025-01-29 22:40:42 +02:00
Panagiotis Papadopoulos
52814030d8 chore(client/ts): port setup.js entrypoint to TS 2025-01-29 22:40:42 +02:00
Adorian Doran
e96b9f3251 style(next): buttons: style keyboard shortcut 2025-01-29 22:20:52 +02:00
Adorian Doran
e29389296d style(next): buttons: handle visible focus 2025-01-29 22:02:25 +02:00
Adorian Doran
8718dafe88 style(next): buttons: style disabled buttons 2025-01-29 21:59:18 +02:00
Adorian Doran
2bfb253a2a style(next): buttons: handle "success" button types 2025-01-29 21:53:22 +02:00
Adorian Doran
7d88e43555 client: mark some buttons with their type (primary or secondary) 2025-01-29 21:50:35 +02:00
Adorian Doran
82074ea7eb style(next): buttons: restore a legacy CSS variable 2025-01-29 21:20:31 +02:00
Adorian Doran
16ea6186dd style(next): buttons: rename the CSS variables to avoid clashing with another button styles 2025-01-29 21:17:20 +02:00
Adorian Doran
96b25b8e5e style(next): buttons: use a more accurate CSS selectors 2025-01-29 18:51:00 +02:00
Adorian Doran
90afd01d1f style(next): restyle buttons 2025-01-29 18:24:05 +02:00
Adorian Doran
dee221e18a Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-29 17:26:24 +02:00
Adorian Doran
2f5ac6d114 client: mark the check boxes and radio buttons that should use the new style 2025-01-24 22:55:12 +02:00
Adorian Doran
fa867cd75d Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-24 22:48:21 +02:00
Adorian Doran
97295e959b style(next): fall back to the user agent's default check boxes and radio buttons if the ":has" selector is not supported 2025-01-24 22:45:58 +02:00
Adorian Doran
41ef47576d client: mark the check boxes and radio buttons that should use the new style 2025-01-24 22:35:45 +02:00
Adorian Doran
ed201ff9a4 style(next): use the new check box and radio button style only for the elements using the "tn-checkbox" and "tn-radio" CSS classes 2025-01-24 22:35:08 +02:00
Adorian Doran
b43c85157b client: mark the links that should use the new style 2025-01-24 10:49:14 +02:00
Adorian Doran
03e7f4b991 style(next): links: add light / dark theme support 2025-01-24 10:21:50 +02:00
Adorian Doran
d6cb2a3751 style(next): links: fix hover state artifacts on Chromium-based browsers 2025-01-24 10:14:18 +02:00
Adorian Doran
0f2fcebe40 client: mark the links that should use the new style 2025-01-23 01:28:35 +02:00
Adorian Doran
f4d2c5a2d2 client: mark the links that should use the new style 2025-01-23 01:12:05 +02:00
Adorian Doran
027649213a style(next): create a new style for links 2025-01-23 00:47:14 +02:00
Adorian Doran
b0014de365 Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-22 23:48:29 +02:00
Adorian Doran
84c03c214e Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-22 19:28:26 +02:00
Adorian Doran
455bb38865 client: switch widget: refactor 2025-01-22 01:30:10 +02:00
Adorian Doran
d4ef84e0b7 client: switch widget: handle the disabled state 2025-01-22 01:24:09 +02:00
Adorian Doran
356c0570f3 client: switch widget: improve appearance 2025-01-22 00:48:25 +02:00
Adorian Doran
7f78504223 style(next): improve the matching of check boxes and radio buttons that have to be restyled 2025-01-21 23:46:27 +02:00
Adorian Doran
ec0d7c0835 client: switch widget: redo the switch style 2025-01-21 21:59:08 +02:00
Adorian Doran
8bdc5c9fea client: switch widget: prevent the check box to become out of sync with the switch toggle status 2025-01-21 05:11:34 +02:00
Adorian Doran
039112f106 client: switch widget: refactor 2025-01-21 04:49:07 +02:00
Adorian Doran
76b99a00f4 client: switch widget: use a simpler HTML structure and refactor its internals 2025-01-21 04:21:01 +02:00
Adorian Doran
8f612f4683 style(next): properly handle disabled check boxes and radio buttons 2025-01-20 17:09:01 +02:00
Adorian Doran
5ad4092cb2 Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-18 20:23:16 +02:00
Adorian Doran
faa4a5fcd8 client: update the markup for the "Available MIME types" check boxes 2025-01-17 01:36:54 +02:00
Adorian Doran
e8f6f68987 style(next): disable text selection for check boxes and radio buttons 2025-01-17 01:24:34 +02:00
Adorian Doran
07dd8995b6 style(next): overhaul the check / uncheck animation for radio buttons 2025-01-17 01:22:09 +02:00
Adorian Doran
4c84bc724d style(next): refactor 2025-01-17 01:06:25 +02:00
Adorian Doran
2773d560b9 style(next): enforce left padding for radios and check boxes 2025-01-17 01:00:19 +02:00
Adorian Doran
a2a9bee7eb style(next): rename some variables 2025-01-17 00:58:11 +02:00
Adorian Doran
398591fb1f style(next): restyle check boxes 2025-01-17 00:51:26 +02:00
Adorian Doran
fe539b1647 style(next): tweak the colors of the radio buttons 2025-01-16 23:39:18 +02:00
Adorian Doran
15dbaf441d style(next): restyle radio buttons 2025-01-16 18:51:35 +02:00
Adorian Doran
edd39ad0db style(next): fix the quick search box 2025-01-15 02:59:55 +02:00
Adorian Doran
c2dbf0a463 style(next): fix the note title text box 2025-01-15 02:44:28 +02:00
Adorian Doran
896d7a383b style(next): tweak combo boxes 2025-01-15 02:31:49 +02:00
Adorian Doran
a184d5bb26 client: use combo box-like dropdown buttons in the "Basic Properties" widget 2025-01-15 02:14:56 +02:00
Adorian Doran
0339d83434 style(next): create a style for dropdown buttons to mimic combo boxes 2025-01-15 02:11:17 +02:00
Adorian Doran
f7efc033e1 style(next): fix broken states on textareas 2025-01-15 01:28:18 +02:00
Adorian Doran
cb65591004 style(next): tweak the group header for combo box items 2025-01-14 22:39:30 +02:00
Adorian Doran
40b95325dd style(next): tweak the combo box arrow 2025-01-14 22:10:06 +02:00
Adorian Doran
99a6e65d15 style(next): update the colors of combo boxes 2025-01-14 21:40:05 +02:00
Adorian Doran
9724b19cd2 style(next): add visual cues for the input action buttons when focused via keyboard 2025-01-14 02:12:26 +02:00
Adorian Doran
707d406ee9 style(next): fix the background of disabled input action buttons 2025-01-14 01:51:18 +02:00
Adorian Doran
26e3c13575 style(next): add states for input action buttons, tweak card background color on dark theme 2025-01-14 01:46:28 +02:00
Adorian Doran
f462e7f93b style(next): add the initial style for input groups 2025-01-14 01:30:31 +02:00
Adorian Doran
5dd7b2c049 style(next): tweak the inputs wrapped inside input groups 2025-01-13 21:45:56 +02:00
Adorian Doran
9ea7b35e6a style(next): use the text box appearance for text areas as well 2025-01-13 21:23:12 +02:00
Adorian Doran
56fb70ab5e style(next): refactor CSS 2025-01-13 21:12:27 +02:00
Adorian Doran
93e740cf36 style(next): restyle text boxes 2025-01-13 14:51:23 +02:00
Adorian Doran
c9bf752b1f Merge branch 'develop' of https://github.com/TriliumNext/Notes into style/next/forms 2025-01-12 23:45:03 +02:00
Adorian Doran
0115ea8088 style(next): create a CSS file for form-related styles 2025-01-09 01:23:17 +02:00
568 changed files with 21224 additions and 5779 deletions

View File

@@ -15,3 +15,9 @@ indent_size = 2
indent_style = space indent_style = space
insert_final_newline = true insert_final_newline = true
trim_trailing_whitespace = true trim_trailing_whitespace = true
[*.yml]
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

View File

@@ -0,0 +1,213 @@
name: "Build Electron App"
description: "Builds and packages the Electron app for different platforms"
inputs:
os:
description: "One of the supported platforms: macos, linux, windows"
required: true
arch:
description: "The architecture to build for: x64, arm64"
required: true
extension:
description: "Platform specific extensions to copy in the output: dmg, deb, rpm, exe, zip"
required: true
runs:
using: composite
steps:
# Certificate setup
- name: Import Apple certificates
if: inputs.os == 'macos'
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ env.APPLE_APP_CERTIFICATE_BASE64 }}
p12-password: ${{ env.APPLE_APP_CERTIFICATE_PASSWORD }}
keychain: build
keychain-password: ${{ github.run_id }}
- name: Install Installer certificate
if: inputs.os == 'macos'
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ env.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
p12-password: ${{ env.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
keychain: build
keychain-password: ${{ github.run_id }}
# We don't need to create a keychain here because we're using the build keychain that was created in the previous step
create-keychain: false
- name: Verify certificates
if: inputs.os == 'macos'
shell: bash
run: |
echo "Available signing identities:"
security find-identity -v -p codesigning build.keychain
- name: Set up Python and other macOS dependencies
if: ${{ inputs.os == 'macos' }}
shell: bash
run: |
brew install python-setuptools
brew install create-dmg
- name: Install dependencies for RPM and Flatpak package building
if: ${{ inputs.os == 'linux' }}
shell: bash
run: |
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
FLATPAK_ARCH=$(if [[ ${{ inputs.arch }} = 'arm64' ]]; then echo 'aarch64'; else echo 'x86_64'; fi)
FLATPAK_VERSION='24.08'
flatpak install --user --no-deps --arch $FLATPAK_ARCH --assumeyes runtime/org.freedesktop.Platform/$FLATPAK_ARCH/$FLATPAK_VERSION runtime/org.freedesktop.Sdk/$FLATPAK_ARCH/$FLATPAK_VERSION org.electronjs.Electron2.BaseApp/$FLATPAK_ARCH/$FLATPAK_VERSION
# Build setup
- name: Install dependencies
shell: bash
run: npm ci
- name: Update build info
shell: bash
run: npm run chore:update-build-info
# Critical debugging configuration
- name: Run electron-forge build with enhanced logging
shell: bash
env:
# Pass through required environment variables for signing and notarization
APPLE_TEAM_ID: ${{ env.APPLE_TEAM_ID }}
APPLE_ID: ${{ env.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ env.APPLE_ID_PASSWORD }}
run: |
# Map OS names to Electron Forge platform names
if [ "${{ inputs.os }}" = "macos" ]; then
PLATFORM="darwin"
elif [ "${{ inputs.os }}" = "windows" ]; then
PLATFORM="win32"
else
PLATFORM="${{ inputs.os }}"
fi
npm run electron-forge:make -- \
--arch=${{ inputs.arch }} \
--platform=$PLATFORM
# Add DMG signing step
- name: Sign DMG
if: inputs.os == 'macos'
shell: bash
run: |
echo "Signing DMG file..."
dmg_file=$(find out -name "*.dmg" -print -quit)
if [ -n "$dmg_file" ]; then
echo "Found DMG: $dmg_file"
# Get the first valid signing identity from the keychain
SIGNING_IDENTITY=$(security find-identity -v -p codesigning build.keychain | grep "Developer ID Application" | head -1 | sed -E 's/.*"([^"]+)".*/\1/')
if [ -z "$SIGNING_IDENTITY" ]; then
echo "Error: No valid Developer ID Application certificate found in keychain"
exit 1
fi
echo "Using signing identity: $SIGNING_IDENTITY"
# Sign the DMG
codesign --force --sign "$SIGNING_IDENTITY" --options runtime --timestamp "$dmg_file"
# Notarize the DMG
xcrun notarytool submit "$dmg_file" --apple-id "$APPLE_ID" --password "$APPLE_ID_PASSWORD" --team-id "$APPLE_TEAM_ID" --wait
# Staple the notarization ticket
xcrun stapler staple "$dmg_file"
else
echo "No DMG found to sign"
fi
- name: Verify code signing
if: inputs.os == 'macos'
shell: bash
run: |
echo "Verifying code signing for all artifacts..."
# First check the .app bundle
echo "Looking for .app bundle..."
app_bundle=$(find out -name "*.app" -print -quit)
if [ -n "$app_bundle" ]; then
echo "Found app bundle: $app_bundle"
echo "Verifying app bundle signing..."
codesign --verify --deep --strict --verbose=2 "$app_bundle"
echo "Displaying app bundle signing info..."
codesign --display --verbose=2 "$app_bundle"
echo "Checking entitlements..."
codesign --display --entitlements :- "$app_bundle"
echo "Checking notarization status..."
xcrun stapler validate "$app_bundle" || echo "Warning: App bundle not notarized yet"
else
echo "No .app bundle found to verify"
fi
# Then check DMG if it exists
echo "Looking for DMG..."
dmg_file=$(find out -name "*.dmg" -print -quit)
if [ -n "$dmg_file" ]; then
echo "Found DMG: $dmg_file"
echo "Verifying DMG signing..."
codesign --verify --deep --strict --verbose=2 "$dmg_file"
echo "Displaying DMG signing info..."
codesign --display --verbose=2 "$dmg_file"
echo "Checking DMG notarization..."
xcrun stapler validate "$dmg_file" || echo "Warning: DMG not notarized yet"
else
echo "No DMG found to verify"
fi
# Finally check ZIP if it exists
echo "Looking for ZIP..."
zip_file=$(find out -name "*.zip" -print -quit)
if [ -n "$zip_file" ]; then
echo "Found ZIP: $zip_file"
echo "Note: ZIP files are not code signed, but their contents should be"
fi
- name: Prepare artifacts
shell: bash
run: |
mkdir -p upload
if [ "${{ inputs.os }}" = "macos" ]; then
# For macOS, we need to look in specific directories based on the maker
echo "Collecting macOS artifacts..."
# Look for DMG files recursively
echo "Looking for DMG files..."
dmg_file=$(find out -name "*.dmg" -print -quit)
if [ -n "$dmg_file" ]; then
echo "Found DMG: $dmg_file"
cp "$dmg_file" "upload/TriliumNextNotes-${{ github.ref_name }}-macos-${{ inputs.arch }}.dmg"
else
echo "Warning: No DMG file found"
fi
# Look for ZIP files recursively
echo "Looking for ZIP files..."
zip_file=$(find out -name "*.zip" -print -quit)
if [ -n "$zip_file" ]; then
echo "Found ZIP: $zip_file"
cp "$zip_file" "upload/TriliumNextNotes-${{ github.ref_name }}-macos-${{ inputs.arch }}.zip"
else
echo "Warning: No ZIP file found"
fi
else
# For other platforms, use the existing logic but with better error handling
echo "Collecting artifacts for ${{ inputs.os }}..."
for ext in ${{ inputs.extension }}; do
echo "Looking for .$ext files..."
file=$(find out -name "*.$ext" -print -quit)
if [ -n "$file" ]; then
echo "Found $file for extension $ext"
cp "$file" "upload/TriliumNextNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}.$ext"
else
echo "Warning: No file found with extension .$ext"
fi
done
fi
echo "Final contents of upload directory:"
ls -la upload/

31
.github/actions/build-server/action.yml vendored Normal file
View File

@@ -0,0 +1,31 @@
inputs:
os:
description: "One of the supported platforms: windows"
required: true
arch:
description: "The architecture to build for: x64, arm64"
required: true
runs:
using: composite
steps:
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- name: Install dependencies
shell: bash
run: npm ci
- name: Run Linux server build
env:
MATRIX_ARCH: ${{ inputs.arch }}
shell: bash
run: |
npm run chore:update-build-info
./bin/build-server.sh
- name: Prepare artifacts
shell: bash
run: |
mkdir -p upload
file=$(find dist -name '*.tar.xz' -print -quit)
cp "$file" "upload/TriliumNextNotes-Server-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}.tar.xz"

View File

@@ -33,6 +33,10 @@ jobs:
- name: Run the TypeScript build - name: Run the TypeScript build
run: npx tsc run: npx tsc
- name: Run the unit tests
run: npm run test
build_docker: build_docker:
name: Build Docker image name: Build Docker image
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -45,7 +49,7 @@ jobs:
with: with:
node-version: 20 node-version: 20
cache: "npm" cache: "npm"
- run: npm ci - run: npm ci
- name: Run the TypeScript build - name: Run the TypeScript build
run: npx tsc run: npx tsc
- name: Create server-package.json - name: Create server-package.json
@@ -55,7 +59,7 @@ jobs:
with: with:
context: . context: .
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max
test_docker: test_docker:
name: Check Docker build name: Check Docker build
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -69,7 +73,7 @@ jobs:
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Set IMAGE_NAME to lowercase - name: Set IMAGE_NAME to lowercase
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
- name: Set TEST_TAG to lowercase - name: Set TEST_TAG to lowercase
@@ -83,12 +87,12 @@ jobs:
with: with:
node-version: 20 node-version: 20
cache: "npm" cache: "npm"
- run: npm ci - run: npm ci
- name: Run the TypeScript build - name: Run the TypeScript build
run: npx tsc run: npx tsc
- name: Create server-package.json - name: Create server-package.json
run: cat package.json | grep -v electron > server-package.json run: cat package.json | grep -v electron > server-package.json
@@ -101,12 +105,12 @@ jobs:
tags: ${{ env.TEST_TAG }} tags: ${{ env.TEST_TAG }}
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max
- name: Validate container run output - name: Validate container run output
run: | run: |
CONTAINER_ID=$(docker run -d --log-driver=journald --rm --name trilium_local ${{ env.TEST_TAG }}) CONTAINER_ID=$(docker run -d --log-driver=journald --rm --name trilium_local ${{ env.TEST_TAG }})
echo "Container ID: $CONTAINER_ID" echo "Container ID: $CONTAINER_ID"
- name: Wait for the healthchecks to pass - name: Wait for the healthchecks to pass
uses: stringbean/docker-healthcheck-action@v3 uses: stringbean/docker-healthcheck-action@v3
with: with:

View File

@@ -33,7 +33,7 @@ jobs:
steps: steps:
- name: Checkout the repository - name: Checkout the repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Set IMAGE_NAME to lowercase - name: Set IMAGE_NAME to lowercase
run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
- name: Set TEST_TAG to lowercase - name: Set TEST_TAG to lowercase
@@ -47,16 +47,16 @@ jobs:
with: with:
node-version: 20 node-version: 20
cache: "npm" cache: "npm"
- name: Install npm dependencies - name: Install npm dependencies
run: npm ci run: npm ci
- name: Install Playwright Browsers - name: Install Playwright Browsers
run: npx playwright install --with-deps run: npx playwright install --with-deps
- name: Run the TypeScript build - name: Run the TypeScript build
run: npx tsc run: npx tsc
- name: Create server-package.json - name: Create server-package.json
run: cat package.json | grep -v electron > server-package.json run: cat package.json | grep -v electron > server-package.json
@@ -69,12 +69,12 @@ jobs:
tags: ${{ env.TEST_TAG }} tags: ${{ env.TEST_TAG }}
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max
- name: Validate container run output - name: Validate container run output
run: | run: |
CONTAINER_ID=$(docker run -d --log-driver=journald --rm --network=host -e TRILIUM_PORT=8082 --volume ./integration-tests/db:/home/node/trilium-data --name trilium_local ${{ env.TEST_TAG }}) CONTAINER_ID=$(docker run -d --log-driver=journald --rm --network=host -e TRILIUM_PORT=8082 --volume ./integration-tests/db:/home/node/trilium-data --name trilium_local ${{ env.TEST_TAG }})
echo "Container ID: $CONTAINER_ID" echo "Container ID: $CONTAINER_ID"
- name: Wait for the healthchecks to pass - name: Wait for the healthchecks to pass
uses: stringbean/docker-healthcheck-action@v3 uses: stringbean/docker-healthcheck-action@v3
with: with:
@@ -82,7 +82,7 @@ jobs:
wait-time: 50 wait-time: 50
require-status: running require-status: running
require-healthy: true require-healthy: true
- name: Run Playwright tests - name: Run Playwright tests
run: TRILIUM_DOCKER=1 npx playwright test run: TRILIUM_DOCKER=1 npx playwright test
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
@@ -100,7 +100,20 @@ jobs:
build: build:
name: Build Docker images name: Build Docker images
runs-on: ubuntu-latest strategy:
fail-fast: false
matrix:
include:
- dockerfile: Dockerfile.alpine
platform: linux/amd64
image: ubuntu-latest
- dockerfile: Dockerfile
platform: linux/arm64
image: ubuntu-24.04-arm
- dockerfile: Dockerfile
platform: linux/arm/v7
image: ubuntu-24.04-arm
runs-on: ${{ matrix.image }}
needs: needs:
- test_docker - test_docker
permissions: permissions:
@@ -108,16 +121,6 @@ jobs:
packages: write packages: write
attestations: write attestations: write
id-token: write id-token: write
strategy:
fail-fast: false
matrix:
include:
- dockerfile: Dockerfile.alpine
platform: linux/amd64
- dockerfile: Dockerfile
platform: linux/arm64
- dockerfile: Dockerfile
platform: linux/arm/v7
steps: steps:
- name: Prepare - name: Prepare
run: | run: |
@@ -144,13 +147,13 @@ jobs:
type=sha type=sha
flavor: | flavor: |
latest=false latest=false
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- name: Set up node & dependencies - name: Set up node & dependencies
uses: actions/setup-node@v4 uses: actions/setup-node@v4
@@ -169,14 +172,14 @@ jobs:
registry: ${{ env.GHCR_REGISTRY }} registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }} username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: ${{ env.DOCKERHUB_REGISTRY }} registry: ${{ env.DOCKERHUB_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push by digest - name: Build and push by digest
id: build id: build
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
@@ -186,13 +189,13 @@ jobs:
platforms: ${{ matrix.platform }} platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true outputs: type=image,name=${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
- name: Export digest - name: Export digest
run: | run: |
mkdir -p /tmp/digests mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}" digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}" touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest - name: Upload digest
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
@@ -220,7 +223,7 @@ jobs:
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
@@ -237,14 +240,14 @@ jobs:
registry: ${{ env.GHCR_REGISTRY }} registry: ${{ env.GHCR_REGISTRY }}
username: ${{ github.actor }} username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to DockerHub - name: Login to DockerHub
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: ${{ env.DOCKERHUB_REGISTRY }} registry: ${{ env.DOCKERHUB_REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create manifest list and push - name: Create manifest list and push
working-directory: /tmp/digests working-directory: /tmp/digests
run: | run: |
@@ -255,7 +258,7 @@ jobs:
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \
$(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${REF_NAME} \
$(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) $(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
@@ -267,25 +270,25 @@ jobs:
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \
$(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) $(printf '${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
-t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable \
$(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) $(printf '${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *)
# Small delay to ensure stable tag is fully propagated # Small delay to ensure stable tag is fully propagated
sleep 5 sleep 5
# Now update latest tags # Now update latest tags
docker buildx imagetools create \ docker buildx imagetools create \
-t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ -t ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:stable
docker buildx imagetools create \ docker buildx imagetools create \
-t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ -t ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable ${{ env.DOCKERHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:stable
fi fi
- name: Inspect image - name: Inspect image
run: | run: |
docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} docker buildx imagetools inspect ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}

View File

@@ -7,7 +7,7 @@ on:
paths-ignore: paths-ignore:
- "docs/**" - "docs/**"
- ".github/workflows/main-docker.yml" - ".github/workflows/main-docker.yml"
workflow_dispatch: workflow_dispatch:
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
@@ -23,13 +23,13 @@ jobs:
os: os:
- name: macos - name: macos
image: macos-latest image: macos-latest
extension: dmg extension: [dmg, zip]
- name: linux - name: linux
image: ubuntu-latest image: ubuntu-latest
extension: deb extension: [deb, rpm, zip, flatpak]
- name: windows - name: windows
image: windows-latest image: windows-latest
extension: exe extension: [exe, zip]
runs-on: ${{ matrix.os.image }} runs-on: ${{ matrix.os.image }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -37,31 +37,27 @@ jobs:
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
- name: Set up Python for appdmg to be installed - name: Run the build
if: ${{ matrix.os.name == 'macos' }} uses: ./.github/actions/build-electron
run: brew install python-setuptools with:
- name: Install dependencies os: ${{ matrix.os.name }}
run: npm ci arch: ${{ matrix.arch }}
- name: Update build info extension: ${{ matrix.os.extension }}
run: npm run update-build-info env:
- name: Run electron-forge APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
run: npm run make-electron -- --arch=${{ matrix.arch }} APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
- name: Prepare artifacts (Unix) APPLE_INSTALLER_CERTIFICATE_BASE64: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
if: runner.os != 'windows' APPLE_INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
# Clean up keychain after build
- name: Clean up keychain
if: matrix.os.name == 'macos' && always()
run: | run: |
mkdir -p upload security delete-keychain build.keychain
file=$(find out/make -name '*.zip' -print -quit)
cp "$file" "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}-${{ github.ref_name }}.zip"
file=$(find out/make -name '*.${{ matrix.os.extension }}' -print -quit)
cp "$file" "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}-${{ github.ref_name }}.${{ matrix.os.extension }}"
- name: Prepare artifacts (Windows)
if: runner.os == 'windows'
run: |
mkdir upload
$file = Get-ChildItem -Path out/make -Filter '*.zip' -Recurse | Select-Object -First 1
Copy-Item -Path $file.FullName -Destination "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}-${{ github.ref_name }}.zip"
$file = Get-ChildItem -Path out/make -Filter '*.${{ matrix.os.extension }}' -Recurse | Select-Object -First 1
Copy-Item -Path $file.FullName -Destination "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}-${{ github.ref_name }}.${{ matrix.os.extension }}"
- name: Publish artifacts - name: Publish artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
@@ -72,6 +68,7 @@ jobs:
with: with:
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.${{matrix.os.extension}} name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }}.${{matrix.os.extension}}
path: upload/*.${{ matrix.os.extension }} path: upload/*.${{ matrix.os.extension }}
build_linux_server: build_linux_server:
name: Build Linux Server name: Build Linux Server
strategy: strategy:
@@ -86,24 +83,10 @@ jobs:
runs-on: ${{ matrix.runs-on }} runs-on: ${{ matrix.runs-on }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up node & dependencies - name: Run the build
uses: actions/setup-node@v4 uses: ./.github/actions/build-server
with: with:
node-version: 20 arch: ${{ matrix.arch }}
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run Linux server build
env:
MATRIX_ARCH: ${{ matrix.arch }}
run: |
npm run update-build-info
./bin/build-server.sh
- name: Prepare artifacts
run: |
mkdir -p upload
file=$(find dist -name '*.tar.xz' -print -quit)
cp "$file" "upload/TriliumNextNotes-linux-${{ matrix.arch }}-${{ github.ref_name }}.tar.xz"
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
name: TriliumNextNotes linux server ${{ matrix.arch }} name: TriliumNextNotes linux server ${{ matrix.arch }}

View File

@@ -2,7 +2,7 @@ name: Nightly Release
on: on:
# This can be used to automatically publish nightlies at UTC nighttime # This can be used to automatically publish nightlies at UTC nighttime
schedule: schedule:
- cron: '0 2 * * *' # run at 2 AM UTC - cron: "0 2 * * *" # run at 2 AM UTC
# This can be used to allow manually triggering nightlies from the web interface # This can be used to allow manually triggering nightlies from the web interface
workflow_dispatch: workflow_dispatch:
env: env:
@@ -12,7 +12,7 @@ permissions:
contents: write contents: write
jobs: jobs:
nightly-electron: nightly-electron:
name: Deploy nightly name: Deploy nightly
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -20,76 +20,51 @@ jobs:
os: os:
- name: macos - name: macos
image: macos-latest image: macos-latest
extension: dmg extension: [dmg, zip]
- name: linux - name: linux
image: ubuntu-latest image: ubuntu-latest
extension: deb extension: [deb, rpm, zip, flatpak]
- name: windows - name: windows
image: windows-latest image: windows-latest
extension: exe extension: [exe, zip]
runs-on: ${{ matrix.os.image }} runs-on: ${{ matrix.os.image }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up node & dependencies - name: Set up node & dependencies
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
- name: Set up Python for appdmg to be installed
if: ${{ matrix.os.name == 'macos' }}
run: brew install python-setuptools
- name: Install dependencies - name: Install dependencies
shell: bash
run: npm ci run: npm ci
- name: Update build info
run: npm run update-build-info
- name: Update nightly version - name: Update nightly version
run: npm run ci-update-nightly-version run: npm run chore:ci-update-nightly-version
- name: Run electron-forge - name: Run the build
run: npm run make-electron -- --arch=${{ matrix.arch }} uses: ./.github/actions/build-electron
- name: Prepare artifacts (Unix)
if: runner.os != 'windows'
run: |
mkdir -p upload
file=$(find out/make -name '*.zip' -print -quit)
cp "$file" "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}.zip"
file=$(find out/make -name '*.${{ matrix.os.extension }}' -print -quit)
cp "$file" "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}.${{ matrix.os.extension }}"
- name: Prepare artifacts (Windows)
if: runner.os == 'windows'
run: |
mkdir upload
$file = Get-ChildItem -Path out/make -Filter '*.zip' -Recurse | Select-Object -First 1
Copy-Item -Path $file.FullName -Destination "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}.zip"
$file = Get-ChildItem -Path out/make -Filter '*.${{ matrix.os.extension }}' -Recurse | Select-Object -First 1
Copy-Item -Path $file.FullName -Destination "upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}.${{ matrix.os.extension }}"
- name: Publish artifacts
uses: actions/upload-artifact@v4
with: with:
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }} os: ${{ matrix.os.name }}
path: upload/*.zip arch: ${{ matrix.arch }}
overwrite: true extension: ${{ join(matrix.os.extension, ' ') }}
- name: Publish installer artifacts env:
uses: actions/upload-artifact@v4 APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
with: APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
name: TriliumNextNotes ${{ matrix.os.name }} ${{ matrix.arch }} APPLE_INSTALLER_CERTIFICATE_BASE64: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
path: upload/*.${{ matrix.os.extension }} APPLE_INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
overwrite: true APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
- name: Deploy release - name: Publish release
uses: WebFreak001/deploy-nightly@v3.2.0 uses: softprops/action-gh-release@v2
with: with:
upload_url: ${{ env.GITHUB_UPLOAD_URL }} make_latest: false
release_id: ${{ env.GITHUB_RELEASE_ID }} prerelease: true
asset_path: upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}.zip # path to archive to upload draft: false
asset_name: TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}-nightly.zip # name to upload the release as, use $$ to insert date (YYYYMMDD) and 6 letter commit hash fail_on_unmatched_files: true
asset_content_type: application/zip # required by GitHub API files: upload/*.*
- name: Deploy installer release tag_name: nightly
uses: WebFreak001/deploy-nightly@v3.2.0 name: Nightly Build
with:
upload_url: ${{ env.GITHUB_UPLOAD_URL }}
release_id: ${{ env.GITHUB_RELEASE_ID }}
asset_path: upload/TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}.${{ matrix.os.extension }} # path to archive to upload
asset_name: TriliumNextNotes-${{ matrix.os.name }}-${{ matrix.arch }}-nightly.${{ matrix.os.extension }} # name to upload the release as, use $$ to insert date (YYYYMMDD) and 6 letter commit hash
asset_content_type: application/zip # required by GitHub API
nightly-server: nightly-server:
name: Deploy server nightly name: Deploy server nightly
strategy: strategy:
@@ -104,34 +79,20 @@ jobs:
runs-on: ${{ matrix.runs-on }} runs-on: ${{ matrix.runs-on }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Run Linux server build
env:
MATRIX_ARCH: ${{ matrix.arch }}
run: |
npm run update-build-info
./bin/build-server.sh
- name: Prepare artifacts
run: |
mkdir -p upload
file=$(find dist -name '*.tar.xz' -print -quit)
cp "$file" "upload/TriliumNextNotes-linux-${{ matrix.arch }}-${{ github.ref_name }}.tar.xz"
- uses: actions/upload-artifact@v4
with:
name: TriliumNextNotes linux server ${{ matrix.arch }}
path: upload/TriliumNextNotes-linux-${{ matrix.arch }}-${{ github.ref_name }}.tar.xz
- name: Deploy release - name: Run the build
uses: WebFreak001/deploy-nightly@v3.2.0 uses: ./.github/actions/build-server
with: with:
upload_url: ${{ env.GITHUB_UPLOAD_URL }} os: linux
release_id: ${{ env.GITHUB_RELEASE_ID }} arch: ${{ matrix.arch }}
asset_path: upload/TriliumNextNotes-linux-x64-${{ github.ref_name }}.tar.xz # path to archive to upload
asset_name: TriliumNextNotes-linux-x64-nightly.zip # name to upload the release as, use $$ to insert date (YYYYMMDD) and 6 letter commit hash - name: Publish release
asset_content_type: application/zip # required by GitHub API uses: softprops/action-gh-release@v2
with:
make_latest: false
prerelease: true
draft: false
fail_on_unmatched_files: true
files: upload/*.*
tag_name: nightly
name: Nightly Build

View File

@@ -3,7 +3,7 @@ on:
push: push:
tags: tags:
- "v*" - "v*"
workflow_dispatch: workflow_dispatch:
permissions: permissions:
contents: write contents: write
concurrency: concurrency:
@@ -20,13 +20,13 @@ jobs:
os: os:
- name: macos - name: macos
image: macos-latest image: macos-latest
extension: dmg extension: [dmg, zip]
- name: linux - name: linux
image: ubuntu-latest image: ubuntu-latest
extension: deb extension: [deb, rpm, zip, flatpak]
- name: windows - name: windows
image: windows-latest image: windows-latest
extension: exe extension: [exe, zip]
runs-on: ${{ matrix.os.image }} runs-on: ${{ matrix.os.image }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -34,37 +34,28 @@ jobs:
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: 20 node-version: 20
- name: Set up Python for appdmg to be installed - name: Run the build
if: ${{ matrix.os.name == 'macos' }} uses: ./.github/actions/build-electron
run: brew install python-setuptools with:
- name: Install dependencies os: ${{ matrix.os.name }}
run: npm ci arch: ${{ matrix.arch }}
- name: Update build info extension: ${{ join(matrix.os.extension, ' ') }}
run: npm run update-build-info env:
- name: Run electron-forge APPLE_APP_CERTIFICATE_BASE64: ${{ secrets.APPLE_APP_CERTIFICATE_BASE64 }}
run: npm run make-electron -- --arch=${{ matrix.arch }} APPLE_APP_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_APP_CERTIFICATE_PASSWORD }}
- name: Prepare artifacts (Unix) APPLE_INSTALLER_CERTIFICATE_BASE64: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_BASE64 }}
if: runner.os != 'windows' APPLE_INSTALLER_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_INSTALLER_CERTIFICATE_PASSWORD }}
run: | APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
mkdir -p upload APPLE_ID: ${{ secrets.APPLE_ID }}
file=$(find out/make -name '*.zip' -print -quit) APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
cp "$file" "upload/TriliumNextNotes-${{ github.ref_name }}-${{ matrix.os.name }}-${{ matrix.arch }}.zip"
file=$(find out/make -name '*.${{ matrix.os.extension }}' -print -quit)
cp "$file" "upload/TriliumNextNotes-${{ github.ref_name }}-${{ matrix.os.name }}-${{ matrix.arch }}.${{ matrix.os.extension }}"
- name: Prepare artifacts (Windows)
if: runner.os == 'windows'
run: |
mkdir upload
$file = Get-ChildItem -Path out/make -Filter '*.zip' -Recurse | Select-Object -First 1
Copy-Item -Path $file.FullName -Destination "upload/TriliumNextNotes-${{ github.ref_name }}-${{ matrix.os.name }}-${{ matrix.arch }}.zip"
$file = Get-ChildItem -Path out/make -Filter '*.${{ matrix.os.extension }}' -Recurse | Select-Object -First 1
Copy-Item -Path $file.FullName -Destination "upload/TriliumNextNotes-${{ github.ref_name }}-${{ matrix.os.name }}-${{ matrix.arch }}.${{ matrix.os.extension }}"
- name: Publish release - name: Publish release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
draft: true draft: true
fail_on_unmatched_files: true fail_on_unmatched_files: true
files: upload/*.* files: upload/*.*
build_linux_server-x64: build_linux_server-x64:
name: Build Linux Server name: Build Linux Server
strategy: strategy:
@@ -79,27 +70,16 @@ jobs:
runs-on: ${{ matrix.runs-on }} runs-on: ${{ matrix.runs-on }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up node & dependencies
uses: actions/setup-node@v4 - name: Run the build
uses: ./.github/actions/build-server
with: with:
node-version: 20 os: linux
cache: "npm" arch: ${{ matrix.arch }}
- name: Install dependencies
run: npm ci
- name: Run Linux server build
env:
MATRIX_ARCH: ${{ matrix.arch }}
run: |
npm run update-build-info
./bin/build-server.sh
- name: Prepare artifacts
run: |
mkdir -p upload
file=$(find dist -name '*.tar.xz' -print -quit)
cp "$file" "upload/TriliumNextNotes-linux-${{ matrix.arch }}-${{ github.ref_name }}.tar.xz"
- name: Publish release - name: Publish release
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
draft: true draft: true
fail_on_unmatched_files: true fail_on_unmatched_files: true
files: upload/*.* files: upload/*.*

3
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.cache
.DS_Store .DS_Store
node_modules/ node_modules/
dist/ dist/
@@ -7,8 +8,10 @@ src/public/app-dist/
npm-debug.log npm-debug.log
yarn-error.log yarn-error.log
po-*/ po-*/
.flatpak-builder/
*.db *.db
!test/**/*.db
!integration-tests/db/document.db !integration-tests/db/document.db
!integration-tests/db/config.ini !integration-tests/db/config.ini
integration-tests/db/log integration-tests/db/log

View File

@@ -4,7 +4,7 @@ image:
tasks: tasks:
- before: nvm install 20.15.1 && nvm use 20.15.1 - before: nvm install 20.15.1 && nvm use 20.15.1
init: npm install init: npm install
command: npm run start-server command: npm run server:start
ports: ports:
- port: 8080 - port: 8080

View File

@@ -2,4 +2,5 @@
*.md *.md
*.yml *.yml
libraries/* libraries/*
docs/* docs/*
src/public/app/doc_notes/**/*

View File

@@ -1,3 +1,7 @@
{ {
"recommendations": ["lokalise.i18n-ally", "editorconfig.editorconfig"] "recommendations": [
"lokalise.i18n-ally",
"editorconfig.editorconfig",
"vitest.explorer"
]
} }

View File

@@ -18,5 +18,13 @@
"github-actions.workflows.pinned.workflows": [".github/workflows/nightly.yml"], "github-actions.workflows.pinned.workflows": [".github/workflows/nightly.yml"],
"[css]": { "[css]": {
"editor.defaultFormatter": "vscode.css-language-features" "editor.defaultFormatter": "vscode.css-language-features"
},
"npm.exclude": [
"**/build",
"**/dist",
"**/out/**"
],
"[xml]": {
"editor.defaultFormatter": "redhat.vscode-xml"
} }
} }

View File

@@ -1,5 +1,5 @@
# Build stage # Build stage
FROM node:22.13.1-bullseye-slim AS builder FROM node:22.14.0-bullseye-slim AS builder
# Configure build dependencies in a single layer # Configure build dependencies in a single layer
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -25,7 +25,7 @@ RUN cp -R build/src/* src/. && \
cp build/docker_healthcheck.js . && \ cp build/docker_healthcheck.js . && \
rm docker_healthcheck.ts && \ rm docker_healthcheck.ts && \
npm install && \ npm install && \
npm run webpack && \ npm run build:webpack && \
npm prune --omit=dev && \ npm prune --omit=dev && \
npm cache clean --force && \ npm cache clean --force && \
cp -r src/public/app/doc_notes src/public/app-dist/. && \ cp -r src/public/app/doc_notes src/public/app-dist/. && \
@@ -36,7 +36,7 @@ RUN cp -R build/src/* src/. && \
rm -r build rm -r build
# Runtime stage # Runtime stage
FROM node:22.13.1-bullseye-slim FROM node:22.14.0-bullseye-slim
# Install only runtime dependencies # Install only runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \

View File

@@ -1,5 +1,5 @@
# Build stage # Build stage
FROM node:22.13.1-alpine AS builder FROM node:22.14.0-alpine AS builder
# Configure build dependencies # Configure build dependencies
RUN apk add --no-cache --virtual .build-dependencies \ RUN apk add --no-cache --virtual .build-dependencies \
@@ -24,7 +24,7 @@ RUN cp -R build/src/* src/. && \
cp build/docker_healthcheck.js . && \ cp build/docker_healthcheck.js . && \
rm docker_healthcheck.ts && \ rm docker_healthcheck.ts && \
npm install && \ npm install && \
npm run webpack && \ npm run build:webpack && \
npm prune --omit=dev && \ npm prune --omit=dev && \
npm cache clean --force && \ npm cache clean --force && \
cp -r src/public/app/doc_notes src/public/app-dist/. && \ cp -r src/public/app/doc_notes src/public/app-dist/. && \
@@ -35,7 +35,7 @@ RUN cp -R build/src/* src/. && \
rm -r build rm -r build
# Runtime stage # Runtime stage
FROM node:22.13.1-alpine FROM node:22.14.0-alpine
# Install runtime dependencies # Install runtime dependencies
RUN apk add --no-cache su-exec shadow RUN apk add --no-cache su-exec shadow

View File

@@ -78,7 +78,7 @@ Trilium 也提供 Flatpak
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 致谢 ## 👏 致谢

View File

@@ -86,7 +86,7 @@ Clone localmente y ejecute
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 Reconocimientos ## 👏 Reconocimientos

View File

@@ -73,7 +73,7 @@ Clona localmente ed esegui
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 Riconoscimenti ## 👏 Riconoscimenti

View File

@@ -54,7 +54,7 @@ Trilium は Flatpak としても提供されます:
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 📢 シャウトアウト ## 📢 シャウトアウト

View File

@@ -102,7 +102,7 @@ You can also read [Patterns of personal knowledge base](https://triliumnext.gith
git clone https://github.com/TriliumNext/Notes.git git clone https://github.com/TriliumNext/Notes.git
cd Notes cd Notes
npm install npm install
npm run start-server npm run server:start
``` ```
### Documentation ### Documentation
@@ -118,8 +118,10 @@ Head on over to our [Docs repo](https://github.com/TriliumNext/Docs)
## 🤝 Support ## 🤝 Support
You can support the original Trilium developer using GitHub Sponsors, [PayPal](https://paypal.me/za4am) or Bitcoin (bitcoin:bc1qv3svjn40v89mnkre5vyvs2xw6y8phaltl385d2). Support for the TriliumNext organization will be possible in the near future. For now, you can:
Support for the TriliumNext organization will be possible in the near future. - 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/Notes/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).
## 🔑 License ## 🔑 License

View File

@@ -44,7 +44,7 @@ Trilium предоставляется в виде десктопного при
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 Благодарности ## 👏 Благодарности

View File

@@ -66,8 +66,6 @@ chmod 755 $PKG_DIR/trilium.sh
cp bin/tpl/anonymize-database.sql $PKG_DIR/ cp bin/tpl/anonymize-database.sql $PKG_DIR/
cp -r translations $PKG_DIR/ cp -r translations $PKG_DIR/
cp -r dump-db $PKG_DIR/
rm -rf $PKG_DIR/dump-db/node_modules
VERSION=`jq -r ".version" package.json` VERSION=`jq -r ".version" package.json`

View File

@@ -7,9 +7,9 @@ const DEST_DIR_NODE_MODULES = path.join(DEST_DIR, "node_modules");
const VERBOSE = process.env.VERBOSE; const VERBOSE = process.env.VERBOSE;
function log(...args) { function log(...args: any[]) {
if (VERBOSE) { if (VERBOSE) {
console.log(args); console.log(...args);
} }
} }
@@ -29,7 +29,12 @@ const copy = async () => {
fs.copySync(path.join("build", srcFile), destFile, { recursive: true }); fs.copySync(path.join("build", srcFile), destFile, { recursive: true });
} }
const filesToCopy = ["config-sample.ini", "tsconfig.webpack.json"]; const filesToCopy = [
"config-sample.ini",
"tsconfig.webpack.json",
"./src/etapi/etapi.openapi.yaml",
"./src/routes/api/openapi.json"
];
for (const file of filesToCopy) { for (const file of filesToCopy) {
log(`Copying ${file}`); log(`Copying ${file}`);
await fs.copy(file, path.join(DEST_DIR, file)); await fs.copy(file, path.join(DEST_DIR, file));
@@ -81,7 +86,6 @@ const copy = async () => {
"node_modules/mermaid/dist/", "node_modules/mermaid/dist/",
"node_modules/jquery/dist/", "node_modules/jquery/dist/",
"node_modules/jquery-hotkeys/", "node_modules/jquery-hotkeys/",
"node_modules/print-this/",
"node_modules/split.js/dist/", "node_modules/split.js/dist/",
"node_modules/panzoom/dist/", "node_modules/panzoom/dist/",
"node_modules/i18next/", "node_modules/i18next/",
@@ -91,7 +95,6 @@ const copy = async () => {
"node_modules/mark.js/dist/", "node_modules/mark.js/dist/",
"node_modules/normalize.css/", "node_modules/normalize.css/",
"node_modules/jquery.fancytree/dist/", "node_modules/jquery.fancytree/dist/",
"node_modules/bootstrap/dist/",
"node_modules/autocomplete.js/dist/", "node_modules/autocomplete.js/dist/",
"node_modules/codemirror/lib/", "node_modules/codemirror/lib/",
"node_modules/codemirror/addon/", "node_modules/codemirror/addon/",

View File

@@ -23,7 +23,7 @@ rm -rf "$DIR"
mkdir -pv "$DIR" mkdir -pv "$DIR"
echo Webpack start echo Webpack start
npm run webpack npm run build:webpack
echo Webpack finish echo Webpack finish
echo "Copying Trilium to build directory $DIR" echo "Copying Trilium to build directory $DIR"

View File

@@ -22,6 +22,10 @@ inkscape -w 180 -h 180 "../icon-color.svg" -o "./ios/apple-touch-icon.png"
# Build PNGs # Build PNGs
inkscape -w 128 -h 128 "../icon-color.svg" -o "./png/128x128.png" inkscape -w 128 -h 128 "../icon-color.svg" -o "./png/128x128.png"
inkscape -w 256 -h 256 "../icon-color.svg" -o "./png/256x256.png" inkscape -w 256 -h 256 "../icon-color.svg" -o "./png/256x256.png"
# Build dev icons (including tray)
inkscape -w 16 -h 16 "../icon-purple.svg" -o "./png/16x16-dev.png"
inkscape -w 32 -h 32 "../icon-purple.svg" -o "./png/32x32-dev.png"
inkscape -w 256 -h 256 "../icon-purple.svg" -o "./png/256x256-dev.png" inkscape -w 256 -h 256 "../icon-purple.svg" -o "./png/256x256-dev.png"
# Build Mac .icns # Build Mac .icns
@@ -41,5 +45,8 @@ icnsutil compose -f "mac/icon.icns" ./mac/*.png
# Build Windows icon # Build Windows icon
magick -background none "../icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico" magick -background none "../icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico"
# Build Windows setup icon
magick -background none "../icon-installer.svg" -define icon:auto-resize=16,32,48,64,128,256 "./win/setup.ico"
# Build Squirrel splash image # Build Squirrel splash image
magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "./win/setup-banner.gif" magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "./win/setup-banner.gif"

View File

@@ -1,12 +1,17 @@
[Desktop Entry] [Desktop Entry]
<% if (productName) { %>Name=<%= productName %> <%=
<% } %><% if (description) { %>Comment=<%= description %> Object.entries({
<% } %><% if (genericName) { %>GenericName=<%= genericName %> "Name": productName,
<% } %><% if (name) { %>Exec=<%= name %> %U "Comment": description,
Icon=<%= name %> "GenericName": genericName,
<% } %>Type=Application "Exec": name ? `${name} %U` : undefined,
StartupNotify=true "Icon": name,
<% if (productName) { %>StartupWMClass=<%= productName %> "Type": "Application",
<% } if (categories && categories.length) { %>Categories=<%= categories.join(';') %>; "StartupNotify": "true",
<% } %><% if (mimeType && mimeType.length) { %>MimeType=<%= mimeType.join(';') %>; "StartupWMClass": productName,
<% } %> "Categories": categories?.length ? `${categories.join(";")};` : undefined,
"MimeType": mimeType?.length ? `${mimeType.join(";")};` : undefined
})
.map(line => line[1] ? line.join("=") : undefined)
.filter(line => !!line)
.join("\n")%>

191
bin/generate-openapi.ts Normal file
View File

@@ -0,0 +1,191 @@
import { fileURLToPath } from "url";
import { dirname, join } from "path";
import swaggerJsdoc from "swagger-jsdoc";
import fs from "fs";
/*
* Usage: npm run generate-openapi | tail -n1 > x.json
*
* Inspect generated file by opening it in https://editor-next.swagger.io/
*
*/
const options = {
definition: {
openapi: "3.1.1",
info: {
title: "Trilium Notes - Sync server API",
version: "0.96.6",
description:
"This is the internal sync server API used by Trilium Notes / TriliumNext Notes.\n\n_If you're looking for the officially supported External Trilium API, see [here](https://triliumnext.github.io/Docs/Wiki/etapi.html)._\n\nThis page does not yet list all routes. For a full list, see the [route controller](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/routes/routes.ts).",
contact: {
name: "TriliumNext issue tracker",
url: "https://github.com/TriliumNext/Notes/issues"
},
license: {
name: "GNU Free Documentation License 1.3 (or later)",
url: "https://www.gnu.org/licenses/fdl-1.3"
}
}
},
apis: [
// Put individual files here to have them ordered first.
"./src/routes/api/setup.ts",
// all other files
"./src/routes/api/*.ts",
"./bin/generate-openapi.js"
]
};
const openapiSpecification = swaggerJsdoc(options);
const scriptDir = dirname(fileURLToPath(import.meta.url));
const outputPath = join(scriptDir, "..", "src", "routes", "api", "openapi.json");
fs.writeFileSync(outputPath, JSON.stringify(openapiSpecification));
console.log("Saved to ", outputPath);
/**
* @swagger
* tags:
* - name: auth
* description: Authentication
* - name: sync
* description: Synchronization
* - name: data
*/
/**
* @swagger
* components:
* schemas:
* Attribute:
* type: object
* properties:
* attributeId:
* type: string
* example: "4G1DPrI58PAb"
* noteId:
* $ref: "#/components/schemas/NoteId"
* type:
* type: string
* enum: ["attribute", "relation"]
* name:
* type: string
* example: "internalLink"
* value:
* type: string
* example: "hA8aHSpTRdZ6"
* description: "If type = \"relation\", a note ID. Otherwise, the attribute content."
* position:
* type: integer
* example: 20
* isInheritable:
* type: boolean
* Blob:
* type: object
* properties:
* blobId:
* type: string
* example: "8iqMIB8eiY1tPYmElfjm"
* content:
* type:
* - string
* - 'null'
* description: "`null` if not text."
* contentLength:
* type: integer
* dateModified:
* $ref: "#/components/schemas/DateTime"
* utcDateModified:
* $ref: "#/components/schemas/UtcDateTime"
* Branch:
* type: object
* properties:
* branchId:
* $ref: "#/components/schemas/BranchId"
* noteId:
* $ref: "#/components/schemas/NoteId"
* parentNoteId:
* $ref: "#/components/schemas/NoteId"
* notePosition:
* type: integer
* example: 20
* prefix:
* type:
* - string
* - 'null'
* isExpanded:
* type: boolean
* BranchId:
* type: string
* example: "WUjhaGp4EKah_ur11rSfHkzeV"
* description: Equal to `{parentNoteId}_{noteId}`
* DateTime:
* type: string
* example: "2025-02-14 08:19:59.203+0100"
* EntityChange:
* type: object
* properties:
* entityChange:
* type: object
* properties:
* entityName:
* type: string
* example: "notes"
* description: Database table for this entity.
* changeId:
* type: string
* example: "changeId9630"
* description: ID, referenced in `entity_changes` table.
* entity:
* type: object
* description: Encoded entity data. Object has one property for each database column.
* Note:
* type: object
* properties:
* noteId:
* $ref: "#/components/schemas/NoteId"
* title:
* type: string
* isProtected:
* type: boolean
* type:
* type: string
* example: "text"
* enum: ["text", "code", "render", "file", "image", "search", "relationMap", "book", "noteMap", "mermaid", "canvas", "webView", "launcher", "doc", "contentWidget", "mindMap", "geoMap"]
* description: "[Reference list](https://github.com/TriliumNext/Notes/blob/v0.91.6/src/services/note_types.ts)"
* mime:
* type: string
* example: "text/html"
* blobId:
* type: string
* example: "z4PhNX7vuL3xVChQ1m2A"
* NoteId:
* type: string
* example: "ur11rSfHkzeV"
* description: "12-character note ID. Special values: \"none\"`, `\"root\"."
* Timestamps:
* type: object
* properties:
* dateCreated:
* $ref: "#/components/schemas/DateTime"
* dateModified:
* $ref: "#/components/schemas/DateTime"
* utcDateCreated:
* $ref: "#/components/schemas/UtcDateTime"
* utcDateModified:
* $ref: "#/components/schemas/UtcDateTime"
* UtcDateTime:
* type: string
* example: "2025-02-13T07:42:47.698Z"
* description: "Result of `new Date().toISOString().replace('T', ' ')`"
* securitySchemes:
* user-password:
* type: apiKey
* name: trilium-cred
* in: header
* description: "Username and password, formatted as `user:password`"
* session:
* type: apiKey
* in: cookie
* name: trilium.sid
*/

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
export GITHUB_REPO=trilium set -e
if [[ $# -eq 0 ]] ; then if [[ $# -eq 0 ]] ; then
echo "Missing argument of new version" echo "Missing argument of new version"
@@ -32,7 +32,7 @@ mv package.json.tmp package.json
git add package.json git add package.json
npm run update-build-info npm run chore:update-build-info
git add src/services/build.ts git add src/services/build.ts
@@ -40,10 +40,18 @@ TAG=v$VERSION
echo "Committing package.json version change" echo "Committing package.json version change"
git commit -m "release $VERSION" git commit -m "chore(release): $VERSION"
git push git push
echo "Tagging commit with $TAG" echo "Tagging commit with $TAG"
git tag $TAG git tag $TAG
git push origin $TAG git push origin $TAG
echo "Updating master"
git fetch
git checkout master
git reset --hard origin/master
git merge origin/develop
git push

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-bookmark"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 7v14l-6 -4l-6 4v-14a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4z" /></svg>

After

Width:  |  Height:  |  Size: 383 B

View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
if ! command -v magick &> /dev/null; then
echo "This tool requires ImageMagick to be installed in order to create the icons."
exit 1
fi
if ! command -v inkscape &> /dev/null; then
echo "This tool requires Inkscape to be render sharper SVGs than ImageMagick."
exit 1
fi
script_dir=$(realpath $(dirname $0))
images_dir="$script_dir/../../images"
output_dir="$images_dir/app-icons/tray"
function generateDpiScaledIcons {
file=$1
suffix=$2
name="$(basename $file .svg)$suffix"
inkscape -w 16 -h 16 "$file" -o "$output_dir/$name.png"
inkscape -w 20 -h 20 "$file" -o "$output_dir/$name@1.25x.png"
inkscape -w 24 -h 24 "$file" -o "$output_dir/$name@1.5x.png"
inkscape -w 32 -h 32 "$file" -o "$output_dir/$name@2x.png"
}
generateDpiScaledIcons "$images_dir/icon-black.svg" "Template"
generateDpiScaledIcons "$images_dir/icon-color.svg"
generateDpiScaledIcons "$images_dir/icon-purple.svg"
for file in *.svg; do
name="$(basename $file .svg)Template"
generateDpiScaledIcons "$file" "Template"
magick "$output_dir/$name.png" -channel RGB -negate "$output_dir/$name-inverted.png"
magick "$output_dir/$name@1.25x.png" -channel RGB -negate "$output_dir/$name-inverted@1.25x.png"
magick "$output_dir/$name@1.5x.png" -channel RGB -negate "$output_dir/$name-inverted@1.5x.png"
magick "$output_dir/$name@2x.png" -channel RGB -negate "$output_dir/$name-inverted@2x.png"
done

1
bin/tray-icons/close.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-x"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M18 6l-12 12" /><path d="M6 6l12 12" /></svg>

After

Width:  |  Height:  |  Size: 356 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-plus"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 5l0 14" /><path d="M5 12l14 0" /></svg>

After

Width:  |  Height:  |  Size: 357 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-history"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 8l0 4l2 2" /><path d="M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5" /></svg>

After

Width:  |  Height:  |  Size: 387 B

1
bin/tray-icons/today.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-star"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M11 21h-5a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v3.5" /><path d="M16 3v4" /><path d="M8 3v4" /><path d="M4 11h11" /><path d="M17.8 20.817l-2.172 1.138a.392 .392 0 0 1 -.568 -.41l.415 -2.411l-1.757 -1.707a.389 .389 0 0 1 .217 -.665l2.428 -.352l1.086 -2.193a.392 .392 0 0 1 .702 0l1.086 2.193l2.428 .352a.39 .39 0 0 1 .217 .665l-1.757 1.707l.414 2.41a.39 .39 0 0 1 -.567 .411l-2.172 -1.138z" /></svg>

After

Width:  |  Height:  |  Size: 734 B

View File

@@ -28,6 +28,21 @@ keyPath=
# expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7) # expressjs shortcuts are supported: loopback(127.0.0.1/8, ::1/128), linklocal(169.254.0.0/16, fe80::/10), uniquelocal(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7)
trustedReverseProxy=false trustedReverseProxy=false
[Session]
# Use this setting to set a custom value for the "Path" Attribute value of the session cookie.
# This can be useful, when you have several instances running on the same domain, under different paths (e.g. by using a reverse proxy).
# It prevents your instances from overwriting each others' cookies, allowing you to stay logged in multiple instances simultanteously.
# E.g. if you have instances running under https://your-domain.com/triliumNext/instanceA and https://your-domain.com/triliumNext/instanceB
# you would want to set the cookiePath value to "/triliumNext/instanceA" for your first and "/triliumNext/instanceB" for your second instance
cookiePath=/
# Use this setting to set a custom value for the "Max-Age" Attribute of the session cookie.
# This controls how long your session will be valid, before it expires and you need to log in again, when you use the "Remember Me" option.
# Value needs to be entered in Seconds.
# Default value is 1814400 Seconds, which is 21 Days.
cookieMaxAge=1814400
[Sync] [Sync]
#syncServerHost= #syncServerHost=
#syncServerTimeout= #syncServerTimeout=

Binary file not shown.

View File

@@ -1,11 +1,24 @@
module.exports = () => { import sql from "../../src/services/sql";
const sql = require("../../src/services/sql"); import utils from "../../src/services/utils";
const utils = require("../../src/services/utils");
interface NoteContentsRow {
noteId: string;
content: string | Buffer;
dateModified: string;
utcDateModified: string;
}
interface NoteRevisionContents {
noteRevisionId: string;
content: string | Buffer;
utcDateModified: string;
}
export default () => {
const existingBlobIds = new Set(); const existingBlobIds = new Set();
for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) { for (const noteId of sql.getColumn<string>(`SELECT noteId FROM note_contents`)) {
const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]); const row = sql.getRow<NoteContentsRow>(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]);
const blobId = utils.hashedBlobId(row.content); const blobId = utils.hashedBlobId(row.content);
if (!existingBlobIds.has(blobId)) { if (!existingBlobIds.has(blobId)) {
@@ -28,7 +41,7 @@ module.exports = () => {
} }
for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) { for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) {
const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]); const row = sql.getRow<NoteRevisionContents>(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]);
const blobId = utils.hashedBlobId(row.content); const blobId = utils.hashedBlobId(row.content);
if (!existingBlobIds.has(blobId)) { if (!existingBlobIds.has(blobId)) {
@@ -44,7 +57,7 @@ module.exports = () => {
sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]); sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]);
} else { } else {
// duplicates // duplicates
sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]); sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteRevisionId]);
} }
sql.execute("UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?", [blobId, row.noteRevisionId]); sql.execute("UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?", [blobId, row.noteRevisionId]);

View File

@@ -1,15 +1,15 @@
module.exports = () => { import becca from "../../src/becca/becca";
const beccaLoader = require("../../src/becca/becca_loader"); import becca_loader from "../../src/becca/becca_loader";
const becca = require("../../src/becca/becca"); import cls from "../../src/services/cls";
const cls = require("../../src/services/cls"); import log from "../../src/services/log";
const log = require("../../src/services/log"); import sql from "../../src/services/sql";
const sql = require("../../src/services/sql");
export default () => {
cls.init(() => { cls.init(() => {
// emergency disabling of image compression since it appears to make problems in migration to 0.61 // emergency disabling of image compression since it appears to make problems in migration to 0.61
sql.execute(`UPDATE options SET value = 'false' WHERE name = 'compressImages'`); sql.execute(`UPDATE options SET value = 'false' WHERE name = 'compressImages'`);
beccaLoader.load(); becca_loader.load();
for (const note of Object.values(becca.notes)) { for (const note of Object.values(becca.notes)) {
try { try {

View File

@@ -38,12 +38,12 @@
<div id="content" class="type-text ck-content"> <div id="content" class="type-text ck-content">
<h3>The native node bindings</h3><p><code>better-sqlite3</code> has native Node bindings. With updates of <code>better-sqlite3</code>, but also of Electron and Node.js versions, these bindings need to be updated.</p><p>Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js.</p><p>During development, <code>npm install</code> tries to build or reuse prebuilt natives for the current Node.js version. This makes <code>npm run start-server</code> work out of the box. Trying to run <code>npm run start-electron</code> with these versions generally causes an error such as this:</p><pre><code class="language-text-plain">Uncaught Exception: <h3>The native node bindings</h3><p><code>better-sqlite3</code> has native Node bindings. With updates of <code>better-sqlite3</code>, but also of Electron and Node.js versions, these bindings need to be updated.</p><p>Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js.</p><p>During development, <code>npm install</code> tries to build or reuse prebuilt natives for the current Node.js version. This makes <code>npm run server:start</code> work out of the box. Trying to run <code>npm run electron:start</code> with these versions generally causes an error such as this:</p><pre><code class="language-text-plain">Uncaught Exception:
Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node' Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node'
was compiled against a different Node.js version using was compiled against a different Node.js version using
NODE_MODULE_VERSION 108. This version of Node.js requires NODE_MODULE_VERSION 108. This version of Node.js requires
NODE_MODULE_VERSION 116. Please try re-compiling or re-installing NODE_MODULE_VERSION 116. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).</code></pre><h3>How the natives are handled</h3><p>Locally, this can be fixed by rebuilding the binaries, which is what <code>npm run switch-electron</code> does, which uses <code>electron-rebuild</code> under the hood.</p><p>When the deliveries are built (see&nbsp;<a class="reference-link type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>), it is not feasible to rebuild the dependencies since we are building for multiple platforms. Luckily, <code>better-sqlite3</code> provides these prebuilt binaries from us, available as artifacts on <a href="https://github.com/WiseLibs/better-sqlite3/releases/">their GitHub releases page</a>.&nbsp;</p><p>The build script manages the natives for <code>better-sqlite3</code> by keeping a copy of the <code>.node</code> file for every platform in <code>bin/better-sqlite3</code>.</p><p>Whenever the version of <code>better-sqlite3</code> changes, the <code>.node</code> files must also be renewed based on their releases page. To simplify this process, a script was created in <code>bin/better-sqlite3/update.sh</code>.</p><h2>How to update the natives</h2><p>The update script needs to know the version of Electron or Node.js for which to download the prebuilt binaries.</p><p>If you get errors during download, check on the <a href="https://github.com/WiseLibs/better-sqlite3/releases/">releases page</a> to ensure that this particular combination of Electron/Node actually exists for the given release.</p><p>To determine the <code>NODE_MODULE_VERSION</code> that is required, look for <code>This version of Node.js requires</code><br><code>NODE_MODULE_VERSION</code> in the error when starting Trilium via:</p><ul><li><code>npm run start-electron</code> (or run any Electron <a href="UTB518X6X9Uh.html" class="type-text">delivery</a>), case in which the <span style="color:#c0bfbc;"><code>ELECTRON_VERSION</code> variable needs to be changed.</span></li><li><span style="color:#c0bfbc;"><code>npm run start-server</code></span> (or run the Linux server delivery), case in which the <code>NODE_VERSION</code> variable needs to be changed.</li></ul><p>Check which files got changed after running the update script and for each platform that got changed, test it locally via&nbsp;<a class="reference-link type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>&nbsp;or via the CI.</p> the module (for instance, using `npm rebuild` or `npm install`).</code></pre><h3>How the natives are handled</h3><p>Locally, this can be fixed by rebuilding the binaries, which is what <code>npm run electron:switch</code> does, which uses <code>electron-rebuild</code> under the hood.</p><p>When the deliveries are built (see&nbsp;<a class="reference-link type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>), it is not feasible to rebuild the dependencies since we are building for multiple platforms. Luckily, <code>better-sqlite3</code> provides these prebuilt binaries from us, available as artifacts on <a href="https://github.com/WiseLibs/better-sqlite3/releases/">their GitHub releases page</a>.&nbsp;</p><p>The build script manages the natives for <code>better-sqlite3</code> by keeping a copy of the <code>.node</code> file for every platform in <code>bin/better-sqlite3</code>.</p><p>Whenever the version of <code>better-sqlite3</code> changes, the <code>.node</code> files must also be renewed based on their releases page. To simplify this process, a script was created in <code>bin/better-sqlite3/update.sh</code>.</p><h2>How to update the natives</h2><p>The update script needs to know the version of Electron or Node.js for which to download the prebuilt binaries.</p><p>If you get errors during download, check on the <a href="https://github.com/WiseLibs/better-sqlite3/releases/">releases page</a> to ensure that this particular combination of Electron/Node actually exists for the given release.</p><p>To determine the <code>NODE_MODULE_VERSION</code> that is required, look for <code>This version of Node.js requires</code><br><code>NODE_MODULE_VERSION</code> in the error when starting Trilium via:</p><ul><li><code>npm run electron:start</code> (or run any Electron <a href="UTB518X6X9Uh.html" class="type-text">delivery</a>), case in which the <span style="color:#c0bfbc;"><code>ELECTRON_VERSION</code> variable needs to be changed.</span></li><li><span style="color:#c0bfbc;"><code>npm run server:start</code></span> (or run the Linux server delivery), case in which the <code>NODE_VERSION</code> variable needs to be changed.</li></ul><p>Check which files got changed after running the update script and for each platform that got changed, test it locally via&nbsp;<a class="reference-link type-text" href="UTB518X6X9Uh.html">Build deliveries locally</a>&nbsp;or via the CI.</p>
</div> </div>

View File

@@ -38,7 +38,7 @@
<div id="content" class="type-text ck-content"> <div id="content" class="type-text ck-content">
<h2>Server live reload</h2><p>If running the server using <code>npm run start-server</code>, the server will watch for changes in <code>src/public</code> and trigger a frontend reload if that occurs.</p><h2>Electron live reload</h2><p>Similarly, <code>npm run start-electron</code> supports live refresh &nbsp;as well.</p><p>However, a core difference is that Electron watches <code>dist/src/public</code> instead of <code>src/public</code> since Electron runs on its own copy of the files.</p><p>To ameliorate that, a separate watch script has been implemented which automatically copies files from <code>src/public</code> to <code>dist/src/public</code> whenever a change is detected. To run it:</p><pre><code class="language-text-plain">npm run </code></pre><h2>Technical details</h2><ul><li>This mechanism is managed at server level by watching for changes in<code>services/ws.ts</code>.</li></ul> <h2>Server live reload</h2><p>If running the server using <code>npm run server:start</code>, the server will watch for changes in <code>src/public</code> and trigger a frontend reload if that occurs.</p><h2>Electron live reload</h2><p>Similarly, <code>npm run electron:start</code> supports live refresh &nbsp;as well.</p><p>However, a core difference is that Electron watches <code>dist/src/public</code> instead of <code>src/public</code> since Electron runs on its own copy of the files.</p><p>To ameliorate that, a separate watch script has been implemented which automatically copies files from <code>src/public</code> to <code>dist/src/public</code> whenever a change is detected. To run it:</p><pre><code class="language-text-plain">npm run </code></pre><h2>Technical details</h2><ul><li>This mechanism is managed at server level by watching for changes in<code>services/ws.ts</code>.</li></ul>
</div> </div>

View File

@@ -71,7 +71,7 @@
<a id="server" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Server<a href="#server" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>To install TriliumNext on your own server (including via Docker from <a href="https://hub.docker.com/r/triliumnext/notes" target="_blank" class="external">Dockerhub</a>) follow <a href="https://triliumnext.github.io/Docs/Wiki/server-installation" target="_blank" class="external">the server installation docs</a>.</p> <a id="server" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Server<a href="#server" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>To install TriliumNext on your own server (including via Docker from <a href="https://hub.docker.com/r/triliumnext/notes" target="_blank" class="external">Dockerhub</a>) follow <a href="https://triliumnext.github.io/Docs/Wiki/server-installation" target="_blank" class="external">the server installation docs</a>.</p>
<a id="📝-documentation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">📝 Documentation<a href="#📝-documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p><a href="https://triliumnext.github.io/Docs" target="_blank" class="external">See wiki for complete list of documentation pages.</a></p> <a id="📝-documentation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">📝 Documentation<a href="#📝-documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p><a href="https://triliumnext.github.io/Docs" target="_blank" class="external">See wiki for complete list of documentation pages.</a></p>
<p>You can also read <a href="https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge" target="_blank" class="external">Patterns of personal knowledge base</a> to get some inspiration on how you might use TriliumNext.</p> <p>You can also read <a href="https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge" target="_blank" class="external">Patterns of personal knowledge base</a> to get some inspiration on how you might use TriliumNext.</p>
<a id="💻-contribute" class="tsd-anchor"></a><h2 class="tsd-anchor-link">💻 Contribute<a href="#💻-contribute" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="code" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Code<a href="#code" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="shell"><span class="hl-0">git</span><span class="hl-1"> </span><span class="hl-3">clone</span><span class="hl-1"> </span><span class="hl-3">https://github.com/TriliumNext/Notes.git</span><br/><span class="hl-0">cd</span><span class="hl-1"> </span><span class="hl-3">Notes</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">install</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">run</span><span class="hl-1"> </span><span class="hl-3">start-server</span> <a id="💻-contribute" class="tsd-anchor"></a><h2 class="tsd-anchor-link">💻 Contribute<a href="#💻-contribute" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="code" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Code<a href="#code" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="shell"><span class="hl-0">git</span><span class="hl-1"> </span><span class="hl-3">clone</span><span class="hl-1"> </span><span class="hl-3">https://github.com/TriliumNext/Notes.git</span><br/><span class="hl-0">cd</span><span class="hl-1"> </span><span class="hl-3">Notes</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">install</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-3">run</span><span class="hl-1"> </span><span class="hl-3">server:start</span>
</code><button type="button">Copy</button></pre> </code><button type="button">Copy</button></pre>
<a id="documentation" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Documentation<a href="#documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Head on over to our <a href="https://github.com/TriliumNext/Docs" target="_blank" class="external">Docs repo</a></p> <a id="documentation" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Documentation<a href="#documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Head on over to our <a href="https://github.com/TriliumNext/Docs" target="_blank" class="external">Docs repo</a></p>

View File

@@ -78,7 +78,7 @@ Trilium 也提供 Flatpak
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 致谢 ## 👏 致谢

View File

@@ -86,7 +86,7 @@ Clone localmente y ejecute
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 Reconocimientos ## 👏 Reconocimientos

View File

@@ -73,7 +73,7 @@ Clona localmente ed esegui
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 Riconoscimenti ## 👏 Riconoscimenti

View File

@@ -54,7 +54,7 @@ Trilium は Flatpak としても提供されます:
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 📢 シャウトアウト ## 📢 シャウトアウト

View File

@@ -102,7 +102,7 @@ You can also read [Patterns of personal knowledge base](https://triliumnext.gith
git clone https://github.com/TriliumNext/Notes.git git clone https://github.com/TriliumNext/Notes.git
cd Notes cd Notes
npm install npm install
npm run start-server npm run server:start
``` ```
### Documentation ### Documentation

View File

@@ -44,7 +44,7 @@ Trilium предоставляется в виде десктопного при
```shell ```shell
npm install npm install
npm run start-server npm run server:start
``` ```
## 👏 Благодарности ## 👏 Благодарности

View File

@@ -38,7 +38,7 @@
<div id="content" class="type-text ck-content"> <div id="content" class="type-text ck-content">
<h3>Run server</h3><p>Run with default settings:</p><pre><code class="language-text-plain">npm run start-server</code></pre><p>Run with custom port:</p><pre><code class="language-text-plain">TRILIUM_PORT=8082 npm run start-server</code></pre><h3>Run Electron</h3><p>Rebuild <code>better-sqlite3</code> dependency:</p><pre><code class="language-text-plain">npm run switch-electron</code></pre><p>Then run Electron:</p><pre><code class="language-text-plain">npm run start-electron</code></pre><p>To run Electron using the same data directory as the production version:</p><pre><code class="language-text-plain">npm run start-electron-no-dir</code></pre><p>When done, switch back the <code>better-sqlite3</code> dependency:</p><pre><code class="language-text-plain">npm run switch-server</code></pre> <h3>Run server</h3><p>Run with default settings:</p><pre><code class="language-text-plain">npm run server:start</code></pre><p>Run with custom port:</p><pre><code class="language-text-plain">TRILIUM_PORT=8082 npm run server:start</code></pre><h3>Run Electron</h3><p>Rebuild <code>better-sqlite3</code> dependency:</p><pre><code class="language-text-plain">npm run electron:switch</code></pre><p>Then run Electron:</p><pre><code class="language-text-plain">npm run electron:start</code></pre><p>To run Electron using the same data directory as the production version:</p><pre><code class="language-text-plain">npm run electron:start-no-dir</code></pre><p>When done, switch back the <code>better-sqlite3</code> dependency:</p><pre><code class="language-text-plain">npm run server:switch</code></pre>
</div> </div>

View File

@@ -38,7 +38,7 @@
<div id="content" class="type-text ck-content"> <div id="content" class="type-text ck-content">
<ul><li>Provides context about when the build was made and the corresponding Git revision.</li><li>The information is displayed to the client when going in the about dialog.</li><li>The build information is hard-coded in <code>src/services/build.ts</code>. This file is generated automatically via <code>npm run update-build-info</code> which itself is run automatically whenever making a build in the CI, or a <a href="UTB518X6X9Uh.html" class="type-text">local delivery</a>.</li></ul> <ul><li>Provides context about when the build was made and the corresponding Git revision.</li><li>The information is displayed to the client when going in the about dialog.</li><li>The build information is hard-coded in <code>src/services/build.ts</code>. This file is generated automatically via <code>npm run chore:update-build-info</code> which itself is run automatically whenever making a build in the CI, or a <a href="UTB518X6X9Uh.html" class="type-text">local delivery</a>.</li></ul>
</div> </div>

View File

@@ -8,8 +8,8 @@ test("Help popup", async ({ page, context }) => {
await app.goto(); await app.goto();
const popupPromise = page.waitForEvent("popup"); const popupPromise = page.waitForEvent("popup");
await app.currentNoteSplit.press("F1"); await app.currentNoteSplit.press("Shift+F1");
await page.getByRole("link", { name: "online" }).click(); await page.getByRole("link", { name: "online" }).click();
const popup = await popupPromise; const popup = await popupPromise;
expect(popup.url()).toBe("https://triliumnext.github.io/Docs/"); expect(popup.url()).toBe("https://triliumnext.github.io/Docs/");
}); });

View File

@@ -11,16 +11,14 @@ test("Displays translation on desktop", async ({ page, context }) => {
const app = new App(page, context); const app = new App(page, context);
await app.goto(); await app.goto();
await expect(page.locator("#left-pane .quick-search input")) await expect(page.locator("#left-pane .quick-search input")).toHaveAttribute("placeholder", "Quick search");
.toHaveAttribute("placeholder", "Quick search");
}); });
test("Displays translation on mobile", async ({ page, context }) => { test("Displays translation on mobile", async ({ page, context }) => {
const app = new App(page, context); const app = new App(page, context);
await app.goto({ isMobile: true }); await app.goto({ isMobile: true });
await expect(page.locator("#mobile-sidebar-wrapper .quick-search input")) await expect(page.locator("#mobile-sidebar-wrapper .quick-search input")).toHaveAttribute("placeholder", "Quick search");
.toHaveAttribute("placeholder", "Quick search");
}); });
test("Displays translations in Settings", async ({ page, context }) => { test("Displays translations in Settings", async ({ page, context }) => {
@@ -44,14 +42,16 @@ test("User can change language from settings", async ({ page, context }) => {
// Check that the default value (English) is set. // Check that the default value (English) is set.
await expect(app.currentNoteSplit).toContainText("Theme"); await expect(app.currentNoteSplit).toContainText("Theme");
const languageCombobox = await app.currentNoteSplit.getByRole("combobox").first(); const languageCombobox = app.currentNoteSplit.getByRole("combobox").first();
await expect(languageCombobox).toHaveValue("en"); await expect(languageCombobox).toHaveValue("en");
// Select Chinese and ensure the translation is set. // Select Chinese and ensure the translation is set.
await languageCombobox.selectOption("cn"); await languageCombobox.selectOption("cn");
await expect(app.currentNoteSplit).toContainText("主题", { timeout: 15000 }); await expect(app.currentNoteSplit).toContainText("主题", { timeout: 15000 });
await expect(languageCombobox).toHaveValue("cn");
// Select English again. // Select English again.
await languageCombobox.selectOption("en"); await languageCombobox.selectOption("en");
await expect(app.currentNoteSplit).toContainText("Language", { timeout: 15000 }); await expect(app.currentNoteSplit).toContainText("Language", { timeout: 15000 });
await expect(languageCombobox).toHaveValue("en");
}); });

View File

@@ -19,13 +19,13 @@ test("Can drag tabs around", async ({ page, context }) => {
let tab = app.getTab(0); let tab = app.getTab(0);
// Drag the first tab at the end // Drag the first tab at the end
await tab.dragTo(app.getTab(2), { targetPosition: { x: 50, y: 0 }}); await tab.dragTo(app.getTab(2), { targetPosition: { x: 50, y: 0 } });
tab = app.getTab(2); tab = app.getTab(2);
await expect(tab).toContainText(NOTE_TITLE); await expect(tab).toContainText(NOTE_TITLE);
// Drag the tab to the left // Drag the tab to the left
await tab.dragTo(app.getTab(0), { targetPosition: { x: 50, y: 0 }}); await tab.dragTo(app.getTab(0), { targetPosition: { x: 50, y: 0 } });
await expect(app.getTab(0)).toContainText(NOTE_TITLE); await expect(app.getTab(0)).toContainText(NOTE_TITLE);
}); });

View File

@@ -39,7 +39,9 @@ test("Displays lint errors for backend script", async ({ page, context }) => {
}); });
async function expectTooltip(page: Page, tooltip: string) { async function expectTooltip(page: Page, tooltip: string) {
await expect(page.locator(".CodeMirror-lint-tooltip:visible", { await expect(
"hasText": tooltip page.locator(".CodeMirror-lint-tooltip:visible", {
})).toBeVisible(); hasText: tooltip
})
).toBeVisible();
} }

View File

@@ -3,7 +3,8 @@ import App from "../support/app";
test("renders ELK flowchart", async ({ page, context }) => { test("renders ELK flowchart", async ({ page, context }) => {
await testAriaSnapshot({ await testAriaSnapshot({
page, context, page,
context,
noteTitle: "Flowchart ELK on", noteTitle: "Flowchart ELK on",
snapshot: ` snapshot: `
- document: - document:
@@ -22,12 +23,13 @@ test("renders ELK flowchart", async ({ page, context }) => {
- paragraph: Guarantee - paragraph: Guarantee
- text: Interfaces for B - text: Interfaces for B
` `
}) });
}); });
test("renders standard flowchart", async ({ page, context }) => { test("renders standard flowchart", async ({ page, context }) => {
await testAriaSnapshot({ await testAriaSnapshot({
page, context, page,
context,
noteTitle: "Flowchart ELK off", noteTitle: "Flowchart ELK off",
snapshot: ` snapshot: `
- document: - document:
@@ -46,7 +48,7 @@ test("renders standard flowchart", async ({ page, context }) => {
- paragraph: C - paragraph: C
- text: Interfaces for B - text: Interfaces for B
` `
}) });
}); });
interface AriaTestOpts { interface AriaTestOpts {

View File

@@ -44,8 +44,8 @@ test("Highlights list is displayed", async ({ page, context }) => {
await expect(app.sidebar).toContainText("Highlights List"); await expect(app.sidebar).toContainText("Highlights List");
const rootList = app.sidebar.locator(".highlights-list ol"); const rootList = app.sidebar.locator(".highlights-list ol");
let index=0; let index = 0;
for (const highlightedEl of [ "Bold 1", "Italic 1", "Underline 1", "Colored text 1", "Background text 1", "Bold 2", "Italic 2", "Underline 2", "Colored text 2", "Background text 2" ]) { for (const highlightedEl of ["Bold 1", "Italic 1", "Underline 1", "Colored text 1", "Background text 1", "Bold 2", "Italic 2", "Underline 2", "Colored text 2", "Background text 2"]) {
await expect(rootList.locator("li").nth(index++)).toContainText(highlightedEl); await expect(rootList.locator("li").nth(index++)).toContainText(highlightedEl);
} }
}); });
@@ -54,7 +54,7 @@ test("Displays math popup", async ({ page, context }) => {
const app = new App(page, context); const app = new App(page, context);
await app.goto(); await app.goto();
await app.goToNoteInNewTab("Empty text"); await app.goToNoteInNewTab("Empty text");
const noteContent = app.currentNoteSplit.locator(".note-detail-editable-text-editor") const noteContent = app.currentNoteSplit.locator(".note-detail-editable-text-editor");
await noteContent.fill("Hello world"); await noteContent.fill("Hello world");
await noteContent.press("ControlOrMeta+M"); await noteContent.press("ControlOrMeta+M");

View File

@@ -25,7 +25,7 @@ export default class App {
this.tabBar = page.locator(".tab-row-widget-container"); this.tabBar = page.locator(".tab-row-widget-container");
this.noteTree = page.locator(".tree-wrapper"); this.noteTree = page.locator(".tree-wrapper");
this.launcherBar = page.locator("#launcher-container"); this.launcherBar = page.locator("#launcher-container");
this.currentNoteSplit = page.locator(".note-split:not(.hidden-ext)") this.currentNoteSplit = page.locator(".note-split:not(.hidden-ext)");
this.sidebar = page.locator("#right-pane"); this.sidebar = page.locator("#right-pane");
} }
@@ -42,12 +42,11 @@ export default class App {
url = "/"; url = "/";
} }
await this.page.goto(url, { waitUntil: "networkidle" }); await this.page.goto(url, { waitUntil: "networkidle", timeout: 30_000 });
// Wait for the page to load. // Wait for the page to load.
if (url === "/") { if (url === "/") {
await expect(this.page.locator(".tree")) await expect(this.page.locator(".tree")).toContainText("Trilium Integration Test");
.toContainText("Trilium Integration Test");
await this.closeAllTabs(); await this.closeAllTabs();
} }
} }
@@ -109,11 +108,12 @@ export default class App {
}); });
expect(csrfToken).toBeTruthy(); expect(csrfToken).toBeTruthy();
await expect(await this.page.request.put(`${BASE_URL}/api/options/${key}/${value}`, { await expect(
headers: { await this.page.request.put(`${BASE_URL}/api/options/${key}/${value}`, {
"x-csrf-token": csrfToken headers: {
} "x-csrf-token": csrfToken
})).toBeOK(); }
})
).toBeOK();
} }
} }

26
electron-docs-main.ts Normal file
View File

@@ -0,0 +1,26 @@
import cls from "./src/services/cls.js";
import sql_init from "./src/services/sql_init.js";
async function startElectron() {
await import("./electron-main.js");
}
async function initializeDb() {
return new Promise<void>((resolve) => {
cls.init(async () => {
await sql_init.createInitialDatabase();
sql_init.setDbAsInitialized();
resolve();
});
})
}
async function main() {
if (!sql_init.isDbInitialized()) {
initializeDb();
}
await startElectron();
}
await main();

View File

@@ -26,6 +26,8 @@ electronDl({ saveAs: true });
// needed for excalidraw export https://github.com/zadam/trilium/issues/4271 // needed for excalidraw export https://github.com/zadam/trilium/issues/4271
electron.app.commandLine.appendSwitch("enable-experimental-web-platform-features"); electron.app.commandLine.appendSwitch("enable-experimental-web-platform-features");
electron.app.userAgentFallback = `${electron.app.getName()} ${electron.app.getVersion()}`;
// Quit when all windows are closed, except on macOS. There, it's common // Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits // for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q. // explicitly with Cmd + Q.

10
entitlements.plist Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-jit</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
</plist>

43
eslint.config.js Normal file
View File

@@ -0,0 +1,43 @@
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
export default tseslint.config(
eslint.configs.recommended,
tseslint.configs.recommended,
// consider using rules below, once we have a full TS codebase and can be more strict
// tseslint.configs.strictTypeChecked,
// tseslint.configs.stylisticTypeChecked,
// tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname
}
}
},
{
rules: {
// add rule overrides here
"no-undef": "off",
"no-unused-vars": "off",
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
}
]
}
},
{
ignores: [
"build/*",
"dist/*",
"docs/*",
"libraries/*",
"src/public/app-dist/*",
"src/public/app/doc_notes/*"
]
}
);

View File

@@ -3,6 +3,13 @@ const fs = require("fs-extra");
const APP_NAME = "TriliumNext Notes"; const APP_NAME = "TriliumNext Notes";
const extraResourcesForPlatform = getExtraResourcesForPlatform();
const baseLinuxMakerConfigOptions = {
icon: "./images/app-icons/png/128x128.png",
desktopTemplate: path.resolve("./bin/electron-forge/desktop.ejs"),
categories: ["Office", "Utility"]
};
module.exports = { module.exports = {
packagerConfig: { packagerConfig: {
executableName: "trilium", executableName: "trilium",
@@ -10,37 +17,39 @@ module.exports = {
overwrite: true, overwrite: true,
asar: true, asar: true,
icon: "./images/app-icons/icon", icon: "./images/app-icons/icon",
osxSign: {},
osxNotarize: {
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_ID_PASSWORD,
teamId: process.env.APPLE_TEAM_ID
},
extraResource: [ extraResource: [
// Moved to root // All resources should stay in Resources directory for macOS
...getExtraResourcesForPlatform(), ...(process.platform === "darwin" ? [] : extraResourcesForPlatform),
// Moved to resources (TriliumNext Notes.app/Contents/Resources on macOS) // These always go in Resources
"translations/", "translations/",
"node_modules/@highlightjs/cdn-assets/styles" "node_modules/@highlightjs/cdn-assets/styles"
], ],
afterComplete: [ afterComplete: [
(buildPath, _electronVersion, platform, _arch, callback) => { (buildPath, _electronVersion, platform, _arch, callback) => {
const extraResources = getExtraResourcesForPlatform(); // Only move resources on non-macOS platforms
for (const resource of extraResources) { if (platform !== "darwin") {
const baseName = path.basename(resource); for (const resource of extraResourcesForPlatform) {
let sourcePath; const baseName = path.basename(resource);
if (platform === "darwin") { const sourcePath = path.join(buildPath, "resources", baseName);
sourcePath = path.join(buildPath, `${APP_NAME}.app`, "Contents", "Resources", baseName);
} else {
sourcePath = path.join(buildPath, "resources", baseName);
}
let destPath;
if (baseName !== "256x256.png") { // prettier-ignore
destPath = path.join(buildPath, baseName); const destPath = (baseName !== "256x256.png")
} else { ? path.join(buildPath, baseName)
destPath = path.join(buildPath, "icon.png"); : path.join(buildPath, "icon.png");
}
// Copy files from resources folder to root fs.move(sourcePath, destPath)
fs.move(sourcePath, destPath) .then(() => callback())
.then(() => callback()) .catch((err) => callback(err));
.catch((err) => callback(err)); }
} else {
callback();
} }
} }
] ]
@@ -53,8 +62,38 @@ module.exports = {
name: "@electron-forge/maker-deb", name: "@electron-forge/maker-deb",
config: { config: {
options: { options: {
icon: "./images/app-icons/png/128x128.png", ...baseLinuxMakerConfigOptions
desktopTemplate: path.resolve("./bin/electron-forge/desktop.ejs") }
}
},
{
name: "@electron-forge/maker-flatpak",
config: {
options: {
...baseLinuxMakerConfigOptions,
id: "com.triliumnext.notes",
runtimeVersion: "24.08",
base: "org.electronjs.Electron2.BaseApp",
baseVersion: "24.08",
baseFlatpakref: "https://flathub.org/repo/flathub.flatpakrepo",
modules: [
{
name: "zypak",
sources: {
type: "git",
url: "https://github.com/refi64/zypak",
tag: "v2024.01.17"
}
}
]
},
}
},
{
name: "@electron-forge/maker-rpm",
config: {
options: {
...baseLinuxMakerConfigOptions
} }
} }
}, },
@@ -62,7 +101,7 @@ module.exports = {
name: "@electron-forge/maker-squirrel", name: "@electron-forge/maker-squirrel",
config: { config: {
iconUrl: "https://raw.githubusercontent.com/TriliumNext/Notes/develop/images/app-icons/icon.ico", iconUrl: "https://raw.githubusercontent.com/TriliumNext/Notes/develop/images/app-icons/icon.ico",
setupIcon: "./images/app-icons/icon.ico", setupIcon: "./images/app-icons/win/setup.ico",
loadingGif: "./images/app-icons/win/setup-banner.gif" loadingGif: "./images/app-icons/win/setup-banner.gif"
} }
}, },
@@ -91,21 +130,20 @@ module.exports = {
}; };
function getExtraResourcesForPlatform() { function getExtraResourcesForPlatform() {
let resources = ["dump-db/", "./bin/tpl/anonymize-database.sql"]; const resources = ["dump-db/", "./bin/tpl/anonymize-database.sql"];
const scripts = ["trilium-portable", "trilium-safe-mode", "trilium-no-cert-check"];
const getScriptRessources = () => {
const scripts = ["trilium-portable", "trilium-safe-mode", "trilium-no-cert-check"];
const scriptExt = (process.platform === "win32") ? "bat" : "sh";
return scripts.map(script => `./bin/tpl/${script}.${scriptExt}`);
}
switch (process.platform) { switch (process.platform) {
case "win32": case "win32":
for (const script of scripts) { resources.push(...getScriptRessources())
resources.push(`./bin/tpl/${script}.bat`);
}
break;
case "darwin":
break; break;
case "linux": case "linux":
resources.push("images/app-icons/png/256x256.png"); resources.push(...getScriptRessources(), "images/app-icons/png/256x256.png");
for (const script of scripts) {
resources.push(`./bin/tpl/${script}.sh`);
}
break; break;
default: default:
break; break;

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Some files were not shown because too many files have changed in this diff Show More