Compare commits
414 Commits
android-v3
...
v3.0.15
Author | SHA1 | Date | |
---|---|---|---|
|
598677b207 | ||
|
b220413a9b | ||
|
a6cf0a3a81 | ||
|
60e347a782 | ||
|
39ad1e23a8 | ||
|
d6dd23e921 | ||
|
05cf51ec65 | ||
|
8fdccd287e | ||
|
70bfb26c9a | ||
|
64e4ebb1f3 | ||
|
e49bca8315 | ||
|
636fbdf7d0 | ||
|
ee97434bb0 | ||
|
599cf5b86f | ||
|
2fd6a3a2fa | ||
|
a3e04103de | ||
|
320d0df60d | ||
|
f32fe63205 | ||
|
3e0fb48e44 | ||
|
4a475f1b53 | ||
|
8679cc5704 | ||
|
a48c4ba93f | ||
|
16e82b5462 | ||
|
1a82255865 | ||
|
a64d6e3270 | ||
|
ae1620dd50 | ||
|
d804e95d06 | ||
|
78d9a7e636 | ||
|
3270122419 | ||
|
e4b8976aa0 | ||
|
17e1eecb11 | ||
|
dd9a389711 | ||
|
55eaedb8b2 | ||
|
f8d772de87 | ||
|
77c39ac084 | ||
|
3557138c84 | ||
|
77e74112ad | ||
|
4115e2054f | ||
|
8485277dcf | ||
|
fac9ea3b42 | ||
|
45f8e27d6a | ||
|
c8a478d970 | ||
|
75dfb0af5f | ||
|
5e592a3096 | ||
|
84e46ad874 | ||
|
0ec917bb96 | ||
|
818f9f58d1 | ||
|
e1abe0b4cb | ||
|
c972ce223e | ||
|
d9dadf28cb | ||
|
1fb392ff4e | ||
|
affa620983 | ||
|
ed31d8202b | ||
|
573ea6051c | ||
|
f1ec54532f | ||
|
5eb96d71e1 | ||
|
73251bac4a | ||
|
f40a0da195 | ||
|
8dc1ab2cc5 | ||
|
1b46c9f5e7 | ||
|
483ab55a36 | ||
|
502002f9f6 | ||
|
8d8014511f | ||
|
28569e652e | ||
|
9acf36d802 | ||
|
06d26767ed | ||
|
88858d4413 | ||
|
27309427a1 | ||
|
e83a18a907 | ||
|
9bd8b11f67 | ||
|
3a14c7ce2d | ||
|
fe4c9a2401 | ||
|
d2fb19cf6d | ||
|
1f8e3fb620 | ||
|
8bbe1d30b4 | ||
|
ec92f716de | ||
|
ab819d9210 | ||
|
e465b45d6e | ||
|
a4a4170d49 | ||
|
1dcf528443 | ||
|
8cf4ef88b5 | ||
|
bf634270be | ||
|
56437d3e1b | ||
|
d095ab2be7 | ||
|
4751b4dd74 | ||
|
ce22d8238c | ||
|
9e2b9e5b8d | ||
|
4952980e0a | ||
|
59989d2735 | ||
|
eb7f2855b0 | ||
|
a0e3e4fefb | ||
|
de9661448b | ||
|
562aabafa1 | ||
|
a659e45a68 | ||
|
8e44a15c8d | ||
|
a086358824 | ||
|
889c395818 | ||
|
7d0cc675aa | ||
|
73d3f92ae2 | ||
|
f5ceb4064c | ||
|
53d7bc86ca | ||
|
4495fc9a03 | ||
|
7ee5cad21e | ||
|
940739ce12 | ||
|
5730c1efcd | ||
|
b17f28ce94 | ||
|
629e968878 | ||
|
47a924ff4e | ||
|
c511fb59c7 | ||
|
80aeff6ecd | ||
|
97d15bb26a | ||
|
99b36cbff1 | ||
|
74c3d2c9fb | ||
|
df8c7fd31c | ||
|
3a780b9490 | ||
|
97ddb67f68 | ||
|
f50a27985b | ||
|
061a9d5bff | ||
|
06f42e8246 | ||
|
19f0b667b1 | ||
|
ac7165461a | ||
|
efb48e6145 | ||
|
f94c16b22e | ||
|
0938dc9d52 | ||
|
e049698012 | ||
|
c9fb06fd0c | ||
|
96850b7b98 | ||
|
32710e44c3 | ||
|
32e16f6e51 | ||
|
f938d5f489 | ||
|
99b840da34 | ||
|
55c222c577 | ||
|
418a6e455f | ||
|
789d19b18c | ||
|
59b26f2c63 | ||
|
f1eeeabdc5 | ||
|
d2a33b006b | ||
|
2386f583e8 | ||
|
70c5448402 | ||
|
4e3326b12f | ||
|
34092d8491 | ||
|
b8caf08fac | ||
|
b0d0e641ea | ||
|
3a1de4e941 | ||
|
97274c95a5 | ||
|
300d0e3ca5 | ||
|
50d08cd178 | ||
|
28f3d53b3b | ||
|
768e59938c | ||
|
6c7948a087 | ||
|
cc2b442519 | ||
|
fa285a9404 | ||
|
84faa7229d | ||
|
254747ee78 | ||
|
ef167051d6 | ||
|
1ccbdc2341 | ||
|
14747b79cd | ||
|
111385f1ef | ||
|
f36d395a84 | ||
|
5d997084f7 | ||
|
132548181f | ||
|
452c71e8cb | ||
|
f7ac95f850 | ||
|
33286efe9a | ||
|
f21a93febe | ||
|
f817c47dc0 | ||
|
9ccca16df7 | ||
|
114f5695b7 | ||
|
916fa39012 | ||
|
db77a51129 | ||
|
b09d6e8568 | ||
|
3bf9438a59 | ||
|
554894e910 | ||
|
51f1e0202f | ||
|
8b7758442b | ||
|
63bf7694f0 | ||
|
df3aaa7dfd | ||
|
826006ce8b | ||
|
1e085ee619 | ||
|
efb753e229 | ||
|
faf332a0e8 | ||
|
83308337b5 | ||
|
73193df120 | ||
|
2dd27cdd00 | ||
|
c5e3672e9e | ||
|
366517999f | ||
|
8445ffaa86 | ||
|
2a76970461 | ||
|
9fcaf5bd18 | ||
|
652add9af2 | ||
|
c632ea5c48 | ||
|
7ee5f68770 | ||
|
1040675781 | ||
|
24a37e0fef | ||
|
bfe2d262a5 | ||
|
8faf5148a6 | ||
|
27c5dd1852 | ||
|
fae51b90a7 | ||
|
ccd181851c | ||
|
cd0ff94c0c | ||
|
e9e6d8a69c | ||
|
7ad3b34ec3 | ||
|
f39021d373 | ||
|
13116fec76 | ||
|
d49b2ec0e9 | ||
|
09d088b2b5 | ||
|
3312bd27c9 | ||
|
453bdb293f | ||
|
6b0e1598ed | ||
|
56f25d3094 | ||
|
3e458c0028 | ||
|
a747828276 | ||
|
a90e3e04a4 | ||
|
487f01d2ec | ||
|
36c25fdd86 | ||
|
a9fecb31c3 | ||
|
ca8fd8d7ae | ||
|
fb345b1317 | ||
|
966fe38ae3 | ||
|
3042e615ac | ||
|
fd2ae51b93 | ||
|
1227730393 | ||
|
8622bd506f | ||
|
5d6a39ce51 | ||
|
5245c06ed3 | ||
|
3c5977346e | ||
|
a3dc9c2721 | ||
|
90ec1f5bc6 | ||
|
99caa014ca | ||
|
00d0cd1cf7 | ||
|
d6480e50d2 | ||
|
a1a06dd7d0 | ||
|
95b73b5f41 | ||
|
cc00cdfa55 | ||
|
548ba7d712 | ||
|
1ea0c56d7b | ||
|
f764e76f01 | ||
|
4862c2e8ea | ||
|
cbb4d43981 | ||
|
87269e6bcd | ||
|
7d19d294a6 | ||
|
5f3ac323ff | ||
|
0a766d7314 | ||
|
e73535ace0 | ||
|
8e93f0975f | ||
|
57c316a591 | ||
|
f1691b7743 | ||
|
92a025011e | ||
|
d5fa8d0216 | ||
|
1f74a42dfa | ||
|
569b567f21 | ||
|
85f890e7c5 | ||
|
4056fc2281 | ||
|
70c2f0a70a | ||
|
aac8d58372 | ||
|
8ec233f59c | ||
|
a0dd7f58ac | ||
|
443e04b369 | ||
|
cfd9bca4d6 | ||
|
f17157f7e2 | ||
|
18b9f5c79b | ||
|
1b060925a4 | ||
|
00fa618596 | ||
|
131ec9e913 | ||
|
e31ec031f4 | ||
|
431ce430a0 | ||
|
5cdc1e93b3 | ||
|
09216b8b59 | ||
|
1bb3632a70 | ||
|
03617eb8a7 | ||
|
034e568d26 | ||
|
a0faca0997 | ||
|
5268b5bf6b | ||
|
5b3f05f939 | ||
|
b1a669de01 | ||
|
a5f118bc26 | ||
|
10978781cd | ||
|
8bdec4c2b4 | ||
|
be58fced93 | ||
|
c5dfa4c055 | ||
|
74bc9b36aa | ||
|
993fbfb93f | ||
|
97b5276f81 | ||
|
c6c7de286a | ||
|
aec77b543c | ||
|
34b265475d | ||
|
4e95486c5c | ||
|
296b60800a | ||
|
332e19ce64 | ||
|
8984243020 | ||
|
65c47189f9 | ||
|
6aca77a0ae | ||
|
0670ad92d7 | ||
|
bce71a00e9 | ||
|
83b50aaa8e | ||
|
c7c4371902 | ||
|
4978a473a1 | ||
|
4d89d9f285 | ||
|
15770e9298 | ||
|
06797ec0ab | ||
|
b69bf84ab6 | ||
|
7ec02fc8d8 | ||
|
dd28c9f4d7 | ||
|
7fe98e9dc9 | ||
|
6358c39810 | ||
|
294cc4a440 | ||
|
ae1347bb7c | ||
|
b6d659baf2 | ||
|
5756e160da | ||
|
113c046de6 | ||
|
1ef4e574b7 | ||
|
eccc74cf72 | ||
|
a4137a83d8 | ||
|
ed9b4fb831 | ||
|
1d31f63947 | ||
|
74cda4e2ab | ||
|
39db5cd061 | ||
|
11d9e0a72f | ||
|
7683284352 | ||
|
e84ea8ab04 | ||
|
b638056150 | ||
|
ff86c253d3 | ||
|
86d9f7e1cb | ||
|
385fe7bbe0 | ||
|
313587097a | ||
|
8393ccc7f8 | ||
|
e3ba605592 | ||
|
035557de9f | ||
|
97ff2b51f1 | ||
|
87f7fb6841 | ||
|
9fe31544f7 | ||
|
89dfbe3ec1 | ||
|
0c640c5e77 | ||
|
a3eec19b32 | ||
|
c0c3b4d23e | ||
|
1812587970 | ||
|
1bb724fe0e | ||
|
346f49fa66 | ||
|
55d25308f8 | ||
|
514a8cf841 | ||
|
837826ea4f | ||
|
681d1d67f3 | ||
|
d2f3252de2 | ||
|
859d3e867e | ||
|
238683e36f | ||
|
2ae08ff46e | ||
|
ce672915da | ||
|
a2071bfed2 | ||
|
03c3feef16 | ||
|
b3f4414026 | ||
|
04c6863d7f | ||
|
b678e2fb5d | ||
|
1179de7c36 | ||
|
58ca1a938b | ||
|
9713034f18 | ||
|
28b8818c4d | ||
|
2e2a2b3193 | ||
|
42900bcc66 | ||
|
ce451c5850 | ||
|
5b4477f7bd | ||
|
660ebcfc77 | ||
|
86872fb07c | ||
|
c55bb95950 | ||
|
d613d1ab4e | ||
|
cd5d648eec | ||
|
384b17738a | ||
|
500c8facdb | ||
|
6f76fe728f | ||
|
2488dd3806 | ||
|
9d3cccdf71 | ||
|
8dc75efc4c | ||
|
7caed19a32 | ||
|
a301470ac5 | ||
|
f899c97c4c | ||
|
8630c8e630 | ||
|
29daec2c07 | ||
|
ce3a28de70 | ||
|
1e6cc11868 | ||
|
3e0f6994a1 | ||
|
c10e617870 | ||
|
cade585292 | ||
|
f60e105d77 | ||
|
b622f9b938 | ||
|
00084c5798 | ||
|
554fb7026a | ||
|
04a6c36b5c | ||
|
adbf819cc0 | ||
|
3062f83367 | ||
|
bdb2e588f3 | ||
|
688d807eee | ||
|
06aa64016f | ||
|
06c7c132b8 | ||
|
fcb837ca99 | ||
|
7f34afcaea | ||
|
876fa324e5 | ||
|
f781183250 | ||
|
c1ae449ce2 | ||
|
c4aa18a63e | ||
|
27b86fbb00 | ||
|
569c6d8479 | ||
|
d3e2d3fc4a | ||
|
9b5ee63638 | ||
|
dee68681f5 | ||
|
f85db1496e | ||
|
0839b0314e | ||
|
40dbb8bd7f | ||
|
2de5c1bbf8 | ||
|
20edc63785 | ||
|
b936f9ba7c | ||
|
a5419e61d5 | ||
|
ec4d4141ef | ||
|
b5a16f756a | ||
|
0331d2a8db | ||
|
79eedcf6a6 |
147
.eslintignore
@@ -167,6 +167,7 @@ packages/app-desktop/gui/Button/Button.js
|
|||||||
packages/app-desktop/gui/ClipperConfigScreen.js
|
packages/app-desktop/gui/ClipperConfigScreen.js
|
||||||
packages/app-desktop/gui/ConfigScreen/ButtonBar.js
|
packages/app-desktop/gui/ConfigScreen/ButtonBar.js
|
||||||
packages/app-desktop/gui/ConfigScreen/ConfigScreen.js
|
packages/app-desktop/gui/ConfigScreen/ConfigScreen.js
|
||||||
|
packages/app-desktop/gui/ConfigScreen/FontSearch.js
|
||||||
packages/app-desktop/gui/ConfigScreen/Sidebar.js
|
packages/app-desktop/gui/ConfigScreen/Sidebar.js
|
||||||
packages/app-desktop/gui/ConfigScreen/controls/MissingPasswordHelpLink.js
|
packages/app-desktop/gui/ConfigScreen/controls/MissingPasswordHelpLink.js
|
||||||
packages/app-desktop/gui/ConfigScreen/controls/ToggleAdvancedSettingsButton.js
|
packages/app-desktop/gui/ConfigScreen/controls/ToggleAdvancedSettingsButton.js
|
||||||
@@ -241,6 +242,7 @@ packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.js
|
|||||||
packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js
|
packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleEditors.js
|
packages/app-desktop/gui/MainScreen/commands/toggleEditors.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js
|
packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js
|
||||||
|
packages/app-desktop/gui/MainScreen/commands/toggleMenuBar.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js
|
packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleNoteType.js
|
packages/app-desktop/gui/MainScreen/commands/toggleNoteType.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderField.js
|
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderField.js
|
||||||
@@ -289,6 +291,7 @@ packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.
|
|||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.js
|
||||||
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useLinkTooltips.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useWebViewApi.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useWebViewApi.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteEditor.js
|
packages/app-desktop/gui/NoteEditor/NoteEditor.js
|
||||||
@@ -320,11 +323,11 @@ packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js
|
|||||||
packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js
|
packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js
|
packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||||
|
packages/app-desktop/gui/NoteEditor/utils/useScheduleSaveCallbacks.js
|
||||||
|
packages/app-desktop/gui/NoteEditor/utils/useScrollWhenReadyOptions.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js
|
packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js
|
packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||||
packages/app-desktop/gui/NoteList/NoteList.js
|
|
||||||
packages/app-desktop/gui/NoteList/NoteList2.js
|
packages/app-desktop/gui/NoteList/NoteList2.js
|
||||||
packages/app-desktop/gui/NoteList/NoteListSource.js
|
|
||||||
packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js
|
packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js
|
||||||
packages/app-desktop/gui/NoteList/commands/index.js
|
packages/app-desktop/gui/NoteList/commands/index.js
|
||||||
packages/app-desktop/gui/NoteList/utils/canManuallySortNotes.js
|
packages/app-desktop/gui/NoteList/utils/canManuallySortNotes.js
|
||||||
@@ -350,7 +353,6 @@ packages/app-desktop/gui/NoteListHeader/utils/getColumnTitle.js
|
|||||||
packages/app-desktop/gui/NoteListHeader/utils/useContextMenu.js
|
packages/app-desktop/gui/NoteListHeader/utils/useContextMenu.js
|
||||||
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.test.js
|
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.test.js
|
||||||
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.js
|
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.js
|
||||||
packages/app-desktop/gui/NoteListItem.js
|
|
||||||
packages/app-desktop/gui/NoteListItem/NoteListItem.js
|
packages/app-desktop/gui/NoteListItem/NoteListItem.js
|
||||||
packages/app-desktop/gui/NoteListItem/utils/getNoteTitleHtml.js
|
packages/app-desktop/gui/NoteListItem/utils/getNoteTitleHtml.js
|
||||||
packages/app-desktop/gui/NoteListItem/utils/prepareViewProps.test.js
|
packages/app-desktop/gui/NoteListItem/utils/prepareViewProps.test.js
|
||||||
@@ -398,10 +400,26 @@ packages/app-desktop/gui/Root_UpgradeSyncTarget.js
|
|||||||
packages/app-desktop/gui/SearchBar/SearchBar.js
|
packages/app-desktop/gui/SearchBar/SearchBar.js
|
||||||
packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.js
|
packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.js
|
||||||
packages/app-desktop/gui/ShareNoteDialog.js
|
packages/app-desktop/gui/ShareNoteDialog.js
|
||||||
|
packages/app-desktop/gui/Sidebar/FolderAndTagList.js
|
||||||
packages/app-desktop/gui/Sidebar/Sidebar.js
|
packages/app-desktop/gui/Sidebar/Sidebar.js
|
||||||
packages/app-desktop/gui/Sidebar/commands/focusElementSideBar.js
|
packages/app-desktop/gui/Sidebar/commands/focusElementSideBar.js
|
||||||
packages/app-desktop/gui/Sidebar/commands/index.js
|
packages/app-desktop/gui/Sidebar/commands/index.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useFocusHandler.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useOnRenderItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useOnSidebarKeyDownHandler.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useSelectedSidebarIndex.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useSidebarCommandHandler.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useSidebarListData.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/AllNotesItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/EmptyExpandLink.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/ExpandIcon.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/ExpandLink.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/FolderItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/HeaderItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/NoteCount.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/TagItem.js
|
||||||
packages/app-desktop/gui/Sidebar/styles/index.js
|
packages/app-desktop/gui/Sidebar/styles/index.js
|
||||||
|
packages/app-desktop/gui/Sidebar/types.js
|
||||||
packages/app-desktop/gui/StatusScreen/StatusScreen.js
|
packages/app-desktop/gui/StatusScreen/StatusScreen.js
|
||||||
packages/app-desktop/gui/StyleSheets/StyleSheetContainer.js
|
packages/app-desktop/gui/StyleSheets/StyleSheetContainer.js
|
||||||
packages/app-desktop/gui/SyncWizard/Dialog.js
|
packages/app-desktop/gui/SyncWizard/Dialog.js
|
||||||
@@ -416,6 +434,7 @@ packages/app-desktop/gui/ToolbarSpace.js
|
|||||||
packages/app-desktop/gui/TrashNotification/TrashNotification.js
|
packages/app-desktop/gui/TrashNotification/TrashNotification.js
|
||||||
packages/app-desktop/gui/dialogs.js
|
packages/app-desktop/gui/dialogs.js
|
||||||
packages/app-desktop/gui/hooks/useEffectDebugger.js
|
packages/app-desktop/gui/hooks/useEffectDebugger.js
|
||||||
|
packages/app-desktop/gui/hooks/useElementHeight.js
|
||||||
packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js
|
packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js
|
||||||
packages/app-desktop/gui/hooks/usePrevious.js
|
packages/app-desktop/gui/hooks/usePrevious.js
|
||||||
packages/app-desktop/gui/hooks/usePropsDebugger.js
|
packages/app-desktop/gui/hooks/usePropsDebugger.js
|
||||||
@@ -436,6 +455,10 @@ packages/app-desktop/integration-tests/main.spec.js
|
|||||||
packages/app-desktop/integration-tests/models/MainScreen.js
|
packages/app-desktop/integration-tests/models/MainScreen.js
|
||||||
packages/app-desktop/integration-tests/models/NoteEditorScreen.js
|
packages/app-desktop/integration-tests/models/NoteEditorScreen.js
|
||||||
packages/app-desktop/integration-tests/models/SettingsScreen.js
|
packages/app-desktop/integration-tests/models/SettingsScreen.js
|
||||||
|
packages/app-desktop/integration-tests/models/Sidebar.js
|
||||||
|
packages/app-desktop/integration-tests/noteList.spec.js
|
||||||
|
packages/app-desktop/integration-tests/richTextEditor.spec.js
|
||||||
|
packages/app-desktop/integration-tests/sidebar.spec.js
|
||||||
packages/app-desktop/integration-tests/simpleBackup.spec.js
|
packages/app-desktop/integration-tests/simpleBackup.spec.js
|
||||||
packages/app-desktop/integration-tests/util/activateMainMenuItem.js
|
packages/app-desktop/integration-tests/util/activateMainMenuItem.js
|
||||||
packages/app-desktop/integration-tests/util/createStartupArgs.js
|
packages/app-desktop/integration-tests/util/createStartupArgs.js
|
||||||
@@ -443,6 +466,7 @@ packages/app-desktop/integration-tests/util/firstNonDevToolsWindow.js
|
|||||||
packages/app-desktop/integration-tests/util/setFilePickerResponse.js
|
packages/app-desktop/integration-tests/util/setFilePickerResponse.js
|
||||||
packages/app-desktop/integration-tests/util/setMessageBoxResponse.js
|
packages/app-desktop/integration-tests/util/setMessageBoxResponse.js
|
||||||
packages/app-desktop/integration-tests/util/test.js
|
packages/app-desktop/integration-tests/util/test.js
|
||||||
|
packages/app-desktop/integration-tests/util/waitForNextOpenPath.js
|
||||||
packages/app-desktop/playwright.config.js
|
packages/app-desktop/playwright.config.js
|
||||||
packages/app-desktop/plugins/GotoAnything.js
|
packages/app-desktop/plugins/GotoAnything.js
|
||||||
packages/app-desktop/services/bridge.js
|
packages/app-desktop/services/bridge.js
|
||||||
@@ -463,7 +487,6 @@ packages/app-desktop/services/plugins/hooks/useThemeCss.js
|
|||||||
packages/app-desktop/services/plugins/hooks/useViewIsReady.js
|
packages/app-desktop/services/plugins/hooks/useViewIsReady.js
|
||||||
packages/app-desktop/services/plugins/hooks/useWebviewToPluginMessages.js
|
packages/app-desktop/services/plugins/hooks/useWebviewToPluginMessages.js
|
||||||
packages/app-desktop/services/restart.js
|
packages/app-desktop/services/restart.js
|
||||||
packages/app-desktop/services/share/invitationRespond.js
|
|
||||||
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
|
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
|
||||||
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
|
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
|
||||||
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
||||||
@@ -477,25 +500,32 @@ packages/app-desktop/utils/7zip/pathToBundled7Zip.js
|
|||||||
packages/app-desktop/utils/checkForUpdatesUtils.test.js
|
packages/app-desktop/utils/checkForUpdatesUtils.test.js
|
||||||
packages/app-desktop/utils/checkForUpdatesUtils.js
|
packages/app-desktop/utils/checkForUpdatesUtils.js
|
||||||
packages/app-desktop/utils/checkForUpdatesUtilsTestData.js
|
packages/app-desktop/utils/checkForUpdatesUtilsTestData.js
|
||||||
|
packages/app-desktop/utils/isSafeToOpen.test.js
|
||||||
|
packages/app-desktop/utils/isSafeToOpen.js
|
||||||
packages/app-desktop/utils/markupLanguageUtils.js
|
packages/app-desktop/utils/markupLanguageUtils.js
|
||||||
packages/app-desktop/utils/restartInSafeModeFromMain.test.js
|
packages/app-desktop/utils/restartInSafeModeFromMain.test.js
|
||||||
packages/app-desktop/utils/restartInSafeModeFromMain.js
|
packages/app-desktop/utils/restartInSafeModeFromMain.js
|
||||||
packages/app-mobile/PluginAssetsLoader.js
|
packages/app-mobile/PluginAssetsLoader.js
|
||||||
packages/app-mobile/commands/index.js
|
packages/app-mobile/commands/index.js
|
||||||
|
packages/app-mobile/commands/newNote.test.js
|
||||||
|
packages/app-mobile/commands/newNote.js
|
||||||
packages/app-mobile/commands/openItem.js
|
packages/app-mobile/commands/openItem.js
|
||||||
packages/app-mobile/commands/openNote.js
|
packages/app-mobile/commands/openNote.js
|
||||||
packages/app-mobile/commands/scrollToHash.js
|
packages/app-mobile/commands/scrollToHash.js
|
||||||
packages/app-mobile/commands/util/goToNote.js
|
packages/app-mobile/commands/util/goToNote.js
|
||||||
packages/app-mobile/components/ActionButton.js
|
packages/app-mobile/components/ActionButton.js
|
||||||
packages/app-mobile/components/BackButtonDialogBox.js
|
packages/app-mobile/components/BackButtonDialogBox.js
|
||||||
|
packages/app-mobile/components/BetaChip.js
|
||||||
packages/app-mobile/components/CameraView.js
|
packages/app-mobile/components/CameraView.js
|
||||||
packages/app-mobile/components/CustomButton.js
|
packages/app-mobile/components/DismissibleDialog.js
|
||||||
packages/app-mobile/components/Dropdown.test.js
|
packages/app-mobile/components/Dropdown.test.js
|
||||||
packages/app-mobile/components/Dropdown.js
|
packages/app-mobile/components/Dropdown.js
|
||||||
packages/app-mobile/components/ExtendedWebView.js
|
packages/app-mobile/components/ExtendedWebView.js
|
||||||
packages/app-mobile/components/FolderPicker.js
|
packages/app-mobile/components/FolderPicker.js
|
||||||
packages/app-mobile/components/Icon.js
|
packages/app-mobile/components/Icon.js
|
||||||
|
packages/app-mobile/components/IconButton.js
|
||||||
packages/app-mobile/components/Modal.js
|
packages/app-mobile/components/Modal.js
|
||||||
|
packages/app-mobile/components/ModalDialog.js
|
||||||
packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js
|
packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js
|
||||||
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.test.js
|
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.test.js
|
||||||
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.js
|
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.js
|
||||||
@@ -549,7 +579,10 @@ packages/app-mobile/components/NoteList.js
|
|||||||
packages/app-mobile/components/ProfileSwitcher/ProfileEditor.js
|
packages/app-mobile/components/ProfileSwitcher/ProfileEditor.js
|
||||||
packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
|
packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
|
||||||
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
|
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
|
||||||
packages/app-mobile/components/ScreenHeader.js
|
packages/app-mobile/components/ScreenHeader/WarningBanner.test.js
|
||||||
|
packages/app-mobile/components/ScreenHeader/WarningBanner.js
|
||||||
|
packages/app-mobile/components/ScreenHeader/WarningBox.js
|
||||||
|
packages/app-mobile/components/ScreenHeader/index.js
|
||||||
packages/app-mobile/components/SelectDateTimeDialog.js
|
packages/app-mobile/components/SelectDateTimeDialog.js
|
||||||
packages/app-mobile/components/SideMenu.js
|
packages/app-mobile/components/SideMenu.js
|
||||||
packages/app-mobile/components/TextInput.js
|
packages/app-mobile/components/TextInput.js
|
||||||
@@ -558,44 +591,72 @@ packages/app-mobile/components/base-screen.js
|
|||||||
packages/app-mobile/components/biometrics/BiometricPopup.js
|
packages/app-mobile/components/biometrics/BiometricPopup.js
|
||||||
packages/app-mobile/components/biometrics/biometricAuthenticate.js
|
packages/app-mobile/components/biometrics/biometricAuthenticate.js
|
||||||
packages/app-mobile/components/biometrics/sensorInfo.js
|
packages/app-mobile/components/biometrics/sensorInfo.js
|
||||||
|
packages/app-mobile/components/buttons/TextButton.js
|
||||||
|
packages/app-mobile/components/buttons/index.js
|
||||||
packages/app-mobile/components/getResponsiveValue.test.js
|
packages/app-mobile/components/getResponsiveValue.test.js
|
||||||
packages/app-mobile/components/getResponsiveValue.js
|
packages/app-mobile/components/getResponsiveValue.js
|
||||||
packages/app-mobile/components/global-style.js
|
packages/app-mobile/components/global-style.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportDebugReportButton.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportDebugReportButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportProfileButton.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportProfileButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.test.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.test.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteImportButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/TaskButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportAllFolders.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportAllFolders.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportDebugReport.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportDebugReport.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportProfile.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportProfile.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/makeImportExportCacheDirectory.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/SectionDescription.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SectionHeader.js
|
packages/app-mobile/components/screens/ConfigScreen/SectionHeader.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SectionSelector.js
|
packages/app-mobile/components/screens/ConfigScreen/SectionSelector/SectionTab.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/SectionSelector/index.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingComponent.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingComponent.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingItem.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingItem.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingsButton.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingsButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.js
|
packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/EnablePluginSupportPage.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/InstalledPluginBox.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChip.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChips.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginTitle.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/RecommendedBadge.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/index.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginInfoModal.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.installed.test.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.search.test.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginToggle.js
|
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/SearchPlugins.test.js
|
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/SearchPlugins.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/SearchPlugins.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/SectionLabel.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/buttons/ActionButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/buttons/InstallButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/WrappedPluginStates.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/mockRepositoryApiConstructor.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/newRepoApi.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/newRepoApi.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/pluginServiceSetup.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/pluginServiceSetup.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/isPluginInstallingAllowed.js
|
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/openWebsiteForPlugin.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/openWebsiteForPlugin.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/usePluginCallbacks.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/usePluginItem.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/useRepoApi.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/useRepoApi.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/useUpdateState.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/types.js
|
packages/app-mobile/components/screens/ConfigScreen/types.js
|
||||||
packages/app-mobile/components/screens/JoplinCloudLoginScreen.js
|
packages/app-mobile/components/screens/JoplinCloudLoginScreen.js
|
||||||
packages/app-mobile/components/screens/LogScreen.js
|
packages/app-mobile/components/screens/LogScreen.js
|
||||||
packages/app-mobile/components/screens/Note.js
|
packages/app-mobile/components/screens/Note.js
|
||||||
|
packages/app-mobile/components/screens/NoteTagsDialog.js
|
||||||
packages/app-mobile/components/screens/Notes.js
|
packages/app-mobile/components/screens/Notes.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/AcceptedShareItem.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/IncomingShareItem.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/index.test.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/index.js
|
||||||
packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js
|
packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js
|
||||||
packages/app-mobile/components/screens/encryption-config.js
|
packages/app-mobile/components/screens/encryption-config.js
|
||||||
packages/app-mobile/components/screens/search.js
|
packages/app-mobile/components/screens/search.js
|
||||||
|
packages/app-mobile/components/screens/status.js
|
||||||
packages/app-mobile/components/side-menu-content.js
|
packages/app-mobile/components/side-menu-content.js
|
||||||
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
||||||
packages/app-mobile/gulpfile.js
|
packages/app-mobile/gulpfile.js
|
||||||
@@ -606,6 +667,8 @@ packages/app-mobile/plugins/PluginRunner/backgroundPage/initializeDialogWebView.
|
|||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializePluginBackgroundIframe.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializePluginBackgroundIframe.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/startStopPlugin.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/startStopPlugin.js
|
||||||
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.test.js
|
||||||
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/makeSandboxedIframe.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/makeSandboxedIframe.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/reportUnhandledErrors.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/reportUnhandledErrors.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/wrapConsoleLog.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/wrapConsoleLog.js
|
||||||
@@ -620,7 +683,9 @@ packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useWebViewSetup.js
|
|||||||
packages/app-mobile/plugins/PluginRunner/types.js
|
packages/app-mobile/plugins/PluginRunner/types.js
|
||||||
packages/app-mobile/plugins/PluginRunner/utils/createOnLogHandler.js
|
packages/app-mobile/plugins/PluginRunner/utils/createOnLogHandler.js
|
||||||
packages/app-mobile/plugins/hooks/usePlugin.js
|
packages/app-mobile/plugins/hooks/usePlugin.js
|
||||||
|
packages/app-mobile/plugins/loadPlugins.test.js
|
||||||
packages/app-mobile/plugins/loadPlugins.js
|
packages/app-mobile/plugins/loadPlugins.js
|
||||||
|
packages/app-mobile/plugins/testing/MockPluginRunner.js
|
||||||
packages/app-mobile/root.js
|
packages/app-mobile/root.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.android.js
|
packages/app-mobile/services/AlarmServiceDriver.android.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
||||||
@@ -637,6 +702,7 @@ packages/app-mobile/utils/ShareExtension.js
|
|||||||
packages/app-mobile/utils/ShareUtils.test.js
|
packages/app-mobile/utils/ShareUtils.test.js
|
||||||
packages/app-mobile/utils/ShareUtils.js
|
packages/app-mobile/utils/ShareUtils.js
|
||||||
packages/app-mobile/utils/TlsUtils.js
|
packages/app-mobile/utils/TlsUtils.js
|
||||||
|
packages/app-mobile/utils/appDefaultState.js
|
||||||
packages/app-mobile/utils/autodetectTheme.js
|
packages/app-mobile/utils/autodetectTheme.js
|
||||||
packages/app-mobile/utils/checkPermissions.js
|
packages/app-mobile/utils/checkPermissions.js
|
||||||
packages/app-mobile/utils/createRootStyle.js
|
packages/app-mobile/utils/createRootStyle.js
|
||||||
@@ -649,6 +715,8 @@ packages/app-mobile/utils/fs-driver/tarExtract.test.js
|
|||||||
packages/app-mobile/utils/fs-driver/tarExtract.js
|
packages/app-mobile/utils/fs-driver/tarExtract.js
|
||||||
packages/app-mobile/utils/fs-driver/testUtil/createFilesFromPathRecord.js
|
packages/app-mobile/utils/fs-driver/testUtil/createFilesFromPathRecord.js
|
||||||
packages/app-mobile/utils/fs-driver/testUtil/verifyDirectoryMatches.js
|
packages/app-mobile/utils/fs-driver/testUtil/verifyDirectoryMatches.js
|
||||||
|
packages/app-mobile/utils/getPackageInfo.js
|
||||||
|
packages/app-mobile/utils/getVersionInfoText.js
|
||||||
packages/app-mobile/utils/initializeCommandService.js
|
packages/app-mobile/utils/initializeCommandService.js
|
||||||
packages/app-mobile/utils/ipc/RNToWebViewMessenger.js
|
packages/app-mobile/utils/ipc/RNToWebViewMessenger.js
|
||||||
packages/app-mobile/utils/ipc/WebViewToRNMessenger.js
|
packages/app-mobile/utils/ipc/WebViewToRNMessenger.js
|
||||||
@@ -658,6 +726,7 @@ packages/app-mobile/utils/polyfills/index.js
|
|||||||
packages/app-mobile/utils/setupNotifications.js
|
packages/app-mobile/utils/setupNotifications.js
|
||||||
packages/app-mobile/utils/shareHandler.js
|
packages/app-mobile/utils/shareHandler.js
|
||||||
packages/app-mobile/utils/showMessageBox.js
|
packages/app-mobile/utils/showMessageBox.js
|
||||||
|
packages/app-mobile/utils/testing/createMockReduxStore.js
|
||||||
packages/app-mobile/utils/types.js
|
packages/app-mobile/utils/types.js
|
||||||
packages/default-plugins/build.js
|
packages/default-plugins/build.js
|
||||||
packages/default-plugins/buildDefaultPlugins.js
|
packages/default-plugins/buildDefaultPlugins.js
|
||||||
@@ -700,8 +769,9 @@ packages/editor/CodeMirror/markdown/markdownCommands.toggleList.test.js
|
|||||||
packages/editor/CodeMirror/markdown/markdownCommands.js
|
packages/editor/CodeMirror/markdown/markdownCommands.js
|
||||||
packages/editor/CodeMirror/markdown/markdownMathParser.test.js
|
packages/editor/CodeMirror/markdown/markdownMathParser.test.js
|
||||||
packages/editor/CodeMirror/markdown/markdownMathParser.js
|
packages/editor/CodeMirror/markdown/markdownMathParser.js
|
||||||
packages/editor/CodeMirror/markdown/markdownReformatter.test.js
|
packages/editor/CodeMirror/markdown/utils/renumberSelectedLists.test.js
|
||||||
packages/editor/CodeMirror/markdown/markdownReformatter.js
|
packages/editor/CodeMirror/markdown/utils/renumberSelectedLists.js
|
||||||
|
packages/editor/CodeMirror/markdown/utils/stripBlockquote.js
|
||||||
packages/editor/CodeMirror/pluginApi/PluginLoader.js
|
packages/editor/CodeMirror/pluginApi/PluginLoader.js
|
||||||
packages/editor/CodeMirror/pluginApi/codeMirrorRequire.js
|
packages/editor/CodeMirror/pluginApi/codeMirrorRequire.js
|
||||||
packages/editor/CodeMirror/pluginApi/customEditorCompletion.test.js
|
packages/editor/CodeMirror/pluginApi/customEditorCompletion.test.js
|
||||||
@@ -714,8 +784,22 @@ packages/editor/CodeMirror/testUtil/loadLanguages.js
|
|||||||
packages/editor/CodeMirror/testUtil/pressReleaseKey.js
|
packages/editor/CodeMirror/testUtil/pressReleaseKey.js
|
||||||
packages/editor/CodeMirror/testUtil/typeText.js
|
packages/editor/CodeMirror/testUtil/typeText.js
|
||||||
packages/editor/CodeMirror/theme.js
|
packages/editor/CodeMirror/theme.js
|
||||||
packages/editor/CodeMirror/util/isInSyntaxNode.js
|
packages/editor/CodeMirror/utils/formatting/RegionSpec.js
|
||||||
packages/editor/CodeMirror/util/setupVim.js
|
packages/editor/CodeMirror/utils/formatting/findInlineMatch.test.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/findInlineMatch.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/isIndentationEquivalent.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/tabsToSpaces.test.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/tabsToSpaces.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleInlineFormatGlobally.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleInlineRegionSurrounded.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleInlineSelectionFormat.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleRegionFormatGlobally.test.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleRegionFormatGlobally.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleSelectedLinesStartWith.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/types.js
|
||||||
|
packages/editor/CodeMirror/utils/growSelectionToNode.js
|
||||||
|
packages/editor/CodeMirror/utils/isInSyntaxNode.js
|
||||||
|
packages/editor/CodeMirror/utils/setupVim.js
|
||||||
packages/editor/SelectionFormatting.js
|
packages/editor/SelectionFormatting.js
|
||||||
packages/editor/events.js
|
packages/editor/events.js
|
||||||
packages/editor/types.js
|
packages/editor/types.js
|
||||||
@@ -741,6 +825,7 @@ packages/generator-joplin/generators/app/templates/src/index.js
|
|||||||
packages/generator-joplin/tools/updateCategories.js
|
packages/generator-joplin/tools/updateCategories.js
|
||||||
packages/htmlpack/src/index.js
|
packages/htmlpack/src/index.js
|
||||||
packages/lib/ArrayUtils.js
|
packages/lib/ArrayUtils.js
|
||||||
|
packages/lib/AsyncActionQueue.test.js
|
||||||
packages/lib/AsyncActionQueue.js
|
packages/lib/AsyncActionQueue.js
|
||||||
packages/lib/BaseApplication.js
|
packages/lib/BaseApplication.js
|
||||||
packages/lib/BaseModel.js
|
packages/lib/BaseModel.js
|
||||||
@@ -759,6 +844,7 @@ packages/lib/ObjectUtils.js
|
|||||||
packages/lib/PoorManIntervals.js
|
packages/lib/PoorManIntervals.js
|
||||||
packages/lib/RotatingLogs.test.js
|
packages/lib/RotatingLogs.test.js
|
||||||
packages/lib/RotatingLogs.js
|
packages/lib/RotatingLogs.js
|
||||||
|
packages/lib/SyncTargetFilesystem.js
|
||||||
packages/lib/SyncTargetJoplinCloud.js
|
packages/lib/SyncTargetJoplinCloud.js
|
||||||
packages/lib/SyncTargetJoplinServer.js
|
packages/lib/SyncTargetJoplinServer.js
|
||||||
packages/lib/SyncTargetNone.js
|
packages/lib/SyncTargetNone.js
|
||||||
@@ -777,6 +863,7 @@ packages/lib/commands/index.js
|
|||||||
packages/lib/commands/openMasterPasswordDialog.js
|
packages/lib/commands/openMasterPasswordDialog.js
|
||||||
packages/lib/commands/synchronize.js
|
packages/lib/commands/synchronize.js
|
||||||
packages/lib/components/EncryptionConfigScreen/utils.js
|
packages/lib/components/EncryptionConfigScreen/utils.js
|
||||||
|
packages/lib/components/shared/NoteList/getEmptyFolderMessage.js
|
||||||
packages/lib/components/shared/config/config-shared.js
|
packages/lib/components/shared/config/config-shared.js
|
||||||
packages/lib/components/shared/config/plugins/types.js
|
packages/lib/components/shared/config/plugins/types.js
|
||||||
packages/lib/components/shared/config/plugins/useOnDeleteHandler.js
|
packages/lib/components/shared/config/plugins/useOnDeleteHandler.js
|
||||||
@@ -798,6 +885,7 @@ packages/lib/errorUtils.js
|
|||||||
packages/lib/errors.js
|
packages/lib/errors.js
|
||||||
packages/lib/eventManager.js
|
packages/lib/eventManager.js
|
||||||
packages/lib/file-api-driver-joplinServer.js
|
packages/lib/file-api-driver-joplinServer.js
|
||||||
|
packages/lib/file-api-driver-local.js
|
||||||
packages/lib/file-api-driver-memory.js
|
packages/lib/file-api-driver-memory.js
|
||||||
packages/lib/file-api-driver.test.js
|
packages/lib/file-api-driver.test.js
|
||||||
packages/lib/file-api.test.js
|
packages/lib/file-api.test.js
|
||||||
@@ -827,6 +915,7 @@ packages/lib/markdownUtils.js
|
|||||||
packages/lib/markdownUtils2.test.js
|
packages/lib/markdownUtils2.test.js
|
||||||
packages/lib/markupLanguageUtils.js
|
packages/lib/markupLanguageUtils.js
|
||||||
packages/lib/migrations/42.js
|
packages/lib/migrations/42.js
|
||||||
|
packages/lib/mime-utils.js
|
||||||
packages/lib/models/Alarm.js
|
packages/lib/models/Alarm.js
|
||||||
packages/lib/models/BaseItem.test.js
|
packages/lib/models/BaseItem.test.js
|
||||||
packages/lib/models/BaseItem.js
|
packages/lib/models/BaseItem.js
|
||||||
@@ -855,6 +944,7 @@ packages/lib/models/Tag.test.js
|
|||||||
packages/lib/models/Tag.js
|
packages/lib/models/Tag.js
|
||||||
packages/lib/models/dateTimeFormats.test.js
|
packages/lib/models/dateTimeFormats.test.js
|
||||||
packages/lib/models/settings/FileHandler.js
|
packages/lib/models/settings/FileHandler.js
|
||||||
|
packages/lib/models/settings/settingValidations.test.js
|
||||||
packages/lib/models/settings/settingValidations.js
|
packages/lib/models/settings/settingValidations.js
|
||||||
packages/lib/models/utils/getCollator.js
|
packages/lib/models/utils/getCollator.js
|
||||||
packages/lib/models/utils/getConflictFolderId.js
|
packages/lib/models/utils/getConflictFolderId.js
|
||||||
@@ -875,6 +965,7 @@ packages/lib/ntp.js
|
|||||||
packages/lib/onedrive-api.test.js
|
packages/lib/onedrive-api.test.js
|
||||||
packages/lib/onedrive-api.js
|
packages/lib/onedrive-api.js
|
||||||
packages/lib/path-utils.js
|
packages/lib/path-utils.js
|
||||||
|
packages/lib/reducer.test.js
|
||||||
packages/lib/reducer.js
|
packages/lib/reducer.js
|
||||||
packages/lib/registry.test.js
|
packages/lib/registry.test.js
|
||||||
packages/lib/registry.js
|
packages/lib/registry.js
|
||||||
@@ -894,6 +985,7 @@ packages/lib/services/KvStore.js
|
|||||||
packages/lib/services/MigrationService.js
|
packages/lib/services/MigrationService.js
|
||||||
packages/lib/services/NavService.js
|
packages/lib/services/NavService.js
|
||||||
packages/lib/services/PostMessageService.js
|
packages/lib/services/PostMessageService.js
|
||||||
|
packages/lib/services/ReportService.test.js
|
||||||
packages/lib/services/ReportService.js
|
packages/lib/services/ReportService.js
|
||||||
packages/lib/services/ResourceEditWatcher/index.js
|
packages/lib/services/ResourceEditWatcher/index.js
|
||||||
packages/lib/services/ResourceEditWatcher/reducer.js
|
packages/lib/services/ResourceEditWatcher/reducer.js
|
||||||
@@ -921,6 +1013,7 @@ packages/lib/services/database/migrations/43.js
|
|||||||
packages/lib/services/database/migrations/44.js
|
packages/lib/services/database/migrations/44.js
|
||||||
packages/lib/services/database/migrations/45.js
|
packages/lib/services/database/migrations/45.js
|
||||||
packages/lib/services/database/migrations/46.js
|
packages/lib/services/database/migrations/46.js
|
||||||
|
packages/lib/services/database/migrations/47.js
|
||||||
packages/lib/services/database/migrations/index.js
|
packages/lib/services/database/migrations/index.js
|
||||||
packages/lib/services/database/sqlStringToLines.js
|
packages/lib/services/database/sqlStringToLines.js
|
||||||
packages/lib/services/database/types.js
|
packages/lib/services/database/types.js
|
||||||
@@ -1020,6 +1113,16 @@ packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.js
|
|||||||
packages/lib/services/plugins/reducer.js
|
packages/lib/services/plugins/reducer.js
|
||||||
packages/lib/services/plugins/utils/createViewHandle.js
|
packages/lib/services/plugins/utils/createViewHandle.js
|
||||||
packages/lib/services/plugins/utils/executeSandboxCall.js
|
packages/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginIssueReportUrl.test.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginIssueReportUrl.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginNamespacedSettingKey.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginSettingKeyPrefix.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginSettingValue.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/getDefaultPlatforms.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/index.test.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/index.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/minVersionForPlatform.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/types.js
|
||||||
packages/lib/services/plugins/utils/loadContentScripts.js
|
packages/lib/services/plugins/utils/loadContentScripts.js
|
||||||
packages/lib/services/plugins/utils/makeListener.js
|
packages/lib/services/plugins/utils/makeListener.js
|
||||||
packages/lib/services/plugins/utils/manifestFromObject.js
|
packages/lib/services/plugins/utils/manifestFromObject.js
|
||||||
@@ -1027,6 +1130,8 @@ packages/lib/services/plugins/utils/mapEventHandlersToIds.js
|
|||||||
packages/lib/services/plugins/utils/types.js
|
packages/lib/services/plugins/utils/types.js
|
||||||
packages/lib/services/plugins/utils/validatePluginId.test.js
|
packages/lib/services/plugins/utils/validatePluginId.test.js
|
||||||
packages/lib/services/plugins/utils/validatePluginId.js
|
packages/lib/services/plugins/utils/validatePluginId.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginPlatforms.test.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginPlatforms.js
|
||||||
packages/lib/services/plugins/utils/validatePluginVersion.test.js
|
packages/lib/services/plugins/utils/validatePluginVersion.test.js
|
||||||
packages/lib/services/plugins/utils/validatePluginVersion.js
|
packages/lib/services/plugins/utils/validatePluginVersion.js
|
||||||
packages/lib/services/profileConfig/index.test.js
|
packages/lib/services/profileConfig/index.test.js
|
||||||
@@ -1074,6 +1179,7 @@ packages/lib/services/search/gotoAnythingStyleQuery.js
|
|||||||
packages/lib/services/search/queryBuilder.js
|
packages/lib/services/search/queryBuilder.js
|
||||||
packages/lib/services/share/ShareService.test.js
|
packages/lib/services/share/ShareService.test.js
|
||||||
packages/lib/services/share/ShareService.js
|
packages/lib/services/share/ShareService.js
|
||||||
|
packages/lib/services/share/invitationRespond.js
|
||||||
packages/lib/services/share/reducer.js
|
packages/lib/services/share/reducer.js
|
||||||
packages/lib/services/spellChecker/SpellCheckerService.js
|
packages/lib/services/spellChecker/SpellCheckerService.js
|
||||||
packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js
|
packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js
|
||||||
@@ -1117,7 +1223,6 @@ packages/lib/services/trash/getTrashFolderId.js
|
|||||||
packages/lib/services/trash/index.test.js
|
packages/lib/services/trash/index.test.js
|
||||||
packages/lib/services/trash/index.js
|
packages/lib/services/trash/index.js
|
||||||
packages/lib/services/trash/isTrashableItem.js
|
packages/lib/services/trash/isTrashableItem.js
|
||||||
packages/lib/services/trash/isTrashableNoteOrFolder.js
|
|
||||||
packages/lib/services/trash/permanentlyDeleteOldItems.test.js
|
packages/lib/services/trash/permanentlyDeleteOldItems.test.js
|
||||||
packages/lib/services/trash/permanentlyDeleteOldItems.js
|
packages/lib/services/trash/permanentlyDeleteOldItems.js
|
||||||
packages/lib/services/trash/restoreItems.test.js
|
packages/lib/services/trash/restoreItems.test.js
|
||||||
@@ -1126,6 +1231,8 @@ packages/lib/shim-init-node.js
|
|||||||
packages/lib/shim.js
|
packages/lib/shim.js
|
||||||
packages/lib/string-utils.test.js
|
packages/lib/string-utils.test.js
|
||||||
packages/lib/string-utils.js
|
packages/lib/string-utils.js
|
||||||
|
packages/lib/testing/share/makeMockShareInvitation.js
|
||||||
|
packages/lib/testing/share/mockShareService.js
|
||||||
packages/lib/testing/syncTargetUtils.js
|
packages/lib/testing/syncTargetUtils.js
|
||||||
packages/lib/testing/test-utils-synchronizer.js
|
packages/lib/testing/test-utils-synchronizer.js
|
||||||
packages/lib/testing/test-utils.js
|
packages/lib/testing/test-utils.js
|
||||||
@@ -1141,9 +1248,12 @@ packages/lib/themes/solarizedLight.js
|
|||||||
packages/lib/themes/type.js
|
packages/lib/themes/type.js
|
||||||
packages/lib/time.js
|
packages/lib/time.js
|
||||||
packages/lib/types.js
|
packages/lib/types.js
|
||||||
|
packages/lib/urlUtils.js
|
||||||
packages/lib/utils/ActionLogger.test.js
|
packages/lib/utils/ActionLogger.test.js
|
||||||
packages/lib/utils/ActionLogger.js
|
packages/lib/utils/ActionLogger.js
|
||||||
packages/lib/utils/credentialFiles.js
|
packages/lib/utils/credentialFiles.js
|
||||||
|
packages/lib/utils/focusHandler.js
|
||||||
|
packages/lib/utils/frontMatter.js
|
||||||
packages/lib/utils/ipc/RemoteMessenger.test.js
|
packages/lib/utils/ipc/RemoteMessenger.test.js
|
||||||
packages/lib/utils/ipc/RemoteMessenger.js
|
packages/lib/utils/ipc/RemoteMessenger.js
|
||||||
packages/lib/utils/ipc/TestMessenger.js
|
packages/lib/utils/ipc/TestMessenger.js
|
||||||
@@ -1154,7 +1264,8 @@ packages/lib/utils/ipc/utils/mergeCallbacksAndSerializable.js
|
|||||||
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.test.js
|
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.test.js
|
||||||
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.js
|
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.js
|
||||||
packages/lib/utils/ipc/utils/separateCallbacksFromSerializableArray.js
|
packages/lib/utils/ipc/utils/separateCallbacksFromSerializableArray.js
|
||||||
packages/lib/utils/joplinCloud.js
|
packages/lib/utils/joplinCloud/index.js
|
||||||
|
packages/lib/utils/joplinCloud/types.js
|
||||||
packages/lib/utils/processStartFlags.js
|
packages/lib/utils/processStartFlags.js
|
||||||
packages/lib/utils/replaceUnsupportedCharacters.test.js
|
packages/lib/utils/replaceUnsupportedCharacters.test.js
|
||||||
packages/lib/utils/replaceUnsupportedCharacters.js
|
packages/lib/utils/replaceUnsupportedCharacters.js
|
||||||
@@ -1225,6 +1336,8 @@ packages/renderer/MdToHtml/rules/link_open.js
|
|||||||
packages/renderer/MdToHtml/rules/mermaid.js
|
packages/renderer/MdToHtml/rules/mermaid.js
|
||||||
packages/renderer/MdToHtml/rules/sanitize_html.js
|
packages/renderer/MdToHtml/rules/sanitize_html.js
|
||||||
packages/renderer/MdToHtml/rules/source_map.js
|
packages/renderer/MdToHtml/rules/source_map.js
|
||||||
|
packages/renderer/MdToHtml/rules/tableHorizontallyScrollable.js
|
||||||
|
packages/renderer/MdToHtml/rules/utils/defaultRule.js
|
||||||
packages/renderer/MdToHtml/setupLinkify.js
|
packages/renderer/MdToHtml/setupLinkify.js
|
||||||
packages/renderer/MdToHtml/validateLinks.js
|
packages/renderer/MdToHtml/validateLinks.js
|
||||||
packages/renderer/assetsToHeaders.js
|
packages/renderer/assetsToHeaders.js
|
||||||
|
17
.eslintrc.js
@@ -70,6 +70,10 @@ module.exports = {
|
|||||||
'no-var': ['error'],
|
'no-var': ['error'],
|
||||||
'no-new-func': ['error'],
|
'no-new-func': ['error'],
|
||||||
'import/prefer-default-export': ['error'],
|
'import/prefer-default-export': ['error'],
|
||||||
|
'prefer-promise-reject-errors': ['error', {
|
||||||
|
allowEmptyReject: true,
|
||||||
|
}],
|
||||||
|
'no-throw-literal': ['error'],
|
||||||
|
|
||||||
// This rule should not be enabled since it matters in what order
|
// This rule should not be enabled since it matters in what order
|
||||||
// imports are done, in particular in relation to the shim.setReact
|
// imports are done, in particular in relation to the shim.setReact
|
||||||
@@ -101,6 +105,19 @@ module.exports = {
|
|||||||
'no-unneeded-ternary': 'error',
|
'no-unneeded-ternary': 'error',
|
||||||
'github/array-foreach': ['error'],
|
'github/array-foreach': ['error'],
|
||||||
|
|
||||||
|
'no-restricted-properties': ['error',
|
||||||
|
{
|
||||||
|
'property': 'focus',
|
||||||
|
'message': 'Please use focusHandler::focus() instead',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'property': 'blur',
|
||||||
|
'message': 'Please use focusHandler::blur() instead',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
'@typescript-eslint/no-explicit-any': ['error'],
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
// Formatting
|
// Formatting
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
2
.github/scripts/run_ci.sh
vendored
@@ -90,7 +90,7 @@ if [ "$RUN_TESTS" == "1" ]; then
|
|||||||
# On Linux, we run the Joplin Server tests using PostgreSQL
|
# On Linux, we run the Joplin Server tests using PostgreSQL
|
||||||
if [ "$IS_LINUX" == "1" ]; then
|
if [ "$IS_LINUX" == "1" ]; then
|
||||||
echo "Running Joplin Server tests using PostgreSQL..."
|
echo "Running Joplin Server tests using PostgreSQL..."
|
||||||
sudo docker-compose --file docker-compose.db-dev.yml up -d
|
sudo docker compose --file docker-compose.db-dev.yml up -d
|
||||||
cmdResult=$?
|
cmdResult=$?
|
||||||
if [ $cmdResult -ne 0 ]; then
|
if [ $cmdResult -ne 0 ]; then
|
||||||
exit $cmdResult
|
exit $cmdResult
|
||||||
|
15
.github/workflows/build-android.yml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
concurrent_skipping: 'same_content_newer'
|
concurrent_skipping: 'same_content_newer'
|
||||||
|
|
||||||
BuildAndroidDebug:
|
AssembleRelease:
|
||||||
needs: pre_job
|
needs: pre_job
|
||||||
if: github.repository == 'laurent22/joplin' && needs.pre_job.outputs.should_skip != 'true'
|
if: github.repository == 'laurent22/joplin' && needs.pre_job.outputs.should_skip != 'true'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -26,9 +26,14 @@ jobs:
|
|||||||
sudo apt-get update || true
|
sudo apt-get update || true
|
||||||
sudo apt-get install -y libsecret-1-dev
|
sudo apt-get install -y libsecret-1-dev
|
||||||
|
|
||||||
|
- uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: '20'
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
cache: 'yarn'
|
cache: 'yarn'
|
||||||
@@ -40,7 +45,9 @@ jobs:
|
|||||||
- name: Install
|
- name: Install
|
||||||
run: yarn install
|
run: yarn install
|
||||||
|
|
||||||
- name: Build Android Release
|
- name: Assemble Android Release
|
||||||
run: |
|
run: |
|
||||||
cd packages/app-mobile/android && ./gradlew assembleDebug
|
cd packages/app-mobile/android
|
||||||
|
sed -i -- 's/signingConfig signingConfigs.release/signingConfig signingConfigs.debug/' app/build.gradle
|
||||||
|
./gradlew assembleRelease
|
||||||
|
|
6
.github/workflows/build-macos-m1.yml
vendored
@@ -20,8 +20,8 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: olegtarasov/get-tag@v2.1
|
- uses: olegtarasov/get-tag@v2.1.3
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
# We need to pin the version to 18.15, because 18.16+ fails with this error:
|
# We need to pin the version to 18.15, because 18.16+ fails with this error:
|
||||||
# https://github.com/facebook/react-native/issues/36440
|
# https://github.com/facebook/react-native/issues/36440
|
||||||
@@ -40,7 +40,7 @@ jobs:
|
|||||||
brew install pango
|
brew install pango
|
||||||
|
|
||||||
# See github-action-main.yml for explanation
|
# See github-action-main.yml for explanation
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
|
|
||||||
|
2
.github/workflows/cla.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
- name: "CLA Assistant"
|
- name: "CLA Assistant"
|
||||||
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
|
||||||
# Beta Release
|
# Beta Release
|
||||||
uses: contributor-assistant/github-action@v2.3.1
|
uses: contributor-assistant/github-action@v2.3.2
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# the below token should have repo scope and must be manually added by you in the repository's secret
|
# the below token should have repo scope and must be manually added by you in the repository's secret
|
||||||
|
2
.github/workflows/close-stale-issues.yml
vendored
@@ -9,7 +9,7 @@ jobs:
|
|||||||
if: github.repository == 'laurent22/joplin'
|
if: github.repository == 'laurent22/joplin'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v4
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
# Use this to do a dry run from a pull request
|
# Use this to do a dry run from a pull request
|
||||||
# debug-only: true
|
# debug-only: true
|
||||||
|
10
.github/workflows/github-actions-main.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
# Do not use unbuntu-latest because it causes `The operation was canceled` failures:
|
# Do not use unbuntu-latest because it causes `The operation was canceled` failures:
|
||||||
# https://github.com/actions/runner-images/issues/6709
|
# https://github.com/actions/runner-images/issues/6709
|
||||||
os: [macos-latest, ubuntu-20.04, windows-2019]
|
os: [macos-12, ubuntu-20.04, windows-2019]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
# Trying to fix random networking issues on Windows
|
# Trying to fix random networking issues on Windows
|
||||||
@@ -82,8 +82,8 @@ jobs:
|
|||||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
|
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- uses: olegtarasov/get-tag@v2.1
|
- uses: olegtarasov/get-tag@v2.1.3
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
# We need to pin the version to 18.15, because 18.16+ fails with this error:
|
# We need to pin the version to 18.15, because 18.16+ fails with this error:
|
||||||
# https://github.com/facebook/react-native/issues/36440
|
# https://github.com/facebook/react-native/issues/36440
|
||||||
@@ -109,7 +109,7 @@ jobs:
|
|||||||
# Python to an earlier version.
|
# Python to an earlier version.
|
||||||
# Fixes error `ModuleNotFoundError: No module named 'distutils'`
|
# Fixes error `ModuleNotFoundError: No module named 'distutils'`
|
||||||
# Ref: https://github.com/nodejs/node-gyp/issues/2869
|
# Ref: https://github.com/nodejs/node-gyp/issues/2869
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ jobs:
|
|||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
cache: 'yarn'
|
cache: 'yarn'
|
||||||
|
148
.gitignore
vendored
@@ -10,7 +10,6 @@ _vieux/
|
|||||||
!var/sessions/.gitkeep
|
!var/sessions/.gitkeep
|
||||||
!var/SymfonyRequirements.php
|
!var/SymfonyRequirements.php
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.vscode/*
|
|
||||||
*.map
|
*.map
|
||||||
*.pro.user
|
*.pro.user
|
||||||
*.sublime-workspace
|
*.sublime-workspace
|
||||||
@@ -147,6 +146,7 @@ packages/app-desktop/gui/Button/Button.js
|
|||||||
packages/app-desktop/gui/ClipperConfigScreen.js
|
packages/app-desktop/gui/ClipperConfigScreen.js
|
||||||
packages/app-desktop/gui/ConfigScreen/ButtonBar.js
|
packages/app-desktop/gui/ConfigScreen/ButtonBar.js
|
||||||
packages/app-desktop/gui/ConfigScreen/ConfigScreen.js
|
packages/app-desktop/gui/ConfigScreen/ConfigScreen.js
|
||||||
|
packages/app-desktop/gui/ConfigScreen/FontSearch.js
|
||||||
packages/app-desktop/gui/ConfigScreen/Sidebar.js
|
packages/app-desktop/gui/ConfigScreen/Sidebar.js
|
||||||
packages/app-desktop/gui/ConfigScreen/controls/MissingPasswordHelpLink.js
|
packages/app-desktop/gui/ConfigScreen/controls/MissingPasswordHelpLink.js
|
||||||
packages/app-desktop/gui/ConfigScreen/controls/ToggleAdvancedSettingsButton.js
|
packages/app-desktop/gui/ConfigScreen/controls/ToggleAdvancedSettingsButton.js
|
||||||
@@ -221,6 +221,7 @@ packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.test.js
|
|||||||
packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js
|
packages/app-desktop/gui/MainScreen/commands/showSpellCheckerMenu.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleEditors.js
|
packages/app-desktop/gui/MainScreen/commands/toggleEditors.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js
|
packages/app-desktop/gui/MainScreen/commands/toggleLayoutMoveMode.js
|
||||||
|
packages/app-desktop/gui/MainScreen/commands/toggleMenuBar.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js
|
packages/app-desktop/gui/MainScreen/commands/toggleNoteList.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleNoteType.js
|
packages/app-desktop/gui/MainScreen/commands/toggleNoteType.js
|
||||||
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderField.js
|
packages/app-desktop/gui/MainScreen/commands/toggleNotesSortOrderField.js
|
||||||
@@ -269,6 +270,7 @@ packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.
|
|||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/shouldPasteResources.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/types.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.js
|
||||||
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useLinkTooltips.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useScroll.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useWebViewApi.js
|
packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useWebViewApi.js
|
||||||
packages/app-desktop/gui/NoteEditor/NoteEditor.js
|
packages/app-desktop/gui/NoteEditor/NoteEditor.js
|
||||||
@@ -300,11 +302,11 @@ packages/app-desktop/gui/NoteEditor/utils/useMarkupToHtml.js
|
|||||||
packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js
|
packages/app-desktop/gui/NoteEditor/utils/useMessageHandler.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js
|
packages/app-desktop/gui/NoteEditor/utils/useNoteSearchBar.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
packages/app-desktop/gui/NoteEditor/utils/usePluginServiceRegistration.js
|
||||||
|
packages/app-desktop/gui/NoteEditor/utils/useScheduleSaveCallbacks.js
|
||||||
|
packages/app-desktop/gui/NoteEditor/utils/useScrollWhenReadyOptions.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js
|
packages/app-desktop/gui/NoteEditor/utils/useSearchMarkers.js
|
||||||
packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js
|
packages/app-desktop/gui/NoteEditor/utils/useWindowCommandHandler.js
|
||||||
packages/app-desktop/gui/NoteList/NoteList.js
|
|
||||||
packages/app-desktop/gui/NoteList/NoteList2.js
|
packages/app-desktop/gui/NoteList/NoteList2.js
|
||||||
packages/app-desktop/gui/NoteList/NoteListSource.js
|
|
||||||
packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js
|
packages/app-desktop/gui/NoteList/commands/focusElementNoteList.js
|
||||||
packages/app-desktop/gui/NoteList/commands/index.js
|
packages/app-desktop/gui/NoteList/commands/index.js
|
||||||
packages/app-desktop/gui/NoteList/utils/canManuallySortNotes.js
|
packages/app-desktop/gui/NoteList/utils/canManuallySortNotes.js
|
||||||
@@ -330,7 +332,6 @@ packages/app-desktop/gui/NoteListHeader/utils/getColumnTitle.js
|
|||||||
packages/app-desktop/gui/NoteListHeader/utils/useContextMenu.js
|
packages/app-desktop/gui/NoteListHeader/utils/useContextMenu.js
|
||||||
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.test.js
|
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.test.js
|
||||||
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.js
|
packages/app-desktop/gui/NoteListHeader/utils/validateColumns.js
|
||||||
packages/app-desktop/gui/NoteListItem.js
|
|
||||||
packages/app-desktop/gui/NoteListItem/NoteListItem.js
|
packages/app-desktop/gui/NoteListItem/NoteListItem.js
|
||||||
packages/app-desktop/gui/NoteListItem/utils/getNoteTitleHtml.js
|
packages/app-desktop/gui/NoteListItem/utils/getNoteTitleHtml.js
|
||||||
packages/app-desktop/gui/NoteListItem/utils/prepareViewProps.test.js
|
packages/app-desktop/gui/NoteListItem/utils/prepareViewProps.test.js
|
||||||
@@ -378,10 +379,26 @@ packages/app-desktop/gui/Root_UpgradeSyncTarget.js
|
|||||||
packages/app-desktop/gui/SearchBar/SearchBar.js
|
packages/app-desktop/gui/SearchBar/SearchBar.js
|
||||||
packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.js
|
packages/app-desktop/gui/ShareFolderDialog/ShareFolderDialog.js
|
||||||
packages/app-desktop/gui/ShareNoteDialog.js
|
packages/app-desktop/gui/ShareNoteDialog.js
|
||||||
|
packages/app-desktop/gui/Sidebar/FolderAndTagList.js
|
||||||
packages/app-desktop/gui/Sidebar/Sidebar.js
|
packages/app-desktop/gui/Sidebar/Sidebar.js
|
||||||
packages/app-desktop/gui/Sidebar/commands/focusElementSideBar.js
|
packages/app-desktop/gui/Sidebar/commands/focusElementSideBar.js
|
||||||
packages/app-desktop/gui/Sidebar/commands/index.js
|
packages/app-desktop/gui/Sidebar/commands/index.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useFocusHandler.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useOnRenderItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useOnSidebarKeyDownHandler.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useSelectedSidebarIndex.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useSidebarCommandHandler.js
|
||||||
|
packages/app-desktop/gui/Sidebar/hooks/useSidebarListData.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/AllNotesItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/EmptyExpandLink.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/ExpandIcon.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/ExpandLink.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/FolderItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/HeaderItem.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/NoteCount.js
|
||||||
|
packages/app-desktop/gui/Sidebar/listItemComponents/TagItem.js
|
||||||
packages/app-desktop/gui/Sidebar/styles/index.js
|
packages/app-desktop/gui/Sidebar/styles/index.js
|
||||||
|
packages/app-desktop/gui/Sidebar/types.js
|
||||||
packages/app-desktop/gui/StatusScreen/StatusScreen.js
|
packages/app-desktop/gui/StatusScreen/StatusScreen.js
|
||||||
packages/app-desktop/gui/StyleSheets/StyleSheetContainer.js
|
packages/app-desktop/gui/StyleSheets/StyleSheetContainer.js
|
||||||
packages/app-desktop/gui/SyncWizard/Dialog.js
|
packages/app-desktop/gui/SyncWizard/Dialog.js
|
||||||
@@ -396,6 +413,7 @@ packages/app-desktop/gui/ToolbarSpace.js
|
|||||||
packages/app-desktop/gui/TrashNotification/TrashNotification.js
|
packages/app-desktop/gui/TrashNotification/TrashNotification.js
|
||||||
packages/app-desktop/gui/dialogs.js
|
packages/app-desktop/gui/dialogs.js
|
||||||
packages/app-desktop/gui/hooks/useEffectDebugger.js
|
packages/app-desktop/gui/hooks/useEffectDebugger.js
|
||||||
|
packages/app-desktop/gui/hooks/useElementHeight.js
|
||||||
packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js
|
packages/app-desktop/gui/hooks/useImperativeHandlerDebugger.js
|
||||||
packages/app-desktop/gui/hooks/usePrevious.js
|
packages/app-desktop/gui/hooks/usePrevious.js
|
||||||
packages/app-desktop/gui/hooks/usePropsDebugger.js
|
packages/app-desktop/gui/hooks/usePropsDebugger.js
|
||||||
@@ -416,6 +434,10 @@ packages/app-desktop/integration-tests/main.spec.js
|
|||||||
packages/app-desktop/integration-tests/models/MainScreen.js
|
packages/app-desktop/integration-tests/models/MainScreen.js
|
||||||
packages/app-desktop/integration-tests/models/NoteEditorScreen.js
|
packages/app-desktop/integration-tests/models/NoteEditorScreen.js
|
||||||
packages/app-desktop/integration-tests/models/SettingsScreen.js
|
packages/app-desktop/integration-tests/models/SettingsScreen.js
|
||||||
|
packages/app-desktop/integration-tests/models/Sidebar.js
|
||||||
|
packages/app-desktop/integration-tests/noteList.spec.js
|
||||||
|
packages/app-desktop/integration-tests/richTextEditor.spec.js
|
||||||
|
packages/app-desktop/integration-tests/sidebar.spec.js
|
||||||
packages/app-desktop/integration-tests/simpleBackup.spec.js
|
packages/app-desktop/integration-tests/simpleBackup.spec.js
|
||||||
packages/app-desktop/integration-tests/util/activateMainMenuItem.js
|
packages/app-desktop/integration-tests/util/activateMainMenuItem.js
|
||||||
packages/app-desktop/integration-tests/util/createStartupArgs.js
|
packages/app-desktop/integration-tests/util/createStartupArgs.js
|
||||||
@@ -423,6 +445,7 @@ packages/app-desktop/integration-tests/util/firstNonDevToolsWindow.js
|
|||||||
packages/app-desktop/integration-tests/util/setFilePickerResponse.js
|
packages/app-desktop/integration-tests/util/setFilePickerResponse.js
|
||||||
packages/app-desktop/integration-tests/util/setMessageBoxResponse.js
|
packages/app-desktop/integration-tests/util/setMessageBoxResponse.js
|
||||||
packages/app-desktop/integration-tests/util/test.js
|
packages/app-desktop/integration-tests/util/test.js
|
||||||
|
packages/app-desktop/integration-tests/util/waitForNextOpenPath.js
|
||||||
packages/app-desktop/playwright.config.js
|
packages/app-desktop/playwright.config.js
|
||||||
packages/app-desktop/plugins/GotoAnything.js
|
packages/app-desktop/plugins/GotoAnything.js
|
||||||
packages/app-desktop/services/bridge.js
|
packages/app-desktop/services/bridge.js
|
||||||
@@ -443,7 +466,6 @@ packages/app-desktop/services/plugins/hooks/useThemeCss.js
|
|||||||
packages/app-desktop/services/plugins/hooks/useViewIsReady.js
|
packages/app-desktop/services/plugins/hooks/useViewIsReady.js
|
||||||
packages/app-desktop/services/plugins/hooks/useWebviewToPluginMessages.js
|
packages/app-desktop/services/plugins/hooks/useWebviewToPluginMessages.js
|
||||||
packages/app-desktop/services/restart.js
|
packages/app-desktop/services/restart.js
|
||||||
packages/app-desktop/services/share/invitationRespond.js
|
|
||||||
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
|
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.test.js
|
||||||
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
|
packages/app-desktop/services/sortOrder/PerFolderSortOrderService.js
|
||||||
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
packages/app-desktop/services/sortOrder/notesSortOrderUtils.test.js
|
||||||
@@ -457,25 +479,32 @@ packages/app-desktop/utils/7zip/pathToBundled7Zip.js
|
|||||||
packages/app-desktop/utils/checkForUpdatesUtils.test.js
|
packages/app-desktop/utils/checkForUpdatesUtils.test.js
|
||||||
packages/app-desktop/utils/checkForUpdatesUtils.js
|
packages/app-desktop/utils/checkForUpdatesUtils.js
|
||||||
packages/app-desktop/utils/checkForUpdatesUtilsTestData.js
|
packages/app-desktop/utils/checkForUpdatesUtilsTestData.js
|
||||||
|
packages/app-desktop/utils/isSafeToOpen.test.js
|
||||||
|
packages/app-desktop/utils/isSafeToOpen.js
|
||||||
packages/app-desktop/utils/markupLanguageUtils.js
|
packages/app-desktop/utils/markupLanguageUtils.js
|
||||||
packages/app-desktop/utils/restartInSafeModeFromMain.test.js
|
packages/app-desktop/utils/restartInSafeModeFromMain.test.js
|
||||||
packages/app-desktop/utils/restartInSafeModeFromMain.js
|
packages/app-desktop/utils/restartInSafeModeFromMain.js
|
||||||
packages/app-mobile/PluginAssetsLoader.js
|
packages/app-mobile/PluginAssetsLoader.js
|
||||||
packages/app-mobile/commands/index.js
|
packages/app-mobile/commands/index.js
|
||||||
|
packages/app-mobile/commands/newNote.test.js
|
||||||
|
packages/app-mobile/commands/newNote.js
|
||||||
packages/app-mobile/commands/openItem.js
|
packages/app-mobile/commands/openItem.js
|
||||||
packages/app-mobile/commands/openNote.js
|
packages/app-mobile/commands/openNote.js
|
||||||
packages/app-mobile/commands/scrollToHash.js
|
packages/app-mobile/commands/scrollToHash.js
|
||||||
packages/app-mobile/commands/util/goToNote.js
|
packages/app-mobile/commands/util/goToNote.js
|
||||||
packages/app-mobile/components/ActionButton.js
|
packages/app-mobile/components/ActionButton.js
|
||||||
packages/app-mobile/components/BackButtonDialogBox.js
|
packages/app-mobile/components/BackButtonDialogBox.js
|
||||||
|
packages/app-mobile/components/BetaChip.js
|
||||||
packages/app-mobile/components/CameraView.js
|
packages/app-mobile/components/CameraView.js
|
||||||
packages/app-mobile/components/CustomButton.js
|
packages/app-mobile/components/DismissibleDialog.js
|
||||||
packages/app-mobile/components/Dropdown.test.js
|
packages/app-mobile/components/Dropdown.test.js
|
||||||
packages/app-mobile/components/Dropdown.js
|
packages/app-mobile/components/Dropdown.js
|
||||||
packages/app-mobile/components/ExtendedWebView.js
|
packages/app-mobile/components/ExtendedWebView.js
|
||||||
packages/app-mobile/components/FolderPicker.js
|
packages/app-mobile/components/FolderPicker.js
|
||||||
packages/app-mobile/components/Icon.js
|
packages/app-mobile/components/Icon.js
|
||||||
|
packages/app-mobile/components/IconButton.js
|
||||||
packages/app-mobile/components/Modal.js
|
packages/app-mobile/components/Modal.js
|
||||||
|
packages/app-mobile/components/ModalDialog.js
|
||||||
packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js
|
packages/app-mobile/components/NoteBodyViewer/NoteBodyViewer.js
|
||||||
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.test.js
|
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.test.js
|
||||||
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.js
|
packages/app-mobile/components/NoteBodyViewer/bundledJs/Renderer.js
|
||||||
@@ -529,7 +558,10 @@ packages/app-mobile/components/NoteList.js
|
|||||||
packages/app-mobile/components/ProfileSwitcher/ProfileEditor.js
|
packages/app-mobile/components/ProfileSwitcher/ProfileEditor.js
|
||||||
packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
|
packages/app-mobile/components/ProfileSwitcher/ProfileSwitcher.js
|
||||||
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
|
packages/app-mobile/components/ProfileSwitcher/useProfileConfig.js
|
||||||
packages/app-mobile/components/ScreenHeader.js
|
packages/app-mobile/components/ScreenHeader/WarningBanner.test.js
|
||||||
|
packages/app-mobile/components/ScreenHeader/WarningBanner.js
|
||||||
|
packages/app-mobile/components/ScreenHeader/WarningBox.js
|
||||||
|
packages/app-mobile/components/ScreenHeader/index.js
|
||||||
packages/app-mobile/components/SelectDateTimeDialog.js
|
packages/app-mobile/components/SelectDateTimeDialog.js
|
||||||
packages/app-mobile/components/SideMenu.js
|
packages/app-mobile/components/SideMenu.js
|
||||||
packages/app-mobile/components/TextInput.js
|
packages/app-mobile/components/TextInput.js
|
||||||
@@ -538,44 +570,72 @@ packages/app-mobile/components/base-screen.js
|
|||||||
packages/app-mobile/components/biometrics/BiometricPopup.js
|
packages/app-mobile/components/biometrics/BiometricPopup.js
|
||||||
packages/app-mobile/components/biometrics/biometricAuthenticate.js
|
packages/app-mobile/components/biometrics/biometricAuthenticate.js
|
||||||
packages/app-mobile/components/biometrics/sensorInfo.js
|
packages/app-mobile/components/biometrics/sensorInfo.js
|
||||||
|
packages/app-mobile/components/buttons/TextButton.js
|
||||||
|
packages/app-mobile/components/buttons/index.js
|
||||||
packages/app-mobile/components/getResponsiveValue.test.js
|
packages/app-mobile/components/getResponsiveValue.test.js
|
||||||
packages/app-mobile/components/getResponsiveValue.js
|
packages/app-mobile/components/getResponsiveValue.js
|
||||||
packages/app-mobile/components/global-style.js
|
packages/app-mobile/components/global-style.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
packages/app-mobile/components/screens/ConfigScreen/ConfigScreen.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
packages/app-mobile/components/screens/ConfigScreen/FileSystemPathSelector.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/JoplinCloudConfig.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportDebugReportButton.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportDebugReportButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportProfileButton.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/ExportProfileButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.test.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.test.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteExportButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/NoteImportButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/TaskButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportAllFolders.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportAllFolders.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportDebugReport.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportDebugReport.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportProfile.js
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/exportProfile.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/NoteExportSection/utils/makeImportExportCacheDirectory.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/SectionDescription.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SectionHeader.js
|
packages/app-mobile/components/screens/ConfigScreen/SectionHeader.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SectionSelector.js
|
packages/app-mobile/components/screens/ConfigScreen/SectionSelector/SectionTab.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/SectionSelector/index.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingComponent.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingComponent.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingItem.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingItem.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingsButton.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingsButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.js
|
packages/app-mobile/components/screens/ConfigScreen/SettingsToggle.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.js
|
packages/app-mobile/components/screens/ConfigScreen/configScreenStyles.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/EnablePluginSupportPage.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/InstalledPluginBox.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChip.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginChips.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/PluginTitle.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/RecommendedBadge.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginBox/index.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginInfoModal.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.installed.test.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.search.test.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginStates.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginToggle.js
|
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/PluginUploadButton.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/SearchPlugins.test.js
|
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/SearchPlugins.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/SearchPlugins.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/SectionLabel.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/buttons/ActionButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/buttons/InstallButton.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/WrappedPluginStates.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/mockRepositoryApiConstructor.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/newRepoApi.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/newRepoApi.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/pluginServiceSetup.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/testUtils/pluginServiceSetup.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/isPluginInstallingAllowed.js
|
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/openWebsiteForPlugin.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/openWebsiteForPlugin.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/usePluginCallbacks.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/usePluginItem.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/useRepoApi.js
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/useRepoApi.js
|
||||||
|
packages/app-mobile/components/screens/ConfigScreen/plugins/utils/useUpdateState.js
|
||||||
packages/app-mobile/components/screens/ConfigScreen/types.js
|
packages/app-mobile/components/screens/ConfigScreen/types.js
|
||||||
packages/app-mobile/components/screens/JoplinCloudLoginScreen.js
|
packages/app-mobile/components/screens/JoplinCloudLoginScreen.js
|
||||||
packages/app-mobile/components/screens/LogScreen.js
|
packages/app-mobile/components/screens/LogScreen.js
|
||||||
packages/app-mobile/components/screens/Note.js
|
packages/app-mobile/components/screens/Note.js
|
||||||
|
packages/app-mobile/components/screens/NoteTagsDialog.js
|
||||||
packages/app-mobile/components/screens/Notes.js
|
packages/app-mobile/components/screens/Notes.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/AcceptedShareItem.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/IncomingShareItem.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/index.test.js
|
||||||
|
packages/app-mobile/components/screens/ShareManager/index.js
|
||||||
packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js
|
packages/app-mobile/components/screens/UpgradeSyncTargetScreen.js
|
||||||
packages/app-mobile/components/screens/encryption-config.js
|
packages/app-mobile/components/screens/encryption-config.js
|
||||||
packages/app-mobile/components/screens/search.js
|
packages/app-mobile/components/screens/search.js
|
||||||
|
packages/app-mobile/components/screens/status.js
|
||||||
packages/app-mobile/components/side-menu-content.js
|
packages/app-mobile/components/side-menu-content.js
|
||||||
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
packages/app-mobile/components/voiceTyping/VoiceTypingDialog.js
|
||||||
packages/app-mobile/gulpfile.js
|
packages/app-mobile/gulpfile.js
|
||||||
@@ -586,6 +646,8 @@ packages/app-mobile/plugins/PluginRunner/backgroundPage/initializeDialogWebView.
|
|||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializePluginBackgroundIframe.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/initializePluginBackgroundIframe.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/pluginRunnerBackgroundPage.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/startStopPlugin.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/startStopPlugin.js
|
||||||
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.test.js
|
||||||
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/getFormData.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/makeSandboxedIframe.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/makeSandboxedIframe.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/reportUnhandledErrors.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/reportUnhandledErrors.js
|
||||||
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/wrapConsoleLog.js
|
packages/app-mobile/plugins/PluginRunner/backgroundPage/utils/wrapConsoleLog.js
|
||||||
@@ -600,7 +662,9 @@ packages/app-mobile/plugins/PluginRunner/dialogs/hooks/useWebViewSetup.js
|
|||||||
packages/app-mobile/plugins/PluginRunner/types.js
|
packages/app-mobile/plugins/PluginRunner/types.js
|
||||||
packages/app-mobile/plugins/PluginRunner/utils/createOnLogHandler.js
|
packages/app-mobile/plugins/PluginRunner/utils/createOnLogHandler.js
|
||||||
packages/app-mobile/plugins/hooks/usePlugin.js
|
packages/app-mobile/plugins/hooks/usePlugin.js
|
||||||
|
packages/app-mobile/plugins/loadPlugins.test.js
|
||||||
packages/app-mobile/plugins/loadPlugins.js
|
packages/app-mobile/plugins/loadPlugins.js
|
||||||
|
packages/app-mobile/plugins/testing/MockPluginRunner.js
|
||||||
packages/app-mobile/root.js
|
packages/app-mobile/root.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.android.js
|
packages/app-mobile/services/AlarmServiceDriver.android.js
|
||||||
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
packages/app-mobile/services/AlarmServiceDriver.ios.js
|
||||||
@@ -617,6 +681,7 @@ packages/app-mobile/utils/ShareExtension.js
|
|||||||
packages/app-mobile/utils/ShareUtils.test.js
|
packages/app-mobile/utils/ShareUtils.test.js
|
||||||
packages/app-mobile/utils/ShareUtils.js
|
packages/app-mobile/utils/ShareUtils.js
|
||||||
packages/app-mobile/utils/TlsUtils.js
|
packages/app-mobile/utils/TlsUtils.js
|
||||||
|
packages/app-mobile/utils/appDefaultState.js
|
||||||
packages/app-mobile/utils/autodetectTheme.js
|
packages/app-mobile/utils/autodetectTheme.js
|
||||||
packages/app-mobile/utils/checkPermissions.js
|
packages/app-mobile/utils/checkPermissions.js
|
||||||
packages/app-mobile/utils/createRootStyle.js
|
packages/app-mobile/utils/createRootStyle.js
|
||||||
@@ -629,6 +694,8 @@ packages/app-mobile/utils/fs-driver/tarExtract.test.js
|
|||||||
packages/app-mobile/utils/fs-driver/tarExtract.js
|
packages/app-mobile/utils/fs-driver/tarExtract.js
|
||||||
packages/app-mobile/utils/fs-driver/testUtil/createFilesFromPathRecord.js
|
packages/app-mobile/utils/fs-driver/testUtil/createFilesFromPathRecord.js
|
||||||
packages/app-mobile/utils/fs-driver/testUtil/verifyDirectoryMatches.js
|
packages/app-mobile/utils/fs-driver/testUtil/verifyDirectoryMatches.js
|
||||||
|
packages/app-mobile/utils/getPackageInfo.js
|
||||||
|
packages/app-mobile/utils/getVersionInfoText.js
|
||||||
packages/app-mobile/utils/initializeCommandService.js
|
packages/app-mobile/utils/initializeCommandService.js
|
||||||
packages/app-mobile/utils/ipc/RNToWebViewMessenger.js
|
packages/app-mobile/utils/ipc/RNToWebViewMessenger.js
|
||||||
packages/app-mobile/utils/ipc/WebViewToRNMessenger.js
|
packages/app-mobile/utils/ipc/WebViewToRNMessenger.js
|
||||||
@@ -638,6 +705,7 @@ packages/app-mobile/utils/polyfills/index.js
|
|||||||
packages/app-mobile/utils/setupNotifications.js
|
packages/app-mobile/utils/setupNotifications.js
|
||||||
packages/app-mobile/utils/shareHandler.js
|
packages/app-mobile/utils/shareHandler.js
|
||||||
packages/app-mobile/utils/showMessageBox.js
|
packages/app-mobile/utils/showMessageBox.js
|
||||||
|
packages/app-mobile/utils/testing/createMockReduxStore.js
|
||||||
packages/app-mobile/utils/types.js
|
packages/app-mobile/utils/types.js
|
||||||
packages/default-plugins/build.js
|
packages/default-plugins/build.js
|
||||||
packages/default-plugins/buildDefaultPlugins.js
|
packages/default-plugins/buildDefaultPlugins.js
|
||||||
@@ -680,8 +748,9 @@ packages/editor/CodeMirror/markdown/markdownCommands.toggleList.test.js
|
|||||||
packages/editor/CodeMirror/markdown/markdownCommands.js
|
packages/editor/CodeMirror/markdown/markdownCommands.js
|
||||||
packages/editor/CodeMirror/markdown/markdownMathParser.test.js
|
packages/editor/CodeMirror/markdown/markdownMathParser.test.js
|
||||||
packages/editor/CodeMirror/markdown/markdownMathParser.js
|
packages/editor/CodeMirror/markdown/markdownMathParser.js
|
||||||
packages/editor/CodeMirror/markdown/markdownReformatter.test.js
|
packages/editor/CodeMirror/markdown/utils/renumberSelectedLists.test.js
|
||||||
packages/editor/CodeMirror/markdown/markdownReformatter.js
|
packages/editor/CodeMirror/markdown/utils/renumberSelectedLists.js
|
||||||
|
packages/editor/CodeMirror/markdown/utils/stripBlockquote.js
|
||||||
packages/editor/CodeMirror/pluginApi/PluginLoader.js
|
packages/editor/CodeMirror/pluginApi/PluginLoader.js
|
||||||
packages/editor/CodeMirror/pluginApi/codeMirrorRequire.js
|
packages/editor/CodeMirror/pluginApi/codeMirrorRequire.js
|
||||||
packages/editor/CodeMirror/pluginApi/customEditorCompletion.test.js
|
packages/editor/CodeMirror/pluginApi/customEditorCompletion.test.js
|
||||||
@@ -694,8 +763,22 @@ packages/editor/CodeMirror/testUtil/loadLanguages.js
|
|||||||
packages/editor/CodeMirror/testUtil/pressReleaseKey.js
|
packages/editor/CodeMirror/testUtil/pressReleaseKey.js
|
||||||
packages/editor/CodeMirror/testUtil/typeText.js
|
packages/editor/CodeMirror/testUtil/typeText.js
|
||||||
packages/editor/CodeMirror/theme.js
|
packages/editor/CodeMirror/theme.js
|
||||||
packages/editor/CodeMirror/util/isInSyntaxNode.js
|
packages/editor/CodeMirror/utils/formatting/RegionSpec.js
|
||||||
packages/editor/CodeMirror/util/setupVim.js
|
packages/editor/CodeMirror/utils/formatting/findInlineMatch.test.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/findInlineMatch.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/isIndentationEquivalent.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/tabsToSpaces.test.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/tabsToSpaces.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleInlineFormatGlobally.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleInlineRegionSurrounded.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleInlineSelectionFormat.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleRegionFormatGlobally.test.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleRegionFormatGlobally.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/toggleSelectedLinesStartWith.js
|
||||||
|
packages/editor/CodeMirror/utils/formatting/types.js
|
||||||
|
packages/editor/CodeMirror/utils/growSelectionToNode.js
|
||||||
|
packages/editor/CodeMirror/utils/isInSyntaxNode.js
|
||||||
|
packages/editor/CodeMirror/utils/setupVim.js
|
||||||
packages/editor/SelectionFormatting.js
|
packages/editor/SelectionFormatting.js
|
||||||
packages/editor/events.js
|
packages/editor/events.js
|
||||||
packages/editor/types.js
|
packages/editor/types.js
|
||||||
@@ -721,6 +804,7 @@ packages/generator-joplin/generators/app/templates/src/index.js
|
|||||||
packages/generator-joplin/tools/updateCategories.js
|
packages/generator-joplin/tools/updateCategories.js
|
||||||
packages/htmlpack/src/index.js
|
packages/htmlpack/src/index.js
|
||||||
packages/lib/ArrayUtils.js
|
packages/lib/ArrayUtils.js
|
||||||
|
packages/lib/AsyncActionQueue.test.js
|
||||||
packages/lib/AsyncActionQueue.js
|
packages/lib/AsyncActionQueue.js
|
||||||
packages/lib/BaseApplication.js
|
packages/lib/BaseApplication.js
|
||||||
packages/lib/BaseModel.js
|
packages/lib/BaseModel.js
|
||||||
@@ -739,6 +823,7 @@ packages/lib/ObjectUtils.js
|
|||||||
packages/lib/PoorManIntervals.js
|
packages/lib/PoorManIntervals.js
|
||||||
packages/lib/RotatingLogs.test.js
|
packages/lib/RotatingLogs.test.js
|
||||||
packages/lib/RotatingLogs.js
|
packages/lib/RotatingLogs.js
|
||||||
|
packages/lib/SyncTargetFilesystem.js
|
||||||
packages/lib/SyncTargetJoplinCloud.js
|
packages/lib/SyncTargetJoplinCloud.js
|
||||||
packages/lib/SyncTargetJoplinServer.js
|
packages/lib/SyncTargetJoplinServer.js
|
||||||
packages/lib/SyncTargetNone.js
|
packages/lib/SyncTargetNone.js
|
||||||
@@ -757,6 +842,7 @@ packages/lib/commands/index.js
|
|||||||
packages/lib/commands/openMasterPasswordDialog.js
|
packages/lib/commands/openMasterPasswordDialog.js
|
||||||
packages/lib/commands/synchronize.js
|
packages/lib/commands/synchronize.js
|
||||||
packages/lib/components/EncryptionConfigScreen/utils.js
|
packages/lib/components/EncryptionConfigScreen/utils.js
|
||||||
|
packages/lib/components/shared/NoteList/getEmptyFolderMessage.js
|
||||||
packages/lib/components/shared/config/config-shared.js
|
packages/lib/components/shared/config/config-shared.js
|
||||||
packages/lib/components/shared/config/plugins/types.js
|
packages/lib/components/shared/config/plugins/types.js
|
||||||
packages/lib/components/shared/config/plugins/useOnDeleteHandler.js
|
packages/lib/components/shared/config/plugins/useOnDeleteHandler.js
|
||||||
@@ -778,6 +864,7 @@ packages/lib/errorUtils.js
|
|||||||
packages/lib/errors.js
|
packages/lib/errors.js
|
||||||
packages/lib/eventManager.js
|
packages/lib/eventManager.js
|
||||||
packages/lib/file-api-driver-joplinServer.js
|
packages/lib/file-api-driver-joplinServer.js
|
||||||
|
packages/lib/file-api-driver-local.js
|
||||||
packages/lib/file-api-driver-memory.js
|
packages/lib/file-api-driver-memory.js
|
||||||
packages/lib/file-api-driver.test.js
|
packages/lib/file-api-driver.test.js
|
||||||
packages/lib/file-api.test.js
|
packages/lib/file-api.test.js
|
||||||
@@ -807,6 +894,7 @@ packages/lib/markdownUtils.js
|
|||||||
packages/lib/markdownUtils2.test.js
|
packages/lib/markdownUtils2.test.js
|
||||||
packages/lib/markupLanguageUtils.js
|
packages/lib/markupLanguageUtils.js
|
||||||
packages/lib/migrations/42.js
|
packages/lib/migrations/42.js
|
||||||
|
packages/lib/mime-utils.js
|
||||||
packages/lib/models/Alarm.js
|
packages/lib/models/Alarm.js
|
||||||
packages/lib/models/BaseItem.test.js
|
packages/lib/models/BaseItem.test.js
|
||||||
packages/lib/models/BaseItem.js
|
packages/lib/models/BaseItem.js
|
||||||
@@ -835,6 +923,7 @@ packages/lib/models/Tag.test.js
|
|||||||
packages/lib/models/Tag.js
|
packages/lib/models/Tag.js
|
||||||
packages/lib/models/dateTimeFormats.test.js
|
packages/lib/models/dateTimeFormats.test.js
|
||||||
packages/lib/models/settings/FileHandler.js
|
packages/lib/models/settings/FileHandler.js
|
||||||
|
packages/lib/models/settings/settingValidations.test.js
|
||||||
packages/lib/models/settings/settingValidations.js
|
packages/lib/models/settings/settingValidations.js
|
||||||
packages/lib/models/utils/getCollator.js
|
packages/lib/models/utils/getCollator.js
|
||||||
packages/lib/models/utils/getConflictFolderId.js
|
packages/lib/models/utils/getConflictFolderId.js
|
||||||
@@ -855,6 +944,7 @@ packages/lib/ntp.js
|
|||||||
packages/lib/onedrive-api.test.js
|
packages/lib/onedrive-api.test.js
|
||||||
packages/lib/onedrive-api.js
|
packages/lib/onedrive-api.js
|
||||||
packages/lib/path-utils.js
|
packages/lib/path-utils.js
|
||||||
|
packages/lib/reducer.test.js
|
||||||
packages/lib/reducer.js
|
packages/lib/reducer.js
|
||||||
packages/lib/registry.test.js
|
packages/lib/registry.test.js
|
||||||
packages/lib/registry.js
|
packages/lib/registry.js
|
||||||
@@ -874,6 +964,7 @@ packages/lib/services/KvStore.js
|
|||||||
packages/lib/services/MigrationService.js
|
packages/lib/services/MigrationService.js
|
||||||
packages/lib/services/NavService.js
|
packages/lib/services/NavService.js
|
||||||
packages/lib/services/PostMessageService.js
|
packages/lib/services/PostMessageService.js
|
||||||
|
packages/lib/services/ReportService.test.js
|
||||||
packages/lib/services/ReportService.js
|
packages/lib/services/ReportService.js
|
||||||
packages/lib/services/ResourceEditWatcher/index.js
|
packages/lib/services/ResourceEditWatcher/index.js
|
||||||
packages/lib/services/ResourceEditWatcher/reducer.js
|
packages/lib/services/ResourceEditWatcher/reducer.js
|
||||||
@@ -901,6 +992,7 @@ packages/lib/services/database/migrations/43.js
|
|||||||
packages/lib/services/database/migrations/44.js
|
packages/lib/services/database/migrations/44.js
|
||||||
packages/lib/services/database/migrations/45.js
|
packages/lib/services/database/migrations/45.js
|
||||||
packages/lib/services/database/migrations/46.js
|
packages/lib/services/database/migrations/46.js
|
||||||
|
packages/lib/services/database/migrations/47.js
|
||||||
packages/lib/services/database/migrations/index.js
|
packages/lib/services/database/migrations/index.js
|
||||||
packages/lib/services/database/sqlStringToLines.js
|
packages/lib/services/database/sqlStringToLines.js
|
||||||
packages/lib/services/database/types.js
|
packages/lib/services/database/types.js
|
||||||
@@ -1000,6 +1092,16 @@ packages/lib/services/plugins/defaultPlugins/desktopDefaultPluginsInfo.js
|
|||||||
packages/lib/services/plugins/reducer.js
|
packages/lib/services/plugins/reducer.js
|
||||||
packages/lib/services/plugins/utils/createViewHandle.js
|
packages/lib/services/plugins/utils/createViewHandle.js
|
||||||
packages/lib/services/plugins/utils/executeSandboxCall.js
|
packages/lib/services/plugins/utils/executeSandboxCall.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginIssueReportUrl.test.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginIssueReportUrl.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginNamespacedSettingKey.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginSettingKeyPrefix.js
|
||||||
|
packages/lib/services/plugins/utils/getPluginSettingValue.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/getDefaultPlatforms.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/index.test.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/index.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/minVersionForPlatform.js
|
||||||
|
packages/lib/services/plugins/utils/isCompatible/types.js
|
||||||
packages/lib/services/plugins/utils/loadContentScripts.js
|
packages/lib/services/plugins/utils/loadContentScripts.js
|
||||||
packages/lib/services/plugins/utils/makeListener.js
|
packages/lib/services/plugins/utils/makeListener.js
|
||||||
packages/lib/services/plugins/utils/manifestFromObject.js
|
packages/lib/services/plugins/utils/manifestFromObject.js
|
||||||
@@ -1007,6 +1109,8 @@ packages/lib/services/plugins/utils/mapEventHandlersToIds.js
|
|||||||
packages/lib/services/plugins/utils/types.js
|
packages/lib/services/plugins/utils/types.js
|
||||||
packages/lib/services/plugins/utils/validatePluginId.test.js
|
packages/lib/services/plugins/utils/validatePluginId.test.js
|
||||||
packages/lib/services/plugins/utils/validatePluginId.js
|
packages/lib/services/plugins/utils/validatePluginId.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginPlatforms.test.js
|
||||||
|
packages/lib/services/plugins/utils/validatePluginPlatforms.js
|
||||||
packages/lib/services/plugins/utils/validatePluginVersion.test.js
|
packages/lib/services/plugins/utils/validatePluginVersion.test.js
|
||||||
packages/lib/services/plugins/utils/validatePluginVersion.js
|
packages/lib/services/plugins/utils/validatePluginVersion.js
|
||||||
packages/lib/services/profileConfig/index.test.js
|
packages/lib/services/profileConfig/index.test.js
|
||||||
@@ -1054,6 +1158,7 @@ packages/lib/services/search/gotoAnythingStyleQuery.js
|
|||||||
packages/lib/services/search/queryBuilder.js
|
packages/lib/services/search/queryBuilder.js
|
||||||
packages/lib/services/share/ShareService.test.js
|
packages/lib/services/share/ShareService.test.js
|
||||||
packages/lib/services/share/ShareService.js
|
packages/lib/services/share/ShareService.js
|
||||||
|
packages/lib/services/share/invitationRespond.js
|
||||||
packages/lib/services/share/reducer.js
|
packages/lib/services/share/reducer.js
|
||||||
packages/lib/services/spellChecker/SpellCheckerService.js
|
packages/lib/services/spellChecker/SpellCheckerService.js
|
||||||
packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js
|
packages/lib/services/spellChecker/SpellCheckerServiceDriverBase.js
|
||||||
@@ -1097,7 +1202,6 @@ packages/lib/services/trash/getTrashFolderId.js
|
|||||||
packages/lib/services/trash/index.test.js
|
packages/lib/services/trash/index.test.js
|
||||||
packages/lib/services/trash/index.js
|
packages/lib/services/trash/index.js
|
||||||
packages/lib/services/trash/isTrashableItem.js
|
packages/lib/services/trash/isTrashableItem.js
|
||||||
packages/lib/services/trash/isTrashableNoteOrFolder.js
|
|
||||||
packages/lib/services/trash/permanentlyDeleteOldItems.test.js
|
packages/lib/services/trash/permanentlyDeleteOldItems.test.js
|
||||||
packages/lib/services/trash/permanentlyDeleteOldItems.js
|
packages/lib/services/trash/permanentlyDeleteOldItems.js
|
||||||
packages/lib/services/trash/restoreItems.test.js
|
packages/lib/services/trash/restoreItems.test.js
|
||||||
@@ -1106,6 +1210,8 @@ packages/lib/shim-init-node.js
|
|||||||
packages/lib/shim.js
|
packages/lib/shim.js
|
||||||
packages/lib/string-utils.test.js
|
packages/lib/string-utils.test.js
|
||||||
packages/lib/string-utils.js
|
packages/lib/string-utils.js
|
||||||
|
packages/lib/testing/share/makeMockShareInvitation.js
|
||||||
|
packages/lib/testing/share/mockShareService.js
|
||||||
packages/lib/testing/syncTargetUtils.js
|
packages/lib/testing/syncTargetUtils.js
|
||||||
packages/lib/testing/test-utils-synchronizer.js
|
packages/lib/testing/test-utils-synchronizer.js
|
||||||
packages/lib/testing/test-utils.js
|
packages/lib/testing/test-utils.js
|
||||||
@@ -1121,9 +1227,12 @@ packages/lib/themes/solarizedLight.js
|
|||||||
packages/lib/themes/type.js
|
packages/lib/themes/type.js
|
||||||
packages/lib/time.js
|
packages/lib/time.js
|
||||||
packages/lib/types.js
|
packages/lib/types.js
|
||||||
|
packages/lib/urlUtils.js
|
||||||
packages/lib/utils/ActionLogger.test.js
|
packages/lib/utils/ActionLogger.test.js
|
||||||
packages/lib/utils/ActionLogger.js
|
packages/lib/utils/ActionLogger.js
|
||||||
packages/lib/utils/credentialFiles.js
|
packages/lib/utils/credentialFiles.js
|
||||||
|
packages/lib/utils/focusHandler.js
|
||||||
|
packages/lib/utils/frontMatter.js
|
||||||
packages/lib/utils/ipc/RemoteMessenger.test.js
|
packages/lib/utils/ipc/RemoteMessenger.test.js
|
||||||
packages/lib/utils/ipc/RemoteMessenger.js
|
packages/lib/utils/ipc/RemoteMessenger.js
|
||||||
packages/lib/utils/ipc/TestMessenger.js
|
packages/lib/utils/ipc/TestMessenger.js
|
||||||
@@ -1134,7 +1243,8 @@ packages/lib/utils/ipc/utils/mergeCallbacksAndSerializable.js
|
|||||||
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.test.js
|
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.test.js
|
||||||
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.js
|
packages/lib/utils/ipc/utils/separateCallbacksFromSerializable.js
|
||||||
packages/lib/utils/ipc/utils/separateCallbacksFromSerializableArray.js
|
packages/lib/utils/ipc/utils/separateCallbacksFromSerializableArray.js
|
||||||
packages/lib/utils/joplinCloud.js
|
packages/lib/utils/joplinCloud/index.js
|
||||||
|
packages/lib/utils/joplinCloud/types.js
|
||||||
packages/lib/utils/processStartFlags.js
|
packages/lib/utils/processStartFlags.js
|
||||||
packages/lib/utils/replaceUnsupportedCharacters.test.js
|
packages/lib/utils/replaceUnsupportedCharacters.test.js
|
||||||
packages/lib/utils/replaceUnsupportedCharacters.js
|
packages/lib/utils/replaceUnsupportedCharacters.js
|
||||||
@@ -1205,6 +1315,8 @@ packages/renderer/MdToHtml/rules/link_open.js
|
|||||||
packages/renderer/MdToHtml/rules/mermaid.js
|
packages/renderer/MdToHtml/rules/mermaid.js
|
||||||
packages/renderer/MdToHtml/rules/sanitize_html.js
|
packages/renderer/MdToHtml/rules/sanitize_html.js
|
||||||
packages/renderer/MdToHtml/rules/source_map.js
|
packages/renderer/MdToHtml/rules/source_map.js
|
||||||
|
packages/renderer/MdToHtml/rules/tableHorizontallyScrollable.js
|
||||||
|
packages/renderer/MdToHtml/rules/utils/defaultRule.js
|
||||||
packages/renderer/MdToHtml/setupLinkify.js
|
packages/renderer/MdToHtml/setupLinkify.js
|
||||||
packages/renderer/MdToHtml/validateLinks.js
|
packages/renderer/MdToHtml/validateLinks.js
|
||||||
packages/renderer/assetsToHeaders.js
|
packages/renderer/assetsToHeaders.js
|
||||||
|
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"cSpell.enabled": true
|
||||||
|
}
|
@@ -1,8 +1,8 @@
|
|||||||
diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
diff --git a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
||||||
index 0f52b73c61625db2a3081c0950b6bdd2b06e3d40..b0fc3de4be0b3a26b638683613c63c783c2739bb 100644
|
index 8a719ca35af1cc3a4192c5c5f8258fd4f7fea990..5f8831f81cd164a4f627423427ead92fa286b115 100644
|
||||||
--- a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
--- a/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
||||||
+++ b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
+++ b/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java
|
||||||
@@ -38,7 +38,7 @@ import com.facebook.react.uimanager.common.ViewUtil;
|
@@ -37,7 +37,7 @@ import com.facebook.react.uimanager.common.ViewUtil;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
@@ -11,7 +11,7 @@ index 0f52b73c61625db2a3081c0950b6bdd2b06e3d40..b0fc3de4be0b3a26b638683613c63c78
|
|||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -151,7 +151,10 @@ public class NativeAnimatedModule extends NativeAnimatedModuleSpec
|
@@ -149,7 +149,10 @@ public class NativeAnimatedModule extends NativeAnimatedModuleSpec
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ConcurrentOperationQueue {
|
private class ConcurrentOperationQueue {
|
1
Assets/WebsiteAssets/images/draw/add-new-image.svg
Normal file
After Width: | Height: | Size: 345 KiB |
BIN
Assets/WebsiteAssets/images/draw/average-selection-color.png
Normal file
After Width: | Height: | Size: 185 KiB |
BIN
Assets/WebsiteAssets/images/draw/change-visible-region.png
Normal file
After Width: | Height: | Size: 568 KiB |
BIN
Assets/WebsiteAssets/images/draw/color-under-cursor.png
Normal file
After Width: | Height: | Size: 199 KiB |
BIN
Assets/WebsiteAssets/images/draw/desktop-create-new-drawing.png
Normal file
After Width: | Height: | Size: 123 KiB |
After Width: | Height: | Size: 184 KiB |
1
Assets/WebsiteAssets/images/draw/edit-from-viewer.svg
Normal file
After Width: | Height: | Size: 200 KiB |
1
Assets/WebsiteAssets/images/draw/editor-toolbar-top.svg
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
Assets/WebsiteAssets/images/draw/help-icon.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
Assets/WebsiteAssets/images/draw/infinite-zoom-demo.mp4
Normal file
BIN
Assets/WebsiteAssets/images/draw/lock-rotation.png
Normal file
After Width: | Height: | Size: 104 KiB |
1
Assets/WebsiteAssets/images/draw/long-press-edit.svg
Normal file
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 246 KiB |
BIN
Assets/WebsiteAssets/images/draw/restore-auto-resize.png
Normal file
After Width: | Height: | Size: 310 KiB |
1
Assets/WebsiteAssets/images/draw/show-pen-menu.svg
Normal file
After Width: | Height: | Size: 141 KiB |
BIN
Assets/WebsiteAssets/images/sponsors/SocialFollowers.png
Normal file
After Width: | Height: | Size: 15 KiB |
3
CONTRIBUTING
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Contributing to Joplin
|
||||||
|
|
||||||
|
See the guide at https://github.com/laurent22/joplin/blob/dev/readme/dev/index.md
|
@@ -202,16 +202,28 @@ if command -v lsb_release &> /dev/null; then
|
|||||||
DISTVER=$(lsb_release -is) && DISTVER=$DISTVER$(lsb_release -rs)
|
DISTVER=$(lsb_release -is) && DISTVER=$DISTVER$(lsb_release -rs)
|
||||||
DISTCODENAME=$(lsb_release -cs)
|
DISTCODENAME=$(lsb_release -cs)
|
||||||
DISTMAJOR=$(lsb_release -rs|cut -d. -f1)
|
DISTMAJOR=$(lsb_release -rs|cut -d. -f1)
|
||||||
|
|
||||||
#-----------------------------------------------------
|
#-----------------------------------------------------
|
||||||
# Check for "The SUID sandbox helper binary was found, but is not configured correctly" problem.
|
# Check for "The SUID sandbox helper binary was found, but is not configured correctly" problem.
|
||||||
# It is present in Debian 1X. A (temporary) patch will be applied at .desktop file
|
# It is present in Debian 1X. A (temporary) patch will be applied at .desktop file
|
||||||
# Linux Mint 4 Debbie is based on Debian 10 and requires the same param handling.
|
# Linux Mint 4 Debbie is based on Debian 10 and requires the same param handling.
|
||||||
#
|
#
|
||||||
# This also works around Ubuntu 23.10+'s restrictions on unprivileged user namespaces. Electron
|
# TODO: Remove: This is likely no longer an issue. See https://issues.chromium.org/issues/40462640.
|
||||||
|
BAD_HELPER_BINARY=false
|
||||||
|
if [[ $DISTVER =~ Debian1. || ( "$DISTVER" = "Linuxmint4" && "$DISTCODENAME" = "debbie" ) || ( "$DISTVER" = "CentOS" && "$DISTMAJOR" =~ 6|7 ) ]]; then
|
||||||
|
BAD_HELPER_BINARY=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Work around Ubuntu 23.10+'s restrictions on unprivileged user namespaces. Electron
|
||||||
# uses these to sandbox processes. Unfortunately, it doesn't look like we can get around this
|
# uses these to sandbox processes. Unfortunately, it doesn't look like we can get around this
|
||||||
# without writing the AppImage to a non-user-writable location (without invalidating other security
|
# without writing the AppImage to a non-user-writable location (without invalidating other security
|
||||||
# controls). See https://discourse.joplinapp.org/t/possible-future-requirement-for-no-sandbox-flag-for-ubuntu-23-10/.
|
# controls). See https://discourse.joplinapp.org/t/possible-future-requirement-for-no-sandbox-flag-for-ubuntu-23-10/.
|
||||||
if [[ $DISTVER = "Ubuntu23.10" || $DISTVER =~ Debian1. || ( "$DISTVER" = "Linuxmint4" && "$DISTCODENAME" = "debbie" ) || ( "$DISTVER" = "CentOS" && "$DISTMAJOR" =~ 6|7 ) ]]; then
|
HAS_USERNS_RESTRICTIONS=false
|
||||||
|
if [[ "$DISTVER" =~ ^Ubuntu && $DISTMAJOR -ge 23 ]]; then
|
||||||
|
HAS_USERNS_RESTRICTIONS=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $HAS_USERNS_RESTRICTIONS = true || $BAD_HELPER_BINARY = true ]]; then
|
||||||
SANDBOXPARAM="--no-sandbox"
|
SANDBOXPARAM="--no-sandbox"
|
||||||
print "${COLOR_YELLOW}WARNING${COLOR_RESET} Electron sandboxing disabled."
|
print "${COLOR_YELLOW}WARNING${COLOR_RESET} Electron sandboxing disabled."
|
||||||
print " See https://discourse.joplinapp.org/t/32160/5 for details."
|
print " See https://discourse.joplinapp.org/t/32160/5 for details."
|
||||||
@@ -241,7 +253,7 @@ if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cin
|
|||||||
Encoding=UTF-8
|
Encoding=UTF-8
|
||||||
Name=Joplin
|
Name=Joplin
|
||||||
Comment=Joplin for Desktop
|
Comment=Joplin for Desktop
|
||||||
Exec=${HOME}/.joplin/Joplin.AppImage ${SANDBOXPARAM} %u
|
Exec=env APPIMAGELAUNCHER_DISABLE=TRUE ${HOME}/.joplin/Joplin.AppImage ${SANDBOXPARAM} %u
|
||||||
Icon=joplin
|
Icon=joplin
|
||||||
StartupWMClass=Joplin
|
StartupWMClass=Joplin
|
||||||
Type=Application
|
Type=Application
|
||||||
|
@@ -31,7 +31,7 @@ Please see the [donation page](https://github.com/laurent22/joplin/blob/dev/read
|
|||||||
# Sponsors
|
# Sponsors
|
||||||
|
|
||||||
<!-- SPONSORS-ORG -->
|
<!-- SPONSORS-ORG -->
|
||||||
<a href="https://seirei.ne.jp"><img title="Serei Network" width="256" src="https://joplinapp.org/images/sponsors/SeireiNetwork.png"/></a> <a href="https://www.hosting.de/nextcloud/?mtm_campaign=managed-nextcloud&mtm_kwd=joplinapp&mtm_source=joplinapp-webseite&mtm_medium=banner"><img title="Hosting.de" width="256" src="https://joplinapp.org/images/sponsors/HostingDe.png"/></a> <a href="https://grundstueckspreise.info/"><img title="SP Software GmbH" width="256" src="https://joplinapp.org/images/sponsors/Grundstueckspreise.png"/></a> <a href="https://citricsheep.com"><img title="Citric Sheep" width="256" src="https://joplinapp.org/images/sponsors/CitricSheep.png"/></a> <a href="https://sorted.travel/?utm_source=joplinapp"><img title="Sorted Travel" width="256" src="https://joplinapp.org/images/sponsors/SortedTravel.png"/></a> <a href="https://celebian.com"><img title="Celebian" width="256" src="https://joplinapp.org/images/sponsors/Celebian.png"/></a> <a href="https://bestkru.com"><img title="BestKru" width="256" src="https://joplinapp.org/images/sponsors/BestKru.png"/></a>
|
<a href="https://seirei.ne.jp"><img title="Serei Network" width="256" src="https://joplinapp.org/images/sponsors/SeireiNetwork.png"/></a> <a href="https://www.hosting.de/nextcloud/?mtm_campaign=managed-nextcloud&mtm_kwd=joplinapp&mtm_source=joplinapp-webseite&mtm_medium=banner"><img title="Hosting.de" width="256" src="https://joplinapp.org/images/sponsors/HostingDe.png"/></a> <a href="https://grundstueckspreise.info/"><img title="SP Software GmbH" width="256" src="https://joplinapp.org/images/sponsors/Grundstueckspreise.png"/></a> <a href="https://citricsheep.com"><img title="Citric Sheep" width="256" src="https://joplinapp.org/images/sponsors/CitricSheep.png"/></a> <a href="https://sorted.travel/?utm_source=joplinapp"><img title="Sorted Travel" width="256" src="https://joplinapp.org/images/sponsors/SortedTravel.png"/></a> <a href="https://celebian.com"><img title="Celebian" width="256" src="https://joplinapp.org/images/sponsors/Celebian.png"/></a> <a href="https://bestkru.com"><img title="BestKru" width="256" src="https://joplinapp.org/images/sponsors/BestKru.png"/></a> <a href="https://www.socialfollowers.uk/buy-tiktok-followers/"><img title="Social Followers" width="256" src="https://joplinapp.org/images/sponsors/SocialFollowers.png"/></a>
|
||||||
<!-- SPONSORS-ORG -->
|
<!-- SPONSORS-ORG -->
|
||||||
|
|
||||||
* * *
|
* * *
|
||||||
|
@@ -1,24 +1,58 @@
|
|||||||
# For development this compose file starts the database only. The app can then
|
# For development this compose file starts the database only. The app can then
|
||||||
# be started using `yarn start-dev`, which is useful for development, because
|
# be started using `yarn start-dev`, which is useful for development, because
|
||||||
# it means the app Docker file doesn't have to be rebuilt on each change.
|
# it means the app Docker file doesn't have to be rebuilt on each change.
|
||||||
|
#
|
||||||
|
# Note that log is setup to give as much information as possible, including
|
||||||
|
# whether it's the master or slave database that is being used for a query.
|
||||||
|
#
|
||||||
|
# To setup and test replication, use the following config in Joplin Server. Note
|
||||||
|
# in particular the different port, which means we access the slave and not the
|
||||||
|
# master.
|
||||||
|
#
|
||||||
|
# DB_USE_SLAVE=true
|
||||||
|
# SLAVE_POSTGRES_PASSWORD=joplin
|
||||||
|
# SLAVE_POSTGRES_DATABASE=joplin
|
||||||
|
# SLAVE_POSTGRES_USER=joplin
|
||||||
|
# SLAVE_POSTGRES_PORT=5433
|
||||||
|
# SLAVE_POSTGRES_HOST=localhost
|
||||||
|
# USERS_WITH_REPLICATION=ID1,ID2,...
|
||||||
|
|
||||||
version: '3'
|
version: '2'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
db:
|
|
||||||
image: postgres:16
|
|
||||||
command: postgres -c work_mem=100000
|
|
||||||
ports:
|
|
||||||
- "5432:5432"
|
|
||||||
environment:
|
|
||||||
- POSTGRES_PASSWORD=joplin
|
|
||||||
- POSTGRES_USER=joplin
|
|
||||||
- POSTGRES_DB=joplin
|
|
||||||
|
|
||||||
# Use this to specify additional Postgres
|
postgresql-master:
|
||||||
# config parameters:
|
image: 'bitnami/postgresql:16.3.0'
|
||||||
#
|
ports:
|
||||||
# command:
|
- '5432:5432'
|
||||||
# - "postgres"
|
environment:
|
||||||
# - "-c"
|
- POSTGRESQL_PASSWORD=joplin
|
||||||
# - "log_min_duration_statement=0"
|
- POSTGRESQL_USERNAME=joplin
|
||||||
|
- POSTGRESQL_DATABASE=joplin
|
||||||
|
|
||||||
|
- POSTGRESQL_REPLICATION_MODE=master
|
||||||
|
- POSTGRESQL_REPLICATION_USER=repl_user
|
||||||
|
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
|
||||||
|
|
||||||
|
- POSTGRESQL_LOG_HOSTNAME=true
|
||||||
|
- POSTGRESQL_PGAUDIT_LOG=READ,WRITE
|
||||||
|
- POSTGRESQL_EXTRA_FLAGS=-c work_mem=100000 -c log_statement=all
|
||||||
|
|
||||||
|
postgresql-slave:
|
||||||
|
image: 'bitnami/postgresql:16.3.0'
|
||||||
|
ports:
|
||||||
|
- '5433:5432'
|
||||||
|
depends_on:
|
||||||
|
- postgresql-master
|
||||||
|
environment:
|
||||||
|
- POSTGRESQL_REPLICATION_MODE=slave
|
||||||
|
- POSTGRESQL_REPLICATION_USER=repl_user
|
||||||
|
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
|
||||||
|
- POSTGRESQL_MASTER_HOST=postgresql-master
|
||||||
|
- POSTGRESQL_PASSWORD=joplin
|
||||||
|
- POSTGRESQL_MASTER_PORT_NUMBER=5432
|
||||||
|
|
||||||
|
- POSTGRESQL_LOG_HOSTNAME=true
|
||||||
|
- POSTGRESQL_PGAUDIT_LOG=READ,WRITE
|
||||||
|
- POSTGRESQL_EXTRA_FLAGS=-c work_mem=100000 -c log_statement=all
|
||||||
|
|
@@ -9,7 +9,7 @@
|
|||||||
#
|
#
|
||||||
# APP_BASE_URL: This is the base public URL where the service will be running.
|
# APP_BASE_URL: This is the base public URL where the service will be running.
|
||||||
# - If Joplin Server needs to be accessible over the internet, configure APP_BASE_URL as follows: https://example.com/joplin.
|
# - If Joplin Server needs to be accessible over the internet, configure APP_BASE_URL as follows: https://example.com/joplin.
|
||||||
# - If Joplin Server does not need to be accessible over the internet, set the the APP_BASE_URL to your server's hostname.
|
# - If Joplin Server does not need to be accessible over the internet, set the APP_BASE_URL to your server's hostname.
|
||||||
# For Example: http://[hostname]:22300. The base URL can include the port.
|
# For Example: http://[hostname]:22300. The base URL can include the port.
|
||||||
# APP_PORT: The local port on which the Docker container will listen.
|
# APP_PORT: The local port on which the Docker container will listen.
|
||||||
# - This would typically be mapped to port to 443 (TLS) with a reverse proxy.
|
# - This would typically be mapped to port to 443 (TLS) with a reverse proxy.
|
||||||
|
@@ -1 +1,13 @@
|
|||||||
<strong>Joplin</strong> is a free, open source note taking and to-do application, which can handle a large number of notes organised into notebooks. The notes are searchable, can be copied, tagged and modified either from the applications directly or from your own text editor. The notes are in <a href="https://joplinapp.org/help/apps/markdown">Markdown format</a>.</p><p>Notes exported from Evernote <a href="https://joplinapp.org/help/apps/import_export">can be imported</a> into Joplin, including the formatted content (which is converted to Markdown), resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.). Plain Markdown files can also be imported.</p><p>Joplin is "offline first", which means you always have all your data on your phone or computer. This ensures that your notes are always accessible, whether you have an internet connection or not.</p><p>The notes can be securely <a href="https://joplinapp.org/help/apps/sync">synchronised</a> using <a href="https://joplinapp.org/help/apps/sync/e2ee">end-to-end encryption</a> with various cloud services including Nextcloud, Dropbox, OneDrive and <a href="https://joplinapp.org/plans/" target="_blank" rel="noopener noreferrer">Joplin Cloud</a>.</p><p>Full text search is available on all platforms to quickly find the information you need. The app can be customised using plugins and themes, and you can also easily create your own.</p><p>The application is available for Windows, Linux, macOS, Android and iOS. A <a href="https://joplinapp.org/help/apps/clipper">Web Clipper</a>, to save web pages and screenshots from your browser, is also available for <a href="https://addons.mozilla.org/firefox/addon/joplin-web-clipper/" target="_blank" rel="noopener noreferrer">Firefox</a> and <a href="https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek?hl=en-GB" target="_blank" rel="noopener noreferrer">Chrome</a>.</p><div class="top-screenshot"><img loading="lazy" src="https://raw.githubusercontent.com/laurent22/joplin/dev/Assets/WebsiteAssets/images/home-top-img.png" class="img_node_modules-@docusaurus-theme-classic-lib-theme-MDXComponents-Img-styles-module" style="max-width: 100%; max-height: 35em;">
|
<strong>Joplin</strong> is a free and open source note taking and to-do application, which can handle a large number of notes organised into notebooks. The notes are searchable, can be copied, tagged and modified either from the applications directly or from your own text editor.
|
||||||
|
|
||||||
|
The notes are in <a href="https://joplinapp.org/help/apps/markdown">Markdown format</a>.
|
||||||
|
|
||||||
|
Notes exported from Evernote <a href="https://joplinapp.org/help/apps/import_export">can be imported</a> into Joplin, including the formatted content (which is converted to Markdown), resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.). Plain Markdown files can also be imported.
|
||||||
|
|
||||||
|
Joplin is "offline first", which means you always have all your data on your phone or computer. This ensures that your notes are always accessible, whether you have an internet connection or not.</p>
|
||||||
|
|
||||||
|
The notes can be securely <a href="https://joplinapp.org/help/apps/sync">synchronised</a> using <a href="https://joplinapp.org/help/apps/sync/e2ee">end-to-end encryption</a> with various cloud services including Nextcloud, Dropbox, OneDrive and <a href="https://joplinapp.org/plans/">Joplin Cloud</a>.
|
||||||
|
|
||||||
|
Full text search is available on all platforms to quickly find the information you need. The app can be customised using plugins and themes, and you can also easily create your own.
|
||||||
|
|
||||||
|
The application is available for Windows, Linux, macOS, Android and iOS. A <a href="https://joplinapp.org/help/apps/clipper">Web Clipper</a>, to save web pages and screenshots from your browser, is also available for <a href="https://addons.mozilla.org/firefox/addon/joplin-web-clipper/">Firefox</a> and <a href="https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek">Chrome</a>.
|
||||||
|
@@ -1 +1 @@
|
|||||||
a note taking and to-do app with sync between Linux, macOS, Windows, and mobile
|
A note taking and to-do app with sync between Linux, macOS, Windows, and mobile
|
13
fastlane/metadata/android/ru/full_description.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<strong>Joplin</strong> это бесплатное и свободное приложение для создания заметок и списков задач, которое может обрабатывать большое количество заметок, организованных в блокноты. По заметкам есть поиск, их можно копировать, помечать ярлыками и изменять как непосредственно из приложения, так и из вашего собственного текстового редактора.
|
||||||
|
|
||||||
|
Заметки представлены в <a href="https://joplinapp.org/help/apps/markdown">формате Markdown</a>.
|
||||||
|
|
||||||
|
Заметки экспортированные из Evernote <a href="https://joplinapp.org/help/apps/import_export">могут быть импортированы</a> в Joplin, включая отформатированный контент (который преобразуется в Markdown), ресурсы (изображения, вложения и т.д.) и полные метаданные (геолокация, время обновления, время создания и т.д.). Обычные файлы Markdown также можно импортировать.
|
||||||
|
|
||||||
|
Joplin работает "в первую очередь в автономном режиме", что означает, что у вас всегда есть все ваши данные на телефоне или компьютере. Это гарантирует, что ваши заметки всегда будут доступны, независимо от того есть у вас подключение к Интернету или нет.
|
||||||
|
|
||||||
|
Заметки могут быть надежно <a href="https://joplinapp.org/help/apps/sync">синхронизированы</a> с помощью <a href="https://joplinapp.org/help/apps/sync/e2ee">сквозного шифрования</a> на различные облачные сервисы, включая Nextcloud, Dropbox, OneDrive и <a href="https://joplinapp.org/plans/">Joplin Cloud</a>.
|
||||||
|
|
||||||
|
Полнотекстовый поиск доступен на всех платформах для быстрого поиска нужной вам информации. Приложение можно настроить с помощью плагинов и тем, а также легко создать свои.
|
||||||
|
|
||||||
|
Приложение доступно для Windows, Linux, macOS, Android и iOS. A <a href="https://joplinapp.org/help/apps/clipper">Веб-клипер</a> для сохранения веб-страниц и скриншотов из вашего браузера, также доступен для <a href="https://addons.mozilla.org/firefox/addon/joplin-web-clipper/">Firefox</a> и <a href="https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek">Chrome</a>.
|
1
fastlane/metadata/android/ru/short_description.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Заметки и списки дел с синхронизацией с Linux, macOS, Windows и мобильным
|
@@ -106,7 +106,6 @@
|
|||||||
"./packages/renderer/**/node_modules/": true,
|
"./packages/renderer/**/node_modules/": true,
|
||||||
".eslintignore": true,
|
".eslintignore": true,
|
||||||
".gitignore": true,
|
".gitignore": true,
|
||||||
".vscode/*": true,
|
|
||||||
".yarn/cache": true,
|
".yarn/cache": true,
|
||||||
".yarn/install-state.gz": true,
|
".yarn/install-state.gz": true,
|
||||||
".yarn/plugins": true,
|
".yarn/plugins": true,
|
||||||
|
10
package.json
@@ -9,7 +9,7 @@
|
|||||||
"url": "git+https://github.com/laurent22/joplin.git"
|
"url": "git+https://github.com/laurent22/joplin.git"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"buildApiDoc": "yarn workspace joplin start apidoc ../../readme/api/references/rest_api.md",
|
"buildApiDoc": "yarn workspace joplin start apidoc ../../readme/api/references/rest_api.md",
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
"postinstall": "gulp build",
|
"postinstall": "gulp build",
|
||||||
"postPreReleasesToForum": "node ./packages/tools/postPreReleasesToForum",
|
"postPreReleasesToForum": "node ./packages/tools/postPreReleasesToForum",
|
||||||
"publishAll": "git pull && yarn buildParallel && lerna version --yes --no-private --no-git-tag-version && gulp completePublishAll",
|
"publishAll": "git pull && yarn buildParallel && lerna version --yes --no-private --no-git-tag-version && gulp completePublishAll",
|
||||||
"releaseAndroid": "PATH=\"/usr/local/opt/openjdk@11/bin:$PATH\" node packages/tools/release-android.js",
|
"releaseAndroid": "PATH=\"/usr/local/opt/openjdk@17/bin:$PATH\" node packages/tools/release-android.js",
|
||||||
"releaseAndroidClean": "node packages/tools/release-android.js",
|
"releaseAndroidClean": "node packages/tools/release-android.js",
|
||||||
"releaseCli": "node packages/tools/release-cli.js",
|
"releaseCli": "node packages/tools/release-cli.js",
|
||||||
"releaseClipper": "node packages/tools/release-clipper.js",
|
"releaseClipper": "node packages/tools/release-clipper.js",
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
"gulp": "4.0.2",
|
"gulp": "4.0.2",
|
||||||
"husky": "3.1.0",
|
"husky": "3.1.0",
|
||||||
"lerna": "3.22.1",
|
"lerna": "3.22.1",
|
||||||
"lint-staged": "15.2.0",
|
"lint-staged": "15.2.2",
|
||||||
"madge": "6.1.0",
|
"madge": "6.1.0",
|
||||||
"npm-package-json-lint": "7.1.0",
|
"npm-package-json-lint": "7.1.0",
|
||||||
"typescript": "5.2.2"
|
"typescript": "5.2.2"
|
||||||
@@ -104,11 +104,11 @@
|
|||||||
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch",
|
"react-native-vosk@0.1.12": "patch:react-native-vosk@npm%3A0.1.12#./.yarn/patches/react-native-vosk-npm-0.1.12-76b1caaae8.patch",
|
||||||
"eslint": "patch:eslint@8.52.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch",
|
"eslint": "patch:eslint@8.52.0#./.yarn/patches/eslint-npm-8.39.0-d92bace04d.patch",
|
||||||
"app-builder-lib@24.4.0": "patch:app-builder-lib@npm%3A24.4.0#./.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch",
|
"app-builder-lib@24.4.0": "patch:app-builder-lib@npm%3A24.4.0#./.yarn/patches/app-builder-lib-npm-24.4.0-05322ff057.patch",
|
||||||
"react-native@0.71.10": "patch:react-native@npm%3A0.71.10#./.yarn/patches/react-native-animation-fix/react-native-npm-0.71.10-f9c32562d8.patch",
|
|
||||||
"nanoid": "patch:nanoid@npm%3A3.3.7#./.yarn/patches/nanoid-npm-3.3.7-98824ba130.patch",
|
"nanoid": "patch:nanoid@npm%3A3.3.7#./.yarn/patches/nanoid-npm-3.3.7-98824ba130.patch",
|
||||||
"pdfjs-dist": "patch:pdfjs-dist@npm%3A3.11.174#./.yarn/patches/pdfjs-dist-npm-3.11.174-67f2fee6d6.patch",
|
"pdfjs-dist": "patch:pdfjs-dist@npm%3A3.11.174#./.yarn/patches/pdfjs-dist-npm-3.11.174-67f2fee6d6.patch",
|
||||||
"@react-native-community/slider": "patch:@react-native-community/slider@npm%3A4.4.4#./.yarn/patches/@react-native-community-slider-npm-4.4.4-d78e472f48.patch",
|
"@react-native-community/slider": "patch:@react-native-community/slider@npm%3A4.4.4#./.yarn/patches/@react-native-community-slider-npm-4.4.4-d78e472f48.patch",
|
||||||
"husky": "patch:husky@npm%3A3.1.0#./.yarn/patches/husky-npm-3.1.0-5cc13e4e34.patch",
|
"husky": "patch:husky@npm%3A3.1.0#./.yarn/patches/husky-npm-3.1.0-5cc13e4e34.patch",
|
||||||
"chokidar@^2.0.0": "3.5.3"
|
"chokidar@^2.0.0": "3.5.3",
|
||||||
|
"react-native@0.74.1": "patch:react-native@npm%3A0.74.1#./.yarn/patches/react-native-npm-0.74.1-754c02ae9e.patch"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -41,6 +41,7 @@ class LinkSelector {
|
|||||||
const newLinkStore: LinkStoreEntry[] = [];
|
const newLinkStore: LinkStoreEntry[] = [];
|
||||||
const lines: string[] = renderedText.split('\n');
|
const lines: string[] = renderedText.split('\n');
|
||||||
for (let i = 0; i < lines.length; i++) {
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const r = (lines[i] as any).matchAll(this.linkRegex_);
|
const r = (lines[i] as any).matchAll(this.linkRegex_);
|
||||||
const matches = [...r];
|
const matches = [...r];
|
||||||
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
// eslint-disable-next-line github/array-foreach -- Old code before rule was applied
|
||||||
@@ -63,12 +64,14 @@ class LinkSelector {
|
|||||||
this.linkStore_ = this.findLinks(this.renderedText_);
|
this.linkStore_ = this.findLinks(this.renderedText_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public updateNote(textWidget: any): void {
|
public updateNote(textWidget: any): void {
|
||||||
this.noteId_ = textWidget.noteId;
|
this.noteId_ = textWidget.noteId;
|
||||||
this.scrollTop_ = textWidget.scrollTop_;
|
this.scrollTop_ = textWidget.scrollTop_;
|
||||||
this.updateText(textWidget.renderedText_);
|
this.updateText(textWidget.renderedText_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public scrollWidget(textWidget: any): void {
|
public scrollWidget(textWidget: any): void {
|
||||||
if (this.currentLinkIndex_ === null) return;
|
if (this.currentLinkIndex_ === null) return;
|
||||||
|
|
||||||
@@ -94,6 +97,7 @@ class LinkSelector {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public changeLink(textWidget: any, offset: number): void | null {
|
public changeLink(textWidget: any, offset: number): void | null {
|
||||||
if (textWidget.noteId !== this.noteId_) {
|
if (textWidget.noteId !== this.noteId_) {
|
||||||
this.updateNote(textWidget);
|
this.updateNote(textWidget);
|
||||||
@@ -124,6 +128,7 @@ class LinkSelector {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public openLink(textWidget: any): void {
|
public openLink(textWidget: any): void {
|
||||||
if (textWidget.noteId !== this.noteId_) return;
|
if (textWidget.noteId !== this.noteId_) return;
|
||||||
if (textWidget.renderedText_ !== this.renderedText_) return;
|
if (textWidget.renderedText_ !== this.renderedText_) return;
|
||||||
|
@@ -441,6 +441,7 @@ class AppGui {
|
|||||||
if (cmd === 'activate') {
|
if (cmd === 'activate') {
|
||||||
const w = this.widget('mainWindow').focusedWidget;
|
const w = this.widget('mainWindow').focusedWidget;
|
||||||
if (w.name === 'folderList') {
|
if (w.name === 'folderList') {
|
||||||
|
// eslint-disable-next-line no-restricted-properties
|
||||||
this.widget('noteList').focus();
|
this.widget('noteList').focus();
|
||||||
} else if (w.name === 'noteList' || w.name === 'noteText') {
|
} else if (w.name === 'noteList' || w.name === 'noteText') {
|
||||||
this.processPromptCommand('edit $n');
|
this.processPromptCommand('edit $n');
|
||||||
|
@@ -22,10 +22,14 @@ const { splitCommandBatch } = require('@joplin/lib/string-utils');
|
|||||||
|
|
||||||
class Application extends BaseApplication {
|
class Application extends BaseApplication {
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private commands_: Record<string, any> = {};
|
private commands_: Record<string, any> = {};
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private commandMetadata_: any = null;
|
private commandMetadata_: any = null;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private activeCommand_: any = null;
|
private activeCommand_: any = null;
|
||||||
private allCommandsLoaded_ = false;
|
private allCommandsLoaded_ = false;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private gui_: any = null;
|
private gui_: any = null;
|
||||||
private cache_ = new Cache();
|
private cache_ = new Cache();
|
||||||
|
|
||||||
@@ -37,6 +41,7 @@ class Application extends BaseApplication {
|
|||||||
return this.gui().stdoutMaxWidth();
|
return this.gui().stdoutMaxWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async guessTypeAndLoadItem(pattern: string, options: any = null) {
|
public async guessTypeAndLoadItem(pattern: string, options: any = null) {
|
||||||
let type = BaseModel.TYPE_NOTE;
|
let type = BaseModel.TYPE_NOTE;
|
||||||
if (pattern.indexOf('/') === 0) {
|
if (pattern.indexOf('/') === 0) {
|
||||||
@@ -46,6 +51,7 @@ class Application extends BaseApplication {
|
|||||||
return this.loadItem(type, pattern, options);
|
return this.loadItem(type, pattern, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async loadItem(type: ModelType | 'folderOrNote', pattern: string, options: any = null) {
|
public async loadItem(type: ModelType | 'folderOrNote', pattern: string, options: any = null) {
|
||||||
const output = await this.loadItems(type, pattern, options);
|
const output = await this.loadItems(type, pattern, options);
|
||||||
|
|
||||||
@@ -70,6 +76,7 @@ class Application extends BaseApplication {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async loadItems(type: ModelType | 'folderOrNote', pattern: string, options: any = null): Promise<(FolderEntity | NoteEntity)[]> {
|
public async loadItems(type: ModelType | 'folderOrNote', pattern: string, options: any = null): Promise<(FolderEntity | NoteEntity)[]> {
|
||||||
if (type === 'folderOrNote') {
|
if (type === 'folderOrNote') {
|
||||||
const folders: FolderEntity[] = await this.loadItems(BaseModel.TYPE_FOLDER, pattern, options);
|
const folders: FolderEntity[] = await this.loadItems(BaseModel.TYPE_FOLDER, pattern, options);
|
||||||
@@ -160,6 +167,7 @@ class Application extends BaseApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (uiType !== null) {
|
if (uiType !== null) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const temp: Record<string, any> = {};
|
const temp: Record<string, any> = {};
|
||||||
for (const n in this.commands_) {
|
for (const n in this.commands_) {
|
||||||
if (!this.commands_.hasOwnProperty(n)) continue;
|
if (!this.commands_.hasOwnProperty(n)) continue;
|
||||||
@@ -219,6 +227,7 @@ class Application extends BaseApplication {
|
|||||||
CommandClass = require(`${__dirname}/command-${name}.js`);
|
CommandClass = require(`${__dirname}/command-${name}.js`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error.message && error.message.indexOf('Cannot find module') >= 0) {
|
if (error.message && error.message.indexOf('Cannot find module') >= 0) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const e: any = new Error(_('No such command: %s', name));
|
const e: any = new Error(_('No such command: %s', name));
|
||||||
e.type = 'notFound';
|
e.type = 'notFound';
|
||||||
throw e;
|
throw e;
|
||||||
@@ -238,6 +247,7 @@ class Application extends BaseApplication {
|
|||||||
isDummy: () => {
|
isDummy: () => {
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
prompt: (initialText = '', promptString = '', options: any = null) => {
|
prompt: (initialText = '', promptString = '', options: any = null) => {
|
||||||
return cliUtils.prompt(initialText, promptString, options);
|
return cliUtils.prompt(initialText, promptString, options);
|
||||||
},
|
},
|
||||||
@@ -260,6 +270,7 @@ class Application extends BaseApplication {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async execCommand(argv: string[]): Promise<any> {
|
public async execCommand(argv: string[]): Promise<any> {
|
||||||
if (!argv.length) return this.execCommand(['help']);
|
if (!argv.length) return this.execCommand(['help']);
|
||||||
// reg.logger().debug('execCommand()', argv);
|
// reg.logger().debug('execCommand()', argv);
|
||||||
@@ -390,6 +401,7 @@ class Application extends BaseApplication {
|
|||||||
|
|
||||||
argv = await super.start(argv, { keychainEnabled });
|
argv = await super.start(argv, { keychainEnabled });
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
cliUtils.setStdout((object: any) => {
|
cliUtils.setStdout((object: any) => {
|
||||||
return this.stdout(object);
|
return this.stdout(object);
|
||||||
});
|
});
|
||||||
@@ -439,7 +451,8 @@ class Application extends BaseApplication {
|
|||||||
// initialised. So we manually call dispatchUpdateAll() to force an update.
|
// initialised. So we manually call dispatchUpdateAll() to force an update.
|
||||||
Setting.dispatchUpdateAll();
|
Setting.dispatchUpdateAll();
|
||||||
|
|
||||||
await refreshFolders((action: any) => this.store().dispatch(action));
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
|
await refreshFolders((action: any) => this.store().dispatch(action), '');
|
||||||
|
|
||||||
const tags = await Tag.allWithNotes();
|
const tags = await Tag.allWithNotes();
|
||||||
|
|
||||||
|
@@ -3,14 +3,18 @@ import { reg } from '@joplin/lib/registry.js';
|
|||||||
|
|
||||||
export default class BaseCommand {
|
export default class BaseCommand {
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
protected stdout_: any = null;
|
protected stdout_: any = null;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
protected prompt_: any = null;
|
protected prompt_: any = null;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
protected dispatcher_: any;
|
protected dispatcher_: any;
|
||||||
|
|
||||||
public usage(): string {
|
public usage(): string {
|
||||||
throw new Error('Usage not defined');
|
throw new Error('Usage not defined');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public encryptionCheck(item: any) {
|
public encryptionCheck(item: any) {
|
||||||
if (item && item.encryption_applied) throw new Error(_('Cannot change encrypted item'));
|
if (item && item.encryption_applied) throw new Error(_('Cannot change encrypted item'));
|
||||||
}
|
}
|
||||||
@@ -19,6 +23,7 @@ export default class BaseCommand {
|
|||||||
throw new Error('Description not defined');
|
throw new Error('Description not defined');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async action(_args: any) {
|
public async action(_args: any) {
|
||||||
throw new Error('Action not defined');
|
throw new Error('Action not defined');
|
||||||
}
|
}
|
||||||
@@ -31,6 +36,7 @@ export default class BaseCommand {
|
|||||||
return this.compatibleUis().indexOf(ui) >= 0;
|
return this.compatibleUis().indexOf(ui) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public options(): any[] {
|
public options(): any[] {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@@ -59,6 +65,7 @@ export default class BaseCommand {
|
|||||||
this.dispatcher_ = fn;
|
this.dispatcher_ = fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public dispatch(action: any) {
|
public dispatch(action: any) {
|
||||||
if (!this.dispatcher_) throw new Error('Dispatcher not defined');
|
if (!this.dispatcher_) throw new Error('Dispatcher not defined');
|
||||||
return this.dispatcher_(action);
|
return this.dispatcher_(action);
|
||||||
@@ -78,6 +85,7 @@ export default class BaseCommand {
|
|||||||
this.prompt_ = fn;
|
this.prompt_ = fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async prompt(message: string, options: any = null) {
|
public async prompt(message: string, options: any = null) {
|
||||||
if (!this.prompt_) throw new Error('Prompt is undefined');
|
if (!this.prompt_) throw new Error('Prompt is undefined');
|
||||||
return await this.prompt_(message, options);
|
return await this.prompt_(message, options);
|
||||||
|
@@ -37,6 +37,7 @@ class Command extends BaseCommand {
|
|||||||
return markdownUtils.createMarkdownTable(headers, tableFields);
|
return markdownUtils.createMarkdownTable(headers, tableFields);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const models = [
|
const models = [
|
||||||
{
|
{
|
||||||
@@ -238,11 +239,6 @@ async function fetchAllNotes() {
|
|||||||
type: Database.enumId('fieldType', 'text'),
|
type: Database.enumId('fieldType', 'text'),
|
||||||
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
|
description: 'If an image is provided, you can also specify an optional rectangle that will be used to crop the image. In format `{ x: x, y: y, width: width, height: height }`',
|
||||||
});
|
});
|
||||||
// tableFields.push({
|
|
||||||
// name: 'tags',
|
|
||||||
// type: Database.enumId('fieldType', 'text'),
|
|
||||||
// description: 'Comma-separated list of tags. eg. `tag1,tag2`.',
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lines.push(`## ${toTitleCase(tableName)}`);
|
lines.push(`## ${toTitleCase(tableName)}`);
|
||||||
@@ -268,6 +264,11 @@ async function fetchAllNotes() {
|
|||||||
lines.push('');
|
lines.push('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (model.type === BaseModel.TYPE_NOTE) {
|
||||||
|
lines.push('By default, this call will return the all notes **except** the notes in the trash folder and any conflict note. To include these too, you can specify `include_deleted=1` and `include_conflicts=1` as query parameters.');
|
||||||
|
lines.push('');
|
||||||
|
}
|
||||||
|
|
||||||
lines.push(`### GET /${tableName}/:id`);
|
lines.push(`### GET /${tableName}/:id`);
|
||||||
lines.push('');
|
lines.push('');
|
||||||
lines.push(`Gets ${singular} with ID :id`);
|
lines.push(`Gets ${singular} with ID :id`);
|
||||||
|
@@ -13,6 +13,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Attaches the given file to the note.');
|
return _('Attaches the given file to the note.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const title = args['note'];
|
const title = args['note'];
|
||||||
|
|
||||||
|
@@ -18,6 +18,7 @@ class Command extends BaseCommand {
|
|||||||
return [['-v, --verbose', _('Displays the complete information about note.')]];
|
return [['-v, --verbose', _('Displays the complete information about note.')]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const title = args['note'];
|
const title = args['note'];
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@ class Command extends BaseCommand {
|
|||||||
return new Promise<void>((resolve, reject) => {
|
return new Promise<void>((resolve, reject) => {
|
||||||
// being defensive and not attempting to settle twice
|
// being defensive and not attempting to settle twice
|
||||||
let isSettled = false;
|
let isSettled = false;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const chunks: any = [];
|
const chunks: any = [];
|
||||||
|
|
||||||
inputStream.on('readable', () => {
|
inputStream.on('readable', () => {
|
||||||
@@ -67,6 +68,7 @@ class Command extends BaseCommand {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const verbose = args.options.verbose;
|
const verbose = args.options.verbose;
|
||||||
const isExport = args.options.export;
|
const isExport = args.options.export;
|
||||||
@@ -91,6 +93,7 @@ class Command extends BaseCommand {
|
|||||||
keys.sort();
|
keys.sort();
|
||||||
|
|
||||||
if (isExport) {
|
if (isExport) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const resultObj = keys.reduce<Record<string, any>>((acc, key) => {
|
const resultObj = keys.reduce<Record<string, any>>((acc, key) => {
|
||||||
const value = Setting.value(key);
|
const value = Setting.value(key);
|
||||||
if (!verbose && !value) return acc;
|
if (!verbose && !value) return acc;
|
||||||
|
@@ -13,6 +13,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.');
|
return _('Duplicates the notes matching <note> to [notebook]. If no notebook is specified the note is duplicated in the current notebook.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
let folder = null;
|
let folder = null;
|
||||||
if (args['notebook']) {
|
if (args['notebook']) {
|
||||||
|
@@ -15,6 +15,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Marks a to-do as done.');
|
return _('Marks a to-do as done.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public static async handleAction(commandInstance: BaseCommand, args: any, isCompleted: boolean) {
|
public static async handleAction(commandInstance: BaseCommand, args: any, isCompleted: boolean) {
|
||||||
const note: NoteEntity = await app().loadItem(BaseModel.TYPE_NOTE, args.note);
|
const note: NoteEntity = await app().loadItem(BaseModel.TYPE_NOTE, args.note);
|
||||||
commandInstance.encryptionCheck(note);
|
commandInstance.encryptionCheck(note);
|
||||||
@@ -31,6 +32,7 @@ class Command extends BaseCommand {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
await Command.handleAction(this, args, true);
|
await Command.handleAction(this, args, true);
|
||||||
}
|
}
|
||||||
|
@@ -30,9 +30,11 @@ class Command extends BaseCommand {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async action(args: any) {
|
public async action(args: any) {
|
||||||
const options = args.options;
|
const options = args.options;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const askForMasterKey = async (error: any) => {
|
const askForMasterKey = async (error: any) => {
|
||||||
const masterKeyId = error.masterKeyId;
|
const masterKeyId = error.masterKeyId;
|
||||||
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
const password = await this.prompt(_('Enter master password:'), { type: 'string', secure: true });
|
||||||
|
@@ -17,6 +17,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Edit note.');
|
return _('Edit note.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
let tempFilePath: string|null = null;
|
let tempFilePath: string|null = null;
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@ class Command extends BaseCommand {
|
|||||||
return [['--format <format>', _('Destination format: %s', formats.join(', '))], ['--note <note>', _('Exports only the given note.')], ['--notebook <notebook>', _('Exports only the given notebook.')]];
|
return [['--format <format>', _('Destination format: %s', formats.join(', '))], ['--note <note>', _('Exports only the given note.')], ['--notebook <notebook>', _('Exports only the given notebook.')]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const exportOptions: ExportOptions = {};
|
const exportOptions: ExportOptions = {};
|
||||||
exportOptions.path = args.path;
|
exportOptions.path = args.path;
|
||||||
@@ -35,10 +36,12 @@ class Command extends BaseCommand {
|
|||||||
if (args.options.note) {
|
if (args.options.note) {
|
||||||
const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() });
|
const notes = await app().loadItems(BaseModel.TYPE_NOTE, args.options.note, { parent: app().currentFolder() });
|
||||||
if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note));
|
if (!notes.length) throw new Error(_('Cannot find "%s".', args.options.note));
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
exportOptions.sourceNoteIds = notes.map((n: any) => n.id);
|
exportOptions.sourceNoteIds = notes.map((n: any) => n.id);
|
||||||
} else if (args.options.notebook) {
|
} else if (args.options.notebook) {
|
||||||
const folders = await app().loadItems(BaseModel.TYPE_FOLDER, args.options.notebook);
|
const folders = await app().loadItems(BaseModel.TYPE_FOLDER, args.options.notebook);
|
||||||
if (!folders.length) throw new Error(_('Cannot find "%s".', args.options.notebook));
|
if (!folders.length) throw new Error(_('Cannot find "%s".', args.options.notebook));
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
exportOptions.sourceFolderIds = folders.map((n: any) => n.id);
|
exportOptions.sourceFolderIds = folders.map((n: any) => n.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,6 +13,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Displays a geolocation URL for the note.');
|
return _('Displays a geolocation URL for the note.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const title = args['note'];
|
const title = args['note'];
|
||||||
|
|
||||||
|
@@ -29,6 +29,7 @@ class Command extends BaseCommand {
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const stdoutWidth = app().commandStdoutMaxWidth();
|
const stdoutWidth = app().commandStdoutMaxWidth();
|
||||||
|
|
||||||
|
@@ -30,6 +30,7 @@ class Command extends BaseCommand {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
|
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, args.notebook);
|
||||||
|
|
||||||
|
@@ -34,11 +34,13 @@ class Command extends BaseCommand {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const pattern = args['note-pattern'];
|
const pattern = args['note-pattern'];
|
||||||
let items = [];
|
let items = [];
|
||||||
const options = args.options;
|
const options = args.options;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const queryOptions: any = {};
|
const queryOptions: any = {};
|
||||||
if (options.limit) queryOptions.limit = options.limit;
|
if (options.limit) queryOptions.limit = options.limit;
|
||||||
if (options.sort) {
|
if (options.sort) {
|
||||||
|
@@ -43,6 +43,7 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async action(args: any) {
|
public async action(args: any) {
|
||||||
const targetFolder = args.options.parent;
|
const targetFolder = args.options.parent;
|
||||||
|
|
||||||
|
@@ -14,6 +14,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Moves the given <item> to [notebook]');
|
return _('Moves the given <item> to [notebook]');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const pattern = args['item'];
|
const pattern = args['item'];
|
||||||
const destination = args['notebook'];
|
const destination = args['notebook'];
|
||||||
|
@@ -14,6 +14,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Renames the given <item> (note or notebook) to <name>.');
|
return _('Renames the given <item> (note or notebook) to <name>.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const pattern = args['item'];
|
const pattern = args['item'];
|
||||||
const name = args['name'];
|
const name = args['name'];
|
||||||
|
@@ -12,6 +12,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Restore the items matching <pattern> from the trash.');
|
return _('Restore the items matching <pattern> from the trash.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const pattern = args['pattern'];
|
const pattern = args['pattern'];
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ class Command extends BaseCommand {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const pattern = args['notebook'];
|
const pattern = args['notebook'];
|
||||||
const force = args.options && args.options.force === true;
|
const force = args.options && args.options.force === true;
|
||||||
|
@@ -21,6 +21,7 @@ class Command extends BaseCommand {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const pattern = args['note-pattern'];
|
const pattern = args['note-pattern'];
|
||||||
const force = args.options && args.options.force === true;
|
const force = args.options && args.options.force === true;
|
||||||
|
@@ -22,6 +22,7 @@ class Command extends BaseCommand {
|
|||||||
return _('Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s', s.join(', '));
|
return _('Sets the property <name> of the given <note> to the given [value]. Possible properties are:\n\n%s', s.join(', '));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const title = args['note'];
|
const title = args['note'];
|
||||||
const propName = args['name'];
|
const propName = args['name'];
|
||||||
@@ -36,6 +37,7 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
const timestamp = Date.now();
|
const timestamp = Date.now();
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const newNote: any = {
|
const newNote: any = {
|
||||||
id: notes[i].id,
|
id: notes[i].id,
|
||||||
type_: notes[i].type_,
|
type_: notes[i].type_,
|
||||||
|
@@ -35,7 +35,9 @@ class Command extends BaseCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async action(args: any) {
|
public async action(args: any) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const schema: Record<string, any> = {
|
const schema: Record<string, any> = {
|
||||||
title: 'JSON schema for Joplin setting files',
|
title: 'JSON schema for Joplin setting files',
|
||||||
'$id': Setting.schemaUrl,
|
'$id': Setting.schemaUrl,
|
||||||
@@ -52,6 +54,7 @@ class Command extends BaseCommand {
|
|||||||
const type = settingTypeToSchemaType(md.type);
|
const type = settingTypeToSchemaType(md.type);
|
||||||
if (!type) continue;
|
if (!type) continue;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const props: Record<string, any> = {};
|
const props: Record<string, any> = {};
|
||||||
props.type = type;
|
props.type = type;
|
||||||
props.default = md.value;
|
props.default = md.value;
|
||||||
@@ -61,6 +64,7 @@ class Command extends BaseCommand {
|
|||||||
if (md.description && md.description('desktop')) description.push(md.description('desktop'));
|
if (md.description && md.description('desktop')) description.push(md.description('desktop'));
|
||||||
|
|
||||||
if (description.length) props.description = description.join('. ');
|
if (description.length) props.description = description.join('. ');
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
if (md.isEnum) props.enum = Object.keys(md.options()).map((v: any) => Setting.formatValue(key, v));
|
if (md.isEnum) props.enum = Object.keys(md.options()).map((v: any) => Setting.formatValue(key, v));
|
||||||
if ('minimum' in md) props.minimum = md.minimum;
|
if ('minimum' in md) props.minimum = md.minimum;
|
||||||
if ('maximum' in md) props.maximum = md.maximum;
|
if ('maximum' in md) props.maximum = md.maximum;
|
||||||
|
@@ -25,6 +25,7 @@ class Command extends BaseCommand {
|
|||||||
private syncTargetId_: number = null;
|
private syncTargetId_: number = null;
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
private releaseLockFn_: Function = null;
|
private releaseLockFn_: Function = null;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private oneDriveApiUtils_: any = null;
|
private oneDriveApiUtils_: any = null;
|
||||||
|
|
||||||
public usage() {
|
public usage() {
|
||||||
@@ -59,6 +60,7 @@ class Command extends BaseCommand {
|
|||||||
// OneDrive
|
// OneDrive
|
||||||
this.oneDriveApiUtils_ = new OneDriveApiNodeUtils(syncTarget.api());
|
this.oneDriveApiUtils_ = new OneDriveApiNodeUtils(syncTarget.api());
|
||||||
const auth = await this.oneDriveApiUtils_.oauthDance({
|
const auth = await this.oneDriveApiUtils_.oauthDance({
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
log: (...s: any[]) => {
|
log: (...s: any[]) => {
|
||||||
return this.stdout(...s);
|
return this.stdout(...s);
|
||||||
},
|
},
|
||||||
@@ -133,6 +135,7 @@ class Command extends BaseCommand {
|
|||||||
return !!this.oneDriveApiUtils_;
|
return !!this.oneDriveApiUtils_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async action(args: any) {
|
public async action(args: any) {
|
||||||
this.releaseLockFn_ = null;
|
this.releaseLockFn_ = null;
|
||||||
|
|
||||||
@@ -181,7 +184,9 @@ class Command extends BaseCommand {
|
|||||||
|
|
||||||
const sync = await syncTarget.synchronizer();
|
const sync = await syncTarget.synchronizer();
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const options: any = {
|
const options: any = {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
onProgress: (report: any) => {
|
onProgress: (report: any) => {
|
||||||
const lines = Synchronizer.reportToLines(report);
|
const lines = Synchronizer.reportToLines(report);
|
||||||
if (lines.length) cliUtils.redraw(lines.join(' '));
|
if (lines.length) cliUtils.redraw(lines.join(' '));
|
||||||
|
@@ -6,11 +6,13 @@ import populateDatabase from '@joplin/lib/services/debug/populateDatabase';
|
|||||||
import { readCredentialFile } from '@joplin/lib/utils/credentialFiles';
|
import { readCredentialFile } from '@joplin/lib/utils/credentialFiles';
|
||||||
import JoplinServerApi from '@joplin/lib/JoplinServerApi';
|
import JoplinServerApi from '@joplin/lib/JoplinServerApi';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
function randomElement(array: any[]): any {
|
function randomElement(array: any[]): any {
|
||||||
if (!array.length) return null;
|
if (!array.length) return null;
|
||||||
return array[Math.floor(Math.random() * array.length)];
|
return array[Math.floor(Math.random() * array.length)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
function itemCount(args: any) {
|
function itemCount(args: any) {
|
||||||
const count = Number(args.arg0);
|
const count = Number(args.arg0);
|
||||||
if (!count || isNaN(count)) throw new Error('Note count must be specified');
|
if (!count || isNaN(count)) throw new Error('Note count must be specified');
|
||||||
@@ -30,6 +32,7 @@ class Command extends BaseCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public options(): any[] {
|
public options(): any[] {
|
||||||
return [
|
return [
|
||||||
['--folder-count <count>', 'Folders to create'],
|
['--folder-count <count>', 'Folders to create'],
|
||||||
@@ -40,6 +43,7 @@ class Command extends BaseCommand {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async action(args: any) {
|
public async action(args: any) {
|
||||||
const { command, options } = args;
|
const { command, options } = args;
|
||||||
|
|
||||||
@@ -53,6 +57,7 @@ class Command extends BaseCommand {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const promises: any[] = [];
|
const promises: any[] = [];
|
||||||
|
|
||||||
if (command === 'createRandomNotes') {
|
if (command === 'createRandomNotes') {
|
||||||
|
@@ -16,6 +16,7 @@ class Command extends BaseCommand {
|
|||||||
return ['cli'];
|
return ['cli'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public override async action(args: any) {
|
public override async action(args: any) {
|
||||||
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, args['notebook']);
|
const folder = await app().loadItem(BaseModel.TYPE_FOLDER, args['notebook']);
|
||||||
if (!folder) throw new Error(_('Cannot find "%s".', args['notebook']));
|
if (!folder) throw new Error(_('Cannot find "%s".', args['notebook']));
|
||||||
|
@@ -25,6 +25,7 @@ export default class FolderListWidget extends ListWidget {
|
|||||||
this.trimItemTitle = false;
|
this.trimItemTitle = false;
|
||||||
this.showIds = false;
|
this.showIds = false;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
this.itemRenderer = (item: any) => {
|
this.itemRenderer = (item: any) => {
|
||||||
const output = [];
|
const output = [];
|
||||||
if (item === '-') {
|
if (item === '-') {
|
||||||
@@ -42,6 +43,7 @@ export default class FolderListWidget extends ListWidget {
|
|||||||
if (this.folderHasChildren_(this.folders, item.id)) {
|
if (this.folderHasChildren_(this.folders, item.id)) {
|
||||||
for (let i = 0; i < this.folders.length; i++) {
|
for (let i = 0; i < this.folders.length; i++) {
|
||||||
if (this.folders[i].parent_id === item.id) {
|
if (this.folders[i].parent_id === item.id) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
noteCount -= (this.folders[i] as any).note_count;
|
noteCount -= (this.folders[i] as any).note_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,6 +167,7 @@ export default class FolderListWidget extends ListWidget {
|
|||||||
|
|
||||||
this.logger().info('FFFFFFFFFFFFF', JSON.stringify(this.folders, null, 4));
|
this.logger().info('FFFFFFFFFFFFF', JSON.stringify(this.folders, null, 4));
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
let newItems: any[] = [];
|
let newItems: any[] = [];
|
||||||
const orderFolders = (parentId: string) => {
|
const orderFolders = (parentId: string) => {
|
||||||
this.logger().info('PARENT', parentId);
|
this.logger().info('PARENT', parentId);
|
||||||
|
@@ -27,6 +27,7 @@ export default class StatusBarWidget extends BaseWidget {
|
|||||||
this.invalidate();
|
this.invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
public async prompt(initialText = '', promptString: any = null, options: any = null) {
|
public async prompt(initialText = '', promptString: any = null, options: any = null) {
|
||||||
if (this.promptState_) throw new Error('Another prompt already active');
|
if (this.promptState_) throw new Error('Another prompt already active');
|
||||||
if (promptString === null) promptString = ':';
|
if (promptString === null) promptString = ':';
|
||||||
@@ -86,6 +87,7 @@ export default class StatusBarWidget extends BaseWidget {
|
|||||||
|
|
||||||
// const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
|
// const textStyle = this.promptActive ? (s) => s : chalk.bgBlueBright.white;
|
||||||
// const textStyle = (s) => s;
|
// const textStyle = (s) => s;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const textStyle = this.promptActive ? (s: any) => s : chalk.gray;
|
const textStyle = this.promptActive ? (s: any) => s : chalk.gray;
|
||||||
|
|
||||||
this.term.drawHLine(this.absoluteInnerX, this.absoluteInnerY, this.innerWidth, textStyle(' '));
|
this.term.drawHLine(this.absoluteInnerX, this.absoluteInnerY, this.innerWidth, textStyle(' '));
|
||||||
@@ -106,6 +108,7 @@ export default class StatusBarWidget extends BaseWidget {
|
|||||||
|
|
||||||
const isSecurePrompt = !!this.promptState_.secure;
|
const isSecurePrompt = !!this.promptState_.secure;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const options: any = {
|
const options: any = {
|
||||||
cancelable: true,
|
cancelable: true,
|
||||||
history: this.history,
|
history: this.history,
|
||||||
@@ -118,6 +121,7 @@ export default class StatusBarWidget extends BaseWidget {
|
|||||||
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
|
if ('cursorPosition' in this.promptState_) options.cursorPosition = this.promptState_.cursorPosition;
|
||||||
if (isSecurePrompt) options.echoChar = true;
|
if (isSecurePrompt) options.echoChar = true;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
this.inputEventEmitter_ = this.term.inputField(options, (error: any, input: any) => {
|
this.inputEventEmitter_ = this.term.inputField(options, (error: any, input: any) => {
|
||||||
let resolveResult = null;
|
let resolveResult = null;
|
||||||
const resolveFn = this.promptState_.resolve;
|
const resolveFn = this.promptState_.resolve;
|
||||||
|
@@ -26,7 +26,7 @@ const sharp = require('sharp');
|
|||||||
const { shimInit } = require('@joplin/lib/shim-init-node.js');
|
const { shimInit } = require('@joplin/lib/shim-init-node.js');
|
||||||
const shim = require('@joplin/lib/shim').default;
|
const shim = require('@joplin/lib/shim').default;
|
||||||
const { _ } = require('@joplin/lib/locale');
|
const { _ } = require('@joplin/lib/locale');
|
||||||
const { FileApiDriverLocal } = require('@joplin/lib/file-api-driver-local');
|
const FileApiDriverLocal = require('@joplin/lib/file-api-driver-local').default;
|
||||||
const EncryptionService = require('@joplin/lib/services/e2ee/EncryptionService').default;
|
const EncryptionService = require('@joplin/lib/services/e2ee/EncryptionService').default;
|
||||||
const envFromArgs = require('@joplin/lib/envFromArgs');
|
const envFromArgs = require('@joplin/lib/envFromArgs');
|
||||||
const nodeSqlite = require('sqlite3');
|
const nodeSqlite = require('sqlite3');
|
||||||
|
@@ -5,17 +5,22 @@ import executeSandboxCall from '@joplin/lib/services/plugins/utils/executeSandbo
|
|||||||
import Global from '@joplin/lib/services/plugins/api/Global';
|
import Global from '@joplin/lib/services/plugins/api/Global';
|
||||||
import mapEventHandlersToIds, { EventHandlers } from '@joplin/lib/services/plugins/utils/mapEventHandlersToIds';
|
import mapEventHandlersToIds, { EventHandlers } from '@joplin/lib/services/plugins/utils/mapEventHandlersToIds';
|
||||||
import uuid from '@joplin/lib/uuid';
|
import uuid from '@joplin/lib/uuid';
|
||||||
|
import Joplin from '@joplin/lib/services/plugins/api/Joplin';
|
||||||
|
import { Console } from 'console';
|
||||||
const sandboxProxy = require('@joplin/lib/services/plugins/sandboxProxy');
|
const sandboxProxy = require('@joplin/lib/services/plugins/sandboxProxy');
|
||||||
|
|
||||||
function createConsoleWrapper(pluginId: string) {
|
function createConsoleWrapper(pluginId: string) {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const wrapper: any = {};
|
const wrapper: any = {};
|
||||||
|
|
||||||
for (const n in console) {
|
for (const n in console) {
|
||||||
// eslint-disable-next-line no-console
|
// eslint-disable-next-line no-console
|
||||||
if (!console.hasOwnProperty(n)) continue;
|
if (!console.hasOwnProperty(n)) continue;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
wrapper[n] = (...args: any[]) => {
|
wrapper[n] = (...args: any[]) => {
|
||||||
const newArgs = args.slice();
|
const newArgs = args.slice();
|
||||||
newArgs.splice(0, 0, `Plugin "${pluginId}":`);
|
newArgs.splice(0, 0, `Plugin "${pluginId}":`);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
return (console as any)[n](...newArgs);
|
return (console as any)[n](...newArgs);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -30,10 +35,18 @@ function createConsoleWrapper(pluginId: string) {
|
|||||||
// For example, all plugin calls go through a proxy, however they could made directly since
|
// For example, all plugin calls go through a proxy, however they could made directly since
|
||||||
// the plugin script is running within the same process as the main app.
|
// the plugin script is running within the same process as the main app.
|
||||||
|
|
||||||
|
interface SandboxProxy {
|
||||||
|
joplin: Joplin;
|
||||||
|
console: typeof Console;
|
||||||
|
stop: ()=> void;
|
||||||
|
}
|
||||||
|
|
||||||
export default class PluginRunner extends BasePluginRunner {
|
export default class PluginRunner extends BasePluginRunner {
|
||||||
|
|
||||||
private eventHandlers_: EventHandlers = {};
|
private eventHandlers_: EventHandlers = {};
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private activeSandboxCalls_: any = {};
|
private activeSandboxCalls_: any = {};
|
||||||
|
private sandboxProxies: Map<string, SandboxProxy> = new Map();
|
||||||
|
|
||||||
public constructor() {
|
public constructor() {
|
||||||
super();
|
super();
|
||||||
@@ -41,13 +54,21 @@ export default class PluginRunner extends BasePluginRunner {
|
|||||||
this.eventHandler = this.eventHandler.bind(this);
|
this.eventHandler = this.eventHandler.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
private async eventHandler(eventHandlerId: string, args: any[]) {
|
private async eventHandler(eventHandlerId: string, args: any[]) {
|
||||||
const cb = this.eventHandlers_[eventHandlerId];
|
const cb = this.eventHandlers_[eventHandlerId];
|
||||||
return cb(...args);
|
return cb(...args);
|
||||||
}
|
}
|
||||||
|
|
||||||
private newSandboxProxy(pluginId: string, sandbox: Global) {
|
private newSandboxProxy(pluginId: string, sandbox: Global) {
|
||||||
|
let stopped = false;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const target = async (path: string, args: any[]) => {
|
const target = async (path: string, args: any[]) => {
|
||||||
|
if (stopped) {
|
||||||
|
throw new Error(`Plugin with ID ${pluginId} has been stopped. Cannot execute sandbox call.`);
|
||||||
|
}
|
||||||
|
|
||||||
const callId = `${pluginId}::${path}::${uuid.createNano()}`;
|
const callId = `${pluginId}::${path}::${uuid.createNano()}`;
|
||||||
this.activeSandboxCalls_[callId] = true;
|
this.activeSandboxCalls_[callId] = true;
|
||||||
const promise = executeSandboxCall(pluginId, sandbox, `joplin.${path}`, mapEventHandlersToIds(args, this.eventHandlers_), this.eventHandler);
|
const promise = executeSandboxCall(pluginId, sandbox, `joplin.${path}`, mapEventHandlersToIds(args, this.eventHandlers_), this.eventHandler);
|
||||||
@@ -58,10 +79,15 @@ export default class PluginRunner extends BasePluginRunner {
|
|||||||
return promise;
|
return promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
const proxy = {
|
||||||
joplin: sandboxProxy(target),
|
joplin: sandboxProxy(target),
|
||||||
console: createConsoleWrapper(pluginId),
|
console: createConsoleWrapper(pluginId),
|
||||||
|
stop: () => {
|
||||||
|
stopped = true;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
this.sandboxProxies.set(pluginId, proxy);
|
||||||
|
return proxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async run(plugin: Plugin, sandbox: Global): Promise<void> {
|
public async run(plugin: Plugin, sandbox: Global): Promise<void> {
|
||||||
@@ -84,6 +110,13 @@ export default class PluginRunner extends BasePluginRunner {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async stop(plugin: Plugin): Promise<void> {
|
||||||
|
// TODO: Node VM doesn't support stopping plugins without running them in a child process.
|
||||||
|
// For now, we stop the plugin by making interactions with the Joplin API throw Errors.
|
||||||
|
const proxy = this.sandboxProxies.get(plugin.id);
|
||||||
|
proxy?.stop();
|
||||||
|
}
|
||||||
|
|
||||||
public async waitForSandboxCalls(): Promise<void> {
|
public async waitForSandboxCalls(): Promise<void> {
|
||||||
const startTime = Date.now();
|
const startTime = Date.now();
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
||||||
|
@@ -1,11 +1,12 @@
|
|||||||
import { _ } from '@joplin/lib/locale';
|
import { _ } from '@joplin/lib/locale';
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any -- Old code before rule was applied, Old code before rule was applied
|
||||||
export default (cmd: any, stdout: Function, store: Function, gui: Function) => {
|
export default (cmd: any, stdout: Function, store: Function, gui: Function) => {
|
||||||
cmd.setStdout((text: string) => {
|
cmd.setStdout((text: string) => {
|
||||||
return stdout(text);
|
return stdout(text);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
cmd.setDispatcher((action: any) => {
|
cmd.setDispatcher((action: any) => {
|
||||||
if (store()) {
|
if (store()) {
|
||||||
return store().dispatch(action);
|
return store().dispatch(action);
|
||||||
@@ -14,6 +15,7 @@ export default (cmd: any, stdout: Function, store: Function, gui: Function) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
cmd.setPrompt(async (message: string, options: any) => {
|
cmd.setPrompt(async (message: string, options: any) => {
|
||||||
if (!options) options = {};
|
if (!options) options = {};
|
||||||
if (!options.type) options.type = 'boolean';
|
if (!options.type) options.type = 'boolean';
|
||||||
|
@@ -3,7 +3,7 @@ import Folder from '@joplin/lib/models/Folder';
|
|||||||
import BaseCommand from '../base-command';
|
import BaseCommand from '../base-command';
|
||||||
import setupCommand from '../setupCommand';
|
import setupCommand from '../setupCommand';
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied
|
// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any -- Old code before rule was applied, Old code before rule was applied
|
||||||
export const setupCommandForTesting = (CommandClass: any, stdout: Function = null): BaseCommand => {
|
export const setupCommandForTesting = (CommandClass: any, stdout: Function = null): BaseCommand => {
|
||||||
const command = new CommandClass();
|
const command = new CommandClass();
|
||||||
setupCommand(command, stdout, null, null);
|
setupCommand(command, stdout, null, null);
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
],
|
],
|
||||||
"owner": "Laurent Cozic"
|
"owner": "Laurent Cozic"
|
||||||
},
|
},
|
||||||
"version": "3.0.0",
|
"version": "3.0.1",
|
||||||
"bin": "./main.js",
|
"bin": "./main.js",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
"string-padding": "1.0.2",
|
"string-padding": "1.0.2",
|
||||||
"strip-ansi": "6.0.1",
|
"strip-ansi": "6.0.1",
|
||||||
"tcp-port-used": "1.0.2",
|
"tcp-port-used": "1.0.2",
|
||||||
"terminal-kit": "3.0.1",
|
"terminal-kit": "3.0.2",
|
||||||
"tkwidgets": "0.5.27",
|
"tkwidgets": "0.5.27",
|
||||||
"url-parse": "1.5.10",
|
"url-parse": "1.5.10",
|
||||||
"word-wrap": "1.2.5",
|
"word-wrap": "1.2.5",
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
"@joplin/tools": "~3.0",
|
"@joplin/tools": "~3.0",
|
||||||
"@types/fs-extra": "11.0.4",
|
"@types/fs-extra": "11.0.4",
|
||||||
"@types/jest": "29.5.8",
|
"@types/jest": "29.5.8",
|
||||||
"@types/node": "18.19.8",
|
"@types/node": "18.19.26",
|
||||||
"@types/proper-lockfile": "^4.1.2",
|
"@types/proper-lockfile": "^4.1.2",
|
||||||
"gulp": "4.0.2",
|
"gulp": "4.0.2",
|
||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
|
@@ -22,6 +22,7 @@ describe('HtmlToMd', () => {
|
|||||||
|
|
||||||
// if (htmlFilename.indexOf('image_preserve_size') !== 0) continue;
|
// if (htmlFilename.indexOf('image_preserve_size') !== 0) continue;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const htmlToMdOptions: any = {};
|
const htmlToMdOptions: any = {};
|
||||||
|
|
||||||
if (htmlFilename === 'anchor_local.html') {
|
if (htmlFilename === 'anchor_local.html') {
|
||||||
|
@@ -4,6 +4,7 @@ import { setupDatabaseAndSynchronizer, switchClient } from '@joplin/lib/testing/
|
|||||||
import shim from '@joplin/lib/shim';
|
import shim from '@joplin/lib/shim';
|
||||||
const { themeStyle } = require('@joplin/lib/theme');
|
const { themeStyle } = require('@joplin/lib/theme');
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
function newTestMdToHtml(options: any = null) {
|
function newTestMdToHtml(options: any = null) {
|
||||||
options = {
|
options = {
|
||||||
ResourceModel: {
|
ResourceModel: {
|
||||||
@@ -37,6 +38,7 @@ describe('MdToHtml', () => {
|
|||||||
|
|
||||||
// if (mdFilename !== 'sanitize_9.md') continue;
|
// if (mdFilename !== 'sanitize_9.md') continue;
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const mdToHtmlOptions: any = {
|
const mdToHtmlOptions: any = {
|
||||||
bodyOnly: true,
|
bodyOnly: true,
|
||||||
};
|
};
|
||||||
@@ -47,6 +49,8 @@ describe('MdToHtml', () => {
|
|||||||
checkboxRenderingType: 2,
|
checkboxRenderingType: 2,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
} else if (mdFilename.startsWith('sourcemap_')) {
|
||||||
|
mdToHtmlOptions.mapsToLine = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const markdown = await shim.fsDriver().readFile(mdFilePath);
|
const markdown = await shim.fsDriver().readFile(mdFilePath);
|
||||||
@@ -86,6 +90,7 @@ describe('MdToHtml', () => {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
it('should return enabled plugin assets', (async () => {
|
it('should return enabled plugin assets', (async () => {
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
const pluginOptions: any = {};
|
const pluginOptions: any = {};
|
||||||
const pluginNames = MdToHtml.pluginNames();
|
const pluginNames = MdToHtml.pluginNames();
|
||||||
|
|
||||||
|
24
packages/app-cli/tests/html_to_md/code_multiline_1.html
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
<!-- this is from: https://flaviocopes.com/bubble-sort-javascript/ -->
|
||||||
|
<div><pre class="astro-code github-dark" style="background-color: rgb(36, 41, 46); color: rgb(225, 228, 232); overflow-x: auto; --darkreader-inline-bgcolor: #1d2125; --darkreader-inline-color: #d7d4cf; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;" tabindex="0" data-darkreader-inline-bgcolor="" data-darkreader-inline-color=""><code><span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">const</span><span style="color: rgb(179, 146, 240); --darkreader-inline-color: #ab86ee;" data-darkreader-inline-color=""> bubbleSort</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> =</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> (</span><span style="color: rgb(255, 171, 112); --darkreader-inline-color: #ffa668;" data-darkreader-inline-color="">originalArray</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">) </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=></span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> {</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> let</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> swapped </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> false</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> const</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> a</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> =</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> [</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">...</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">originalArray]</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> for</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> (</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">let</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> i </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> 1</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">; i </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""><</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> a.</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color="">length</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> -</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> 1</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">; i</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">++</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">) {</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> swapped </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> false</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> for</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> (</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">let</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> j </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> 0</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">; j </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""><</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> a.</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color="">length</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> -</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> i; j</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">++</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">) {</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> if</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> (a[j </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">+</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> 1</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">] </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""><</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> a[j]) {</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> ;[a[j], a[j </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">+</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> 1</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">]] </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> [a[j </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">+</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> 1</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">], a[j]]</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> swapped </span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">=</span><span style="color: rgb(121, 184, 255); --darkreader-inline-color: #6ebdff;" data-darkreader-inline-color=""> true</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> }</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> }</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> if</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> (</span><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color="">!</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">swapped) {</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> return</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> a</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> }</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> }</span></span>
|
||||||
|
<span class="line"></span>
|
||||||
|
<span class="line"><span style="color: rgb(249, 117, 131); --darkreader-inline-color: #f96e7c;" data-darkreader-inline-color=""> return</span><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color=""> a</span></span>
|
||||||
|
<span class="line"><span style="color: rgb(225, 228, 232); --darkreader-inline-color: #d7d4cf;" data-darkreader-inline-color="">}</span></span></code></pre>
|
||||||
|
<p></p></div>
|
24
packages/app-cli/tests/html_to_md/code_multiline_1.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
```
|
||||||
|
const bubbleSort = (originalArray) => {
|
||||||
|
let swapped = false
|
||||||
|
|
||||||
|
const a = [...originalArray]
|
||||||
|
|
||||||
|
for (let i = 1; i < a.length - 1; i++) {
|
||||||
|
swapped = false
|
||||||
|
|
||||||
|
for (let j = 0; j < a.length - i; j++) {
|
||||||
|
if (a[j + 1] < a[j]) {
|
||||||
|
;[a[j], a[j + 1]] = [a[j + 1], a[j]]
|
||||||
|
swapped = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!swapped) {
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
```
|
21
packages/app-cli/tests/html_to_md/code_multiline_2.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<!-- this is from: https://blog.csdn.net/qq_42025798/article/details/121727781 -->
|
||||||
|
<div><pre data-index="6" class="prettyprint set-code-show" style="font-family: "Source Code Pro", "DejaVu Sans Mono", "Ubuntu Mono", "Anonymous Pro", "Droid Sans Mono", Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, "PingFang SC", "Microsoft YaHei", sans-serif;"><code class="prism language-java has-numbering" onclick="mdcp.copyCode(event)" style="position: unset;"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token punctuation">{</span>
|
||||||
|
<span class="token keyword">private</span> <span class="token class-name">String</span> name<span class="token punctuation">;</span>
|
||||||
|
|
||||||
|
<span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||||||
|
<span class="token keyword">return</span> name<span class="token punctuation">;</span>
|
||||||
|
<span class="token punctuation">}</span>
|
||||||
|
|
||||||
|
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span><span class="token class-name">String</span> name<span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||||||
|
<span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
|
||||||
|
<span class="token punctuation">}</span>
|
||||||
|
|
||||||
|
<span class="token annotation punctuation">@Override</span>
|
||||||
|
<span class="token keyword">public</span> <span class="token class-name">String</span> <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
|
||||||
|
<span class="token keyword">return</span> <span class="token string">"User{"</span> <span class="token operator">+</span>
|
||||||
|
<span class="token string">"name='"</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">'\''</span> <span class="token operator">+</span>
|
||||||
|
<span class="token string">'}'</span><span class="token punctuation">;</span>
|
||||||
|
<span class="token punctuation">}</span>
|
||||||
|
<span class="token punctuation">}</span>
|
||||||
|
</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">1</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">2</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">3</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">4</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">5</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">6</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">7</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">8</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">9</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">10</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">11</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">12</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">13</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">14</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">15</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">16</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">17</li><li style="color: rgb(153, 153, 153); --darkreader-inline-color: #a8a095;" data-darkreader-inline-color="">18</li></ul></pre>
|
||||||
|
<h4></h4></div>
|
20
packages/app-cli/tests/html_to_md/code_multiline_2.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
```
|
||||||
|
public class User {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "User{" +
|
||||||
|
"name='" + name + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
2
packages/app-cli/tests/html_to_md/code_multiline_3.html
Normal file
16
packages/app-cli/tests/html_to_md/code_multiline_3.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
```typescript
|
||||||
|
// Import the Joplin API
|
||||||
|
import joplin from 'api';
|
||||||
|
|
||||||
|
// Register the plugin
|
||||||
|
joplin.plugins.register({
|
||||||
|
|
||||||
|
// Run initialisation code in the onStart event handler
|
||||||
|
// Note that due to the plugin multi-process architecture, you should
|
||||||
|
// always assume that all function calls and event handlers are async.
|
||||||
|
onStart: async function() {
|
||||||
|
console.info('TOC plugin started!');
|
||||||
|
},
|
||||||
|
|
||||||
|
});
|
||||||
|
```
|
2
packages/app-cli/tests/html_to_md/code_multiline_4.html
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<!-- this is from: https://blog.csdn.net/ch5256865/article/details/52957360 -->
|
||||||
|
<pre data-index="0" class="set-code-show" name="code" style="font-family: Consolas, Inconsolata, Courier, monospace;"><code class="hljs language-javascript"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">let</span> str = <span class="hljs-string">` hello world ! `</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">let</span> _trim = <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> <span class="hljs-variable language_">this</span> == <span class="hljs-string">"number"</span>) <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">"Invalid or unexpected token"</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> <span class="hljs-variable language_">this</span> !== <span class="hljs-string">"string"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">new</span> <span class="hljs-title class_">Error</span>(<span class="hljs-string">"Cannot read property 'trim' of"</span> + <span class="hljs-variable language_">this</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">let</span> reg = <span class="hljs-regexp">/^\s*|\s*$/g</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.<span class="hljs-title function_">replace</span>(reg, <span class="hljs-string">""</span>);</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">};</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-title class_">String</span>.<span class="hljs-property"><span class="hljs-keyword">prototype</span></span>.<span class="hljs-property">_trim</span> = _trim;</div></div></li></ol></code></pre>
|
12
packages/app-cli/tests/html_to_md/code_multiline_4.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
```
|
||||||
|
let str = ` hello world ! `;
|
||||||
|
let _trim = function () {
|
||||||
|
if (typeof this == "number") new Error("Invalid or unexpected token");
|
||||||
|
if (typeof this !== "string")
|
||||||
|
new Error("Cannot read property 'trim' of" + this);
|
||||||
|
let reg = /^\s*|\s*$/g;
|
||||||
|
return this.replace(reg, "");
|
||||||
|
};
|
||||||
|
|
||||||
|
String.prototype._trim = _trim;
|
||||||
|
```
|
42
packages/app-cli/tests/html_to_md/code_multiline_5.html
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<!-- this is from: https://www.slingacademy.com/article/python-aiohttp-how-to-download-files-using-streams/ -->
|
||||||
|
<div><pre class="wp-block-code prettyprinted" style="font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace;"><code class=" prettyprinted" style=""><span class="com"><span class="com"># SlingAcademy.com</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="com"><span class="com"># This code uses Python 3.11.4</span></span><span class="pln"><span class="pln">
|
||||||
|
|
||||||
|
</span></span><span class="kwd"><span class="kwd">import</span></span><span class="pln"><span class="pln"> asyncio
|
||||||
|
</span></span><span class="kwd"><span class="kwd">import</span></span><span class="pln"><span class="pln"> aiohttp
|
||||||
|
|
||||||
|
</span></span><span class="com"><span class="com"># This function downloads a file from a URL and saves it to a local file</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="com"><span class="com"># The function is asynchronous and can handle large files because it uses aiohttp streams</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">async</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">def</span></span><span class="pln"><span class="pln"> download_file</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">url</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> filename</span></span><span class="pun"><span class="pun">):</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">async</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">with</span></span><span class="pln"><span class="pln"> aiohttp</span></span><span class="pun"><span class="pun">.</span></span><span class="typ"><span class="typ">ClientSession</span></span><span class="pun"><span class="pun">()</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">as</span></span><span class="pln"><span class="pln"> session</span></span><span class="pun"><span class="pun">:</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">print</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">f</span></span><span class="str"><span class="str">"Starting download file from {url}"</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">async</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">with</span></span><span class="pln"><span class="pln"> session</span></span><span class="pun"><span class="pun">.</span></span><span class="kwd"><span class="kwd">get</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">url</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">as</span></span><span class="pln"><span class="pln"> response</span></span><span class="pun"><span class="pun">:</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">assert</span></span><span class="pln"><span class="pln"> response</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">status </span></span><span class="pun"><span class="pun">==</span></span><span class="pln"><span class="pln"> </span></span><span class="lit"><span class="lit">200</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">with</span></span><span class="pln"><span class="pln"> open</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">filename</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln"> </span></span><span class="str"><span class="str">"wb"</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">as</span></span><span class="pln"><span class="pln"> f</span></span><span class="pun"><span class="pun">:</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">while</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">True</span></span><span class="pun"><span class="pun">:</span></span><span class="pln"><span class="pln">
|
||||||
|
chunk </span></span><span class="pun"><span class="pun">=</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">await</span></span><span class="pln"><span class="pln"> response</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">content</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">readany</span></span><span class="pun"><span class="pun">()</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">if</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">not</span></span><span class="pln"><span class="pln"> chunk</span></span><span class="pun"><span class="pun">:</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">break</span></span><span class="pln"><span class="pln">
|
||||||
|
f</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">write</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">chunk</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">print</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">f</span></span><span class="str"><span class="str">"Downloaded {filename} from {url}"</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln">
|
||||||
|
|
||||||
|
|
||||||
|
</span></span><span class="com"><span class="com"># This function downloads two files at the same time</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">async</span></span><span class="pln"><span class="pln"> </span></span><span class="kwd"><span class="kwd">def</span></span><span class="pln"><span class="pln"> main</span></span><span class="pun"><span class="pun">():</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="kwd"><span class="kwd">await</span></span><span class="pln"><span class="pln"> asyncio</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">gather</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="com"><span class="com"># download a CSV file</span></span><span class="pln"><span class="pln">
|
||||||
|
download_file</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="str"><span class="str">"https://api.slingacademy.com/v1/sample-data/files/student-scores.csv"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="str"><span class="str">"test.csv"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="pun"><span class="pun">),</span></span><span class="pln"><span class="pln">
|
||||||
|
|
||||||
|
</span></span><span class="com"><span class="com"># download a PDF file</span></span><span class="pln"><span class="pln">
|
||||||
|
download_file</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="str"><span class="str">"https://api.slingacademy.com/v1/sample-data/files/text-and-table.pdf"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="str"><span class="str">"test.pdf"</span></span><span class="pun"><span class="pun">,</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="pun"><span class="pun">),</span></span><span class="pln"><span class="pln">
|
||||||
|
</span></span><span class="pun"><span class="pun">)</span></span><span class="pln"><span class="pln">
|
||||||
|
|
||||||
|
</span></span><span class="com"><span class="com"># Run the main function</span></span><span class="pln"><span class="pln">
|
||||||
|
asyncio</span></span><span class="pun"><span class="pun">.</span></span><span class="pln"><span class="pln">run</span></span><span class="pun"><span class="pun">(</span></span><span class="pln"><span class="pln">main</span></span><span class="pun"><span class="pun">())</span></span></code></pre><span class="ezoic-autoinsert-video ezoic-mid_content"></span>
|
||||||
|
<p></p></div>
|
42
packages/app-cli/tests/html_to_md/code_multiline_5.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
```
|
||||||
|
# SlingAcademy.com
|
||||||
|
# This code uses Python 3.11.4
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import aiohttp
|
||||||
|
|
||||||
|
# This function downloads a file from a URL and saves it to a local file
|
||||||
|
# The function is asynchronous and can handle large files because it uses aiohttp streams
|
||||||
|
async def download_file(url, filename):
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
print(f"Starting download file from {url}")
|
||||||
|
async with session.get(url) as response:
|
||||||
|
assert response.status == 200
|
||||||
|
with open(filename, "wb") as f:
|
||||||
|
while True:
|
||||||
|
chunk = await response.content.readany()
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
f.write(chunk)
|
||||||
|
print(f"Downloaded {filename} from {url}")
|
||||||
|
|
||||||
|
|
||||||
|
# This function downloads two files at the same time
|
||||||
|
async def main():
|
||||||
|
await asyncio.gather(
|
||||||
|
# download a CSV file
|
||||||
|
download_file(
|
||||||
|
"https://api.slingacademy.com/v1/sample-data/files/student-scores.csv",
|
||||||
|
"test.csv",
|
||||||
|
),
|
||||||
|
|
||||||
|
# download a PDF file
|
||||||
|
download_file(
|
||||||
|
"https://api.slingacademy.com/v1/sample-data/files/text-and-table.pdf",
|
||||||
|
"test.pdf",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Run the main function
|
||||||
|
asyncio.run(main())
|
||||||
|
```
|
1
packages/app-cli/tests/md_to_html/sanitize_19.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<div><span class="jop-noMdConv">This is a comment we would like to keep</div></form>
|
1
packages/app-cli/tests/md_to_html/sanitize_19.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<form><span>This is a comment we would like to keep</span></form>
|
2
packages/app-cli/tests/md_to_html/sanitize_20.html
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<div class="jop-noMdConv">
|
||||||
|
<.a
|
2
packages/app-cli/tests/md_to_html/sanitize_20.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<div>
|
||||||
|
<.a<iframe src="http://example.com/" >
|
21
packages/app-cli/tests/md_to_html/sourcemap_table.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<div class="joplin-table-wrapper">
|
||||||
|
<table class="maps-to-line" source-line="0" source-line-end="3">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>This</th>
|
||||||
|
<th>is</th>
|
||||||
|
<th>a</th>
|
||||||
|
<th>test</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>This</td>
|
||||||
|
<td>table</td>
|
||||||
|
<td>has</td>
|
||||||
|
<td>line numbers</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<p class="maps-to-line" source-line="4" source-line-end="5">When <code class="inline-code">mapsToLine</code> is enabled for this file, the table above should have line numbers that link to the original markdown.</p>
|
5
packages/app-cli/tests/md_to_html/sourcemap_table.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
| This | is | a | test |
|
||||||
|
|------|----|---|------|
|
||||||
|
| This | table | has | line numbers |
|
||||||
|
|
||||||
|
When `mapsToLine` is enabled for this file, the table above should have line numbers that link to the original markdown.
|
@@ -0,0 +1,20 @@
|
|||||||
|
<div class="joplin-table-wrapper">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>No</td>
|
||||||
|
<td>header</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>And no</td>
|
||||||
|
<td>surprises</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
@@ -0,0 +1,4 @@
|
|||||||
|
| | |
|
||||||
|
| --- | --- |
|
||||||
|
| No | header |
|
||||||
|
| And no | surprises |
|
@@ -0,0 +1,16 @@
|
|||||||
|
<div class="joplin-table-wrapper">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>Some paragraph<br class="jop-noMdConv"/><br class="jop-noMdConv"/>inside a table cell</td>
|
||||||
|
<td>Second column</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
@@ -0,0 +1,3 @@
|
|||||||
|
| | |
|
||||||
|
| --- | --- |
|
||||||
|
| Some paragraph<br><br>inside a table cell | Second column |
|
@@ -5,6 +5,7 @@ import shim from '@joplin/lib/shim';
|
|||||||
import Setting from '@joplin/lib/models/Setting';
|
import Setting from '@joplin/lib/models/Setting';
|
||||||
import { db, setupDatabaseAndSynchronizer, switchClient } from '@joplin/lib/testing/test-utils';
|
import { db, setupDatabaseAndSynchronizer, switchClient } from '@joplin/lib/testing/test-utils';
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
function describeIfCompatible(name: string, fn: any, elseFn: any) {
|
function describeIfCompatible(name: string, fn: any, elseFn: any) {
|
||||||
if (['win32', 'darwin'].includes(shim.platformName())) {
|
if (['win32', 'darwin'].includes(shim.platformName())) {
|
||||||
return describe(name, fn);
|
return describe(name, fn);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import PluginRunner from '../../../app/services/plugins/PluginRunner';
|
import PluginRunner from '../../../app/services/plugins/PluginRunner';
|
||||||
import PluginService, { PluginSettings } from '@joplin/lib/services/plugins/PluginService';
|
import PluginService, { PluginSettings, defaultPluginSetting } from '@joplin/lib/services/plugins/PluginService';
|
||||||
import { ContentScriptType } from '@joplin/lib/services/plugins/api/types';
|
import { ContentScriptType } from '@joplin/lib/services/plugins/api/types';
|
||||||
import MdToHtml from '@joplin/renderer/MdToHtml';
|
import MdToHtml from '@joplin/renderer/MdToHtml';
|
||||||
import shim from '@joplin/lib/shim';
|
import shim from '@joplin/lib/shim';
|
||||||
@@ -7,8 +7,9 @@ import Setting from '@joplin/lib/models/Setting';
|
|||||||
import * as fs from 'fs-extra';
|
import * as fs from 'fs-extra';
|
||||||
import Note from '@joplin/lib/models/Note';
|
import Note from '@joplin/lib/models/Note';
|
||||||
import Folder from '@joplin/lib/models/Folder';
|
import Folder from '@joplin/lib/models/Folder';
|
||||||
import { expectNotThrow, setupDatabaseAndSynchronizer, switchClient, expectThrow, createTempDir, supportDir } from '@joplin/lib/testing/test-utils';
|
import { expectNotThrow, setupDatabaseAndSynchronizer, switchClient, expectThrow, createTempDir, supportDir, mockMobilePlatform } from '@joplin/lib/testing/test-utils';
|
||||||
import { newPluginScript } from '../../testUtils';
|
import { newPluginScript } from '../../testUtils';
|
||||||
|
import { join } from 'path';
|
||||||
|
|
||||||
const testPluginDir = `${supportDir}/plugins`;
|
const testPluginDir = `${supportDir}/plugins`;
|
||||||
|
|
||||||
@@ -82,6 +83,7 @@ describe('services_PluginService', () => {
|
|||||||
|
|
||||||
const allFolders = await Folder.all();
|
const allFolders = await Folder.all();
|
||||||
expect(allFolders.length).toBe(2);
|
expect(allFolders.length).toBe(2);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
|
||||||
expect(allFolders.map((f: any) => f.title).sort().join(', ')).toBe('multi - simple1, multi - simple2');
|
expect(allFolders.map((f: any) => f.title).sort().join(', ')).toBe('multi - simple1, multi - simple2');
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -262,6 +264,69 @@ describe('services_PluginService', () => {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
{
|
||||||
|
manifestPlatforms: ['desktop'],
|
||||||
|
isDesktop: true,
|
||||||
|
appVersion: '3.0.0',
|
||||||
|
shouldRun: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
manifestPlatforms: ['desktop'],
|
||||||
|
isDesktop: false,
|
||||||
|
appVersion: '3.0.6',
|
||||||
|
shouldRun: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
manifestPlatforms: ['desktop', 'mobile'],
|
||||||
|
isDesktop: false,
|
||||||
|
appVersion: '3.0.6',
|
||||||
|
shouldRun: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Should default to desktop-only
|
||||||
|
manifestPlatforms: [],
|
||||||
|
isDesktop: false,
|
||||||
|
appVersion: '3.0.8',
|
||||||
|
shouldRun: false,
|
||||||
|
},
|
||||||
|
])('should enable and disable plugins depending on what platform(s) they support (case %#: %j)', async ({ manifestPlatforms, isDesktop, appVersion, shouldRun }) => {
|
||||||
|
const pluginScript = `
|
||||||
|
/* joplin-manifest:
|
||||||
|
{
|
||||||
|
"id": "org.joplinapp.plugins.PluginTest",
|
||||||
|
"manifest_version": 1,
|
||||||
|
"app_min_version": "1.0.0",
|
||||||
|
"platforms": ${JSON.stringify(manifestPlatforms)},
|
||||||
|
"name": "JS Bundle test",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
joplin.plugins.register({
|
||||||
|
onStart: async function() { },
|
||||||
|
});
|
||||||
|
`;
|
||||||
|
|
||||||
|
let resetPlatformMock = () => {};
|
||||||
|
if (!isDesktop) {
|
||||||
|
resetPlatformMock = mockMobilePlatform('android').reset;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const service = newPluginService(appVersion);
|
||||||
|
const plugin = await service.loadPluginFromJsBundle('', pluginScript);
|
||||||
|
|
||||||
|
if (shouldRun) {
|
||||||
|
await expect(service.runPlugin(plugin)).resolves.toBeUndefined();
|
||||||
|
} else {
|
||||||
|
await expect(service.runPlugin(plugin)).rejects.toThrow(/disabled/);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
resetPlatformMock();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it('should install a plugin', (async () => {
|
it('should install a plugin', (async () => {
|
||||||
const service = newPluginService();
|
const service = newPluginService();
|
||||||
const pluginPath = `${testPluginDir}/jpl_test/org.joplinapp.FirstJplPlugin.jpl`;
|
const pluginPath = `${testPluginDir}/jpl_test/org.joplinapp.FirstJplPlugin.jpl`;
|
||||||
@@ -333,4 +398,78 @@ describe('services_PluginService', () => {
|
|||||||
expect(newPluginSettings[pluginId1]).toBe(undefined);
|
expect(newPluginSettings[pluginId1]).toBe(undefined);
|
||||||
expect(newPluginSettings[pluginId2]).toBe(undefined);
|
expect(newPluginSettings[pluginId2]).toBe(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('re-running loadAndRunPlugins should reload plugins that have changed but keep unchanged plugins running', async () => {
|
||||||
|
const testDir = await createTempDir();
|
||||||
|
try {
|
||||||
|
const loadCounterNote = await Note.save({ title: 'Log of plugin loads' });
|
||||||
|
const readLoadCounterNote = async () => {
|
||||||
|
return (await Note.load(loadCounterNote.id)).body;
|
||||||
|
};
|
||||||
|
expect(await readLoadCounterNote()).toBe('');
|
||||||
|
|
||||||
|
const writePluginScript = async (version: string, id: string) => {
|
||||||
|
const script = `
|
||||||
|
/* joplin-manifest:
|
||||||
|
{
|
||||||
|
"id": ${JSON.stringify(id)},
|
||||||
|
"manifest_version": 1,
|
||||||
|
"app_min_version": "1.0.0",
|
||||||
|
"name": "JS Bundle test",
|
||||||
|
"version": ${JSON.stringify(version)}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
joplin.plugins.register({
|
||||||
|
onStart: async function() {
|
||||||
|
const noteId = ${JSON.stringify(loadCounterNote.id)};
|
||||||
|
const pluginId = ${JSON.stringify(id)};
|
||||||
|
const note = await joplin.data.get(['notes', noteId], { fields: ['body'] });
|
||||||
|
const newBody = note.body + '\\n' + pluginId;
|
||||||
|
await joplin.data.put(['notes', noteId], null, { body: newBody.trim() });
|
||||||
|
},
|
||||||
|
});
|
||||||
|
`;
|
||||||
|
await fs.writeFile(join(testDir, `${id}.bundle.js`), script);
|
||||||
|
};
|
||||||
|
|
||||||
|
const service = newPluginService();
|
||||||
|
const pluginId1 = 'org.joplinapp.testPlugin1';
|
||||||
|
await writePluginScript('0.0.1', pluginId1);
|
||||||
|
const pluginId2 = 'org.joplinapp.testPlugin2';
|
||||||
|
await writePluginScript('0.0.1', pluginId2);
|
||||||
|
|
||||||
|
let pluginSettings: PluginSettings = {
|
||||||
|
[pluginId1]: defaultPluginSetting(),
|
||||||
|
[pluginId2]: defaultPluginSetting(),
|
||||||
|
};
|
||||||
|
await service.loadAndRunPlugins(testDir, pluginSettings);
|
||||||
|
|
||||||
|
// Plugins should initially load once
|
||||||
|
expect(service.pluginIds).toHaveLength(2);
|
||||||
|
expect(service.pluginById(pluginId1).running).toBe(true);
|
||||||
|
expect(service.pluginById(pluginId2).running).toBe(true);
|
||||||
|
expect(await readLoadCounterNote()).toBe(`${pluginId1}\n${pluginId2}`);
|
||||||
|
|
||||||
|
// Updating just plugin 1 reload just plugin 1.
|
||||||
|
await writePluginScript('0.0.2', pluginId1);
|
||||||
|
await service.loadAndRunPlugins(testDir, pluginSettings);
|
||||||
|
|
||||||
|
expect(service.pluginById(pluginId1).running).toBe(true);
|
||||||
|
expect(service.pluginById(pluginId2).running).toBe(true);
|
||||||
|
expect(await readLoadCounterNote()).toBe(`${pluginId1}\n${pluginId2}\n${pluginId1}`);
|
||||||
|
|
||||||
|
// Disabling plugin 1 should not reload plugin 2
|
||||||
|
pluginSettings = { ...pluginSettings, [pluginId1]: { ...defaultPluginSetting(), enabled: false } };
|
||||||
|
await service.loadAndRunPlugins(testDir, pluginSettings);
|
||||||
|
|
||||||
|
expect(service.pluginById(pluginId1).running).toBe(false);
|
||||||
|
expect(service.pluginById(pluginId2).running).toBe(true);
|
||||||
|
expect(await readLoadCounterNote()).toBe(`${pluginId1}\n${pluginId2}\n${pluginId1}`);
|
||||||
|
|
||||||
|
await service.destroy();
|
||||||
|
} finally {
|
||||||
|
await fs.remove(testDir);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,9 +1,14 @@
|
|||||||
import RepositoryApi from '@joplin/lib/services/plugins/RepositoryApi';
|
import { AppType } from '@joplin/lib/models/Setting';
|
||||||
|
import RepositoryApi, { AppInfo, InstallMode } from '@joplin/lib/services/plugins/RepositoryApi';
|
||||||
import shim from '@joplin/lib/shim';
|
import shim from '@joplin/lib/shim';
|
||||||
import { setupDatabaseAndSynchronizer, switchClient, supportDir, createTempDir } from '@joplin/lib/testing/test-utils';
|
import { setupDatabaseAndSynchronizer, switchClient, supportDir, createTempDir } from '@joplin/lib/testing/test-utils';
|
||||||
|
import { remove } from 'fs-extra';
|
||||||
|
|
||||||
async function newRepoApi(): Promise<RepositoryApi> {
|
let tempDirs: string[] = [];
|
||||||
const repo = new RepositoryApi(`${supportDir}/pluginRepo`, await createTempDir());
|
async function newRepoApi(appInfo: AppInfo = { type: AppType.Desktop, version: '3.0.0' }): Promise<RepositoryApi> {
|
||||||
|
const tempDir = await createTempDir();
|
||||||
|
tempDirs.push(tempDir);
|
||||||
|
const repo = new RepositoryApi(`${supportDir}/pluginRepo`, tempDir, appInfo, InstallMode.Default);
|
||||||
await repo.initialize();
|
await repo.initialize();
|
||||||
return repo;
|
return repo;
|
||||||
}
|
}
|
||||||
@@ -14,6 +19,12 @@ describe('services_plugins_RepositoryApi', () => {
|
|||||||
await setupDatabaseAndSynchronizer(1);
|
await setupDatabaseAndSynchronizer(1);
|
||||||
await switchClient(1);
|
await switchClient(1);
|
||||||
});
|
});
|
||||||
|
afterEach(async () => {
|
||||||
|
for (const tempDir of tempDirs) {
|
||||||
|
await remove(tempDir);
|
||||||
|
}
|
||||||
|
tempDirs = [];
|
||||||
|
});
|
||||||
|
|
||||||
it('should get the manifests', (async () => {
|
it('should get the manifests', (async () => {
|
||||||
const api = await newRepoApi();
|
const api = await newRepoApi();
|
||||||
@@ -27,9 +38,10 @@ describe('services_plugins_RepositoryApi', () => {
|
|||||||
|
|
||||||
{
|
{
|
||||||
const results = await api.search('to');
|
const results = await api.search('to');
|
||||||
expect(results.length).toBe(2);
|
expect(results.length).toBe(3);
|
||||||
expect(!!results.find(m => m.id === 'joplin.plugin.ambrt.backlinksToNote')).toBe(true);
|
expect(!!results.find(m => m.id === 'joplin.plugin.ambrt.backlinksToNote')).toBe(true);
|
||||||
expect(!!results.find(m => m.id === 'org.joplinapp.plugins.ToggleSidebars')).toBe(true);
|
expect(!!results.find(m => m.id === 'org.joplinapp.plugins.ToggleSidebars')).toBe(true);
|
||||||
|
expect(!!results.find(m => m.id === 'org.joplinapp.plugins.AbcSheetMusic')).toBe(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -45,13 +57,14 @@ describe('services_plugins_RepositoryApi', () => {
|
|||||||
expect(await shim.fsDriver().exists(pluginPath)).toBe(true);
|
expect(await shim.fsDriver().exists(pluginPath)).toBe(true);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should tell if a plugin can be updated', (async () => {
|
it.each([
|
||||||
const api = await newRepoApi();
|
{ id: 'org.joplinapp.plugins.ToggleSidebars', installedVersion: '1.0.0', appVersion: '3.0.0', shouldBeUpdatable: true },
|
||||||
|
{ id: 'org.joplinapp.plugins.ToggleSidebars', installedVersion: '1.0.0', appVersion: '1.0.0', shouldBeUpdatable: false },
|
||||||
expect(await api.pluginCanBeUpdated('org.joplinapp.plugins.ToggleSidebars', '1.0.0', '3.0.0')).toBe(true);
|
{ id: 'org.joplinapp.plugins.ToggleSidebars', installedVersion: '1.0.2', appVersion: '3.0.0', shouldBeUpdatable: false },
|
||||||
expect(await api.pluginCanBeUpdated('org.joplinapp.plugins.ToggleSidebars', '1.0.0', '1.0.0')).toBe(false);
|
{ id: 'does.not.exist', installedVersion: '1.0.0', appVersion: '3.0.0', shouldBeUpdatable: false },
|
||||||
expect(await api.pluginCanBeUpdated('org.joplinapp.plugins.ToggleSidebars', '1.0.2', '3.0.0')).toBe(false);
|
])('should tell if a plugin can be updated (case %#)', (async ({ id, installedVersion, appVersion, shouldBeUpdatable }) => {
|
||||||
expect(await api.pluginCanBeUpdated('does.not.exist', '1.0.0', '3.0.0')).toBe(false);
|
const api = await newRepoApi({ version: appVersion, type: AppType.Desktop });
|
||||||
|
expect(await api.pluginCanBeUpdated(id, installedVersion)).toBe(shouldBeUpdatable);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@@ -2,6 +2,7 @@ import Setting from '@joplin/lib/models/Setting';
|
|||||||
import { waitForFolderCount, setupDatabaseAndSynchronizer, switchClient, afterEachCleanUp } from '@joplin/lib/testing/test-utils';
|
import { waitForFolderCount, setupDatabaseAndSynchronizer, switchClient, afterEachCleanUp } from '@joplin/lib/testing/test-utils';
|
||||||
import Folder from '@joplin/lib/models/Folder';
|
import Folder from '@joplin/lib/models/Folder';
|
||||||
import { newPluginScript, newPluginService } from '../../../testUtils';
|
import { newPluginScript, newPluginService } from '../../../testUtils';
|
||||||
|
import eventManager, { EventName } from '@joplin/lib/eventManager';
|
||||||
|
|
||||||
describe('JoplinSettings', () => {
|
describe('JoplinSettings', () => {
|
||||||
|
|
||||||
@@ -66,6 +67,38 @@ describe('JoplinSettings', () => {
|
|||||||
await service.destroy();
|
await service.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should de-register settings change listeners when a plugin is unloaded', async () => {
|
||||||
|
const service = newPluginService();
|
||||||
|
|
||||||
|
const pluginScript = newPluginScript(`
|
||||||
|
joplin.plugins.register({
|
||||||
|
onStart: async function() {
|
||||||
|
await joplin.settings.registerSettings({
|
||||||
|
'test-setting': {
|
||||||
|
value: 1234,
|
||||||
|
type: 1,
|
||||||
|
public: false,
|
||||||
|
label: 'Test',
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Register 8 listeners to improve test reliability in the case
|
||||||
|
// where listeners are added/removed from other sources.
|
||||||
|
for (let i = 0; i < 8; i++) {
|
||||||
|
await joplin.settings.onChange((event) => { });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
`);
|
||||||
|
|
||||||
|
const plugin = await service.loadPluginFromJsBundle('', pluginScript);
|
||||||
|
await service.runPlugin(plugin);
|
||||||
|
|
||||||
|
const listenerCounter = eventManager.listenerCounter_(EventName.SettingsChange);
|
||||||
|
plugin.onUnload();
|
||||||
|
expect(listenerCounter.getCountRemoved()).toBeGreaterThanOrEqual(8);
|
||||||
|
});
|
||||||
|
|
||||||
test('should allow registering multiple settings', async () => {
|
test('should allow registering multiple settings', async () => {
|
||||||
const service = newPluginService();
|
const service = newPluginService();
|
||||||
|
|
||||||
|