Compare commits

...

136 commits

Author SHA1 Message Date
Daniel
914c765938
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-24 19:50:09 +08:00
Vanessa
9850b2079c 🚨 2024-12-24 19:49:53 +08:00
Vanessa
47f79a6289 Merge remote-tracking branch 'origin/dev' into dev 2024-12-24 19:49:34 +08:00
Vanessa
190fa7f8c4 🎨 https://github.com/siyuan-note/siyuan/issues/10049 2024-12-24 19:49:21 +08:00
Daniel
d34caba3bb
🎨 Improve net img convert to local https://github.com/siyuan-note/siyuan/issues/13600 2024-12-24 16:33:24 +08:00
Daniel
78d5f54117
📝 Improve the user guide 2024-12-24 16:29:36 +08:00
Daniel
b12906321f
🎨 Improve notebook sorting https://github.com/siyuan-note/siyuan/issues/13598 2024-12-24 16:25:48 +08:00
Vanessa
5b3fa67332 🐛 https://github.com/siyuan-note/siyuan/issues/10049 2024-12-24 16:19:55 +08:00
Daniel
2052cff7b6
🔖 Release v3.1.17 2024-12-24 10:46:51 +08:00
Vanessa
49206adc9e Merge remote-tracking branch 'origin/dev' into dev 2024-12-24 10:45:22 +08:00
Vanessa
0a1ad2ec34 🚨 2024-12-24 10:45:10 +08:00
Daniel
81b8e8bf26
Reduce startup time when sync is enabled https://github.com/siyuan-note/siyuan/issues/13589 2024-12-24 10:39:30 +08:00
Daniel
e4be1450f4
♻️ Upgrade to Electron v32.2.7 https://github.com/siyuan-note/siyuan/issues/13566 2024-12-24 10:12:53 +08:00
Daniel
de99fb5dfd
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-24 09:35:05 +08:00
Vanessa
11b02fdfed 🎨 https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 21:40:43 +08:00
Daniel
bd91c04eeb
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 21:04:43 +08:00
Vanessa
78745006a7 Merge remote-tracking branch 'origin/dev' into dev 2024-12-23 20:55:25 +08:00
Vanessa
caae864c8a 🎨 https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 20:55:11 +08:00
Daniel
ef38ffb120
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 20:55:00 +08:00
Daniel
3d14c79d31
📝 Update changelogs 2024-12-23 20:27:37 +08:00
Daniel
b52b562b30
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 18:08:46 +08:00
Daniel
04255d86ed
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 17:31:43 +08:00
Daniel
a133e7d771
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 17:30:35 +08:00
Daniel
077a46ac70
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 17:27:27 +08:00
Daniel
6f443be578
🎨 Do not perform check index on mobile https://ld246.com/article/1734939896061 https://github.com/siyuan-note/siyuan/issues/10761 2024-12-23 17:20:11 +08:00
Vanessa
64c2b6a2a2 🎨 https://github.com/siyuan-note/siyuan/issues/13535 2024-12-23 16:42:11 +08:00
Vanessa
0a41dc392c 🎨 https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 16:27:53 +08:00
Vanessa
4078d33e34 Merge remote-tracking branch 'origin/dev' into dev 2024-12-23 16:22:11 +08:00
Vanessa
978f14147e 🎨 https://github.com/siyuan-note/siyuan/issues/10049 2024-12-23 16:21:59 +08:00
Daniel
25f934ecb4
🎨 Improve exporting HTML/Word 2024-12-23 16:14:16 +08:00
Daniel
b195629d1a
Reduce startup time when sync is enabled https://github.com/siyuan-note/siyuan/issues/13589 2024-12-23 11:20:31 +08:00
Daniel
03c2611c0f
🎨 Improve boot sync 2024-12-23 10:09:36 +08:00
Vanessa
98180f2c5e 🎨 https://github.com/siyuan-note/siyuan/issues/13571 2024-12-23 00:05:32 +08:00
Vanessa
d2b1769957 🎨 https://github.com/siyuan-note/siyuan/issues/13259 2024-12-23 00:00:08 +08:00
Vanessa
1148a4eca5 Merge remote-tracking branch 'origin/dev' into dev 2024-12-22 23:31:00 +08:00
Vanessa
75b4b357e7 🎨 https://github.com/siyuan-note/siyuan/issues/13579 2024-12-22 23:30:31 +08:00
Daniel
811636d051
🎨 Improve exporting Word 2024-12-21 17:52:31 +08:00
Daniel
b5bfbbe14a
🎨 Improve exporting HTML/Word 2024-12-21 17:28:50 +08:00
Daniel
776b4fd6ee
🎨 Database-bound block primary key supports setting static anchor text https://github.com/siyuan-note/siyuan/issues/10049 2024-12-21 12:00:20 +08:00
Vanessa
be6f3a237d 🎨 https://github.com/siyuan-note/siyuan/issues/13410 2024-12-21 11:52:45 +08:00
Vanessa
a6f98c6d40 Merge remote-tracking branch 'origin/dev' into dev 2024-12-21 10:49:18 +08:00
Vanessa
a129c25c2e 🎨 https://github.com/siyuan-note/siyuan/issues/13555 2024-12-21 10:49:07 +08:00
Daniel
e7091cb54f
♻️ Upgrade to Electron v32.2.7 https://github.com/siyuan-note/siyuan/issues/13566 2024-12-21 10:27:14 +08:00
Daniel
9b17b6ea4f
🐛 Cannot export Data on mobile https://github.com/siyuan-note/siyuan/issues/13565 2024-12-21 10:12:07 +08:00
Vanessa
b11417d725 🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-21 09:49:04 +08:00
Vanessa
d808f63bad 🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-21 09:36:48 +08:00
Vanessa
b3301ff162 Merge remote-tracking branch 'origin/dev' into dev 2024-12-21 09:30:33 +08:00
Vanessa
16a0b85803 🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-21 09:30:21 +08:00
Daniel
767bba6a62
🎨 Improve text tip 2024-12-20 23:09:18 +08:00
Vanessa
bb0ddc4147 🎨 https://github.com/siyuan-note/siyuan/issues/13556 2024-12-20 18:57:49 +08:00
Vanessa
e200bc61d9 Merge remote-tracking branch 'origin/dev' into dev 2024-12-20 12:24:02 +08:00
Vanessa
59360f363e 🐛 https://ld246.com/article/1734665662652 2024-12-20 12:23:49 +08:00
Daniel
b7125d7c8d
⬆️ Upgrade to AWS SDK for Go v2 https://github.com/siyuan-note/siyuan/issues/13557 2024-12-20 12:19:17 +08:00
Vanessa
20b4579170 💄 计算后再显示 2024-12-20 10:56:18 +08:00
Vanessa
39af34e53d 🎨 2024-12-20 10:52:56 +08:00
Vanessa
dd223af57e 🎨 https://github.com/siyuan-note/siyuan/issues/13536 2024-12-20 10:41:33 +08:00
Vanessa
2aa66a5d29 Merge remote-tracking branch 'origin/dev' into dev 2024-12-20 10:36:31 +08:00
Vanessa
84083865b7 🎨 https://github.com/siyuan-note/siyuan/pull/13540 2024-12-20 10:36:20 +08:00
Daniel
4d7bd111e1
🎨 Improve search 2024-12-20 10:29:48 +08:00
Vanessa
f2971a273d 🎨 https://github.com/siyuan-note/siyuan/pull/13506 2024-12-20 10:19:53 +08:00
Jeffrey Chen
4620ce5c37
style:移除 .dock__item--activefocus 的 !important 声明 (#13506)
fix https://github.com/siyuan-note/siyuan/issues/13464
2024-12-20 10:15:09 +08:00
Vanessa
350b1bf51c 🎨 https://github.com/siyuan-note/siyuan/pull/13547 2024-12-20 10:05:31 +08:00
Alexander Pape
26f296a87a
extend Plugin API with renderAVAttribute function (#13547) 2024-12-20 09:51:05 +08:00
Vanessa
2f4c7ffbb5 Merge remote-tracking branch 'origin/dev' into dev 2024-12-20 09:39:32 +08:00
Vanessa
eb1a84bedc 🎨 https://github.com/siyuan-note/siyuan/issues/13536 2024-12-20 09:39:21 +08:00
Daniel
77fa89010f
🎨 Improve exporting/importing .sy.zip https://github.com/siyuan-note/siyuan/issues/13531 2024-12-19 23:51:39 +08:00
Vanessa
a3fec2c9e8 🎨 https://github.com/siyuan-note/siyuan/issues/13554 2024-12-19 23:38:41 +08:00
Vanessa
405cec4163 🎨 https://github.com/siyuan-note/siyuan/issues/13550 2024-12-19 23:21:03 +08:00
Vanessa
0eb7c5c896 Merge remote-tracking branch 'origin/dev' into dev 2024-12-19 23:10:44 +08:00
Vanessa
76b6fb8f6b 🎨 https://github.com/siyuan-note/siyuan/issues/13526 2024-12-19 23:10:20 +08:00
Daniel
0cc98a5fe0
🎨 Upgrade to database spec 1 https://github.com/siyuan-note/siyuan/issues/13530 2024-12-19 23:08:44 +08:00
Daniel
dbb5bcccb1
🎨 Improve Markdown code block parsing https://github.com/siyuan-note/siyuan/issues/13552 2024-12-19 22:20:13 +08:00
Daniel
b3074fceea
🎨 Improve Markdown code block parsing https://github.com/siyuan-note/siyuan/issues/13552 2024-12-19 22:12:50 +08:00
Daniel
93a3915f0c
🎨 Improve Markdown code block parsing https://github.com/siyuan-note/siyuan/issues/13552 2024-12-19 22:09:42 +08:00
Daniel
ea98ecb3b6
🎨 Improve text https://github.com/siyuan-note/siyuan/issues/13542 2024-12-19 21:14:31 +08:00
Daniel
22ab71b72f
🐛 Document cannot be exported as Markdown https://github.com/siyuan-note/siyuan/issues/13545 2024-12-19 18:44:43 +08:00
Vanessa
1882ac83ef Merge remote-tracking branch 'origin/dev' into dev 2024-12-19 18:27:17 +08:00
Vanessa
575a151b89 🎨 https://github.com/siyuan-note/siyuan/issues/13526 2024-12-19 18:27:05 +08:00
Daniel
81cb18e14d
🐛 HTML tag search escaping issue https://github.com/siyuan-note/siyuan/issues/13354 2024-12-19 11:04:48 +08:00
Daniel
86adbed3f0
🐛 Results not highlighted when searching using query syntax https://github.com/siyuan-note/siyuan/issues/13532 2024-12-19 11:04:47 +08:00
Vanessa
fd98963038 🎨 https://github.com/siyuan-note/siyuan/issues/13448 2024-12-19 10:45:27 +08:00
Vanessa
e73f78d57e 🎨 https://github.com/siyuan-note/siyuan/issues/13213 2024-12-19 10:19:00 +08:00
Vanessa
7d34a87da4 🎨 tag 颜色 2024-12-18 21:15:48 +08:00
Daniel
ff9cbb0a10
🔖 Release v3.1.16 2024-12-18 21:01:27 +08:00
Daniel
0720e71218
📝 Update changelogs 2024-12-18 20:59:23 +08:00
Vanessa
812a5e392a 🚨 2024-12-18 20:58:31 +08:00
Vanessa
1be47953b8 Merge remote-tracking branch 'origin/dev' into dev 2024-12-18 20:14:58 +08:00
Vanessa
20c7535407 🎨 https://github.com/siyuan-note/siyuan/issues/12209 2024-12-18 20:14:44 +08:00
Daniel
b6bd34ce32
🎨 Improve tag escaping 2024-12-18 18:21:44 +08:00
Vanessa
1d4380bb75 🎨 https://github.com/siyuan-note/siyuan/issues/13524 2024-12-18 18:03:08 +08:00
Vanessa
6cfa8e6cbe Merge remote-tracking branch 'origin/dev' into dev 2024-12-18 17:26:42 +08:00
Vanessa
f7396ac84b 🎨 https://github.com/siyuan-note/siyuan/issues/13523 2024-12-18 17:26:30 +08:00
Daniel
9bbbb2ca11
🔥 Remove Sentry reporting diagnostic data https://github.com/siyuan-note/siyuan/issues/13522 2024-12-18 17:21:12 +08:00
Daniel
b81de5d2da
🎨 Improve exporting data https://github.com/siyuan-note/siyuan/issues/13500 2024-12-18 17:17:24 +08:00
Daniel
5fb2b78911
🔥 Remove Sentry reporting diagnostic data https://github.com/siyuan-note/siyuan/issues/13522 2024-12-18 17:10:23 +08:00
Daniel
d83d5ff74f
📝 Update changelogs 2024-12-18 17:09:45 +08:00
Vanessa
c835205ca5 Merge remote-tracking branch 'origin/dev' into dev 2024-12-18 16:53:41 +08:00
Vanessa
5c60586b58 🎨 https://github.com/siyuan-note/siyuan/issues/13522 2024-12-18 16:53:28 +08:00
V
18ae25fa75
🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-18 12:05:55 +08:00
Vanessa
25a0e85c98 🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-18 11:04:32 +08:00
Vanessa
d5dfa240f5 🎨 search 2024-12-18 01:44:59 +08:00
Vanessa
d672d408b3 Merge remote-tracking branch 'origin/dev' into dev 2024-12-18 01:36:14 +08:00
Vanessa
b8fda7d67f 🎨 https://github.com/siyuan-note/siyuan/issues/12335 2024-12-18 01:36:00 +08:00
Daniel
6683b947b6
🎨 Improve exporting data https://github.com/siyuan-note/siyuan/issues/13500 2024-12-18 01:19:08 +08:00
Vanessa
f4f9610a90 Merge remote-tracking branch 'origin/dev' into dev 2024-12-18 01:09:28 +08:00
Vanessa
f0a7ffd1dc 🎨 https://github.com/siyuan-note/siyuan/issues/13440 2024-12-18 01:08:58 +08:00
Daniel
382f7dd235
🎨 Improve exporting data https://github.com/siyuan-note/siyuan/issues/13500 2024-12-18 01:06:58 +08:00
Daniel
8692455b05
🎨 Clean code 2024-12-17 23:41:54 +08:00
Daniel
500ac7f039
🎨 Improve exporting data https://github.com/siyuan-note/siyuan/issues/13500 2024-12-17 22:48:16 +08:00
Daniel
e968f9da68
🎨 Clean code 2024-12-17 22:13:37 +08:00
Daniel
52b3a1e8fa
🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-17 21:31:47 +08:00
V
c3812c11fe
🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-17 20:26:57 +08:00
Daniel
2cd8fe1379
🎨 Support setting automatic sync interval https://github.com/siyuan-note/siyuan/issues/13448 2024-12-17 20:22:36 +08:00
Yingyi / 颖逸
bd65fa47af
📝 Add Github Trending badge (#13514) 2024-12-17 20:17:35 +08:00
Vanessa
053e03ed53 🎨 https://github.com/siyuan-note/siyuan/issues/13497 2024-12-17 20:03:37 +08:00
Daniel
b3326e9757
⬆️ Upgrade kernel deps 2024-12-17 17:54:13 +08:00
Daniel
4b7a6f5ef7
🐛 Fix code block emoji parsing https://github.com/siyuan-note/siyuan/issues/13502 2024-12-17 10:55:05 +08:00
Vanessa
4b03a5ae86 Merge remote-tracking branch 'origin/dev' into dev 2024-12-17 10:40:38 +08:00
Vanessa
95f24e3eca 🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-17 10:40:25 +08:00
Daniel
8a87999f25
📝 Update changelogs 2024-12-17 10:10:22 +08:00
Daniel
bdd99d8eb0
⬆️ Improve data synchronization stability https://github.com/siyuan-note/siyuan/issues/13503 2024-12-17 10:07:07 +08:00
Vanessa
e1829a8254 🎨 https://github.com/siyuan-note/siyuan/issues/13378 2024-12-17 00:33:31 +08:00
Vanessa
3ea7daa308 Merge remote-tracking branch 'origin/dev' into dev 2024-12-17 00:10:15 +08:00
Vanessa
78b32b8d88 🎨 https://github.com/siyuan-note/siyuan/pull/13241 2024-12-17 00:09:52 +08:00
Daniel
64968335dd
🎨 Improve loading page 2024-12-16 23:38:57 +08:00
Daniel
7ec0b4f65e
📝 Update changelogs 2024-12-16 23:31:21 +08:00
Daniel
be96ea7895
Improve serving assets performance https://github.com/siyuan-note/siyuan/issues/13501 2024-12-16 23:30:26 +08:00
Daniel
4ab2adff4f
📝 Update changelogs 2024-12-16 23:14:55 +08:00
Daniel
560af8e542
🎨 Improve exporting data https://github.com/siyuan-note/siyuan/issues/13500 2024-12-16 23:06:01 +08:00
Daniel
7395554ebe
🎨 Improve exporting markdown https://github.com/siyuan-note/siyuan/issues/13500 2024-12-16 22:50:55 +08:00
Daniel
8d1aff12e1
🎨 Improve link dest https://github.com/siyuan-note/siyuan/issues/13497 2024-12-16 22:10:31 +08:00
Daniel
f3853ee842
🎨 Improve link dest https://github.com/siyuan-note/siyuan/issues/13497 2024-12-16 22:04:43 +08:00
Vanessa
3bd2debf4c 🎨 alt+点击两次报错 2024-12-16 17:45:49 +08:00
Vanessa
b439cd66f7 Merge remote-tracking branch 'origin/dev' into dev 2024-12-16 17:35:43 +08:00
Vanessa
e5ebab8894 🎨 右键弹出文档树菜单时关闭浮窗 2024-12-16 17:35:31 +08:00
Daniel
1cb22968a2
📝 Update the user guide 2024-12-16 17:19:38 +08:00
132 changed files with 2035 additions and 1506 deletions

View file

@ -14,10 +14,10 @@ Install pnpm: `npm install -g pnpm@9.12.1`
Set the Electron mirror environment variable and install Electron:
* macOS/Linux: `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v32.2.5 -D`
* macOS/Linux: `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v32.2.7 -D`
* Windows:
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
* `pnpm install electron@v32.2.5 -D`
* `pnpm install electron@v32.2.7 -D`
NPM mirror:
@ -28,7 +28,7 @@ NPM mirror:
On the desktop, go to the app folder to run:
* `pnpm install electron@v32.2.5 -D`
* `pnpm install electron@v32.2.7 -D`
* `pnpm run dev`
* `pnpm run start`

View file

@ -16,11 +16,11 @@
* macOS/Linux:
```
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v32.2.5 -D
ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@v32.2.7 -D
```
* Windows:
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
* `pnpm install electron@v32.2.5 -D`
* `pnpm install electron@v32.2.7 -D`
NPM 镜像:
@ -30,7 +30,7 @@ NPM 镜像:
桌面端进入 app 文件夹运行:
* `pnpm install electron@v32.2.5 -D`
* `pnpm install electron@v32.2.7 -D`
* `pnpm run dev`
* `pnpm run start`

View file

@ -21,6 +21,8 @@
<a title="Twitter" target="_blank" href="https://twitter.com/b3logos"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/b3logos?label=Follow&style=social"></a>
<a title="Discord" target="_blank" href="https://discord.gg/dmMbCqVX7G"><img alt="Chat on Discord" src="https://img.shields.io/discord/808152298789666826?label=Discord&logo=Discord&style=social"></a>
<br><br>
<a href="https://trendshift.io/repositories/3949" target="_blank"><img src="https://trendshift.io/api/badge/repositories/3949" alt="siyuan-note%2Fsiyuan | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<br><br>
<a href="https://www.producthunt.com/products/siyuan/reviews?utm_source=badge-product_rating&utm_medium=badge&utm_souce=badge-siyuan" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/product_rating.svg?product_id=534576&theme=light" alt="SiYuan - A&#0032;privacy&#0045;first&#0032;personal&#0032;knowledge&#0032;management&#0032;software | Product Hunt" style="width: 242px; height: 108px;" width="242" height="108" /></a>
</p>

View file

@ -21,6 +21,8 @@
<a title="Twitter" target="_blank" href="https://twitter.com/b3logos"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/b3logos?label=Follow&style=social"></a>
<a title="Discord" target="_blank" href="https://discord.gg/dmMbCqVX7G"><img alt="Chat on Discord" src="https://img.shields.io/discord/808152298789666826?label=Discord&logo=Discord&style=social"></a>
<br><br>
<a href="https://trendshift.io/repositories/3949" target="_blank"><img src="https://trendshift.io/api/badge/repositories/3949" alt="siyuan-note%2Fsiyuan | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<br><br>
<a href="https://www.producthunt.com/products/siyuan/reviews?utm_source=badge-product_rating&utm_medium=badge&utm_souce=badge-siyuan" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/product_rating.svg?product_id=534576&theme=light" alt="SiYuan - A&#0032;privacy&#0045;first&#0032;personal&#0032;knowledge&#0032;management&#0032;software | Product Hunt" style="width: 242px; height: 108px;" width="242" height="108" /></a>
</p>

View file

@ -21,6 +21,8 @@
<a title="Twitter" target="_blank" href="https://twitter.com/b3logos"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/b3logos?label=Follow&style=social"></a>
<a title="Discord" target="_blank" href="https://discord.gg/dmMbCqVX7G"><img alt="Chat on Discord" src="https://img.shields.io/discord/808152298789666826?label=Discord&logo=Discord&style=social"></a>
<br><br>
<a href="https://trendshift.io/repositories/3949" target="_blank"><img src="https://trendshift.io/api/badge/repositories/3949" alt="siyuan-note%2Fsiyuan | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<br><br>
<a href="https://www.producthunt.com/products/siyuan/reviews?utm_source=badge-product_rating&utm_medium=badge&utm_souce=badge-siyuan" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/product_rating.svg?product_id=534576&theme=light" alt="SiYuan - A&#0032;privacy&#0045;first&#0032;personal&#0032;knowledge&#0032;management&#0032;software | Product Hunt" style="width: 242px; height: 108px;" width="242" height="108" /></a>
</p>

View file

@ -3155,20 +3155,6 @@
"description_zh_cn": "西装革履的人",
"keywords": "business,person,suit,スレンダーマン,スーツ,ビジネスマン,男,男性,都市伝説,商务,业务,正装,西装革履"
},
{
"unicode": "1f574-fe0f-200d-2642-fe0f",
"description": "Man in Suit Levitating",
"description_ja_jp": "浮いてるスーツの男性",
"description_zh_cn": "西装革履的男人",
"keywords": "business,suit,man,male,men,スレンダーマン,スーツ,ビジネスマン,都市伝説,商务,正装,西装革履,业务,西装,男,男性,男子"
},
{
"unicode": "1f574-fe0f-200d-2640-fe0f",
"description": "Woman in Suit Levitating",
"description_ja_jp": "浮いてるスーツの女性",
"description_zh_cn": "西装革履的女人",
"keywords": "business,suit,woman,female,women,スレンダーマン,スーツ,ビジネスマン,都市伝説,商务,正装,西装革履,业务,西装,女,女性,妇女"
},
{
"unicode": "1f46f",
"description": "People with Bunny Ears",
@ -6953,13 +6939,6 @@
"description_zh_cn": "神社",
"keywords": "religion,shinto,shrine,宗教,建物,建築物,神社,神道,日本,神道教"
},
{
"unicode": "e50a",
"description": "Shibuya",
"description_ja_jp": "渋谷",
"description_zh_cn": "涩谷",
"keywords": "109,shibuya,建物,建築物,渋谷区,日本,涩谷区"
},
{
"unicode": "1f54b",
"description": "Kaaba",

View file

@ -1179,8 +1179,6 @@
"about6": "بعد التكوين, سيتم استخدامه ككلمة مرور مصادقة الوصول, اتركه فارغًا لإغلاق المصادقة",
"about7": "اتبع شاشة قفل النظام",
"about8": "بعد التمكين، سيتم قفل التطبيق تلقائياً عند قفل شاشة النظام",
"about9": "رفع رسائل الخطأ والبيانات التشخيصية تلقائياً",
"about10": "‫بعد التمكين، سيقوم تلقائيا برفع معلومات الخطأ والبيانات التشخيصية من خلال <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK، الذي لا ينطوي على بيانات الخصوصية الشخصية بحيث يمكن للمطورين إصلاح الأخطاء. سيتم إغلاق التطبيق تلقائياً بعد التعديل، الرجاء إعادة التشغيل يدوياً‬",
"about11": "خادم الشبكة",
"about12": "بعد التمكين، سيتم السماح للأجهزة الأخرى في نفس الشبكة المحلية بالوصول. سيتم إغلاق التطبيق تلقائياً بعد التعديل، يرجى إعادة التشغيل يدوياً",
"about13": "‫رمز API",
@ -1455,8 +1453,8 @@
"124": "الرجاء تمكين المزامنة السحابية في [الإعدادات - تمكين المزامنة السحابية]",
"125": "‫فشل المزامنة التلقائية مرات كثيرة جداً، الرجاء محاولة تشغيل المزامنة يدوياً، إذا كانت المشكلة لا تزال موجودة، يرجى الإبلاغ عنها عبر <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "لا يمكن أن تكون الإشارة المرجعية فارغة",
"127": "‫هناك [%d] أيام متبقية قبل انتهاء الاشتراك، وبعد ذلك سيتم حذف بيانات السحابة بالكامل. يرجى زيارة <a target='_blank' href='${url}'>هنا</a> للتجديد‬",
"128": "‫انتهت صلاحية الاشتراك. بعد انتهاء الصلاحية، سيتم حذف بيانات السحابة بالكامل. لم يعد التذكير يظهر بعد يومين من انتهاء الاشتراك. يرجى زيارة <a target='_blank' href='${url}'>هنا</a> للتجديد‬",
"127": "تبقى [%d] يومًا حتى انتهاء الاشتراك، وبعد ذلك سيتم حذف بيانات التخزين السحابي الرسمية بالكامل. لتجديد الاشتراك، قم بزيارة <a target='_blank' href='${url}'>هنا</a>",
"128": "انتهت صلاحية الاشتراك، سيتم حذف بيانات التخزين السحابي الرسمية بالكامل (بيانات S3/WebDAV السحابية غير متأثرة)، بعد يومين من انتهاء الاشتراك لن يظهر هذا التذكير مرة أخرى. لتجديد الاشتراك، قم بزيارة <a target='_blank' href='${url}'>هنا</a>",
"129": "البيانات السحابية تالفة، يرجى إعادة تعيين مستودع البيانات المحلية ومزامنة السحابة لحل المشكلة",
"130": "بدأ تثبيت الإصدار الجديد. نظرًا لأن نظام التشغيل سيقوم بإجراء مسح أمني، قد يستغرق بعض الوقت للبدء. الرجاء الانتظار...",
"131": "هذه العملية غير مدعومة، يرجى الذهاب إلى وحدة إدارة موفر التخزين السحابي للعمل",

View file

@ -1179,8 +1179,6 @@
"about6": "Nach der Konfiguration wird es als Zugangsauthentifizierungspasswort verwendet, lassen Sie es leer, um die Authentifizierung zu schließen",
"about7": "Entspricht dem Systembildschirm",
"about8": "Nach der Aktivierung wird die Anwendung automatisch gesperrt, wenn der Systembildschirm gesperrt wird",
"about9": "Fehlermeldungen und Diagnosedaten automatisch hochladen",
"about10": "Nach der Aktivierung werden Fehlerinformationen und Diagnosedaten automatisch über das <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK hochgeladen, was keine persönlichen Privatsphärendaten umfasst, damit Entwickler Fehler beheben können. Die Anwendung wird nach der Modifikation automatisch geschlossen, bitte manuell neu starten",
"about11": "Netzwerkservice",
"about12": "Nach der Aktivierung dürfen andere Geräte im selben LAN zugreifen. Die Anwendung wird nach der Modifikation automatisch geschlossen, bitte manuell neu starten",
"about13": "API-Token",
@ -1455,8 +1453,8 @@
"124": "Bitte aktivieren Sie die Cloud-Synchronisierung in [Einstellungen - Cloud-Synchronisierung aktivieren]",
"125": "Automatische Synchronisierung fehlgeschlagen zu viele Male, bitte versuchen Sie manuell die Synchronisierung auszulösen, wenn das Problem weiterhin besteht, melden Sie es bitte über <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "Lesezeichen kann nicht leer sein",
"127": "Es sind noch [%d] Tage bis zur Abonnementsablauffrist, danach werden die Cloud-Daten komplett gelöscht. Um zu erneuern, besuchen Sie bitte <a target='_blank' href='${url}'>hier</a>",
"128": "Das Abonnement ist abgelaufen. Nach Ablauf des Abonnements werden die Cloud-Daten vollständig gelöscht. Die Erinnerung wird zwei Tage nach Ablauf des Abonnements nicht mehr angezeigt. Um zu erneuern, besuchen Sie bitte <a target='_blank' href='${url}'>hier</a>",
"127": "Es verbleiben [%d] Tage bis zum Ablauf des Abonnements, danach werden die offiziellen Cloud-Speicherdaten vollständig gelöscht. Um zu verlängern, besuchen Sie <a target='_blank' href='${url}'>hier</a>",
"128": "Das Abonnement ist abgelaufen, die offiziellen Cloud-Speicherdaten werden vollständig gelöscht (S3/WebDAV-Cloud-Speicherdaten sind nicht betroffen), zwei Tage nach Ablauf des Abonnements wird diese Erinnerung nicht mehr angezeigt. Um zu verlängern, besuchen Sie <a target='_blank' href='${url}'>hier</a>",
"129": "Cloud-Daten wurden beschädigt, bitte setzen Sie das lokale Daten-Repository und das Cloud-Sync-Verzeichnis zurück, um das Problem zu beheben",
"130": "Der Installer der neuen Version wird gestartet. Da das Betriebssystem eine Sicherheitsprüfung durchführen wird, kann es einige Zeit dauern, bis es startet. Bitte warten Sie...",
"131": "Dieser Vorgang wird nicht unterstützt, bitte gehen Sie zur Verwaltungsoberfläche des Cloud-Speicherdienstanbieters, um zu operieren",

View file

@ -1179,8 +1179,6 @@
"about6": "After configuration, it will be used as the access authentication password, leave it blank to close the authentication",
"about7": "Follow system lock screen",
"about8": "After enabling, the application will be automatically locked when locking the system screen",
"about9": "Automatically upload error messages and diagnostic data",
"about10": "After enabling, it will automatically upload error information and diagnostic data through the <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK, which does not involve personal privacy data so that developers can fix bugs. The application will be closed automatically after modification, please restart manually",
"about11": "Network serving",
"about12": "After enabling, other devices in the same LAN will be allowed to access. The application will be closed automatically after modification, please restart manually",
"about13": "API token",
@ -1455,8 +1453,8 @@
"124": "Please enable cloud sync in [Settings - Enable Cloud Sync]",
"125": "Auto sync failed too many times, please try to manually trigger sync, if there is still a problem, please report it via <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "Bookmark cannot be empty",
"127": "There are [%d] days left before the subscription expires, after which the cloud data will be completely deleted. To renew, please visit <a target='_blank' href='${url}'>here</a>",
"128": "The subscription has expired. After the expiration, the cloud data will be completely deleted. The reminder will no longer pop up two days after the subscription expires. To renew, please visit <a target='_blank' href='${url}'>here</a>",
"127": "There are [%d] days left until the subscription expires, after which the official cloud storage data will be completely deleted. To renew, visit <a target='_blank' href='${url}'>here</a>",
"128": "The subscription has expired, the official cloud storage data will be completely deleted (S3/WebDAV cloud storage data is not affected), two days after the subscription expires this reminder will no longer appear. To renew, visit <a target='_blank' href='${url}'>here</a>",
"129": "Cloud data has been corrupted, please reset the local data repo and cloud sync dir to resolve the issue",
"130": "The new version installer is starting. Since the operating system will perform a security scan, it may take some time to start. Please wait...",
"131": "This operation is not supported, please go to the cloud storage provider management console to operate",

View file

@ -1179,8 +1179,6 @@
"about6": "Después de la configuración, se utilizará como contraseña de autenticación de acceso, déjelo en blanco para cerrar la autenticación",
"about7": "Seguir la pantalla de bloqueo del sistema",
"about8": "Después de habilitarlo, la aplicación se bloqueará automáticamente al bloquear la pantalla del sistema",
"about9": "Carga automática de mensajes de error y datos de diagnóstico",
"about10": "Después de habilitarlo, cargará automáticamente información de error y datos de diagnóstico a través del <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK, que no involucra datos de privacidad personal para que los desarrolladores puede corregir errores. La aplicación se cerrará automáticamente después de la modificación, por favor, reinicie manualmente",
"about11": "Red de servicio",
"about12": "Después de habilitarlo, se permitirá el acceso a otros dispositivos de la misma LAN. La aplicación se cerrará automáticamente después de la modificación, por favor reinicie manualmente",
"about13": "Token API",
@ -1455,8 +1453,8 @@
"124": "Por favor, active la sincronización en la nube en [Configuración - Activar sincronización en la nube]",
"125": "La sincronización automática ha fallado demasiadas veces, por favor intente activar la sincronización manualmente, si todavía hay un problema, por favor infórmelo a través de <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">Problemas GitHub</a>",
"126": "El marcador no puede estar vacío",
"127": "There are [%d] days left before the subscription expires, after which the cloud data will be completely deleted. Please visit <a target='_blank' href='${url}'>Aquí</a> para la renovación",
"128": "La suscripción caducó. Después de la caducidad, los datos de la nube se eliminarán por completo. El recordatorio ya no aparecerá dos días después de que caduque la suscripción. Para renovar, visite <a target='_blank' href='${url}'>aquí</a>",
"127": "Quedan [%d] días para que expire la suscripción, después de lo cual los datos de almacenamiento en la nube oficial se eliminarán por completo. Para renovar, visite <a target='_blank' href='${url}'>aquí</a>",
"128": "La suscripción ha expirado, los datos de almacenamiento en la nube oficial se eliminarán por completo (los datos de S3/WebDAV no se ven afectados), dos días después de la expiración de la suscripción, este recordatorio ya no aparecerá. Para renovar, visite <a target='_blank' href='${url}'>aquí</a>",
"129": "Los datos de la nube se han dañado, reinicie el repositorio de datos local y el directorio de sincronización en la nube para resolver el problema",
"130": "El instalador de la nueva versión se está iniciando. Dado que el sistema operativo realizará un análisis de seguridad, es posible que tarde algún tiempo en iniciarse. Espere...",
"131": "Esta solicitud no es compatible, vaya a la consola de administración del proveedor de almacenamiento en la nube para operar",

View file

@ -1179,8 +1179,6 @@
"about6": "Configuré comme mot de passe d'authentification d'accès, laisser vide pour désactiver l'authentification.",
"about7": "Suivez l'écran de verrouillage du système",
"about8": "Après activation, l'application sera automatiquement verrouillée lors du verrouillage de l'écran système",
"about9": "Télécharger automatiquement les messages d'erreur et les données de diagnostic",
"about10": "Après l'activation, il télécharge automatiquement les informations d'erreur et les données de diagnostic via le SDK <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a>, qui n'implique pas de données de confidentialité personnelles afin que les développeurs peut corriger des bogues. L'application sera fermée automatiquement après modification, veuillez la redémarrer manuellement.",
"about11": "Service de réseau",
"about12": "Après l'activation, les autres appareils du même réseau local seront autorisés à accéder. L'application sera fermée automatiquement après modification, veuillez la redémarrer manuellement.",
"about13": "API token",
@ -1455,8 +1453,8 @@
"124": "Veuillez activer la synchronisation cloud dans [Paramètres - Activer la synchronisation cloud]",
"125": "Il y a trop d'échecs de téléchargement dans la synchronisation automatique. Veuillez essayer de déclencher manuellement la synchronisation. Si le problème persiste, veuillez le signaler via <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "Les signets ne peuvent pas être vides",
"127": "Il reste [%d] jours avant l'expiration de l'abonnement, après quoi les données cloud seront complètement supprimées. Veuillez visiter <a target='_blank' href='${url}'>ici</a> pour le renouvellement",
"128": "L'abonnement a expiré. Après l'expiration, les données cloud seront complètement supprimées. Le rappel ne s'affichera plus deux jours après l'expiration de l'abonnement. Pour renouveler, veuillez visiter <a target='_blank' href='${url}'>ici</a>",
"127": "Il reste [%d] jours avant l'expiration de l'abonnement, après quoi les données de stockage cloud officielles seront complètement supprimées. Pour renouveler, visitez <a target='_blank' href='${url}'>ici</a>",
"128": "L'abonnement a expiré, les données de stockage cloud officielles seront complètement supprimées (les données S3/WebDAV ne sont pas affectées), deux jours après l'expiration de l'abonnement, ce rappel ne s'affichera plus. Pour renouveler, visitez <a target='_blank' href='${url}'>ici</a>",
"129": "Les données cloud ont été corrompues, veuillez réinitialiser le dépôt de données local et le répertoire de synchronisation cloud pour résoudre le problème",
"130": "Le programme d'installation de la nouvelle version démarre. Étant donné que le système d'exploitation va effectuer une analyse de sécurité, le démarrage peut prendre un certain temps. Veuillez patienter...",
"131": "Cette opération n'est pas prise en charge, veuillez vous rendre sur la console de gestion du fournisseur de stockage cloud pour opérer",

View file

@ -1179,8 +1179,6 @@
"about6": "לאחר ההגדרה, זה ישמש כסיסמת הזדהות, השאר ריק כדי לסגור את האימות",
"about7": "עקוב אחרי מערכת נעילת המסך",
"about8": "לאחר הפעלת אפשרות זו, האפליקציה תינעל באופן אוטומטי כאשר המסך של המערכת נעול",
"about9": "העלה הודעות שגיאה ונתוני אבחון באופן אוטומטי",
"about10": "לאחר הפעלת אפשרות זו, היא תעלה אוטומטית מידע שגיאה ונתוני אבחון דרך <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK, אשר לא עוסק בנתוני פרטיות אישיים כך שהמפתחים יכולים לתקן באגים. האפליקציה תסגר אוטומטית לאחר שינוי, אנא הפעל אותה מחדש ידנית",
"about11": "שירות רשת",
"about12": "לאחר הפעלת אפשרות זו, מכשירים אחרים באותה LAN יתמכו בגישה. האפליקציה תסגר אוטומטית לאחר שינוי, אנא הפעל אותה מחדש ידנית",
"about13": "אסימון API",
@ -1455,8 +1453,8 @@
"124": "אנא הפעל סנכרון בענן ב[הגדרות - הפעל סנכרון בענן]",
"125": "נכשל מהסנכרון אוטומטי פעמים רבות מדי, אנא נסה להפעיל בידנית את הסנכרון, אם יש עדיין בעיה, אנא דווח על כך דרך <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">בעיות GitHub</a>",
"126": "סימניה לא יכולה להיות ריקה",
"127": "נותרו [%d] ימים עד שפג המנוי, לאחר מכן הנתונים בענן ימחקו לחלוטין. כדי לחדש, אנא בקר ב<a target='_blank' href='${url}'>כאן</a>",
"128": "המנוי פג. לאחר התאריכים, הנתונים בענן ימחקו לחלוטין. ההודעה לא תופיע שבועיים אחרי שפג המנוי. כדי לחדש, אנא בקר ב<a target='_blank' href='${url}'>כאן</a>",
"127": "נותרו [%d] ימים עד לפקיעת המנוי, לאחר מכן הנתונים באחסון הענן הרשמי יימחקו לחלוטין. לחידוש בקר ב<a target='_blank' href='${url}'>כאן</a>",
"128": "המנוי פג, הנתונים באחסון הענן הרשמי יימחקו לחלוטין (נתוני S3/WebDAV אינם מושפעים), יומיים לאחר פקיעת המנוי תזכורת זו לא תופיע יותר. לחידוש בקר ב<a target='_blank' href='${url}'>כאן</a>",
"129": "נתוני הענן פגומים, אנא אפס את מאגר הנתונים המקומי ואת תיקיית הסנכרון בענן כדי לפתור את הבעיה",
"130": "המתקין של הגרסה החדשה מתחיל. מאחר שהמערכת תבצע סריקת אבטחה, ידרוש זה להמתין קצת לעבודה. אנא המתן...",
"131": "פעולה זו אינה נתמכת, אנא פנה ללוח הניהול של ספק שירותי אחסון הענן כדי פעולה",

View file

@ -1179,8 +1179,6 @@
"about6": "Dopo la configurazione, verrà utilizzato come password di autenticazione per l'accesso. Lascia vuoto per chiudere l'autenticazione",
"about7": "Segui il blocco schermo del sistema",
"about8": "Dopo l'abilitazione, l'applicazione verrà automaticamente bloccata quando blocchi lo schermo del sistema",
"about9": "Carica automaticamente i messaggi di errore e i dati diagnostici",
"about10": "Dopo l'abilitazione, caricherà automaticamente informazioni sugli errori e dati diagnostici tramite l'SDK <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a>, che non riguarda i dati personali, in modo che gli sviluppatori possano risolvere i bug. L'applicazione verrà chiusa automaticamente dopo la modifica, si prega di riavviarla manualmente",
"about11": "Servizio di rete",
"about12": "Dopo l'abilitazione, altri dispositivi nella stessa LAN potranno accedere. L'applicazione verrà chiusa automaticamente dopo la modifica, si prega di riavviarla manualmente",
"about13": "Token API",
@ -1455,8 +1453,8 @@
"124": "Si prega di abilitare la sincronizzazione cloud in [Impostazioni - Abilita sincronizzazione cloud]",
"125": "La sincronizzazione automatica è fallita troppe volte, si prega di tentare di attivare manualmente la sincronizzazione; se il problema persiste, si prega di segnalarlo tramite <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "Il segnalibro non può essere vuoto",
"127": "Mancano [%d] giorni prima della scadenza dell'abbonamento, dopodiché i dati cloud verranno completamente eliminati. Per rinnovare, si prega di visitare <a target='_blank' href='${url}'>qui</a>",
"128": "L'abbonamento è scaduto. Dopo la scadenza, i dati cloud verranno completamente eliminati. Il promemoria non verrà più visualizzato due giorni dopo la scadenza dell'abbonamento. Per rinnovare, si prega di visitare <a target='_blank' href='${url}'>qui</a>",
"127": "サブスクリプションの有効期限があと [%d] 日で切れます。有効期限が切れると、公式クラウドストレージのデータは完全に削除されます。更新するには<a target='_blank' href='${url}'>こちら</a>をご覧ください",
"128": "サブスクリプションの有効期限が切れました。有効期限が切れると、公式クラウドストレージのデータは完全に削除されますS3/WebDAV クラウドストレージのデータは影響を受けません。サブスクリプションの有効期限が切れてから2日後にはこの通知は表示されなくなります。更新するには<a target='_blank' href='${url}'>こちら</a>をご覧ください",
"129": "I dati cloud sono stati corrotti, si prega di ripristinare il repository dati locale e la directory di sincronizzazione cloud per risolvere il problema",
"130": "L'installatore della nuova versione sta per avviarsi. Poiché il sistema operativo eseguirà una scansione di sicurezza, potrebbe richiedere del tempo per avviarsi. Si prega di attendere...",
"131": "Questa operazione non è supportata, si prega di andare al pannello di gestione del fornitore di archiviazione cloud per operare",

View file

@ -1179,8 +1179,6 @@
"about6": "設定したコードがアクセス認証パスワードとして使用されます",
"about7": "システムのロック画面に従う",
"about8": "システム画面のロック時にアプリケーションを自動的にロックします",
"about9": "エラーメッセージと診断データの自動アップロード",
"about10": "<a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK を介してエラー情報と診断データを自動的にアップロードします。このデータに個人情報は含まれておらず、開発者がバグを修正するために使われます。設定を変更するとアプリケーションが自動的に終了しますので手動で再起動してください",
"about11": "ネットワークサービス",
"about12": "同じ LAN 内の他のデバイスからのアクセスを許可します。設定を変更するとアプリケーションが自動的に終了しますので手動で再起動してください",
"about13": "API トークン",
@ -1455,8 +1453,8 @@
"124": "[設定] - [クラウド] からクラウド同期を有効にしてください",
"125": "自動同期の失敗回数が多すぎます。手動で同期を試みてください。それでも問題が解決しない場合は <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a> から報告してください",
"126": "ブックマークは空にできません",
"127": "サブスクリプションの有効期限が切れるまであと [%d] 日です。有効期限が過ぎるとクラウドデータは完全に削除されます。更新するには<a target='_blank' href='${url}'>こちら</a>にアクセスしてください",
"128": "サブスクリプションの有効期限が切れました。有効期限が過ぎるとクラウドデータは完全に削除されます。サブスクリプションの有効期限が切れてから 2 日後にはリマインダーが表示されなくなります。更新するには<a target='_blank' href='${url}'>こちら</a>にアクセスしてください",
"127": "サブスクリプションの有効期限があと [%d] 日で切れます。有効期限が切れると、公式クラウドストレージのデータは完全に削除されます。更新するには<a target='_blank' href='${url}'>こちら</a>をご覧ください",
"128": "サブスクリプションの有効期限が切れました。有効期限が切れると、公式クラウドストレージのデータは完全に削除されますS3/WebDAV クラウドストレージのデータは影響を受けません。サブスクリプションの有効期限が切れてから2日後にはこの通知は表示されなくなります。更新するには<a target='_blank' href='${url}'>こちら</a>をご覧ください",
"129": "クラウドデータが破損しています。問題を解決するためにローカルデータリポジトリとクラウド同期ディレクトリをリセットしてください",
"130": "新しいバージョンのインストーラーを起動しています。オペレーティングシステムがセキュリティスキャンを実行するため起動に時間がかかる場合があります。しばらくお待ちください...",
"131": "この操作はサポートされていません。クラウドストレージプロバイダーの管理コンソールから操作してください",

View file

@ -1179,8 +1179,6 @@
"about6": "Po skonfigurowaniu, będzie używany jako hasło do autoryzacji dostępu, zostaw puste, aby wyłączyć autoryzację",
"about7": "Podążaj za ekranem blokady systemu",
"about8": "Po włączeniu, aplikacja zostanie automatycznie zablokowana przy zablokowaniu ekranu systemu",
"about9": "Automatycznie przesyłaj wiadomości o błędach i dane diagnostyczne",
"about10": "Po włączeniu, automatycznie przesyła informacje o błędach i dane diagnostyczne przez <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK, co nie wiąże się z danymi prywatnymi, dzięki czemu deweloperzy mogą poprawiać błędy. Aplikacja zostanie automatycznie zamknięta po modyfikacji, proszę uruchomić ją ponownie ręcznie",
"about11": "Usługa sieciowa",
"about12": "Po włączeniu, inne urządzenia w tej samej sieci LAN będą miały możliwość dostępu. Aplikacja zostanie automatycznie zamknięta po modyfikacji, proszę uruchomić ponownie ręcznie",
"about13": "Token API",
@ -1455,8 +1453,8 @@
"124": "Proszę włączyć synchronizację chmury w [Ustawienia - Włącz synchronizację w chmurze]",
"125": "Auto synchronizacja nie powiodła się zbyt wiele razy, proszę spróbować ręcznie uruchomić synchronizację, jeśli problem nadal występuje, zgłoś to za pomocą <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "Zakładka nie może być pusta",
"127": "Zostało [%d] dni przed wygaśnięciem subskrypcji, po czym dane w chmurze zostaną całkowicie usunięte. Aby odnowić, proszę odwiedzić <a target='_blank' href='${url}'>tutaj</a>",
"128": "Subskrypcja wygasła. Po wygaśnięciu, dane w chmurze zostaną całkowicie usunięte. Powiadomienie przestanie się pojawiać dwa dni po wygaśnięciu subskrypcji. Aby odnowić, proszę odwiedzić <a target='_blank' href='${url}'>tutaj</a>",
"127": "Do wygaśnięcia subskrypcji pozostało [%d] dni, po czym dane w chmurze zostaną całkowicie usunięte. Aby przedłużyć, odwiedź <a target='_blank' href='${url}'>tutaj</a>",
"128": "Subskrypcja wygasła, dane w chmurze zostaną całkowicie usunięte (dane S3/WebDAV nie są dotknięte), dwa dni po wygaśnięciu subskrypcji to powiadomienie nie będzie się już pojawiać. Aby przedłużyć, odwiedź <a target='_blank' href='${url}'>tutaj</a>",
"129": "Dane w chmurze zostały uszkodzone, proszę zresetować lokalne repozytorium danych i katalog synchronizacji w chmurze, aby rozwiązać problem",
"130": "Instalator nowej wersji się uruchamia. Ponieważ system operacyjny wykona skanowanie zabezpieczeń, rozpoczęcie może zająć trochę czasu. Proszę czekać...",
"131": "Ta operacja nie jest obsługiwana, proszę przejść do konsoli zarządzania dostawcy przechowywania w chmurze, aby wykonać operację",

View file

@ -1179,8 +1179,6 @@
"about6": "После настройки будет использоваться как пароль для аутентификации доступа, оставьте пустым, чтобы закрыть аутентификацию",
"about7": "Следовать блокировке системы",
"about8": "После включения программа будет автоматически блокироваться при блокировке системного экрана",
"about9": "Автоматическая загрузка сообщений об ошибках и диагностических данных",
"about10": "После включения будет автоматически загружена информация об ошибках и диагностические данные через <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK, что не затрагивает данные личной конфиденциальности, чтобы разработчики могли исправить ошибки. Программа будет автоматически закрыта после изменения, пожалуйста, перезапустите вручную",
"about11": "Сетевое обслуживание",
"about12": "После включения другие устройства в одной локальной сети смогут получить доступ. Программа будет автоматически закрыта после изменения, пожалуйста, перезапустите вручную",
"about13": "API токен",
@ -1455,8 +1453,8 @@
"124": "Пожалуйста, включите облачную синхронизацию в [Настройки - Включите облачную синхронизацию]",
"125": "Автосинхронизация не удалась слишком много раз, попробуйте вручную запустить синхронизацию, если проблема все еще сохраняется, пожалуйста, сообщите об этом через <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a>",
"126": "Закладка не может быть пустой",
"127": "Осталось [%d] дней до истечения подписки, после этого облачные данные будут полностью удалены. Чтобы продлить, пожалуйста, посетите <a target='_blank' href='${url}'>здесь</a>",
"128": "Подписка истекла. После истечения срока действия облачные данные будут полностью удалены. Напоминание больше не появится через два дня после истечения подписки. Чтобы продлить, пожалуйста, посетите <a target='_blank' href='${url}'>здесь</a>",
"127": "До окончания подписки осталось [%d] дней, после чего данные облачного хранилища будут полностью удалены. Для продления посетите <a target='_blank' href='${url}'>здесь</a>",
"128": "Подписка истекла, данные облачного хранилища будут полностью удалены (данные S3/WebDAV не затронуты), через два дня после истечения подписки это уведомление больше не будет появляться. Для продления посетите <a target='_blank' href='${url}'>здесь</a>",
"129": "Облачные данные были повреждены, пожалуйста, сбросьте локальный репозиторий данных и директорию облачной синхронизации, чтобы решить проблему",
"130": "Установщик новой версии запускается. Поскольку операционная система выполнит проверку безопасности, может потребоваться некоторое время для запуска. Пожалуйста, подождите...",
"131": "Эта операция не поддерживается, пожалуйста, перейдите в консоль управления поставщика облачного хранилища для выполнения операций",

View file

@ -1179,8 +1179,6 @@
"about6": "配置後作為存取鑒權密碼,留空則關閉鑒權",
"about7": "跟隨系統鎖屏",
"about8": "啟用後將會在系統鎖屏時自動鎖定應用",
"about9": "自動上傳報錯資訊和診斷資料",
"about10": "啟用後會通過 <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK 自動上傳報錯資訊和診斷資料等不涉及個人隱私的資料,以便開發者修復缺陷。修改後會自動關閉應用,請手動重啟",
"about11": "網路伺服",
"about12": "啟用後將允許同一區域網內的其他設備進行存取。修改後會自動關閉應用,請手動重啟",
"about13": "API token",
@ -1455,8 +1453,8 @@
"124": "請在 [設置 - 啟用雲端同步] 中開啟雲端同步",
"125": "自動同步失敗次數過多,請嘗試手動觸發同步,如果還有問題請<a href=\"https://ld246.com/article/1649901726096\" target=\"_blank\">反饋</a>",
"126": "書籤不能為空",
"127": "訂閱距過期還剩 [%d] 天,過期後雲端資料會被徹底刪除。續訂請訪問<a target='_blank' href='${url}'>這裡</a>",
"128": "訂閱已經過期,過期後雲端資料會被徹底刪除,訂閱過期兩天后不再彈出該提醒,續訂請訪問<a target='_blank' href='${url}'>這裡</a>",
"127": "訂閱距過期還剩 [%d] 天,過期後官方雲端存儲數據會被徹底刪除。續訂請訪問<a target='_blank' href='${url}'>這裡</a>",
"128": "訂閱已經過期,過期後官方雲端存儲數據會被徹底刪除S3/WebDAV 雲端存儲數據不受影響),訂閱過期兩天後不再彈出該提醒,續訂請訪問<a target='_blank' href='${url}'>這裡</a>",
"129": "雲端資料已經損壞,請參考<a href=\"https://ld246.com/article/1683395267749\" target=\"_blank\">這裡</a>解決該問題",
"130": "正在啟動新版本安裝程式,由於作業系統會進行安全掃描,因此啟動可能需要一些時間,請稍等...",
"131": "不支持該操作,請到雲端存儲提供商管理控制台進行操作",

View file

@ -1179,8 +1179,6 @@
"about6": "配置后作为访问鉴权密码,留空则关闭鉴权",
"about7": "跟随系统锁屏",
"about8": "启用后将会在系统锁屏时自动锁定应用",
"about9": "自动上传报错信息和诊断数据",
"about10": "启用后会通过 <a href=\"https://sentry.io\" target=\"_blank\">Sentry</a> SDK 自动上传报错信息和诊断数据等不涉及个人隐私的数据,以便开发者修复缺陷。修改后会自动关闭应用,请手动重启",
"about11": "网络伺服",
"about12": "启用后将允许同一局域网内的其他设备进行访问。修改后会自动关闭应用,请手动重启",
"about13": "API token",
@ -1455,8 +1453,8 @@
"124": "请在 [设置 - 启用云端同步] 中开启云端同步",
"125": "自动同步失败次数过多,请尝试手动触发同步,如果还有问题请<a href=\"https://ld246.com/article/1649901726096\" target=\"_blank\">反馈</a>",
"126": "书签不能为空",
"127": "订阅距过期还剩 [%d] 天,过期后云端数据会被彻底删除。续订请访问<a target='_blank' href='${url}'>这里</a>",
"128": "订阅已经过期,过期后云端数据会被彻底删除,订阅过期两天后不再弹出该提醒,续订请访问<a target='_blank' href='${url}'>这里</a>",
"127": "订阅距过期还剩 [%d] 天,过期后官方云端存储数据会被彻底删除。续订请访问<a target='_blank' href='${url}'>这里</a>",
"128": "订阅已经过期,过期后官方云端存储数据会被彻底删除S3/WebDAV 云端存储数据不受影响),订阅过期两天后不再弹出该提醒,续订请访问<a target='_blank' href='${url}'>这里</a>",
"129": "云端数据已经损坏,请参考<a href=\"https://ld246.com/article/1683395267749\" target=\"_blank\">这里</a>解决该问题",
"130": "正在启动新版本安装程序,由于操作系统会进行安全扫描,所以启动可能需要一些时间,请稍等...",
"131": "不支持该操作,请到云端存储提供商管理控制台进行操作",

View file

@ -22,11 +22,11 @@
--b3-theme-on-error: #fff;
/* 字体 */
--b3-font-family: BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis;
--b3-font-family-protyle: var(--b3-font-family);
--b3-font-family-code: "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace, var(--b3-font-family);
--b3-font-family-code: "Emojis Additional", "Emojis Reset", "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", var(--b3-font-family);
--b3-font-family-graph: arial;
--b3-font-family-emoji: emojis;
--b3-font-family-emoji: "Emojis Additional", emojis;
--b3-font-family-math: KaTeX_Math;
--b3-font-size: 14px;
@ -202,15 +202,15 @@
/* 微软字体斜体会被相邻背景遮挡,将 arial 放置其前 https://github.com/siyuan-note/siyuan/issues/11841"Segoe UI" 和 Noto-COLRv1-2.047 冲突,故移除。 */
:root:lang(zh_CN) {
--b3-font-family: BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis;
}
:root:lang(zh_CHT) {
--b3-font-family: BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis;
}
:root:lang(ja_JP) {
--b3-font-family: BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis;
}
/* https://github.com/siyuan-note/siyuan/issues/6440 */

View file

@ -22,11 +22,11 @@
--b3-theme-on-error: #fff;
/* 字体 */
--b3-font-family: BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", arial, sans-serif, emojis;
--b3-font-family-protyle: var(--b3-font-family);
--b3-font-family-code: "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace, var(--b3-font-family);
--b3-font-family-code: "Emojis Additional", "Emojis Reset", "JetBrainsMono-Regular", mononoki, Consolas, "Liberation Mono", var(--b3-font-family);
--b3-font-family-graph: arial;
--b3-font-family-emoji: emojis;
--b3-font-family-emoji: "Emojis Additional", emojis;
--b3-font-family-math: KaTeX_Math;
--b3-font-size: 14px;
@ -202,15 +202,15 @@
/* 微软字体斜体会被相邻背景遮挡,将 arial 放置其前 https://github.com/siyuan-note/siyuan/issues/11841"Segoe UI" 和 Noto-COLRv1-2.047 冲突,故移除。 */
:root:lang(zh_CN) {
--b3-font-family: BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang SC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans GB", "Source Han Sans SC", arial, "Microsoft Yahei", sans-serif, emojis;
}
:root:lang(zh_CHT) {
--b3-font-family: BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "PingFang TC", "Luxi Sans", "DejaVu Sans", "Hiragino Sans TC", "Source Han Sans TC", "Microsoft JhengHei", arial, sans-serif, emojis;
}
:root:lang(ja_JP) {
--b3-font-family: BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis;
--b3-font-family: "Emojis Additional", "Emojis Reset", BlinkMacSystemFont, Helvetica, "Luxi Sans", "DejaVu Sans", "Hiragino Sans", "Yu Gothic UI", arial, sans-serif, emojis;
}
/* https://github.com/siyuan-note/siyuan/issues/6440 */

View file

@ -9,7 +9,7 @@
<Identity Name="89C2A984.SiYuan"
ProcessorArchitecture="x64"
Publisher="CN=087C656E-C1D9-42D8-8807-CED45A74FC0F"
Version="3.1.15.0"/>
Version="3.1.17.0"/>
<Properties>
<DisplayName>SiYuan</DisplayName>
<PublisherDisplayName>云南链滴科技有限公司</PublisherDisplayName>

View file

@ -5790,7 +5790,7 @@ Bug fixes and improves details.
* [Weaken Markdown related content in the user guide](https://github.com/siyuan-note/siyuan/issues/2001)
### Abolishments
### Abolishment
* [Remove editor options](https://github.com/siyuan-note/siyuan/issues/1997)
* [Remove export option `fixTermTypo`](https://github.com/siyuan-note/siyuan/issues/1998)

View file

@ -9,10 +9,12 @@ Below are the detailed changes in this version.
### Enhancement
* [Improve database cell appearance](https://github.com/siyuan-note/siyuan/issues/10867)
* [Multiple-select list items remain selected after indent or outdent](https://github.com/siyuan-note/siyuan/issues/12209)
* [The move doc window retains the keyword of the last search](https://github.com/siyuan-note/siyuan/issues/12335)
* [Improve font family and emoji ](https://github.com/siyuan-note/siyuan/pull/13241)
* [Improve database select field color and layout](https://github.com/siyuan-note/siyuan/issues/13263)
* [Improve cursor positioning after pasting images](https://github.com/siyuan-note/siyuan/issues/13336)
* [The database primary key field displays the icon of the bound doc](https://github.com/siyuan-note/siyuan/issues/13378)
* [Supports find-replace and asset file history on the mobile](https://github.com/siyuan-note/siyuan/issues/13415)
* [Improve inline elements parsing](https://github.com/siyuan-note/siyuan/issues/13420)
* [Allow stickTab icon in Panels to be used in a browser environment](https://github.com/siyuan-note/siyuan/pull/13421)
@ -24,6 +26,15 @@ Below are the detailed changes in this version.
* [Add SQL query template function `querySQL`](https://github.com/siyuan-note/siyuan/issues/13455)
* [Search preview area supports inline memo positioning](https://github.com/siyuan-note/siyuan/issues/13465)
* [Add Arabic support](https://github.com/siyuan-note/siyuan/pull/13475)
* [Improve exporting data](https://github.com/siyuan-note/siyuan/issues/13500)
* [Improve serving assets performance](https://github.com/siyuan-note/siyuan/issues/13501)
* [Improve data synchronization stability](https://github.com/siyuan-note/siyuan/issues/13503)
* [Compatible with image legacy data](https://github.com/siyuan-note/siyuan/issues/13523)
* [Improve the behavior of `Del` of the image](https://github.com/siyuan-note/siyuan/issues/13524)
### Abolishment
* [Remove Sentry reporting diagnostic data](https://github.com/siyuan-note/siyuan/issues/13522)
### Bugfix

View file

@ -9,10 +9,12 @@
### 改進功能
* [改進資料庫單元外觀](https://github.com/siyuan-note/siyuan/issues/10867)
* [多重選擇清單項目在縮排或減少縮排後保持選取狀態](https://github.com/siyuan-note/siyuan/issues/12209)
* [行動文件視窗保留上次搜尋的關鍵字](https://github.com/siyuan-note/siyuan/issues/12335)
* [改進字體系列和表情符號](https://github.com/siyuan-note/siyuan/pull/13241)
* [改進資料庫選擇欄位的顏色和佈局](https://github.com/siyuan-note/siyuan/issues/13263)
* [改進貼上圖片後的遊標定位](https://github.com/siyuan-note/siyuan/issues/13336)
* [資料庫主鍵欄位顯示綁定文件區塊圖示](https://github.com/siyuan-note/siyuan/issues/13378)
* [支援在行動裝置上尋找替換和資源檔案歷史](https://github.com/siyuan-note/siyuan/issues/13415)
* [改進行級元素解析](https://github.com/siyuan-note/siyuan/issues/13420)
* [允許在瀏覽器環境中使用面板中的 stickTab 圖示](https://github.com/siyuan-note/siyuan/pull/13421)
@ -24,6 +26,15 @@
* [新增 SQL 查詢範本函數 `querySQL`](https://github.com/siyuan-note/siyuan/issues/13455)
* [搜尋預覽區域支援行級備註定位](https://github.com/siyuan-note/siyuan/issues/13465)
* [新增阿拉伯語支援](https://github.com/siyuan-note/siyuan/pull/13475)
* [改進匯出資料](https://github.com/siyuan-note/siyuan/issues/13500)
* [改進資源檔案載入效能](https://github.com/siyuan-note/siyuan/issues/13501)
* [改善資料同步穩定性](https://github.com/siyuan-note/siyuan/issues/13503)
* [相容圖片遺留資料](https://github.com/siyuan-note/siyuan/issues/13523)
* [改進圖片的 `Del` 行為](https://github.com/siyuan-note/siyuan/issues/13524)
### 移除功能
* [移除 Sentry 報告診斷資料](https://github.com/siyuan-note/siyuan/issues/13522)
### 修復缺陷

View file

@ -9,10 +9,12 @@
### 改进功能
* [改进数据库单元格外观](https://github.com/siyuan-note/siyuan/issues/10867)
* [多选列表项在缩进或减少缩进后保持选中状态](https://github.com/siyuan-note/siyuan/issues/12209)
* [移动文档窗口保留上次搜索的关键词](https://github.com/siyuan-note/siyuan/issues/12335)
* [改进字体系列和表情符号](https://github.com/siyuan-note/siyuan/pull/13241)
* [改进数据库选择字段的颜色和布局](https://github.com/siyuan-note/siyuan/issues/13263)
* [改进粘贴图片后的光标定位](https://github.com/siyuan-note/siyuan/issues/13336)
* [数据库主键字段显示绑定文档块图标](https://github.com/siyuan-note/siyuan/issues/13378)
* [支持在移动设备上查找替换和资源文件历史](https://github.com/siyuan-note/siyuan/issues/13415)
* [改进行级元素解析](https://github.com/siyuan-note/siyuan/issues/13420)
* [允许在浏览器环境中使用面板中的 stickTab 图标](https://github.com/siyuan-note/siyuan/pull/13421)
@ -24,6 +26,15 @@
* [添加 SQL 查询模板函数 `querySQL`](https://github.com/siyuan-note/siyuan/issues/13455)
* [搜索预览区域支持行级备注定位](https://github.com/siyuan-note/siyuan/issues/13465)
* [添加阿拉伯语支持](https://github.com/siyuan-note/siyuan/pull/13475)
* [改进导出数据](https://github.com/siyuan-note/siyuan/issues/13500)
* [改进资源文件加载性能](https://github.com/siyuan-note/siyuan/issues/13501)
* [改进数据同步稳定性](https://github.com/siyuan-note/siyuan/issues/13503)
* [兼容图片遗留数据](https://github.com/siyuan-note/siyuan/issues/13523)
* [改进图片的 `Del` 行为](https://github.com/siyuan-note/siyuan/issues/13524)
### 移除功能
* [移除 Sentry 报告诊断数据](https://github.com/siyuan-note/siyuan/issues/13522)
### 修复缺陷

View file

@ -0,0 +1,42 @@
## Overview
This version reduces startup time when sync is enabled.
## Changelogs
Below are the detailed changes in this version.
### Enhancement
* [Database-bound block primary key supports setting static anchor text](https://github.com/siyuan-note/siyuan/issues/10049)
* [The text pasted into the database supports the use of `\t` and `\n` for segmentation and line breaks](https://github.com/siyuan-note/siyuan/issues/13259)
* [Adjust window buttons when the interface is scaled on macOS](https://github.com/siyuan-note/siyuan/issues/13526)
* [The mobile database always displays the `Calculation` row](https://github.com/siyuan-note/siyuan/issues/13535)
* [Improve Attribute Panel - Database - Remove block](https://github.com/siyuan-note/siyuan/issues/13536)
* [Improve list item multi-select indentation interaction](https://github.com/siyuan-note/siyuan/issues/13555)
* [Remove browser default Ctrl+B/I/U](https://github.com/siyuan-note/siyuan/issues/13571)
* [Reduce startup time when sync is enabled](https://github.com/siyuan-note/siyuan/issues/13589)
### Bugfix
* [Emoji not displayed on Linux](https://github.com/siyuan-note/siyuan/issues/13213)
* [Database paste causes crash](https://github.com/siyuan-note/siyuan/issues/13410)
* [Results not highlighted when searching using query syntax](https://github.com/siyuan-note/siyuan/issues/13532)
* [Document cannot be exported as Markdown](https://github.com/siyuan-note/siyuan/issues/13545)
* [Incorrect list item styles in exported PDF](https://github.com/siyuan-note/siyuan/issues/13550)
* [Cannot export Data on mobile](https://github.com/siyuan-note/siyuan/issues/13565)
### Refactor
* [Upgrade to AWS SDK for Go v2](https://github.com/siyuan-note/siyuan/issues/13557)
* [Upgrade to Electron v32.2.7](https://github.com/siyuan-note/siyuan/issues/13566)
### Development
* [Add `renderAVAttribute` method to Protyle](https://github.com/siyuan-note/siyuan/pull/13547)
* [Add plugin function `getAllModels`](https://github.com/siyuan-note/siyuan/issues/13579)
## Download
* [B3log](https://b3log.org/siyuan/en/download.html)
* [GitHub](https://github.com/siyuan-note/siyuan/releases)

View file

@ -0,0 +1,42 @@
## 概述
此版本改變降低了啟用同步時的啟動時間。
## 變更記錄
以下是此版本中的詳細變更。
### 改進功能
* [資料庫綁定區塊主鍵支援設定靜態錨文本](https://github.com/siyuan-note/siyuan/issues/10049)
* [貼到資料庫中的文字支援使用 `\t` 和 `\n` 進行分割和換行](https://github.com/siyuan-note/siyuan/issues/13259)
* [在 macOS 上調整介面縮放時的視窗按鈕](https://github.com/siyuan-note/siyuan/issues/13526)
* [行動資料庫總是顯示 `計算` 行](https://github.com/siyuan-note/siyuan/issues/13535)
* [改進屬性面板 - 資料庫 - 刪除區塊](https://github.com/siyuan-note/siyuan/issues/13536)
* [改進清單項目多選縮排互動](https://github.com/siyuan-note/siyuan/issues/13555)
* [移除瀏覽器預設的 Ctrl+B/I/U](https://github.com/siyuan-note/siyuan/issues/13571)
* [啟用同步時減少啟動時間](https://github.com/siyuan-note/siyuan/issues/13589)
### 修復缺陷
* [Linux 上不顯示表情符號](https://github.com/siyuan-note/siyuan/issues/13213)
* [貼到資料庫導致崩潰](https://github.com/siyuan-note/siyuan/issues/13410)
* [使用查詢語法搜尋時結果未高亮顯示](https://github.com/siyuan-note/siyuan/issues/13532)
* [文件無法匯出為 Markdown](https://github.com/siyuan-note/siyuan/issues/13545)
* [匯出的 PDF 中清單項目樣式不正確](https://github.com/siyuan-note/siyuan/issues/13550)
* [無法在行動裝置上匯出資料](https://github.com/siyuan-note/siyuan/issues/13565)
### 開發重構
* [升級至 AWS SDK for Go v2](https://github.com/siyuan-note/siyuan/issues/13557)
* [升級至 Electron v32.2.7](https://github.com/siyuan-note/siyuan/issues/13566)
### 開發者
* [為 Protyle 新增 `renderAVAttribute` 方法](https://github.com/siyuan-note/siyuan/pull/13547)
* [新增外掛程式 `getAllModels`](https://github.com/siyuan-note/siyuan/issues/13579)
## 下載
* [B3log](https://b3log.org/siyuan/download.html)
* [GitHub](https://github.com/siyuan-note/siyuan/releases)

View file

@ -0,0 +1,42 @@
## 概述
该版本改降低了启用同步时的启动时间。
## 变更记录
以下是此版本中的详细变更。
### 改进功能
* [数据库绑定块主键支持设置静态锚文本](https://github.com/siyuan-note/siyuan/issues/10049)
* [粘贴到数据库中的文本支持使用 `\t` 和 `\n` 进行分割和换行](https://github.com/siyuan-note/siyuan/issues/13259)
* [在 macOS 上调整界面缩放时的窗口按钮](https://github.com/siyuan-note/siyuan/issues/13526)
* [移动数据库始终显示 `计算` 行](https://github.com/siyuan-note/siyuan/issues/13535)
* [改进属性面板 - 数据库 - 删除块](https://github.com/siyuan-note/siyuan/issues/13536)
* [改进列表项多选缩进交互](https://github.com/siyuan-note/siyuan/issues/13555)
* [移除浏览器默认的 Ctrl+B/I/U](https://github.com/siyuan-note/siyuan/issues/13571)
* [启用同步时减少启动时间](https://github.com/siyuan-note/siyuan/issues/13589)
### 修复缺陷
* [Linux 上不显示表情符号](https://github.com/siyuan-note/siyuan/issues/13213)
* [粘贴到数据库导致崩溃](https://github.com/siyuan-note/siyuan/issues/13410)
* [使用查询语法搜索时结果未高亮显示](https://github.com/siyuan-note/siyuan/issues/13532)
* [文档无法导出为 Markdown](https://github.com/siyuan-note/siyuan/issues/13545)
* [导出的 PDF 中列表项样式不正确](https://github.com/siyuan-note/siyuan/issues/13550)
* [无法在移动设备上导出数据](https://github.com/siyuan-note/siyuan/issues/13565)
### 开发重构
* [升级到 AWS SDK for Go v2](https://github.com/siyuan-note/siyuan/issues/13557)
* [升级到 Electron v32.2.7](https://github.com/siyuan-note/siyuan/issues/13566)
### 开发者
* [为 Protyle 添加 `renderAVAttribute` 方法](https://github.com/siyuan-note/siyuan/pull/13547)
* [添加插件函数 `getAllModels`](https://github.com/siyuan-note/siyuan/issues/13579)
## 下载
* [B3log](https://b3log.org/siyuan/download.html)
* [GitHub](https://github.com/siyuan-note/siyuan/releases)

View file

@ -19,11 +19,10 @@ win:
- from: "kernel-arm64"
to: "kernel"
requestedExecutionLevel: "asInvoker"
# certificateSubjectName: "Yunnan Liandi Technology Co., Ltd."
signingHashAlgorithms: [ 'sha256' ]
#rfc3161TimeStampServer: "http://sha256timestamp.ws.symantec.com/sha256/timestamp"
#rfc3161TimeStampServer: "http://time.certum.pl"
rfc3161TimeStampServer: "http://timestamp.entrust.net/TSS/RFC3161sha2TS"
signtoolOptions:
#certificateSubjectName: "Yunnan Liandi Technology Co., Ltd."
signingHashAlgorithms: [ 'sha256' ]
rfc3161TimeStampServer: "http://timestamp.entrust.net/TSS/RFC3161sha2TS"
target:
- target: "nsis"
arch: "arm64"

View file

@ -19,11 +19,10 @@ win:
- from: "kernel"
to: "kernel"
requestedExecutionLevel: "asInvoker"
# certificateSubjectName: "Yunnan Liandi Technology Co., Ltd."
signingHashAlgorithms: [ 'sha256' ]
#rfc3161TimeStampServer: "http://sha256timestamp.ws.symantec.com/sha256/timestamp"
#rfc3161TimeStampServer: "http://time.certum.pl"
rfc3161TimeStampServer: "http://timestamp.entrust.net/TSS/RFC3161sha2TS"
signtoolOptions:
#certificateSubjectName: "Yunnan Liandi Technology Co., Ltd."
signingHashAlgorithms: [ 'sha256' ]
rfc3161TimeStampServer: "http://timestamp.entrust.net/TSS/RFC3161sha2TS"
target:
- target: "nsis"
nsis:
@ -67,8 +66,8 @@ extraResources:
- from: "appearance/themes/daylight"
to: "appearance/themes/daylight"
filter: "!**/{.DS_Store,custom.css}"
- from: "src/assets/fonts"
- from: "appearance/fonts"
to: "appearance/fonts"
filter: "!**/{.DS_Store}"
- from: "pandoc/pandoc-windows-amd64.zip"
to: "pandoc.zip"
to: "pandoc.zip"

View file

@ -861,6 +861,15 @@ app.whenReady().then(() => {
globalShortcut.unregister(hotKey2Electron(data.accelerator));
}
break;
case "setTrafficLightPosition":
if (!currentWindow || !currentWindow.setWindowButtonPosition) {
return;
}
if (new URL(currentWindow.getURL()).pathname === "/stage/build/app/window.html") {
data.position.y += 5 * data.zoom;
}
currentWindow.setWindowButtonPosition(data.position);
break;
case "show":
if (!currentWindow) {
return;

View file

@ -6,7 +6,7 @@
"id": "20201204184532-3qm9l8n",
"title": "Template snippet",
"type": "doc",
"updated": "20241213215714"
"updated": "20241224162810"
},
"Children": [
{
@ -57,7 +57,7 @@
"HeadingLevel": 2,
"Properties": {
"id": "20210104091444-jy56z0p",
"updated": "20241213215714"
"updated": "20241224162810"
},
"Children": [
{
@ -215,7 +215,7 @@
"ListData": {},
"Properties": {
"id": "20210104091444-mwbvc9m",
"updated": "20241213215714"
"updated": "20241224162810"
},
"Children": [
{
@ -484,7 +484,7 @@
},
"Properties": {
"id": "20210504093232-vukp34t",
"updated": "20240403151002"
"updated": "20241224162810"
},
"Children": [
{
@ -516,7 +516,7 @@
"IsFencedCodeBlock": true,
"Properties": {
"id": "20241213215606-a1mq6zf",
"updated": "20241213215606"
"updated": "20241224162810"
},
"Children": [
{
@ -528,7 +528,7 @@
},
{
"Type": "NodeCodeBlockCode",
"Data": " .action{querySQL \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
"Data": " .action{querySpans \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
},
{
"Type": "NodeCodeBlockFenceCloseMarker",

View file

@ -5,7 +5,8 @@
"Properties": {
"id": "20230805232018-hgrq0ju",
"title": "Connect with third-party cloud storage",
"updated": "20240301091400"
"type": "doc",
"updated": "20241216171745"
},
"Children": [
{
@ -55,7 +56,7 @@
"ListData": {},
"Properties": {
"id": "20230805232156-kbi85az",
"updated": "20240301091400"
"updated": "20241216171745"
},
"Children": [
{
@ -121,7 +122,7 @@
},
"Properties": {
"id": "20230805232156-vqfp7fz",
"updated": "20240301091400"
"updated": "20241216171745"
},
"Children": [
{
@ -129,7 +130,7 @@
"Type": "NodeParagraph",
"Properties": {
"id": "20230805232156-tliw65p",
"updated": "20240301091400"
"updated": "20241216171642"
},
"Children": [
{
@ -151,20 +152,79 @@
"TextMarkType": "a",
"TextMarkAHref": "https://koofr.eu/",
"TextMarkTextContent": "Koofr"
}
]
},
{
"ID": "20241216171644-p5dmsx8",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20241216171644-p5dmsx8",
"updated": "20241216171745"
},
"Children": [
{
"ID": "20241216171644-1x6gfx0",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171644-1x6gfx0",
"updated": "20241216171644"
},
"Children": [
{
"ID": "20241216171644-5v4890j",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171644-5v4890j",
"updated": "20241216171644"
},
"Children": [
{
"Type": "NodeText",
"Data": "Due to the problems of the WebDAV protocol itself, when the data volume is large, problems such as slow startup, slow synchronization, and high resource usage will occur, so it is recommended to use S3 object storage"
}
]
}
]
},
{
"Type": "NodeText",
"Data": " (Nutstore WebDAV is not supported because of its "
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "interface limitations"
},
{
"Type": "NodeText",
"Data": ")"
"ID": "20241216171644-ie3pkyj",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171644-ie3pkyj",
"updated": "20241216171745"
},
"Children": [
{
"ID": "20241216171644-k4q14iw",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171644-k4q14iw",
"updated": "20241216171745"
},
"Children": [
{
"Type": "NodeText",
"Data": "Nutstore cloud WebDAV is not supported because its "
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "interface has limitations"
}
]
}
]
}
]
}

View file

@ -6,7 +6,7 @@
"id": "20201204181006-7bkppue",
"title": "模板片段",
"type": "doc",
"updated": "20241213215655"
"updated": "20241224162826"
},
"Children": [
{
@ -69,7 +69,7 @@
"HeadingLevel": 2,
"Properties": {
"id": "20210104091309-fhb549c",
"updated": "20241213215655"
"updated": "20241224162826"
},
"Children": [
{
@ -237,7 +237,7 @@
"ListData": {},
"Properties": {
"id": "20210104091309-gjkg3u5",
"updated": "20241213215655"
"updated": "20241224162826"
},
"Children": [
{
@ -506,7 +506,7 @@
},
"Properties": {
"id": "20210504093313-4aoyxd0",
"updated": "20241213215416"
"updated": "20241224162826"
},
"Children": [
{
@ -538,7 +538,7 @@
"IsFencedCodeBlock": true,
"Properties": {
"id": "20241213215337-rhkoc8k",
"updated": "20241213215416"
"updated": "20241224162826"
},
"Children": [
{
@ -550,7 +550,7 @@
},
{
"Type": "NodeCodeBlockCode",
"Data": " .action{querySQL \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
"Data": " .action{querySpans \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
},
{
"Type": "NodeCodeBlockFenceCloseMarker",

View file

@ -5,7 +5,8 @@
"Properties": {
"id": "20230805230131-sn7obzb",
"title": "对接第三方云端存储",
"updated": "20240301090951"
"type": "doc",
"updated": "20241216171525"
},
"Children": [
{
@ -55,7 +56,7 @@
"ListData": {},
"Properties": {
"id": "20230805230746-4q9cmrb",
"updated": "20240301090951"
"updated": "20241216171525"
},
"Children": [
{
@ -121,7 +122,7 @@
},
"Properties": {
"id": "20230805230746-zb33erf",
"updated": "20240301090951"
"updated": "20241216171525"
},
"Children": [
{
@ -129,7 +130,7 @@
"Type": "NodeParagraph",
"Properties": {
"id": "20230805230746-i9fzmzi",
"updated": "20240301090951"
"updated": "20241216171521"
},
"Children": [
{
@ -141,20 +142,79 @@
"TextMarkType": "a",
"TextMarkAHref": "https://infini-cloud.net/",
"TextMarkTextContent": "InfiniCLOUD"
}
]
},
{
"ID": "20241216171521-40xtiyf",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20241216171521-40xtiyf",
"updated": "20241216171525"
},
"Children": [
{
"ID": "20241216171530-dhfkay6",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171530-dhfkay6",
"updated": "20241216171530"
},
"Children": [
{
"ID": "20241216171530-kxdtu73",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171530-kxdtu73",
"updated": "20241216171531"
},
"Children": [
{
"Type": "NodeText",
"Data": "由于 WebDAV 协议本身的问题,数据量较大后会出现启动慢、同步慢、资源占用高等问题,所以建议选择使用 S3 对象存储"
}
]
}
]
},
{
"Type": "NodeText",
"Data": "(不支持坚果云 WebDAV因为其"
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "接口存在限制"
},
{
"Type": "NodeText",
"Data": ""
"ID": "20241216171521-ccruwd8",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171521-ccruwd8",
"updated": "20241216171525"
},
"Children": [
{
"ID": "20241216171521-z0p3t71",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171521-z0p3t71",
"updated": "20241216171525"
},
"Children": [
{
"Type": "NodeText",
"Data": "不支持坚果云 WebDAV因为其"
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "接口存在限制"
}
]
}
]
}
]
}
@ -167,7 +227,7 @@
"Type": "NodeParagraph",
"Properties": {
"id": "20230805230746-pq0po1p",
"updated": "20230828111951"
"updated": "20241216171020"
},
"Children": [
{

View file

@ -7,7 +7,7 @@
"id": "20200813163359-v04n73b",
"title": "隐私政策和用户协议",
"type": "doc",
"updated": "20221027114353"
"updated": "20241218172032"
},
"Children": [
{
@ -16,7 +16,7 @@
"HeadingLevel": 2,
"Properties": {
"id": "20220212224529-hcqln0k",
"updated": "20220212224529"
"updated": "20241218172032"
},
"Children": [
{
@ -31,7 +31,7 @@
"ListData": {},
"Properties": {
"id": "20220212224529-q784muc",
"updated": "20221027114353"
"updated": "20241218172032"
},
"Children": [
{
@ -71,7 +71,7 @@
},
"Properties": {
"id": "20220212224529-q652whb",
"updated": "20221027114353"
"updated": "20241218172032"
},
"Children": [
{
@ -79,12 +79,12 @@
"Type": "NodeParagraph",
"Properties": {
"id": "20220212224529-1embibu",
"updated": "20221027114353"
"updated": "20241218172032"
},
"Children": [
{
"Type": "NodeText",
"Data": "最新日期2022 年 10 月 27 日"
"Data": "最新日期2024 年 12 月 18 日"
}
]
}
@ -3501,102 +3501,6 @@
}
]
},
{
"ID": "20221027112340-j85t36u",
"Type": "NodeBlockquote",
"Properties": {
"id": "20221027112340-j85t36u",
"updated": "20221027112341"
},
"Children": [
{
"Type": "NodeBlockquoteMarker",
"Data": "\u003e"
},
{
"ID": "20221027112341-fh7jv2y",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027112341-fh7jv2y",
"updated": "20221027112341"
},
"Children": [
{
"Type": "NodeText",
"Data": "SDK 名称Sentry"
}
]
},
{
"ID": "20221027112341-znirf8k",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027112341-znirf8k",
"updated": "20221027112341"
},
"Children": [
{
"Type": "NodeText",
"Data": "公司名称FUNCTIONAL SOFTWARE, INC."
}
]
},
{
"ID": "20221027112341-japnv8y",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027112341-japnv8y",
"updated": "20221027112341"
},
"Children": [
{
"Type": "NodeText",
"Data": "SDK 官网:"
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://sentry.io/",
"TextMarkTextContent": "https://sentry.io"
}
]
},
{
"ID": "20221027112341-ohaorb0",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027112341-ohaorb0",
"updated": "20221027112341"
},
"Children": [
{
"Type": "NodeText",
"Data": "使用目的:用于收集报错信息和诊断数据,进而改善用户体验"
}
]
},
{
"ID": "20221027112341-n2n81eo",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027112341-n2n81eo",
"updated": "20221027112341"
},
"Children": [
{
"Type": "NodeText",
"Data": "收集的个人信息类型/字段:设备标识信息和报错日志、诊断数据等不涉及个人隐私的数据 "
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://sentry.io/privacy/",
"TextMarkTextContent": "https://sentry.io/privacy/"
}
]
}
]
},
{
"ID": "20221027112333-rjv80e0",
"Type": "NodeBlockquote",

View file

@ -6,7 +6,8 @@
"icon": "1f4c4",
"id": "20211226114339-dk0gtpr",
"title": "隱私政策和用戶協議",
"updated": "20230630145333"
"type": "doc",
"updated": "20241218172040"
},
"Children": [
{
@ -15,7 +16,7 @@
"HeadingLevel": 2,
"Properties": {
"id": "20220212225517-09nj67f",
"updated": "20220212225517"
"updated": "20241218172040"
},
"Children": [
{
@ -30,7 +31,7 @@
"ListData": {},
"Properties": {
"id": "20220212225517-4qagezn",
"updated": "20221027114358"
"updated": "20241218172040"
},
"Children": [
{
@ -68,7 +69,7 @@
},
"Properties": {
"id": "20220212225517-pvls0y0",
"updated": "20221027114358"
"updated": "20241218172040"
},
"Children": [
{
@ -76,12 +77,12 @@
"Type": "NodeParagraph",
"Properties": {
"id": "20220212225517-vgg1nrb",
"updated": "20221027114358"
"updated": "20241218172040"
},
"Children": [
{
"Type": "NodeText",
"Data": "最新日期2022 年 10 月 27 日"
"Data": "最新日期2024 年 12 月 18 日"
}
]
}
@ -3505,102 +3506,6 @@
}
]
},
{
"ID": "20221027113639-fos5fwy",
"Type": "NodeBlockquote",
"Properties": {
"id": "20221027113639-fos5fwy",
"updated": "20221027113639"
},
"Children": [
{
"Type": "NodeBlockquoteMarker",
"Data": "\u003e"
},
{
"ID": "20221027113639-sr12gat",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027113639-sr12gat",
"updated": "20221027113639"
},
"Children": [
{
"Type": "NodeText",
"Data": "SDK 名稱Sentry"
}
]
},
{
"ID": "20221027113639-tqeakh3",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027113639-tqeakh3",
"updated": "20221027113639"
},
"Children": [
{
"Type": "NodeText",
"Data": "公司名稱FUNCTIONAL SOFTWARE, INC."
}
]
},
{
"ID": "20221027113639-9f2m2y5",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027113639-9f2m2y5",
"updated": "20221027113639"
},
"Children": [
{
"Type": "NodeText",
"Data": "SDK 官網:"
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://sentry.io/",
"TextMarkTextContent": "https://sentry.io"
}
]
},
{
"ID": "20221027113639-9ae8fqy",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027113639-9ae8fqy",
"updated": "20221027113639"
},
"Children": [
{
"Type": "NodeText",
"Data": "使用目的:用於收集報錯資訊和診斷資料,進而改善用戶體驗"
}
]
},
{
"ID": "20221027113639-zlm8yb8",
"Type": "NodeParagraph",
"Properties": {
"id": "20221027113639-zlm8yb8",
"updated": "20221027113639"
},
"Children": [
{
"Type": "NodeText",
"Data": "收集的個人資訊類型/字段:設備標識資訊和報錯日誌、診斷資料等不涉及個人隱私的資料 "
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://sentry.io/privacy/",
"TextMarkTextContent": "https://sentry.io/privacy/"
}
]
}
]
},
{
"ID": "20221027113639-7ruumya",
"Type": "NodeBlockquote",

View file

@ -6,7 +6,7 @@
"id": "20211226123004-dplpw0o",
"title": "範本片段",
"type": "doc",
"updated": "20241213215707"
"updated": "20241224162821"
},
"Children": [
{
@ -53,7 +53,7 @@
"HeadingLevel": 2,
"Properties": {
"id": "20211226123024-eyagqur",
"updated": "20241213215707"
"updated": "20241224162821"
},
"Children": [
{
@ -208,7 +208,7 @@
"ListData": {},
"Properties": {
"id": "20211226123024-pjvw31z",
"updated": "20241213215707"
"updated": "20241224162821"
},
"Children": [
{
@ -477,7 +477,7 @@
},
"Properties": {
"id": "20211226123024-69kddle",
"updated": "20240403150944"
"updated": "20241224162821"
},
"Children": [
{
@ -509,7 +509,7 @@
"IsFencedCodeBlock": true,
"Properties": {
"id": "20241213215524-9an3khb",
"updated": "20241213215524"
"updated": "20241224162821"
},
"Children": [
{
@ -521,7 +521,7 @@
},
{
"Type": "NodeCodeBlockCode",
"Data": " .action{querySQL \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
"Data": " .action{querySpans \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
},
{
"Type": "NodeCodeBlockFenceCloseMarker",

View file

@ -5,7 +5,8 @@
"Properties": {
"id": "20230805232903-erdoerp",
"title": "對接第三方雲端存儲",
"updated": "20240301091104"
"type": "doc",
"updated": "20241216171627"
},
"Children": [
{
@ -55,7 +56,7 @@
"ListData": {},
"Properties": {
"id": "20230805232945-ugjx8sl",
"updated": "20240301091104"
"updated": "20241216171627"
},
"Children": [
{
@ -121,7 +122,7 @@
},
"Properties": {
"id": "20230805232945-2dksutx",
"updated": "20240301091104"
"updated": "20241216171627"
},
"Children": [
{
@ -129,7 +130,7 @@
"Type": "NodeParagraph",
"Properties": {
"id": "20230805232945-ayx9zfr",
"updated": "20240301091104"
"updated": "20241216171606"
},
"Children": [
{
@ -151,20 +152,79 @@
"TextMarkType": "a",
"TextMarkAHref": "https://koofr.eu/",
"TextMarkTextContent": "Koofr"
}
]
},
{
"ID": "20241216171609-pu5jvmt",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20241216171609-pu5jvmt",
"updated": "20241216171627"
},
"Children": [
{
"ID": "20241216171609-abg7al0",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171609-abg7al0",
"updated": "20241216171627"
},
"Children": [
{
"ID": "20241216171609-aled0a0",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171609-aled0a0",
"updated": "20241216171627"
},
"Children": [
{
"Type": "NodeText",
"Data": "由於 WebDAV 協定本身的問題,資料量較大後會出現啟動慢、同步慢、資源佔用高等問題,所以建議選擇使用 S3 對象存儲服務"
}
]
}
]
},
{
"Type": "NodeText",
"Data": "(不支援堅果雲 WebDAV因為其"
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "介面存在限制"
},
{
"Type": "NodeText",
"Data": ""
"ID": "20241216171609-in2fc0o",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171609-in2fc0o",
"updated": "20241216171609"
},
"Children": [
{
"ID": "20241216171609-8zspojy",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171609-8zspojy",
"updated": "20241216171609"
},
"Children": [
{
"Type": "NodeText",
"Data": "不支援堅果雲 WebDAV因為其"
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "介面存在限制"
}
]
}
]
}
]
}

View file

@ -7,7 +7,7 @@
"id": "20240530101000-na9sys7",
"title": "サードパーティのクラウドストレージへの接続",
"type": "doc",
"updated": "20240530101000"
"updated": "20241216171841"
},
"Children": [
{
@ -57,9 +57,8 @@
"Type": "NodeList",
"ListData": {},
"Properties": {
"ID": "20240530101000-itl3kvt",
"id": "20240530101000-y5kmw6j",
"updated": "20240530101000"
"updated": "20241216171841"
},
"Children": [
{
@ -70,7 +69,6 @@
"Marker": "Kg=="
},
"Properties": {
"ID": "20240530101000-vlan2e3",
"id": "20240530101000-qqtgtoh",
"updated": "20240530101000"
},
@ -79,7 +77,6 @@
"ID": "20240530101000-aic7sey",
"Type": "NodeParagraph",
"Properties": {
"ID": "20240530101000-s1ytsva",
"id": "20240530101000-aic7sey",
"updated": "20240530101000"
},
@ -115,16 +112,14 @@
"Marker": "Kg=="
},
"Properties": {
"ID": "20240530101000-5i7ys4o",
"id": "20240530101000-wl4hjuf",
"updated": "20240530101000"
"updated": "20241216171841"
},
"Children": [
{
"ID": "20240530101000-6a5gjia",
"Type": "NodeParagraph",
"Properties": {
"ID": "20240530101000-y2dbhdv",
"id": "20240530101000-6a5gjia",
"updated": "20240530101000"
},
@ -159,6 +154,94 @@
"Data": " など"
}
]
},
{
"ID": "20241216171758-77i85wp",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20241216171758-77i85wp",
"updated": "20241216171812"
},
"Children": [
{
"ID": "20241216171801-fnqtfso",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171801-fnqtfso",
"updated": "20241216171812"
},
"Children": [
{
"ID": "20241216171801-0gz1sfs",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171801-0gz1sfs",
"updated": "20241216171812"
},
"Children": [
{
"Type": "NodeText",
"Data": "WebDAVプロトコル自体の問題により、データ量が多い場合には起動が遅い、同期が遅い、リソース使用量が多いなどの問題が発生する可能性があるため、S3オブジェクトストレージの使用を推奨します"
}
]
}
]
}
]
},
{
"ID": "20241216171758-7guo2ud",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20241216171758-7guo2ud",
"updated": "20241216171841"
},
"Children": [
{
"ID": "20241216171758-tl1nnuk",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20241216171758-tl1nnuk",
"updated": "20241216171841"
},
"Children": [
{
"ID": "20241216171758-y44s4r4",
"Type": "NodeParagraph",
"Properties": {
"id": "20241216171758-y44s4r4",
"updated": "20241216171841"
},
"Children": [
{
"Type": "NodeText",
"Data": "Nutstore cloud WebDAV は "
},
{
"Type": "NodeTextMark",
"TextMarkType": "a",
"TextMarkAHref": "https://help.jianguoyun.com/?p=2064",
"TextMarkTextContent": "インターフェース制限"
},
{
"Type": "NodeText",
"Data": " のためサポートされていません"
}
]
}
]
}
]
}
]
}

View file

@ -7,7 +7,7 @@
"id": "20240530101000-6x9ivi7",
"title": "テンプレートスニペット",
"type": "doc",
"updated": "20241213215720"
"updated": "20241224162728"
},
"Children": [
{
@ -66,7 +66,7 @@
"Properties": {
"ID": "20240530101000-5nvn9ad",
"id": "20240530101000-pi05yzt",
"updated": "20241213215720"
"updated": "20241224162728"
},
"Children": [
{
@ -226,7 +226,7 @@
"ListData": {},
"Properties": {
"id": "20240530101000-by5hqnb",
"updated": "20241213215720"
"updated": "20241224162728"
},
"Children": [
{
@ -495,7 +495,7 @@
},
"Properties": {
"id": "20240530101000-238ctfi",
"updated": "20240530101000"
"updated": "20241224162728"
},
"Children": [
{
@ -527,7 +527,7 @@
"IsFencedCodeBlock": true,
"Properties": {
"id": "20241213215619-gkqs282",
"updated": "20241213215619"
"updated": "20241224162728"
},
"Children": [
{
@ -539,7 +539,7 @@
},
{
"Type": "NodeCodeBlockCode",
"Data": " .action{querySQL \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
"Data": " .action{querySpans \"SELECT * FROM spans LIMIT ?\" \"3\"}\n"
},
{
"Type": "NodeCodeBlockFenceCloseMarker",

View file

@ -1,6 +1,6 @@
{
"name": "SiYuan",
"version": "3.1.15",
"version": "3.1.17",
"description": "Refactor your thinking",
"homepage": "https://b3log.org/siyuan",
"main": "./electron/main.js",
@ -56,12 +56,13 @@
"clean-webpack-plugin": "^4.0.0",
"css-loader": "^6.7.1",
"dayjs": "^1.11.5",
"electron": "32.2.5",
"electron-builder": "24.13.3",
"electron": "32.2.7",
"electron-builder": "25.1.8",
"encoding": "^0.1.13",
"esbuild-loader": "^3.0.1",
"eslint": "^9.15.0",
"file-loader": "^6.2.0",
"globals": "^15.12.0",
"html-loader": "^2.1.2",
"html-webpack-plugin": "^5.5.0",
"iconv-lite": "^0.6.3",
@ -74,8 +75,7 @@
"typescript": "^4.7.4",
"webpack": "^5.94.0",
"webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.10.0",
"globals": "^15.12.0"
"webpack-cli": "^4.10.0"
},
"dependencies": {
"@electron/remote": "^2.1.2"

412
app/pnpm-lock.yaml generated
View file

@ -10,7 +10,7 @@ importers:
dependencies:
'@electron/remote':
specifier: ^2.1.2
version: 2.1.2(electron@32.2.5)
version: 2.1.2(electron@32.2.7)
devDependencies:
'@types/node':
specifier: ^18.13.0
@ -34,11 +34,11 @@ importers:
specifier: ^1.11.5
version: 1.11.5
electron:
specifier: 32.2.5
version: 32.2.5
specifier: 32.2.7
version: 32.2.7
electron-builder:
specifier: 24.13.3
version: 24.13.3(electron-builder-squirrel-windows@25.0.5)
specifier: 25.1.8
version: 25.1.8(electron-builder-squirrel-windows@25.0.5)
encoding:
specifier: ^0.1.13
version: 0.1.13
@ -116,18 +116,13 @@ packages:
resolution: {integrity: sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==}
engines: {node: '>=12'}
'@electron/notarize@2.2.1':
resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==}
engines: {node: '>= 10.0.0'}
'@electron/notarize@2.3.2':
resolution: {integrity: sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==}
engines: {node: '>= 10.0.0'}
'@electron/osx-sign@1.0.5':
resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==}
engines: {node: '>=12.0.0'}
hasBin: true
'@electron/notarize@2.5.0':
resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==}
engines: {node: '>= 10.0.0'}
'@electron/osx-sign@1.3.1':
resolution: {integrity: sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==}
@ -139,15 +134,16 @@ packages:
engines: {node: '>=12.13.0'}
hasBin: true
'@electron/rebuild@3.6.1':
resolution: {integrity: sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==}
engines: {node: '>=12.13.0'}
hasBin: true
'@electron/remote@2.1.2':
resolution: {integrity: sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA==}
peerDependencies:
electron: '>= 13.0.0'
'@electron/universal@1.5.1':
resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==}
engines: {node: '>=8.6'}
'@electron/universal@2.0.1':
resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==}
engines: {node: '>=16.4'}
@ -380,10 +376,6 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
'@malept/cross-spawn-promise@1.1.1':
resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==}
engines: {node: '>= 10'}
'@malept/cross-spawn-promise@2.0.0':
resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==}
engines: {node: '>= 12.13.0'}
@ -659,6 +651,10 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
agent-base@7.1.3:
resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
engines: {node: '>= 14'}
agentkeepalive@4.5.0:
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
engines: {node: '>= 8.0.0'}
@ -711,19 +707,12 @@ packages:
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
engines: {node: '>= 8'}
app-builder-bin@4.0.0:
resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==}
app-builder-bin@5.0.0-alpha.10:
resolution: {integrity: sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==}
app-builder-bin@5.0.0-alpha.7:
resolution: {integrity: sha512-ww2mK4ITUvqisnqOuUWAeHzokpPidyZ7a0ZkwW+V7sF5/Pdi2OldkRjAWqEzn6Xtmj3SLVT84as4wB59A6jJ4g==}
app-builder-lib@24.13.3:
resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==}
engines: {node: '>=14.0.0'}
peerDependencies:
dmg-builder: 24.13.3
electron-builder-squirrel-windows: 24.13.3
app-builder-lib@25.0.5:
resolution: {integrity: sha512-rxgxMx1f7I4ZAP0jA5+5iB7X6x6MJvGF7GauRzQBnIVihwXX2HOiAE7yenyY9Ry5YAiH47MnCxdq413Wq6XOcQ==}
engines: {node: '>=14.0.0'}
@ -731,6 +720,13 @@ packages:
dmg-builder: 25.0.5
electron-builder-squirrel-windows: 25.0.5
app-builder-lib@25.1.8:
resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==}
engines: {node: '>=14.0.0'}
peerDependencies:
dmg-builder: 25.1.8
electron-builder-squirrel-windows: 25.1.8
aproba@2.0.0:
resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
@ -834,30 +830,26 @@ packages:
buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
buffer-equal@1.0.1:
resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==}
engines: {node: '>=0.4'}
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
builder-util-runtime@9.2.4:
resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==}
builder-util-runtime@9.2.10:
resolution: {integrity: sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==}
engines: {node: '>=12.0.0'}
builder-util-runtime@9.2.5:
resolution: {integrity: sha512-HjIDfhvqx/8B3TDN4GbABQcgpewTU4LMRTQPkVpKYV3lsuxEJoIfvg09GyWTNmfVNSUAYf+fbTN//JX4TH20pg==}
engines: {node: '>=12.0.0'}
builder-util@24.13.1:
resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==}
builder-util@25.0.3:
resolution: {integrity: sha512-eH5c1ukdY2xjtFQWQ6jlzEuXuqcuAVc3UQ6V6fdYu9Kg3CkDbCR82Mox42uaJDmee9WXSbP/88cOworFdOHPhw==}
builder-util@25.1.7:
resolution: {integrity: sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==}
cacache@16.1.3:
resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@ -995,9 +987,6 @@ packages:
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
config-file-ts@0.2.6:
resolution: {integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==}
config-file-ts@0.2.8-rc1:
resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==}
@ -1089,14 +1078,11 @@ packages:
detect-node@2.1.0:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
dir-compare@3.3.0:
resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==}
dir-compare@4.2.0:
resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==}
dmg-builder@24.13.3:
resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==}
dmg-builder@25.1.8:
resolution: {integrity: sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==}
dmg-license@1.0.11:
resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==}
@ -1127,17 +1113,10 @@ packages:
resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==}
engines: {node: '>=12'}
dotenv-expand@5.1.0:
resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
dotenv@16.4.5:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
dotenv@9.0.2:
resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
engines: {node: '>=10'}
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
@ -1152,22 +1131,22 @@ packages:
electron-builder-squirrel-windows@25.0.5:
resolution: {integrity: sha512-N2U7LGSdt4hmEhjEeIV2XJbjj2YIrTL6enfsGKfOhGTpL6GEejUmT3gjdKUqKBS5+NBx0GWhnEwD3MpO2P6Nfg==}
electron-builder@24.13.3:
resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==}
electron-builder@25.1.8:
resolution: {integrity: sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==}
engines: {node: '>=14.0.0'}
hasBin: true
electron-publish@24.13.1:
resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==}
electron-publish@25.0.3:
resolution: {integrity: sha512-wSGm+TFK2lArswIFBPLuIRHbo945s3MCvG5y1xVC57zL/PsrElUkaGH2ERtRrcKNpaDNq77rDA9JnMJhAFJjUg==}
electron-publish@25.1.7:
resolution: {integrity: sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==}
electron-to-chromium@1.5.39:
resolution: {integrity: sha512-4xkpSR6CjuiaNyvwiWDI85N9AxsvbPawB8xc7yzLPonYTuP19BVgYweKyUMFtHEZgIcHWMt1ks5Cqx2m+6/Grg==}
electron@32.2.5:
resolution: {integrity: sha512-8t5IGOvms/JTcLNnlOH7rFCAJIZJAazwYrF7kQsKQSLzDHh4z8mGFrU11NN3W4bIT6Yg5DJNniSWz3O5wJLmCw==}
electron@32.2.7:
resolution: {integrity: sha512-y8jbQRG3xogF70XPlk5c+dWe5iRfUBo28o2NMpKd/CcW7ENIaWtBlGima8/8nmRdAaYTy1+yIt6KB0Lon9H8cA==}
engines: {node: '>= 12.20.55'}
hasBin: true
@ -1222,10 +1201,6 @@ packages:
engines: {node: '>=12'}
hasBin: true
escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@ -1531,6 +1506,10 @@ packages:
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
engines: {node: '>= 6'}
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
http2-wrapper@1.0.3:
resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
engines: {node: '>=10.19.0'}
@ -1539,6 +1518,10 @@ packages:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
https-proxy-agent@7.0.6:
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
engines: {node: '>= 14'}
humanize-ms@1.2.1:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
@ -1738,9 +1721,6 @@ packages:
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
keyv@4.5.2:
resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==}
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
@ -2222,10 +2202,6 @@ packages:
resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==}
hasBin: true
read-config-file@6.3.2:
resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==}
engines: {node: '>=12.0.0'}
read-config-file@6.4.0:
resolution: {integrity: sha512-uB5QOBeF84PT61GlV11OTV4jUGHAO3iDEOP6v9ygxhG6Bs9PLg7WsjNT6mtIX2G+x8lJTr4ZWNeG6LDTKkNf2Q==}
engines: {node: '>=12.0.0'}
@ -2381,11 +2357,6 @@ packages:
engines: {node: '>=10'}
hasBin: true
semver@7.5.4:
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
engines: {node: '>=10'}
hasBin: true
semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'}
@ -2796,14 +2767,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@electron/notarize@2.2.1':
dependencies:
debug: 4.3.4
fs-extra: 9.1.0
promise-retry: 2.0.1
transitivePeerDependencies:
- supports-color
'@electron/notarize@2.3.2':
dependencies:
debug: 4.3.4
@ -2812,14 +2775,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@electron/osx-sign@1.0.5':
'@electron/notarize@2.5.0':
dependencies:
compare-version: 0.1.2
debug: 4.3.4
fs-extra: 10.1.0
isbinaryfile: 4.0.10
minimist: 1.2.8
plist: 3.1.0
fs-extra: 9.1.0
promise-retry: 2.0.1
transitivePeerDependencies:
- supports-color
@ -2854,22 +2814,30 @@ snapshots:
- bluebird
- supports-color
'@electron/remote@2.1.2(electron@32.2.5)':
'@electron/rebuild@3.6.1':
dependencies:
electron: 32.2.5
'@electron/universal@1.5.1':
dependencies:
'@electron/asar': 3.2.13
'@malept/cross-spawn-promise': 1.1.1
'@malept/cross-spawn-promise': 2.0.0
chalk: 4.1.2
debug: 4.3.4
dir-compare: 3.3.0
fs-extra: 9.1.0
minimatch: 3.1.2
plist: 3.1.0
detect-libc: 2.0.3
fs-extra: 10.1.0
got: 11.8.6
node-abi: 3.67.0
node-api-version: 0.2.0
node-gyp: 9.4.1
ora: 5.4.1
read-binary-file-arch: 1.0.6
semver: 7.6.3
tar: 6.2.1
yargs: 17.7.2
transitivePeerDependencies:
- bluebird
- supports-color
'@electron/remote@2.1.2(electron@32.2.7)':
dependencies:
electron: 32.2.7
'@electron/universal@2.0.1':
dependencies:
'@electron/asar': 3.2.13
@ -3051,10 +3019,6 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
'@malept/cross-spawn-promise@1.1.1':
dependencies:
cross-spawn: 7.0.6
'@malept/cross-spawn-promise@2.0.0':
dependencies:
cross-spawn: 7.0.6
@ -3367,6 +3331,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
agent-base@7.1.3: {}
agentkeepalive@4.5.0:
dependencies:
humanize-ms: 1.2.1
@ -3418,45 +3384,11 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.1
app-builder-bin@4.0.0: {}
app-builder-bin@5.0.0-alpha.10: {}
app-builder-bin@5.0.0-alpha.7: {}
app-builder-lib@24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@25.0.5):
dependencies:
'@develar/schema-utils': 2.6.5
'@electron/notarize': 2.2.1
'@electron/osx-sign': 1.0.5
'@electron/universal': 1.5.1
'@malept/flatpak-bundler': 0.4.0
'@types/fs-extra': 9.0.13
async-exit-hook: 2.0.1
bluebird-lst: 1.0.9
builder-util: 24.13.1
builder-util-runtime: 9.2.4
chromium-pickle-js: 0.2.0
debug: 4.3.4
dmg-builder: 24.13.3(electron-builder-squirrel-windows@25.0.5)
ejs: 3.1.10
electron-builder-squirrel-windows: 25.0.5(dmg-builder@24.13.3)
electron-publish: 24.13.1
form-data: 4.0.0
fs-extra: 10.1.0
hosted-git-info: 4.1.0
is-ci: 3.0.1
isbinaryfile: 5.0.0
js-yaml: 4.1.0
lazy-val: 1.0.5
minimatch: 5.1.6
read-config-file: 6.3.2
sanitize-filename: 1.6.3
semver: 7.5.4
tar: 6.2.1
temp-file: 3.4.0
transitivePeerDependencies:
- supports-color
app-builder-lib@25.0.5(dmg-builder@24.13.3)(electron-builder-squirrel-windows@25.0.5):
app-builder-lib@25.0.5(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.0.5):
dependencies:
'@develar/schema-utils': 2.6.5
'@electron/notarize': 2.3.2
@ -3471,9 +3403,9 @@ snapshots:
builder-util-runtime: 9.2.5
chromium-pickle-js: 0.2.0
debug: 4.3.4
dmg-builder: 24.13.3(electron-builder-squirrel-windows@25.0.5)
dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.0.5)
ejs: 3.1.10
electron-builder-squirrel-windows: 25.0.5(dmg-builder@24.13.3)
electron-builder-squirrel-windows: 25.0.5(dmg-builder@25.1.8)
electron-publish: 25.0.3
form-data: 4.0.0
fs-extra: 10.1.0
@ -3493,6 +3425,46 @@ snapshots:
- bluebird
- supports-color
app-builder-lib@25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.0.5):
dependencies:
'@develar/schema-utils': 2.6.5
'@electron/notarize': 2.5.0
'@electron/osx-sign': 1.3.1
'@electron/rebuild': 3.6.1
'@electron/universal': 2.0.1
'@malept/flatpak-bundler': 0.4.0
'@types/fs-extra': 9.0.13
async-exit-hook: 2.0.1
bluebird-lst: 1.0.9
builder-util: 25.1.7
builder-util-runtime: 9.2.10
chromium-pickle-js: 0.2.0
config-file-ts: 0.2.8-rc1
debug: 4.3.4
dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.0.5)
dotenv: 16.4.5
dotenv-expand: 11.0.6
ejs: 3.1.10
electron-builder-squirrel-windows: 25.0.5(dmg-builder@25.1.8)
electron-publish: 25.1.7
form-data: 4.0.0
fs-extra: 10.1.0
hosted-git-info: 4.1.0
is-ci: 3.0.1
isbinaryfile: 5.0.0
js-yaml: 4.1.0
json5: 2.2.3
lazy-val: 1.0.5
minimatch: 10.0.1
resedit: 1.7.1
sanitize-filename: 1.6.3
semver: 7.6.3
tar: 6.2.1
temp-file: 3.4.0
transitivePeerDependencies:
- bluebird
- supports-color
aproba@2.0.0: {}
archiver-utils@2.1.0:
@ -3607,8 +3579,6 @@ snapshots:
buffer-crc32@0.2.13: {}
buffer-equal@1.0.1: {}
buffer-from@1.1.2: {}
buffer@5.7.1:
@ -3616,7 +3586,7 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
builder-util-runtime@9.2.4:
builder-util-runtime@9.2.10:
dependencies:
debug: 4.3.4
sax: 1.2.4
@ -3630,27 +3600,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
builder-util@24.13.1:
dependencies:
7zip-bin: 5.2.0
'@types/debug': 4.1.7
app-builder-bin: 4.0.0
bluebird-lst: 1.0.9
builder-util-runtime: 9.2.4
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.3.4
fs-extra: 10.1.0
http-proxy-agent: 5.0.0
https-proxy-agent: 5.0.1
is-ci: 3.0.1
js-yaml: 4.1.0
source-map-support: 0.5.21
stat-mode: 1.0.0
temp-file: 3.4.0
transitivePeerDependencies:
- supports-color
builder-util@25.0.3:
dependencies:
7zip-bin: 5.2.0
@ -3672,6 +3621,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
builder-util@25.1.7:
dependencies:
7zip-bin: 5.2.0
'@types/debug': 4.1.7
app-builder-bin: 5.0.0-alpha.10
bluebird-lst: 1.0.9
builder-util-runtime: 9.2.10
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.3.4
fs-extra: 10.1.0
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6
is-ci: 3.0.1
js-yaml: 4.1.0
source-map-support: 0.5.21
stat-mode: 1.0.0
temp-file: 3.4.0
transitivePeerDependencies:
- supports-color
cacache@16.1.3:
dependencies:
'@npmcli/fs': 2.1.2
@ -3702,7 +3672,7 @@ snapshots:
clone-response: 1.0.2
get-stream: 5.2.0
http-cache-semantics: 4.1.1
keyv: 4.5.2
keyv: 4.5.4
lowercase-keys: 2.0.0
normalize-url: 6.1.0
responselike: 2.0.1
@ -3821,11 +3791,6 @@ snapshots:
concat-map@0.0.1: {}
config-file-ts@0.2.6:
dependencies:
glob: 10.4.5
typescript: 5.6.2
config-file-ts@0.2.8-rc1:
dependencies:
glob: 10.4.5
@ -3920,27 +3885,23 @@ snapshots:
detect-node@2.1.0:
optional: true
dir-compare@3.3.0:
dependencies:
buffer-equal: 1.0.1
minimatch: 3.1.2
dir-compare@4.2.0:
dependencies:
minimatch: 3.1.2
p-limit: 3.1.0
dmg-builder@24.13.3(electron-builder-squirrel-windows@25.0.5):
dmg-builder@25.1.8(electron-builder-squirrel-windows@25.0.5):
dependencies:
app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@25.0.5)
builder-util: 24.13.1
builder-util-runtime: 9.2.4
app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.0.5)
builder-util: 25.1.7
builder-util-runtime: 9.2.10
fs-extra: 10.1.0
iconv-lite: 0.6.3
js-yaml: 4.1.0
optionalDependencies:
dmg-license: 1.0.11
transitivePeerDependencies:
- bluebird
- electron-builder-squirrel-windows
- supports-color
@ -3987,12 +3948,8 @@ snapshots:
dependencies:
dotenv: 16.4.5
dotenv-expand@5.1.0: {}
dotenv@16.4.5: {}
dotenv@9.0.2: {}
duplexer@0.1.2: {}
eastasianwidth@0.2.0: {}
@ -4001,9 +3958,9 @@ snapshots:
dependencies:
jake: 10.8.5
electron-builder-squirrel-windows@25.0.5(dmg-builder@24.13.3):
electron-builder-squirrel-windows@25.0.5(dmg-builder@25.1.8):
dependencies:
app-builder-lib: 25.0.5(dmg-builder@24.13.3)(electron-builder-squirrel-windows@25.0.5)
app-builder-lib: 25.0.5(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.0.5)
archiver: 5.3.2
builder-util: 25.0.3
fs-extra: 10.1.0
@ -4012,35 +3969,23 @@ snapshots:
- dmg-builder
- supports-color
electron-builder@24.13.3(electron-builder-squirrel-windows@25.0.5):
electron-builder@25.1.8(electron-builder-squirrel-windows@25.0.5):
dependencies:
app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@25.0.5)
builder-util: 24.13.1
builder-util-runtime: 9.2.4
app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.0.5)
builder-util: 25.1.7
builder-util-runtime: 9.2.10
chalk: 4.1.2
dmg-builder: 24.13.3(electron-builder-squirrel-windows@25.0.5)
dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.0.5)
fs-extra: 10.1.0
is-ci: 3.0.1
lazy-val: 1.0.5
read-config-file: 6.3.2
simple-update-notifier: 2.0.0
yargs: 17.7.2
transitivePeerDependencies:
- bluebird
- electron-builder-squirrel-windows
- supports-color
electron-publish@24.13.1:
dependencies:
'@types/fs-extra': 9.0.13
builder-util: 24.13.1
builder-util-runtime: 9.2.4
chalk: 4.1.2
fs-extra: 10.1.0
lazy-val: 1.0.5
mime: 2.6.0
transitivePeerDependencies:
- supports-color
electron-publish@25.0.3:
dependencies:
'@types/fs-extra': 9.0.13
@ -4053,9 +3998,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
electron-publish@25.1.7:
dependencies:
'@types/fs-extra': 9.0.13
builder-util: 25.1.7
builder-util-runtime: 9.2.10
chalk: 4.1.2
fs-extra: 10.1.0
lazy-val: 1.0.5
mime: 2.6.0
transitivePeerDependencies:
- supports-color
electron-to-chromium@1.5.39: {}
electron@32.2.5:
electron@32.2.7:
dependencies:
'@electron/get': 2.0.2
'@types/node': 20.14.5
@ -4128,8 +4085,6 @@ snapshots:
'@esbuild/win32-ia32': 0.17.10
'@esbuild/win32-x64': 0.17.10
escalade@3.1.1: {}
escalade@3.2.0: {}
escape-string-regexp@4.0.0: {}
@ -4400,7 +4355,7 @@ snapshots:
es6-error: 4.1.1
matcher: 3.0.0
roarr: 2.15.4
semver: 7.5.4
semver: 7.6.3
serialize-error: 7.0.1
optional: true
@ -4517,6 +4472,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.3
debug: 4.3.4
transitivePeerDependencies:
- supports-color
http2-wrapper@1.0.3:
dependencies:
quick-lru: 5.1.1
@ -4529,6 +4491,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.6:
dependencies:
agent-base: 7.1.3
debug: 4.3.4
transitivePeerDependencies:
- supports-color
humanize-ms@1.2.1:
dependencies:
ms: 2.1.2
@ -4697,10 +4666,6 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.11
keyv@4.5.2:
dependencies:
json-buffer: 3.0.1
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
@ -5153,15 +5118,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
read-config-file@6.3.2:
dependencies:
config-file-ts: 0.2.6
dotenv: 9.0.2
dotenv-expand: 5.1.0
js-yaml: 4.1.0
json5: 2.2.3
lazy-val: 1.0.5
read-config-file@6.4.0:
dependencies:
config-file-ts: 0.2.8-rc1
@ -5322,10 +5278,6 @@ snapshots:
dependencies:
lru-cache: 6.0.0
semver@7.5.4:
dependencies:
lru-cache: 6.0.0
semver@7.6.3: {}
serialize-error@7.0.1:
@ -5355,7 +5307,7 @@ snapshots:
simple-update-notifier@2.0.0:
dependencies:
semver: 7.5.4
semver: 7.6.3
sirv@1.0.19:
dependencies:
@ -5701,7 +5653,7 @@ snapshots:
yargs@17.7.2:
dependencies:
cliui: 8.0.1
escalade: 3.1.1
escalade: 3.2.0
get-caller-file: 2.0.5
require-directory: 2.1.1
string-width: 4.2.3

View file

@ -291,6 +291,10 @@
color: var(--b3-protyle-inline-blockref-color);
}
.b3-menu__avemoji {
display: inline-block;
}
&[data-wrap="true"] {
white-space: pre-wrap;
}

View file

@ -85,7 +85,7 @@
transition: var(--b3-transition), opacity .3s cubic-bezier(0, 0, .2, 1) 0ms;
line-height: 14px;
&:hover:not([disabled]):not(.ft__primary),
&:hover:not([disabled]):not(.ft__primary):not(.block__icon--warning),
&--active {
color: var(--b3-theme-on-background);
background-color: var(--b3-list-icon-hover);
@ -100,6 +100,11 @@
}
}
&--warning:hover {
color: var(--b3-theme-error);
background-color: var(--b3-list-icon-hover);
}
svg {
height: 14px;
width: 14px;

View file

@ -409,14 +409,14 @@
transition: var(--b3-transition);
}
&:hover,
&:hover:not(.dock__item--activefocus),
&--active {
background-color: var(--b3-theme-background-light);
}
&--activefocus {
color: var(--b3-theme-on-primary) !important;
background-color: var(--b3-theme-primary) !important;
color: var(--b3-theme-on-primary);
background-color: var(--b3-theme-primary);
}
}
}

View file

@ -1,18 +1,7 @@
@font-face {
font-family: 'JetBrainsMono-Regular';
src: url(../fonts/JetBrainsMono-2.304/JetBrainsMono-Regular.woff2) format('woff2');
}
@font-face {
font-family: "Emojis";
src: url(../fonts/Noto-COLRv1-2.047/Noto-COLRv1.woff2) format("woff2"),
local("Segoe UI Emoji"),
local("Segoe UI Symbol"),
local("Apple Color Emoji"),
local("Twemoji Mozilla"),
local("Noto Color Emoji"),
local("Android Emoji"),
local("EmojiSymbols");
/* webpackIgnore: true */
src: url(../../../appearance/fonts/JetBrainsMono-2.304/JetBrainsMono-Regular.woff2) format('woff2');
}
.b3-typography,

View file

@ -493,7 +493,8 @@
}
}
.av__views .block__icon {
.av__views .block__icon,
.av__row--footer .av__calc {
opacity: 1;
}

View file

@ -5,6 +5,8 @@
<!-- https://electronjs.org/docs/tutorial/security#csp-meta-tag
<meta http-equiv="Content-Security-Policy" content="script-src 'self'"/>-->
<style id="editorAttr" type="text/css"></style>
<link rel="preload" href="../../../appearance/fonts/Noto-COLRv1-2.047/Noto-COLRv1.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="../../../appearance/fonts/JetBrainsMono-2.304/JetBrainsMono-Regular.woff2" as="font" type="font/woff2" crossorigin>
<script src="../../protyle/js/pdf/pdf.min.mjs?v=4.7.85" type="module"></script>
</head>
<body class="fn__flex-column">
@ -38,7 +40,7 @@
if (refreshElement) {
refreshElement.style.display = ""
}
}, 2000)
}, 7000)
</script>
</body>
</html>

View file

@ -211,7 +211,7 @@ const hidePopover = (event: MouseEvent & { path: HTMLElement[] }) => {
} else {
// 浮窗上点击菜单,浮窗不能消失 https://ld246.com/article/1632668091023
const menuElement = hasClosestByClassName(target, "b3-menu");
if (menuElement) {
if (menuElement && menuElement.getAttribute("data-name") !== "docTreeMore") {
const blockPanel = window.siyuan.blockPanels.find((item) => {
if (item.element.style.zIndex < menuElement.style.zIndex) {
return true;

View file

@ -0,0 +1,9 @@
export const img3115 = (imgElement: HTMLElement) => {
// 移除 3.1.15 以前 .img width 样式
if (imgElement.style.minWidth) {
// 居中需要 minWidth 样式,不能移除 style 属性
imgElement.style.width = "";
} else {
imgElement.removeAttribute("style");
}
};

View file

@ -1366,14 +1366,14 @@ export const windowKeyDown = (app: App, event: KeyboardEvent) => {
return;
}
// https://github.com/siyuan-note/siyuan/issues/8913#issuecomment-1679720605
const confirmElement = document.querySelector("#confirmDialogConfirmBtn");
if (confirmElement) {
const confirmDialogElement = document.querySelector('.b3-dialog--open[data-key="dialog-confirm"]');
if (confirmDialogElement) {
if (event.key === "Enter") {
confirmElement.dispatchEvent(new CustomEvent("click"));
confirmDialogElement.dispatchEvent(new CustomEvent("click", {detail: event.key}));
event.preventDefault();
return;
} else if (event.key === "Escape") {
confirmElement.previousElementSibling.previousElementSibling.dispatchEvent(new CustomEvent("click"));
confirmDialogElement.dispatchEvent(new CustomEvent("click", {detail: event.key}));
event.preventDefault();
return;
}

View file

@ -40,6 +40,11 @@ export const onGetConfig = (isStart: boolean, app: App) => {
port: location.port
});
webFrame.setZoomFactor(window.siyuan.storage[Constants.LOCAL_ZOOM]);
ipcRenderer.send(Constants.SIYUAN_CMD, {
cmd: "setTrafficLightPosition",
zoom: window.siyuan.storage[Constants.LOCAL_ZOOM],
position: Constants.SIZE_ZOOM.find((item) => item.zoom === window.siyuan.storage[Constants.LOCAL_ZOOM]).position
});
/// #endif
if (!window.siyuan.config.uiLayout || (window.siyuan.config.uiLayout && !window.siyuan.config.uiLayout.left)) {
window.siyuan.config.uiLayout = Constants.SIYUAN_EMPTY_LAYOUT;

View file

@ -63,14 +63,6 @@ export const about = {
<div class="fn__space"></div>
<input class="b3-switch fn__flex-center" id="googleAnalytics" type="checkbox"${window.siyuan.config.system.disableGoogleAnalytics ? "" : " checked"}>
</label>
<label class="b3-label fn__flex">
<div class="fn__flex-1">
${window.siyuan.languages.about9}
<div class="b3-label__text">${window.siyuan.languages.about10}</div>
</div>
<div class="fn__space"></div>
<input class="b3-switch fn__flex-center" id="uploadErrLog" type="checkbox"${window.siyuan.config.system.uploadErrLog ? " checked" : ""}>
</label>
<label class="b3-label fn__flex">
<div class="fn__flex-1">
${window.siyuan.languages.about11}
@ -368,15 +360,6 @@ ${checkUpdateHTML}
});
});
});
const uploadErrLogElement = about.element.querySelector("#uploadErrLog") as HTMLInputElement;
uploadErrLogElement.addEventListener("change", () => {
fetchPost("/api/system/setUploadErrLog", {uploadErrLog: uploadErrLogElement.checked}, () => {
exportLayout({
errorExit: true,
cb: exitSiYuan
});
});
});
const downloadInstallPkgElement = about.element.querySelector("#downloadInstallPkg") as HTMLInputElement;
downloadInstallPkgElement.addEventListener("change", () => {
fetchPost("/api/system/setDownloadInstallPkg", {downloadInstallPkg: downloadInstallPkgElement.checked}, () => {

View file

@ -257,7 +257,7 @@ export const exportConfig = {
exportConfig.element.querySelector("#exportData").addEventListener("click", async () => {
/// #if BROWSER
fetchPost("/api/export/exportData", {}, response => {
window.location.href = response.data.zip;
openByMobile(response.data.zip);
});
/// #else
const result = await ipcRenderer.invoke(Constants.SIYUAN_GET, {

View file

@ -392,7 +392,7 @@ export const repos = {
<option value="3" ${window.siyuan.config.sync.mode === 3 ? "selected" : ""}>${window.siyuan.languages.syncMode3}</option>
</select>
</div>
<label class="fn__flex b3-label${(window.siyuan.config.sync.mode !== 1 || window.siyuan.config.system.container === "docker" || window.siyuan.config.sync.provider !== 0) ? " fn__none" : ""}">
<div class="fn__flex b3-label${(window.siyuan.config.sync.mode !== 1) ? " fn__none" : ""}">
<div class="fn__flex-1">
${window.siyuan.languages.syncInterval}
<div class="b3-label__text">${window.siyuan.languages.syncIntervalTip}</div>
@ -401,7 +401,7 @@ export const repos = {
<input type="number" min="30" max="43200" id="syncInterval" class="b3-text-field fn__flex-center" value="${window.siyuan.config.sync.interval}" >
<span class="fn__space"></span>
<span class="fn__flex-center ft__on-surface">${window.siyuan.languages.second}</span>
</label>
</div>
<label class="fn__flex b3-label${(window.siyuan.config.sync.mode !== 1 || window.siyuan.config.system.container === "docker" || window.siyuan.config.sync.provider !== 0) ? " fn__none" : ""}">
<div class="fn__flex-1">
${window.siyuan.languages.syncPerception}
@ -477,9 +477,12 @@ export const repos = {
fetchPost("/api/sync/setSyncMode", {mode: parseInt(syncModeElement.value, 10)}, () => {
if (syncModeElement.value === "1" && window.siyuan.config.sync.provider === 0 && window.siyuan.config.system.container !== "docker") {
syncPerceptionElement.parentElement.classList.remove("fn__none");
syncIntervalElement.parentElement.classList.remove("fn__none");
} else {
syncPerceptionElement.parentElement.classList.add("fn__none");
}
if (syncModeElement.value === "1") {
syncIntervalElement.parentElement.classList.remove("fn__none");
} else {
syncIntervalElement.parentElement.classList.add("fn__none");
}
window.siyuan.config.sync.mode = parseInt(syncModeElement.value, 10);
@ -502,9 +505,12 @@ export const repos = {
syncConfigElement.classList.add("fn__none");
if (window.siyuan.config.sync.mode !== 1 || window.siyuan.config.system.container === "docker" || window.siyuan.config.sync.provider !== 0) {
syncPerceptionElement.parentElement.classList.add("fn__none");
syncIntervalElement.parentElement.classList.add("fn__none");
} else {
syncPerceptionElement.parentElement.classList.remove("fn__none");
}
if (window.siyuan.config.sync.mode !== 1) {
syncIntervalElement.parentElement.classList.add("fn__none");
} else {
syncIntervalElement.parentElement.classList.remove("fn__none");
}
});

View file

@ -95,7 +95,7 @@ export const initConfigSearch = (element: HTMLElement, app: App) => {
// 关于
getLang(["autoLaunch", "autoLaunchTip", "about", "about1", "about2", "about3", "about4", "about5", "about6",
"about7", "about8", "about9", "about10", "about11", "about12", "about13", "about14", "about17", "config",
"about7", "about8", "about11", "about12", "about13", "about14", "about17", "config",
"dataRepoKey", "dataRepoKeyTip1", "dataRepoKeyTip2", "slogan", "currentVer", "checkUpdate", "updatePath",
"systemLog", "importKey", "genKey", "genKeyByPW", "copyKey", "resetRepo", "systemLogTip", "export",
"downloadLatestVer", "safeQuit", "directConnection", "siyuanNote", "key", "password", "copied", "resetRepoTip",

View file

@ -74,7 +74,45 @@ export abstract class Constants {
public static readonly SIZE_UNDO = 64;
public static readonly SIZE_TITLE = 512;
public static readonly SIZE_EDITOR_WIDTH = 760;
public static readonly SIZE_ZOOM = [0.25, 0.33, 0.5, 0.67, 0.75, 0.8, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3];
public static readonly SIZE_ZOOM = [
{
zoom: 0.67,
position: {x: 0, y: 2}
},
{
zoom: 0.75,
position: {x: 1, y: 4}
}, {
zoom: 0.8,
position: {x: 2, y: 4}
}, {
zoom: 0.9,
position: {x: 5, y: 6}
}, {
zoom: 1,
position: {x: 8, y: 8}
}, {
zoom: 1.1,
position: {x: 12, y: 9}
}, {
zoom: 1.25,
position: {x: 18, y: 12}
}, {
zoom: 1.5,
position: {x: 27, y: 16}
}, {
zoom: 1.75,
position: {x: 36, y: 20}
}, {
zoom: 2,
position: {x: 45, y: 23}
}, {
zoom: 2.5,
position: {x: 63, y: 31}
}, {
zoom: 3,
position: {x: 80, y: 39}
}];
// ws callback
public static readonly CB_MOVE_NOLIST = "cb-move-nolist";

View file

@ -16,23 +16,31 @@ export const confirmDialog = (title: string, text: string,
<div class="ft__breakword">${text}</div>
</div>
<div class="b3-dialog__action">
<button class="b3-button b3-button--cancel">${window.siyuan.languages.cancel}</button><div class="fn__space"></div>
<button class="b3-button b3-button--cancel" id="cancelDialogConfirmBtn">${window.siyuan.languages.cancel}</button><div class="fn__space"></div>
<button class="b3-button ${isDelete ? "b3-button--remove" : "b3-button--text"}" id="confirmDialogConfirmBtn">${window.siyuan.languages[isDelete ? "delete" : "confirm"]}</button>
</div>`,
width: isMobile() ? "92vw" : "520px",
});
const btnsElement = dialog.element.querySelectorAll(".b3-button");
btnsElement[0].addEventListener("click", () => {
if (cancel) {
cancel(dialog);
dialog.element.addEventListener("click", (event) => {
let target = event.target as HTMLElement;
const isDispatch = typeof event.detail === "string";
while (target && !target.isSameNode(dialog.element) || isDispatch) {
if (target.id === "cancelDialogConfirmBtn" || (isDispatch && event.detail=== "Escape")) {
if (cancel) {
cancel(dialog);
}
dialog.destroy();
break;
} else if (target.id === "confirmDialogConfirmBtn" || (isDispatch && event.detail=== "Enter")) {
if (confirm) {
confirm(dialog);
}
dialog.destroy();
break;
}
target = target.parentElement;
}
dialog.destroy();
});
btnsElement[1].addEventListener("click", () => {
if (confirm) {
confirm(dialog);
}
dialog.destroy();
});
dialog.element.setAttribute("data-key", Constants.DIALOG_CONFIRM);
};

View file

@ -276,7 +276,7 @@ export const openFile = async (options: IOpenFileOptions) => {
}
wnd.showHeading();
if (options.afterOpen) {
options.afterOpen(createdTab.model);
options.afterOpen(createdTab ? createdTab.model : undefined);
}
return createdTab;
}

View file

@ -45,6 +45,7 @@ const renderDoc = (element: HTMLElement, currentPage: number, id: string) => {
pageNumElement.setAttribute("data-totalpage", response.data.pageCount.toString());
pageNumElement.textContent = currentPage.toString();
const pageInfoElement = nextElement.nextElementSibling.nextElementSibling;
pageInfoElement.classList.remove("fn__none");
pageInfoElement.textContent = window.siyuan.languages.pageCountAndHistoryCount.replace("${x}", response.data.pageCount).replace("${y}", response.data.totalCount);
if (response.data.histories.length === 0) {
listElement.innerHTML = `<li class="b3-list--empty">${window.siyuan.languages.emptyContent}</li>`;
@ -76,7 +77,7 @@ export const openDocHistory = (options: {
<button class="b3-button b3-button--text ft__selectnone" data-type="jumpRepoPage" disabled>1</button>
<span data-type="docnext" class="block__icon block__icon--show b3-tooltips b3-tooltips__e" disabled="disabled" aria-label="${window.siyuan.languages.nextLabel}"><svg><use xlink:href="#iconRight"></use></svg></span>
<span class="fn__space"></span>
<span class="ft__on-surface fn__flex-shrink ft__selectnone">${window.siyuan.languages.pageCountAndHistoryCount}</span>
<span class="ft__on-surface fn__flex-shrink ft__selectnone fn__none">${window.siyuan.languages.pageCountAndHistoryCount}</span>
<span class="fn__space"></span>
<div class="fn__flex-1"></div>
<select data-type="opselect" class="b3-select">

View file

@ -60,6 +60,7 @@ export const getAllEditor = () => {
};
export const getAllModels = () => {
/// #if !MOBILE
const models: IModels = {
editor: [],
graph: [],
@ -109,6 +110,7 @@ export const getAllModels = () => {
getTabs(window.siyuan.layout.layout);
}
return models;
/// #endif
};
export const getAllWnds = (layout: Layout, wnds: Wnd[]) => {

View file

@ -10,7 +10,7 @@ import {openSetting} from "../config";
import {openSearch} from "../search/spread";
import {App} from "../index";
/// #if !BROWSER
import {webFrame} from "electron";
import {ipcRenderer, webFrame} from "electron";
/// #endif
import {Constants} from "../constants";
import {isBrowser, isWindow} from "../util/functions";
@ -262,39 +262,43 @@ export const initBar = (app: App) => {
export const setZoom = (type: "zoomIn" | "zoomOut" | "restore") => {
/// #if !BROWSER
const isTabWindow = isWindow();
let zoom = 1;
if (type === "zoomIn") {
Constants.SIZE_ZOOM.find((item, index) => {
if (item === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
zoom = Constants.SIZE_ZOOM[index + 1] || 3;
if (item.zoom === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
zoom = Constants.SIZE_ZOOM[index + 1]?.zoom || 3;
return true;
}
});
} else if (type === "zoomOut") {
Constants.SIZE_ZOOM.find((item, index) => {
if (item === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
zoom = Constants.SIZE_ZOOM[index - 1] || 0.25;
if (item.zoom === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
zoom = Constants.SIZE_ZOOM[index - 1]?.zoom || 0.67;
return true;
}
});
}
webFrame.setZoomFactor(zoom);
ipcRenderer.send(Constants.SIYUAN_CMD, {
cmd: "setTrafficLightPosition",
zoom,
position: Constants.SIZE_ZOOM.find((item) => item.zoom === zoom).position
});
window.siyuan.storage[Constants.LOCAL_ZOOM] = zoom;
if (!isTabWindow) {
setStorageVal(Constants.LOCAL_ZOOM, zoom);
}
const barZoomElement = document.getElementById("barZoom");
if (zoom === 1) {
barZoomElement.classList.add("fn__none");
} else {
if (zoom > 1) {
barZoomElement.querySelector("use").setAttribute("xlink:href", "#iconZoomIn");
setStorageVal(Constants.LOCAL_ZOOM, zoom);
if (!isWindow()) {
const barZoomElement = document.getElementById("barZoom");
if (zoom === 1) {
barZoomElement.classList.add("fn__none");
} else {
barZoomElement.querySelector("use").setAttribute("xlink:href", "#iconZoomOut");
if (zoom > 1) {
barZoomElement.querySelector("use").setAttribute("xlink:href", "#iconZoomIn");
} else {
barZoomElement.querySelector("use").setAttribute("xlink:href", "#iconZoomOut");
}
barZoomElement.classList.remove("fn__none");
}
barZoomElement.classList.remove("fn__none");
}
/// #endif
};

View file

@ -380,8 +380,7 @@ export const initNavigationMenu = (app: App, liElement: HTMLElement) => {
click: () => {
const msgId = showMessage(window.siyuan.languages.exporting, -1);
fetchPost("/api/export/exportNotebookMd", {
notebook: notebookId,
path: "/"
notebook: notebookId
}, response => {
hideMessage(msgId);
openByMobile(response.data.zip);
@ -705,6 +704,7 @@ export const initFileMenu = (app: App, notebookId: string, pathString: string, l
separatorPosition: "top",
});
}
window.siyuan.menus.menu.element.setAttribute("data-name", "docTreeMore");
return window.siyuan.menus.menu;
};

View file

@ -59,6 +59,7 @@ import {Menu} from "../plugin/Menu";
import {getFirstBlock} from "../protyle/wysiwyg/getBlock";
import {popSearch} from "../mobile/menu/search";
import {showMessage} from "../dialog/message";
import {img3115} from "../boot/compatibleVersion";
const renderAssetList = (element: Element, k: string, position: IPosition, exts: string[] = []) => {
fetchPost("/api/search/searchAsset", {
@ -1027,7 +1028,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
element.style.maxWidth = "none";
const textElements = element.querySelectorAll("textarea");
textElements[0].addEventListener("input", (event: InputEvent) => {
const value = (event.target as HTMLInputElement).value.replace(/\n|\r\n|\r|\u2028|\u2029/g, "");
const value = (event.target as HTMLInputElement).value.replace(/\n|\r\n|\r|\u2028|\u2029/g, "").trim();
imgElement.setAttribute("src", value);
imgElement.setAttribute("data-src", value);
if (value.startsWith("assets/")) {
@ -1188,6 +1189,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
rangeElement.value = "0";
rangeElement.parentElement.setAttribute("aria-label", inputElement.value ? (inputElement.value + "px") : window.siyuan.languages.default);
img3115(assetElement);
imgElement.parentElement.style.width = inputElement.value ? (inputElement.value + "px") : "";
imgElement.style.height = "";
});
@ -1218,6 +1220,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
bind(element) {
rangeElement = element.querySelector("input");
rangeElement.addEventListener("input", () => {
img3115(assetElement);
imgElement.parentElement.style.width = rangeElement.value + "%";
imgElement.style.height = "";
rangeElement.parentElement.setAttribute("aria-label", `${rangeElement.value}%`);
@ -1251,6 +1254,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
rangeHeightElement.parentElement.setAttribute("aria-label", inputElement.value ? (inputElement.value + "px") : window.siyuan.languages.default);
imgElement.style.height = inputElement.value ? (inputElement.value + "px") : "";
img3115(assetElement);
imgElement.parentElement.style.width = "";
});
inputElement.addEventListener("blur", () => {
@ -1280,6 +1284,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
bind(element) {
rangeHeightElement = element.querySelector("input");
rangeHeightElement.addEventListener("input", () => {
img3115(assetElement);
imgElement.parentElement.style.width = "";
imgElement.style.height = rangeHeightElement.value + "vh";
rangeHeightElement.parentElement.setAttribute("aria-label", `${rangeHeightElement.value}%`);
@ -1820,6 +1825,7 @@ const genImageWidthMenu = (label: string, imgElement: HTMLElement, protyle: IPro
label,
click() {
nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
img3115(imgElement.parentElement.parentElement);
imgElement.parentElement.style.width = label === window.siyuan.languages.default ? "" : label;
imgElement.style.height = "";
updateTransaction(protyle, id, nodeElement.outerHTML, html);
@ -1835,6 +1841,7 @@ const genImageHeightMenu = (label: string, imgElement: HTMLElement, protyle: IPr
click() {
nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
imgElement.style.height = label === window.siyuan.languages.default ? "" : parseInt(label) + "vh";
img3115(imgElement.parentElement.parentElement);
imgElement.parentElement.style.width = "";
updateTransaction(protyle, id, nodeElement.outerHTML, html);
focusBlock(nodeElement);
@ -1854,7 +1861,7 @@ export const iframeMenu = (protyle: IProtyle, nodeElement: Element) => {
bind(element) {
element.style.maxWidth = "none";
element.querySelector("textarea").addEventListener("change", (event) => {
const value = (event.target as HTMLTextAreaElement).value.replace(/\n|\r\n|\r|\u2028|\u2029/g, "");
const value = (event.target as HTMLTextAreaElement).value.replace(/\n|\r\n|\r|\u2028|\u2029/g, "").trim();
const biliMatch = value.match(/(?:www\.|\/\/)bilibili\.com\/video\/(\w+)/);
if (value.indexOf("bilibili.com") > -1 && (value.indexOf("bvid=") > -1 || (biliMatch && biliMatch[1]))) {
const params: IObject = {
@ -1925,7 +1932,7 @@ export const videoMenu = (protyle: IProtyle, nodeElement: Element, type: string)
bind(element) {
element.style.maxWidth = "none";
element.querySelector("textarea").addEventListener("change", (event) => {
videoElement.setAttribute("src", (event.target as HTMLTextAreaElement).value.replace(/\n|\r\n|\r|\u2028|\u2029/g, ""));
videoElement.setAttribute("src", (event.target as HTMLTextAreaElement).value.replace(/\n|\r\n|\r|\u2028|\u2029/g, "").trim());
updateTransaction(protyle, id, nodeElement.outerHTML, html);
html = nodeElement.outerHTML;
event.stopPropagation();

View file

@ -20,7 +20,7 @@ import {openMobileFileById} from "../mobile/editor";
import {lockScreen, exitSiYuan} from "../dialog/processSystem";
import {Model} from "../layout/Model";
import {getDockByType} from "../layout/tabUtil";
import {getAllEditor} from "../layout/getAll";
import {getAllEditor, getAllModels} from "../layout/getAll";
let openTab;
let openWindow;
@ -198,5 +198,6 @@ export const API = {
Menu,
Setting,
getAllEditor,
getAllModels,
platformUtils
};

View file

@ -168,7 +168,7 @@ const renderPDF = async (id: string) => {
.b3-label:last-child {
border-bottom: none;
}
${setInlineStyle(false)}
${await setInlineStyle(false)}
${document.getElementById("pluginsStyle").innerHTML}
${getSnippetCSS()}
</style>

View file

@ -443,7 +443,7 @@ export class Background {
if (tags) {
let html = "";
const colors = ["secondary", "primary", "info", "success", "warning", "error", "pink"];
new Set(tags.split(",")).forEach((item, index) => {
Array.from(new Set(tags.split(",").map(item => item.trim()))).forEach((item, index) => {
if (!item.replace(/ /g, "")) {
return;
}
@ -526,7 +526,7 @@ export class Background {
response.data.tags.forEach((item: string, index: number) => {
html += `<div class="b3-list-item b3-list-item--narrow${index === 0 ? " b3-list-item--focus" : ""}">
<div class="fn__flex-1">${item}</div>
${currentTags.includes(Lute.UnEscapeHTMLStr(item))?'<svg class="b3-menu__checked"><use xlink:href="#iconSelect"></use></svg>':""}
${currentTags.includes(Lute.UnEscapeHTMLStr(item)) ? '<svg class="b3-menu__checked"><use xlink:href="#iconSelect"></use></svg>' : ""}
</div>`;
});
listElement.innerHTML = html;
@ -562,7 +562,7 @@ export class Background {
response.data.tags.forEach((item: string) => {
searchHTML += `<div class="b3-list-item b3-list-item--narrow">
<div class="fn__flex-1">${item}</div>
${currentTags.includes(Lute.UnEscapeHTMLStr(item.replace(/<mark>/g,"").replace(/<\/mark>/g,"")))?'<svg class="b3-menu__checked"><use xlink:href="#iconSelect"></use></svg>':""}
${currentTags.includes(Lute.UnEscapeHTMLStr(item.replace(/<mark>/g, "").replace(/<\/mark>/g, ""))) ? '<svg class="b3-menu__checked"><use xlink:href="#iconSelect"></use></svg>' : ""}
</div>`;
if (item === `<mark>${response.data.k}</mark>`) {
hasKey = true;

View file

@ -440,6 +440,12 @@ export const hintRef = (key: string, protyle: IProtyle, source: THintSource): IH
let value = `<span data-type="block-ref" data-id="${item.id}" data-subtype="d">${item.name || item.refText.replace(new RegExp(Constants.ZWSP, "g"), "")}</span>`;
if (source === "search") {
value = `<span data-type="block-ref" data-id="${item.id}" data-subtype="s">${key}${Constants.ZWSP}${item.name || item.refText.replace(new RegExp(Constants.ZWSP, "g"), "")}</span>`;
} else if (source === "av") {
let refText = item.name || item.refText.replace(new RegExp(Constants.ZWSP, "g"), "");
if (nodeElement) {
refText = item.ial["custom-sy-av-s-text-" + nodeElement.getAttribute("data-av-id")] || refText;
}
value = `<span data-type="block-ref" data-id="${item.id}" data-subtype="s">${refText}</span>`;
}
dataList.push({
value,

View file

@ -339,7 +339,11 @@ ${unicode2Emoji(emoji.unicode)}</button>`;
let blockRefHTML;
if (source === "av") {
// av 搜索时需要获取值 https://github.com/siyuan-note/siyuan/issues/12020
blockRefHTML = `<span data-type="block-ref" data-id="${item.id}" data-subtype="s">${item.name || item.refText.replace(new RegExp(Constants.ZWSP, "g"), "")}</span>`;
let refText = item.name || item.refText.replace(new RegExp(Constants.ZWSP, "g"), "");
if (nodeElement) {
refText = item.ial["custom-sy-av-s-text-" + nodeElement.getAttribute("data-av-id")] || refText;
}
blockRefHTML = `<span data-type="block-ref" data-id="${item.id}" data-subtype="s">${refText}</span>`;
} else {
blockRefHTML = `<span data-type="block-ref" data-id="${item.id}" data-subtype="s">${oldValue}</span>`;
}

View file

@ -43,6 +43,7 @@ import {setStorageVal} from "./util/compatibility";
import {merge} from "./util/merge";
import {getAllModels} from "../layout/getAll";
import {isSupportCSSHL} from "./render/searchMarkRender";
import {renderAVAttribute} from "./render/av/blockAttr";
export class Protyle {
@ -463,4 +464,8 @@ export class Protyle {
public enable() {
enableProtyle(this.protyle);
}
public renderAVAttribute(element: HTMLElement, id: string, cb?: (element: HTMLElement) => void) {
renderAVAttribute(element, id, this.protyle, cb);
}
}

View file

@ -22,7 +22,7 @@ import {hintRef} from "../../hint/extend";
import {focusBlock, focusByRange} from "../../util/selection";
import {showMessage} from "../../../dialog/message";
import {previewImage} from "../../preview/image";
import {unicode2Emoji} from "../../../emoji";
import {openEmojiPanel, unicode2Emoji} from "../../../emoji";
import * as dayjs from "dayjs";
import {openCalcMenu} from "./calc";
import {avRender} from "./render";
@ -214,7 +214,7 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
}
const cellType = getTypeByCellElement(target);
// TODO 点击单元格的时候, lineNumber 选中整行
if (cellType === "updated" || cellType === "created" || cellType === "lineNumber" || (cellType === "block" && !target.getAttribute("data-detached"))) {
if (cellType === "updated" || cellType === "created" || cellType === "lineNumber") {
selectRow(rowElement.querySelector(".av__firstcol"), "toggle");
} else {
scrollElement.querySelectorAll(".av__row--select").forEach(item => {
@ -233,6 +233,17 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
event.preventDefault();
event.stopPropagation();
return true;
} else if (target.classList.contains("b3-menu__avemoji")) {
const rect = target.getBoundingClientRect();
openEmojiPanel(target.parentElement.getAttribute("data-block-id"), "doc", {
x: rect.left,
y: rect.bottom,
h: rect.height,
w: rect.width,
}, undefined, target.querySelector("img"));
event.preventDefault();
event.stopPropagation();
return true;
}
target = target.parentElement;
}
@ -318,7 +329,7 @@ export const avContextmenu = (protyle: IProtyle, rowElement: HTMLElement, positi
id: "copyBlockRef",
iconHTML: "",
label: window.siyuan.languages.copyBlockRef,
click: async () => {
click: () => {
let text = "";
for (let i = 0; i < ids.length; i++) {
const id = ids[i];
@ -327,8 +338,7 @@ export const avContextmenu = (protyle: IProtyle, rowElement: HTMLElement, positi
if (cellElement.getAttribute("data-detached") === "true") {
content = cellElement.querySelector(".av__celltext").textContent;
} else {
const response = await fetchSyncPost("/api/block/getRefText", {id});
content = `((${id} '${response.data}'))`;
content = `((${id} '${cellElement.querySelector(".av__celltext").textContent}'))`;
}
if (ids.length > 1) {
text += "* ";
@ -388,7 +398,7 @@ export const avContextmenu = (protyle: IProtyle, rowElement: HTMLElement, positi
id: "copyProtocolInMd",
iconHTML: "",
label: window.siyuan.languages.copyProtocolInMd,
click: async () => {
click: () => {
let text = "";
for (let i = 0; i < ids.length; i++) {
const id = ids[i];
@ -397,8 +407,7 @@ export const avContextmenu = (protyle: IProtyle, rowElement: HTMLElement, positi
if (cellElement.getAttribute("data-detached") === "true") {
content = cellElement.querySelector(".av__celltext").textContent;
} else {
const response = await fetchSyncPost("/api/block/getRefText", {id});
content = `[${response.data}](siyuan://blocks/${id})`;
content = `[${cellElement.querySelector(".av__celltext").textContent}](siyuan://blocks/${id})`;
}
if (ids.length > 1) {
text += "* ";
@ -573,18 +582,9 @@ ${window.siyuan.languages.insertRowAfter.replace("${x}", `<span class="fn__space
});
const editAttrSubmenu: IMenu[] = [];
rowElement.parentElement.querySelectorAll(".av__row--header .av__cell").forEach((cellElement: HTMLElement) => {
let hideBlock = false;
const selectElements: HTMLElement[] = Array.from(blockElement.querySelectorAll(`.av__row--select:not(.av__row--header) .av__cell[data-col-id="${cellElement.dataset.colId}"]`));
if (cellElement.dataset.dtype === "block") {
selectElements.find(item => {
if (!item.dataset.detached) {
hideBlock = true;
return true;
}
});
}
const type = cellElement.getAttribute("data-dtype") as TAVCol;
if (!hideBlock && !["updated", "created"].includes(type)) {
if (!["updated", "created"].includes(type)) {
const icon = cellElement.dataset.icon;
editAttrSubmenu.push({
iconHTML: icon ? unicode2Emoji(icon, "b3-menu__icon", true) : `<svg class="b3-menu__icon"><use xlink:href="#${getColIconByType(type)}"></use></svg>`,

View file

@ -61,7 +61,7 @@ export const genAVValueHTML = (value: IAVCellValue) => {
let html = "";
switch (value.type) {
case "block":
html = `<div class="fn__flex-1" placeholder="${window.siyuan.languages.empty}">${value.block.content}</div>`;
html = `<input value="${value.block.content}" type="text" class="b3-text-field b3-text-field--text fn__flex-1" placeholder="${window.siyuan.languages.empty}">`;
break;
case "text":
html = `<textarea style="resize: vertical" rows="${value.text.content.split("\n").length}" class="b3-text-field b3-text-field--text fn__flex-1" placeholder="${window.siyuan.languages.empty}">${value.text.content}</textarea>`;
@ -186,7 +186,7 @@ export const renderAVAttribute = (element: HTMLElement, id: string, protyle: IPr
</div>
<div class="fn__flex-1"></div>
<span class="fn__space"></span>
<span data-type="remove" class="block__icon block__icon--show b3-tooltips__w b3-tooltips" aria-label="${window.siyuan.languages.removeAV}"><svg><use xlink:href="#iconTrashcan"></use></svg></span>
<span data-type="remove" class="block__icon block__icon--warning block__icon--show b3-tooltips__w b3-tooltips" aria-label="${window.siyuan.languages.removeAV}"><svg><use xlink:href="#iconTrashcan"></use></svg></span>
</div>`;
table.keyValues?.forEach(item => {
innerHTML += `<div class="block__icons av__row" data-id="${id}" data-col-id="${item.key.id}">
@ -198,7 +198,7 @@ export const renderAVAttribute = (element: HTMLElement, id: string, protyle: IPr
<div data-av-id="${table.avID}" data-col-id="${item.values[0].keyID}" data-block-id="${item.values[0].blockID}" data-id="${item.values[0].id}" data-type="${item.values[0].type}"
data-options="${item.key?.options ? escapeAttr(JSON.stringify(item.key.options)) : "[]"}"
${["text", "number", "date", "url", "phone", "template", "email"].includes(item.values[0].type) ? "" : `placeholder="${window.siyuan.languages.empty}"`}
class="fn__flex-1 fn__flex${["url", "text", "number", "email", "phone"].includes(item.values[0].type) ? "" : " custom-attr__avvalue"}${["block", "created", "updated"].includes(item.values[0].type) ? " custom-attr__avvalue--readonly" : ""}">${genAVValueHTML(item.values[0])}</div>
class="fn__flex-1 fn__flex${["url", "text", "number", "email", "phone", "block"].includes(item.values[0].type) ? "" : " custom-attr__avvalue"}${["created", "updated"].includes(item.values[0].type) ? " custom-attr__avvalue--readonly" : ""}">${genAVValueHTML(item.values[0])}</div>
</div>`;
});
innerHTML += `<div class="fn__hr"></div>
@ -358,6 +358,10 @@ class="fn__flex-1 fn__flex${["url", "text", "number", "email", "phone"].includes
action: "removeAttrViewBlock",
srcIDs: [id],
avID: blockElement.dataset.avId,
}, {
action: "doUpdateUpdated",
id,
data: dayjs().format("YYYYMMDDHHmmss"),
}]);
blockElement.remove();
if (!element.innerHTML) {
@ -408,6 +412,14 @@ class="fn__flex-1 fn__flex${["url", "text", "number", "email", "phone"].includes
}
};
}
} else if (type === "block") {
value = {
block: {
content: item.value,
id: item.parentElement.dataset.blockId,
},
isDetached: false
};
}
fetchPost("/api/av/setAttributeViewBlockAttr", {
avID: item.parentElement.dataset.avId,
@ -417,6 +429,8 @@ class="fn__flex-1 fn__flex${["url", "text", "number", "email", "phone"].includes
}, (setResponse) => {
if (type === "number") {
item.parentElement.querySelector(".fn__flex-center").textContent = setResponse.data.value.number.formattedContent;
} else if (type === "block" && !item.value) {
item.value = setResponse.data.value.block.content;
}
});
});

View file

@ -78,6 +78,9 @@ export const genCellValueByElement = (colType: TAVCol, cellElement: HTMLElement)
};
if (colType === "block" && textElement.dataset.id) {
cellValue.block.id = textElement.dataset.id;
if (textElement.previousElementSibling?.classList.contains("b3-menu__avemoji")) {
cellValue.block.icon = textElement.previousElementSibling.getAttribute("data-unicode");
}
}
} else if (colType === "mSelect" || colType === "select") {
const mSelect: IAVCellSelectValue[] = [];
@ -275,7 +278,11 @@ export const genCellValue = (colType: TAVCol, value: string | any) => {
}
}
if (colType === "block") {
cellValue.isDetached = true;
if (typeof value === "object" && value.id) {
cellValue.isDetached = false;
} else {
cellValue.isDetached = true;
}
}
return cellValue;
};
@ -365,9 +372,6 @@ export const popTextCell = (protyle: IProtyle, cellElements: HTMLElement[], type
if (type === "updated" || type === "created" || document.querySelector(".av__mask")) {
return;
}
if (type === "block" && (cellElements.length > 1 || !cellElements[0].getAttribute("data-detached"))) {
return;
}
const blockElement = hasClosestBlock(cellElements[0]);
if (!blockElement) {
return;
@ -391,7 +395,7 @@ export const popTextCell = (protyle: IProtyle, cellElements: HTMLElement[], type
}
if (["text", "email", "phone", "block", "template"].includes(type)) {
html = `<textarea ${style} spellcheck="false" class="b3-text-field">${cellElements[0].firstElementChild.textContent}</textarea>`;
html = `<textarea ${style} spellcheck="false" class="b3-text-field">${cellElements[0].querySelector(".av__celltext").textContent}</textarea>`;
} else if (type === "url") {
html = `<textarea ${style} spellcheck="false" class="b3-text-field">${cellElements[0].firstElementChild.getAttribute("data-href")}</textarea>`;
} else if (type === "number") {
@ -614,10 +618,11 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va
json.push([]);
}
json[json.length - 1].push(oldValue);
let newValue = value;
// relation 为全部更新,以下类型为添加
if (type === "mAsset") {
if (Array.isArray(value)) {
value = oldValue.mAsset.concat(value);
newValue = oldValue.mAsset.concat(value);
} else if (typeof value !== "undefined") { // 不传入为删除,传入字符串不进行处理
let link = protyle.lute.GetLinkDest(value);
let name = "";
@ -645,14 +650,14 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va
}
if (imgSrc) {
// 支持解析 ![]() https://github.com/siyuan-note/siyuan/issues/11487
value = oldValue.mAsset.concat({
newValue = oldValue.mAsset.concat({
type: "image",
content: imgSrc,
name: ""
});
} else {
// 支持解析 https://github.com/siyuan-note/siyuan/issues/11463
value = oldValue.mAsset.concat({
newValue = oldValue.mAsset.concat({
type: "file",
content: link,
name
@ -685,10 +690,16 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va
color: colorIndex.toString()
});
});
value = oldValue.mSelect.concat(newMSelectValue);
newValue = oldValue.mSelect.concat(newMSelectValue);
}
} else if (type === "block" && typeof value === "string" && oldValue.block.id) {
newValue = {
content: value,
id: oldValue.block.id,
icon: oldValue.block.icon
};
}
const cellValue = genCellValue(type, value);
const cellValue = genCellValue(type, newValue);
cellValue.id = cellId;
if ((cellValue.type === "date" && typeof cellValue.date === "string") ||
(cellValue.type === "relation" && typeof cellValue.relation === "string")) {
@ -702,26 +713,16 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va
if (objEquals(cellValue, oldValue)) {
return;
}
if (type === "block" && !item.dataset.detached) {
const newId = Lute.NewNodeID();
doOperations.push({
action: "unbindAttrViewBlock",
id: rowID,
nextID: newId,
avID,
});
rowElement.dataset.id = newId;
item.dataset.blockId = newId;
} else {
doOperations.push({
action: "updateAttrViewCell",
id: cellId,
avID,
keyID: colId,
rowID,
data: cellValue
});
}
doOperations.push({
action: "updateAttrViewCell",
id: cellId,
avID,
keyID: colId,
rowID,
data: cellValue
});
undoOperations.push({
action: "updateAttrViewCell",
id: cellId,
@ -789,7 +790,7 @@ export const renderCell = (cellValue: IAVCellValue, rowIndex = 0) => {
if (cellValue?.isDetached) {
text = `<span class="av__celltext">${cellValue.block.content || ""}</span><span class="b3-chip b3-chip--info b3-chip--small" data-type="block-more">${window.siyuan.languages.more}</span>`;
} else {
text = `<span data-type="block-ref" data-id="${cellValue.block.id}" data-subtype="s" class="av__celltext av__celltext--ref">${cellValue.block.content || window.siyuan.languages.untitled}</span><span class="b3-chip b3-chip--info b3-chip--small" data-type="block-more">${window.siyuan.languages.update}</span>`;
text = `${cellValue.block.icon ? `<span class="b3-menu__avemoji" data-unicode="${cellValue.block.icon}">${unicode2Emoji(cellValue.block.icon)}</span>` : ""}<span data-type="block-ref" data-id="${cellValue.block.id}" data-subtype="s" class="av__celltext av__celltext--ref">${cellValue.block.content}</span><span class="b3-chip b3-chip--info b3-chip--small" data-type="block-more">${window.siyuan.languages.update}</span>`;
}
} else if (cellValue.type === "number") {
text = `<span class="av__celltext" data-content="${cellValue?.number.isNotEmpty ? cellValue?.number.content : ""}">${cellValue?.number.formattedContent || cellValue?.number.content || ""}</span>`;
@ -877,7 +878,7 @@ const renderRollup = (cellValue: IAVCellValue) => {
if (cellValue?.isDetached) {
text = `<span class="av__celltext" data-id="${cellValue.block?.id}">${cellValue.block?.content || window.siyuan.languages.untitled}</span>`;
} else {
text = `<span data-type="block-ref" data-id="${cellValue.block?.id}" data-subtype="s" class="av__celltext av__celltext--ref">${cellValue.block?.content || window.siyuan.languages.untitled}</span>`;
text = `${cellValue.block.icon ? `<span class="b3-menu__avemoji" data-unicode="${cellValue.block.icon}">${unicode2Emoji(cellValue.block.icon)}</span>` : ""}<span data-type="block-ref" data-id="${cellValue.block?.id}" data-subtype="s" class="av__celltext av__celltext--ref">${cellValue.block?.content || window.siyuan.languages.untitled}</span>`;
}
} else if (cellValue.type === "number") {
text = cellValue?.number.formattedContent || cellValue?.number.content.toString() || "";

View file

@ -968,9 +968,10 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen
});
dialog.element.addEventListener("click", (event) => {
let target = event.target as HTMLElement;
while (target && !target.isSameNode(dialog.element)) {
const isDispatch = typeof event.detail === "string";
while (target && !target.isSameNode(dialog.element) || isDispatch) {
const action = target.getAttribute("data-action");
if (action === "delete") {
if (action === "delete" || (isDispatch && event.detail === "Enter")) {
removeColByMenu({
protyle,
colId,
@ -998,13 +999,15 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen
});
dialog.destroy();
break;
} else if (target.classList.contains("b3-button--cancel")) {
} else if (target.classList.contains("b3-button--cancel") || (isDispatch && event.detail === "Escape")) {
dialog.destroy();
break;
}
target = target.parentElement;
}
});
dialog.element.querySelector("button").focus();
dialog.element.setAttribute("data-key", Constants.DIALOG_CONFIRM);
return;
}
}

View file

@ -1106,11 +1106,12 @@ export const openMenuPanel = (options: {
<button class="fn__block b3-button b3-button--cancel">${window.siyuan.languages.cancel}</button>
</div>`,
});
dialog.element.addEventListener("click", (event) => {
let target = event.target as HTMLElement;
while (target && !target.isSameNode(dialog.element)) {
dialog.element.addEventListener("click", (dialogEvent) => {
let target = dialogEvent.target as HTMLElement;
const isDispatch = typeof dialogEvent.detail === "string";
while (target && !target.isSameNode(dialog.element) || isDispatch) {
const action = target.getAttribute("data-action");
if (action === "delete") {
if (action === "delete" || (isDispatch && dialogEvent.detail === "Enter")) {
removeCol({
protyle: options.protyle,
data,
@ -1140,13 +1141,14 @@ export const openMenuPanel = (options: {
});
dialog.destroy();
break;
} else if (target.classList.contains("b3-button--cancel")) {
} else if (target.classList.contains("b3-button--cancel") || (isDispatch && dialogEvent.detail === "Escape")) {
dialog.destroy();
break;
}
target = target.parentElement;
}
});
dialog.element.setAttribute("data-key", Constants.DIALOG_CONFIRM);
} else {
removeCol({
protyle: options.protyle,

View file

@ -139,7 +139,7 @@ export const setColOption = (protyle: IProtyle, data: IAV, target: HTMLElement,
if ((name === inputElement.value && desc === descElement.value) || !inputElement.value) {
return;
}
// 不判断重名 https://github.com/siyuan-note/siyuan/issues/11484
// cell 不判断重名 https://github.com/siyuan-note/siyuan/issues/11484
transaction(protyle, [{
action: "updateAttrViewColOption",
id: colId,
@ -163,13 +163,23 @@ export const setColOption = (protyle: IProtyle, data: IAV, target: HTMLElement,
}]);
data.view.columns.find(column => {
if (column.id === colId) {
// 重名不进行更新 https://github.com/siyuan-note/siyuan/issues/13554
let hasName = false;
column.options.find((item) => {
if (item.name === name) {
item.name = inputElement.value;
item.desc = descElement.value;
if (item.name === inputElement.value) {
hasName = true;
return true;
}
});
if (!hasName) {
column.options.find((item) => {
if (item.name === name) {
item.name = inputElement.value;
item.desc = descElement.value;
return true;
}
});
}
return true;
}
});

View file

@ -138,6 +138,19 @@ export const isMac = () => {
return navigator.platform.toUpperCase().indexOf("MAC") > -1;
};
export const isWin11 = async () => {
if (!(navigator as any).userAgentData || !(navigator as any).userAgentData.getHighEntropyValues) {
return false;
}
const ua = await (navigator as any).userAgentData.getHighEntropyValues(["platformVersion"]);
if ((navigator as any).userAgentData.platform === "Windows") {
if (parseInt(ua.platformVersion.split(".")[0]) >= 13) {
return true;
}
}
return false;
};
export const isInAndroid = () => {
return window.siyuan.config.system.container === "android" && window.JSAndroid;
};

View file

@ -186,28 +186,52 @@ const processAV = (range: Range, html: string, protyle: IProtyle, blockElement:
}
const text = protyle.lute.BlockDOM2Content(html);
const cellsElement: HTMLElement[] = Array.from(blockElement.querySelectorAll(".av__cell--active, .av__cell--select"));
const rowsElement = blockElement.querySelector(".av__row--select");
const cellElements: HTMLElement[] = Array.from(blockElement.querySelectorAll(".av__cell--active, .av__cell--select"));
const rowsElement = blockElement.querySelectorAll(".av__row--select");
if (rowsElement) {
const textJSON: string[][] = [];
text.split("\n").forEach(row => {
textJSON.push(row.split("\t"));
});
if (rowsElement && textJSON.length === 1 && textJSON[0].length === 1) {
updateCellsValue(protyle, blockElement as HTMLElement, text, undefined, columns, html);
} else if (cellsElement.length > 0) {
if (cellsElement.length > 1) {
// 选择多个单元格时,逐行填充
let rowIndex = 0;
text.split("\n").find((row) => {
if (!row) {
return false;
}
if (cellsElement[rowIndex]) {
updateCellsValue(protyle, blockElement as HTMLElement, row.trim(), [cellsElement[rowIndex]], columns, html);
rowIndex++;
return;
}
if (rowsElement) {
rowsElement.forEach(rowElement => {
rowElement.querySelectorAll(".av__cell").forEach((cellElement: HTMLElement) => {
cellElements.push(cellElement);
});
});
}
if (cellElements.length > 0) {
if (textJSON.length === 1 && textJSON[0].length === 1) {
updateCellsValue(protyle, blockElement as HTMLElement, text, cellElements, columns, html);
} else {
let currentRowElement:Element;
const firstColIndex = cellElements[0].getAttribute("data-col-id");
textJSON.forEach((rowValue, rowIndex) => {
if (!currentRowElement) {
currentRowElement = cellElements[0].parentElement;
} else {
currentRowElement = currentRowElement.nextElementSibling;
}
if (!currentRowElement.classList.contains("av__row")) {
return true;
}
let cellElement: HTMLElement;
rowValue.forEach((cellValue, cellIndex) => {
if (!cellElement) {
cellElement = currentRowElement.querySelector(`.av__cell[data-col-id="${firstColIndex}"]`) as HTMLElement;
} else {
cellElement = cellElement.nextElementSibling as HTMLElement;
}
if (!cellElement.classList.contains("av__cell")) {
return true;
}
updateCellsValue(protyle, blockElement as HTMLElement, cellValue, [cellElement], columns, html);
});
});
} else {
updateCellsValue(protyle, blockElement as HTMLElement, text, cellsElement, columns, html);
}
document.querySelector(".av__panel")?.remove();
} else if (hasClosestByClassName(range.startContainer, "av__title")) {

View file

@ -395,6 +395,10 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven
const range = getEditorRange(protyle.wysiwyg.element);
if (nodeElement.getAttribute("data-type") === "NodeCodeBlock" ||
protyle.toolbar.getCurrentType(range).includes("code")) {
// https://github.com/siyuan-note/siyuan/issues/13552
textPlain = textPlain.replace(/\u200D```/g, "```");
textPlain = textPlain.replace(/```/g, "\u200D```");
insertHTML(textPlain, protyle);
return;
} else if (siyuanHTML) {
@ -434,6 +438,10 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven
// 复制 HTML 块粘贴出来的不是 HTML 块 https://github.com/siyuan-note/siyuan/issues/12994
tempInnerHTML = Lute.UnEscapeHTMLStr(tempInnerHTML);
}
// https://github.com/siyuan-note/siyuan/issues/13552
tempInnerHTML = tempInnerHTML.replace(/\u200D```/g, "```");
insertHTML(tempInnerHTML, protyle, isBlock, false, true);
}
filterClipboardHint(protyle, protyle.lute.BlockDOM2StdMd(tempInnerHTML));
@ -531,6 +539,10 @@ export const paste = async (protyle: IProtyle, event: (ClipboardEvent | DragEven
}
}
}
// https://github.com/siyuan-note/siyuan/issues/13552
textPlain = textPlain.replace(/\u200D```/g, "```");
const textPlainDom = protyle.lute.Md2BlockDOM(textPlain);
insertHTML(textPlainDom, protyle, false, false, true);
filterClipboardHint(protyle, textPlain);

View file

@ -95,6 +95,7 @@ import {openEmojiPanel, unicode2Emoji} from "../../emoji";
import {openLink} from "../../editor/openLink";
import {mathRender} from "../render/mathRender";
import {editAssetItem} from "../render/av/asset";
import {img3115} from "../../boot/compatibleVersion";
export class WYSIWYG {
public lastHTMLs: { [key: string]: string } = {};
@ -669,12 +670,17 @@ export class WYSIWYG {
const dragElement = target.previousElementSibling as HTMLElement;
const dragWidth = dragElement.clientWidth;
const dragHeight = dragElement.clientHeight;
const imgElement = dragElement.parentElement.parentElement;
if (dragElement.tagName === "IMG") {
img3115(imgElement);
}
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
if (dragElement.tagName === "IMG") {
dragElement.style.height = "";
}
if (moveEvent.clientX > x - dragWidth + 8 && moveEvent.clientX < mostRight) {
const multiple = ((dragElement.tagName === "IMG" && !dragElement.parentElement.parentElement.style.minWidth && nodeElement.style.textAlign !== "center") || !isCenter) ? 1 : 2;
const multiple = ((dragElement.tagName === "IMG" && !imgElement.style.minWidth && nodeElement.style.textAlign !== "center") || !isCenter) ? 1 : 2;
if (dragElement.tagName === "IMG") {
dragElement.parentElement.style.width = Math.max(17, dragWidth + (moveEvent.clientX - x) * multiple) + "px";
} else {
@ -1482,7 +1488,7 @@ export class WYSIWYG {
}
});
tableSelectElement.removeAttribute("style");
if (getSelection().rangeCount>0) {
if (getSelection().rangeCount > 0) {
const range = getSelection().getRangeAt(0);
if (nodeElement.contains(range.startContainer)) {
range.insertNode(document.createElement("wbr"));

View file

@ -853,8 +853,19 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
let nextSibling = hasNextSibling(range.startContainer) as Element;
if (nextSibling) {
if (nextSibling.nodeType === 3 && nextSibling.textContent === Constants.ZWSP) {
if (!nextSibling.nextSibling) {
// https://github.com/siyuan-note/siyuan/issues/13524
const nextBlockElement = getNextBlock(nodeElement);
if (nextBlockElement) {
removeBlock(protyle, nextBlockElement, range, "remove");
}
event.stopPropagation();
event.preventDefault();
return;
}
nextSibling = nextSibling.nextSibling as Element;
}
if (nextSibling.nodeType === 1 && nextSibling.classList.contains("img")) {
// 光标需在图片前 https://github.com/siyuan-note/siyuan/issues/12452
const textPosition = getSelectionOffset(range.startContainer, protyle.wysiwyg.element, range);
@ -1354,7 +1365,16 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
if (matchHotKey(window.siyuan.config.keymap.editor.list.outdent.custom, event)) {
const selectElements = protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select");
if (selectElements.length > 0) {
if (selectElements[0].getAttribute("data-type") === "NodeListItem") {
let isContinuous = true;
selectElements.forEach((item, index) => {
if (item.nextElementSibling && selectElements[index + 1]) {
if (!selectElements[index + 1].isSameNode(item.nextElementSibling)) {
isContinuous = false;
}
}
});
if (isContinuous &&
(selectElements[0].classList.contains("li") || selectElements[0].parentElement.classList.contains("li"))) {
listOutdent(protyle, Array.from(selectElements), range);
}
event.preventDefault();
@ -1371,7 +1391,16 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
if (matchHotKey(window.siyuan.config.keymap.editor.list.indent.custom, event)) {
const selectElements = protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select");
if (selectElements.length > 0) {
if (selectElements[0].getAttribute("data-type") === "NodeListItem") {
let isContinuous = true;
selectElements.forEach((item, index) => {
if (item.nextElementSibling && selectElements[index + 1]) {
if (!selectElements[index + 1].isSameNode(item.nextElementSibling)) {
isContinuous = false;
}
}
});
if (isContinuous &&
(selectElements[0].classList.contains("li") || selectElements[0].parentElement.classList.contains("li"))) {
listIndent(protyle, Array.from(selectElements), range);
}
event.preventDefault();
@ -1785,5 +1814,11 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
if (isNotCtrl(event) && event.key !== "Backspace" && event.key !== "Escape" && event.key !== "Delete" && !event.shiftKey && !event.altKey && event.key !== "Enter") {
hideElements(["select"], protyle);
}
if (matchHotKey("⌘B", event) || matchHotKey("⌘I", event) || matchHotKey("⌘U", event)) {
event.preventDefault();
event.stopPropagation();
return;
}
});
};

View file

@ -76,17 +76,23 @@ export const addSubList = (protyle: IProtyle, nodeElement: Element, range: Range
};
export const listIndent = (protyle: IProtyle, liItemElements: Element[], range: Range) => {
liItemElements.forEach(item => {
item.removeAttribute("select-start");
item.removeAttribute("select-end");
});
if (!liItemElements[0].classList.contains("li")) {
if (liItemElements[0].parentElement.childElementCount === liItemElements.length + 2) {
liItemElements = [liItemElements[0].parentElement];
} else {
return;
}
}
const previousElement = liItemElements[0].previousElementSibling as HTMLElement;
if (!previousElement) {
return;
}
range.collapse(false);
range.insertNode(document.createElement("wbr"));
liItemElements.forEach(item => {
item.classList.remove("protyle-wysiwyg--select");
item.removeAttribute("select-start");
item.removeAttribute("select-end");
});
const html = previousElement.parentElement.outerHTML;
if (previousElement.lastElementChild.previousElementSibling.getAttribute("data-type") === "NodeList") {
// 上一个列表的最后一项为子列表
@ -320,6 +326,17 @@ export const breakList = (protyle: IProtyle, blockElement: Element, range: Range
* @param deleteElement
*/
export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range: Range, isDelete = false, deleteElement?: Element) => {
liItemElements.forEach(item => {
item.removeAttribute("select-start");
item.removeAttribute("select-end");
});
if (!liItemElements[0].classList.contains("li")) {
if (liItemElements[0].parentElement.childElementCount === liItemElements.length + 2) {
liItemElements = [liItemElements[0].parentElement];
} else {
return;
}
}
const liElement = liItemElements[0].parentElement;
const liId = liElement.getAttribute("data-node-id");
if (!liId) {
@ -348,9 +365,6 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range:
let nextElement = liItemElements[liItemElements.length - 1].nextElementSibling;
let lastBlockElement = liItemElements[liItemElements.length - 1].lastElementChild.previousElementSibling;
liItemElements.forEach(item => {
item.classList.remove("protyle-wysiwyg--select");
item.removeAttribute("select-start");
item.removeAttribute("select-end");
Array.from(item.children).forEach((blockElement, index) => {
const id = blockElement.getAttribute("data-node-id");
if (!id) {
@ -506,11 +520,6 @@ export const listOutdent = (protyle: IProtyle, liItemElements: Element[], range:
const doOperations: IOperation[] = [];
const undoOperations: IOperation[] = [];
const previousID = liItemElements[0].previousElementSibling?.getAttribute("data-node-id");
liItemElements.forEach(item => {
item.classList.remove("protyle-wysiwyg--select");
item.removeAttribute("select-start");
item.removeAttribute("select-end");
});
let startIndex;
if (!liItemElements[0].previousElementSibling && liElement.getAttribute("data-subtype") === "o") {
startIndex = parseInt(liItemElements[0].getAttribute("data-marker"));

View file

@ -14,7 +14,7 @@ import {isPaidUser} from "../util/needSubscribe";
import {showMessage} from "../dialog/message";
import {saveAssetKeyList} from "./toggleHistory";
export const openSearchAsset = (element: Element, isStick: boolean) => {
export const openSearchAsset = (element: HTMLElement, isStick: boolean) => {
/// #if !MOBILE
window.siyuan.menus.menu.remove();
element.previousElementSibling.classList.add("fn__none");
@ -133,7 +133,7 @@ export const openSearchAsset = (element: Element, isStick: boolean) => {
nextElement.classList.remove("fn__flex-1");
nextElement.style[direction === "lr" ? "width" : "height"] = nextSize + "px";
element.style.userSelect = "none";
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
moveEvent.preventDefault();
moveEvent.stopPropagation();
@ -146,6 +146,7 @@ export const openSearchAsset = (element: Element, isStick: boolean) => {
};
documentSelf.onmouseup = () => {
element.style.userSelect = "none";
documentSelf.onmousemove = null;
documentSelf.onmouseup = null;
documentSelf.ondragstart = null;

View file

@ -13,7 +13,7 @@ import {inputEvent} from "./util";
export const toggleReplaceHistory = (replaceInputElement: HTMLInputElement) => {
const list = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS];
if (!list.replaceKeys || list.replaceKeys.length === 0) {
if (!list.replaceKeys || list.replaceKeys.length === 0 || (list.length === 1 && list[0] === replaceInputElement.value)) {
return;
}
const menu = new Menu("search-replace-history");
@ -79,8 +79,9 @@ export const toggleReplaceHistory = (replaceInputElement: HTMLInputElement) => {
};
export const toggleSearchHistory = (searchElement: Element, config: Config.IUILayoutTabSearchConfig, edit: Protyle) => {
const searchInputElement = searchElement.querySelector("#searchInput, #toolbarSearch") as HTMLInputElement;
const list = window.siyuan.storage[Constants.LOCAL_SEARCHKEYS];
if (!list.keys || list.keys.length === 0) {
if (!list.keys || list.keys.length === 0 || (list.length === 1 && list[0] === searchInputElement.value)) {
return;
}
const menu = new Menu("search-history");
@ -98,7 +99,6 @@ export const toggleSearchHistory = (searchElement: Element, config: Config.IUILa
});
const separatorElement = menu.addSeparator(1);
let current = true;
const searchInputElement = searchElement.querySelector("#searchInput, #toolbarSearch") as HTMLInputElement;
list.keys.forEach((s: string) => {
if (s !== searchInputElement.value && s) {
const menuItem = menu.addItem({
@ -153,8 +153,9 @@ export const toggleSearchHistory = (searchElement: Element, config: Config.IUILa
};
export const toggleAssetHistory = (assetElement: Element) => {
const assetInputElement = assetElement.querySelector("#searchAssetInput") as HTMLInputElement;
const keys = window.siyuan.storage[Constants.LOCAL_SEARCHASSET].keys;
if (!keys || keys.length === 0) {
if (!keys || keys.length === 0 || (keys.length === 1 && keys[0] === assetInputElement.value)) {
return;
}
const menu = new Menu("search-asset-history");
@ -172,7 +173,6 @@ export const toggleAssetHistory = (assetElement: Element) => {
});
const separatorElement = menu.addSeparator(1);
let current = true;
const assetInputElement = assetElement.querySelector("#searchAssetInput") as HTMLInputElement;
keys.forEach((s: string) => {
if (s !== assetInputElement.value && s) {
const menuItem = menu.addItem({
@ -233,7 +233,7 @@ export const saveKeyList = (type: "keys" | "replaceKeys", value: string) => {
setStorageVal(Constants.LOCAL_SEARCHKEYS, window.siyuan.storage[Constants.LOCAL_SEARCHKEYS]);
};
export const saveAssetKeyList = (inputElement:HTMLInputElement) => {
export const saveAssetKeyList = (inputElement: HTMLInputElement) => {
if (!inputElement.value) {
return;
}

View file

@ -10,7 +10,7 @@ import {Protyle} from "../protyle";
import {resize} from "../protyle/util/resize";
import {Menu} from "../plugin/Menu";
export const openSearchUnRef = (element: Element, editor: Protyle) => {
export const openSearchUnRef = (element: HTMLElement, editor: Protyle) => {
window.siyuan.menus.menu.remove();
element.previousElementSibling.previousElementSibling.classList.add("fn__none");
element.classList.remove("fn__none");
@ -46,7 +46,7 @@ export const openSearchUnRef = (element: Element, editor: Protyle) => {
nextElement.classList.remove("fn__flex-1");
nextElement.style[direction === "lr" ? "width" : "height"] = nextSize + "px";
element.style.userSelect = "none";
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
moveEvent.preventDefault();
moveEvent.stopPropagation();
@ -59,6 +59,7 @@ export const openSearchUnRef = (element: Element, editor: Protyle) => {
};
documentSelf.onmouseup = () => {
element.style.userSelect = "";
documentSelf.onmousemove = null;
documentSelf.onmouseup = null;
documentSelf.ondragstart = null;

View file

@ -51,6 +51,7 @@ import {getUnRefList, openSearchUnRef, unRefMoreMenu} from "./unRef";
import {getDefaultType} from "./getDefault";
import {isSupportCSSHL, searchMarkRender} from "../protyle/render/searchMarkRender";
import {saveKeyList, toggleAssetHistory, toggleReplaceHistory, toggleSearchHistory} from "./toggleHistory";
import {highlightById} from "../util/highlightById";
export const openGlobalSearch = (app: App, text: string, replace: boolean, searchData?: Config.IUILayoutTabSearchConfig) => {
text = text.trim();
@ -84,7 +85,7 @@ export const openGlobalSearch = (app: App, text: string, replace: boolean, searc
};
// closeCB 不存在为页签搜索
export const genSearch = (app: App, config: Config.IUILayoutTabSearchConfig, element: Element, closeCB?: () => void) => {
export const genSearch = (app: App, config: Config.IUILayoutTabSearchConfig, element: HTMLElement, closeCB?: () => void) => {
let methodText = window.siyuan.languages.keyword;
if (config.method === 1) {
methodText = window.siyuan.languages.querySyntax;
@ -311,7 +312,7 @@ export const genSearch = (app: App, config: Config.IUILayoutTabSearchConfig, ele
nextElement.classList.remove("fn__flex-1");
nextElement.style[direction === "lr" ? "width" : "height"] = nextSize + "px";
element.style.userSelect = "none";
documentSelf.onmousemove = (moveEvent: MouseEvent) => {
moveEvent.preventDefault();
moveEvent.stopPropagation();
@ -324,6 +325,7 @@ export const genSearch = (app: App, config: Config.IUILayoutTabSearchConfig, ele
};
documentSelf.onmouseup = () => {
element.style.userSelect = "";
documentSelf.onmousemove = null;
documentSelf.onmouseup = null;
documentSelf.ondragstart = null;
@ -338,8 +340,8 @@ export const genSearch = (app: App, config: Config.IUILayoutTabSearchConfig, ele
});
const localSearch = window.siyuan.storage[Constants.LOCAL_SEARCHASSET] as ISearchAssetOption;
const assetsElement = element.querySelector("#searchAssets");
const unRefPanelElement = element.querySelector("#searchUnRefPanel");
const assetsElement = element.querySelector("#searchAssets") as HTMLElement;
const unRefPanelElement = element.querySelector("#searchUnRefPanel") as HTMLElement;
element.addEventListener("click", (event: MouseEvent) => {
let target = event.target as HTMLElement;
const searchPathInputElement = element.querySelector("#searchPathInput");
@ -1101,6 +1103,8 @@ export const getArticle = (options: {
searchMarkRender(options.edit.protyle, getResponse.data.keywords, options.id, () => {
if (options.edit.protyle.highlight.ranges.length > 0 && options.edit.protyle.highlight.ranges[options.edit.protyle.highlight.rangeIndex]) {
options.edit.protyle.contentElement.scrollTop = options.edit.protyle.contentElement.scrollTop + options.edit.protyle.highlight.ranges[options.edit.protyle.highlight.rangeIndex].getBoundingClientRect().top - contentRect.top - contentRect.height / 2;
} else {
highlightById(options.edit.protyle, options.id);
}
});
} else {

View file

@ -1537,10 +1537,6 @@ declare namespace Config {
* Operating system platform name
*/
osPlatform: string;
/**
* Whether to upload error logs
*/
uploadErrLog: boolean;
/**
* The absolute path of the workspace directory
*/

View file

@ -874,7 +874,8 @@ interface IAVCellValue {
mAsset?: IAVCellAssetValue[]
block?: {
content: string,
id?: string
id?: string,
icon?: string
}
url?: {
content: string

View file

@ -7,7 +7,7 @@ import {exportLayout} from "../layout/util";
/// #endif
import {fetchPost} from "./fetch";
import {appearance} from "../config/appearance";
import {isInAndroid, isInHarmony, isInIOS} from "../protyle/util/compatibility";
import {isInAndroid, isInHarmony, isInIOS, isIPad, isIPhone, isMac, isWin11} from "../protyle/util/compatibility";
const loadThirdIcon = (iconURL: string, data: Config.IAppearance) => {
addScript(iconURL, "iconDefaultScript").then(() => {
@ -199,9 +199,78 @@ export const addGA = () => {
}
};
export const setInlineStyle = (set = true) => {
export const setInlineStyle = async (set = true) => {
const height = Math.floor(window.siyuan.config.editor.fontSize * 1.625);
let style = `.b3-typography, .protyle-wysiwyg, .protyle-title {font-size:${window.siyuan.config.editor.fontSize}px !important}
let style;
// Emojis Reset: 字体中包含了 emoji需重置
// Emojis Additional 苹果/win11 字体中没有的 emoji
if (isMac() || isIPad() || isIPhone()) {
style = `@font-face {
font-family: "Emojis Additional";
src: url(../../../appearance/fonts/Noto-COLRv1-2.047/Noto-COLRv1.woff2) format("woff2");
unicode-range: U+1fae9, U+1fac6, U+1fabe, U+1fadc, U+e50a, U+1fa89, U+1fadf, U+1f1e6-1f1ff, U+1fa8f;
}
@font-face {
font-family: "Emojis Reset";
src: local("Apple Color Emoji"),
local("Segoe UI Emoji"),
local("Segoe UI Symbol");
unicode-range: U+26a1, U+21a9, U+21aa, U+2708, U+263a, U+1fae4, U+2194-2199, U+2934-2935, U+25b6, U+25c0, U+23cf,
U+2640, U+2642, U+2611, U+303d,U+3030, U+1f170, U+1f171, U+24c2, U+1f17e, U+1f17f, U+1f250, U+1f21a, U+1f22f,
U+1f232-1f23a, U+1f251, U+3297, U+3299, U+2639, U+2660, U+2666, U+2665, U+2663, U+26A0, U+a9, U+ae, U+2122;
}
@font-face {
font-family: "Emojis";
src: local("Apple Color Emoji"),
local("Segoe UI Emoji"),
local("Segoe UI Symbol");
}`;
} else {
const isWin11Browser = await isWin11();
if (isWin11Browser) {
style = `@font-face {
font-family: "Emojis Additional";
src: url(../../../appearance/fonts/Noto-COLRv1-2.047/Noto-COLRv1.woff2) format("woff2");
unicode-range: U+1fae9, U+1fac6, U+1fabe, U+1fadc, U+e50a, U+1fa89, U+1fadf, U+1f1e6-1f1ff, U+1f3f4, U+e0067, U+e0062,
U+e0065, U+e006e, U+e0067, U+e007f, U+e0073, U+e0063, U+e0074, U+e0077, U+e006c;
}
@font-face {
font-family: "Emojis Reset";
src: local("Segoe UI Emoji"),
local("Segoe UI Symbol");
unicode-range: U+263a, U+21a9, U+2642, U+303d, U+2197, U+2198, U+2199, U+2196, U+2195, U+2194, U+2660, U+2665, U+2666,
U+2663, U+3030, U+21aa, U+25b6, U+25c0, U+2640, U+203c, U+a9, U+ae, U+2122;;
}
@font-face {
font-family: "Emojis";
src: local("Segoe UI Emoji"),
local("Segoe UI Symbol");
}`;
} else {
style = `@font-face {
font-family: "Emojis Reset";
src: url(../../../appearance/fonts/Noto-COLRv1-2.047/Noto-COLRv1.woff2) format("woff2");
unicode-range: U+263a, U+2194-2199, U+2934-2935, U+2639, U+26a0, U+25b6, U+25c0, U+23cf, U+2640, U+2642, U+203c, U+2049,
U+2611, U+303d, U+1f170-1f171, U+24c2, U+1f17e, U+1f17f, U+1f22f, U+1f250, U+1f21a, U+1f232-1f23a, U+1f251, U+3297,
U+3299, U+25aa, U+25ab, U+2660, U+2666, U+2665, U+2663, U+1f636, U+1f62e, U+1f642, U+1f635, U+2620, U+2763, U+2764,
U+1f441, U+fe0f, U+1f5e8, U+270c, U+261d, U+270d, U+200d, U+e50a, U+3030, U+21aa, U+21a9, U+1f525, U+1fa79, U+1f4ab,
U+1f4a8, U+1f32b, U+a9, U+ae, U+2122;;
}
@font-face {
font-family: "Emojis";
src: url(../../../appearance/fonts/Noto-COLRv1-2.047/Noto-COLRv1.woff2) format("woff2"),
local("Segoe UI Emoji"),
local("Segoe UI Symbol"),
local("Apple Color Emoji"),
local("Twemoji Mozilla"),
local("Noto Color Emoji"),
local("Android Emoji"),
local("EmojiSymbols");
}`;
}
}
style += `.b3-typography, .protyle-wysiwyg, .protyle-title {font-size:${window.siyuan.config.editor.fontSize}px !important}
.b3-typography code:not(.hljs), .protyle-wysiwyg span[data-type~=code] { font-variant-ligatures: ${window.siyuan.config.editor.codeLigatures ? "normal" : "none"} }
.li > .protyle-action {height:${height + 8}px;line-height: ${height + 8}px}
.protyle-wysiwyg [data-node-id].li > .protyle-action ~ .h1, .protyle-wysiwyg [data-node-id].li > .protyle-action ~ .h2, .protyle-wysiwyg [data-node-id].li > .protyle-action ~ .h3, .protyle-wysiwyg [data-node-id].li > .protyle-action ~ .h4, .protyle-wysiwyg [data-node-id].li > .protyle-action ~ .h5, .protyle-wysiwyg [data-node-id].li > .protyle-action ~ .h6 {line-height:${height + 8}px;}
@ -219,7 +288,7 @@ export const setInlineStyle = (set = true) => {
.protyle-wysiwyg .li {min-height:${height + 8}px}
.protyle-gutters button svg {height:${height}px}`;
if (window.siyuan.config.editor.fontFamily) {
style += `\n.b3-typography:not(.b3-typography--default), .protyle-wysiwyg, .protyle-title {font-family: "${window.siyuan.config.editor.fontFamily}", var(--b3-font-family)}`;
style += `\n.b3-typography:not(.b3-typography--default), .protyle-wysiwyg, .protyle-title {font-family: "Emojis Additional", "Emojis Reset", "${window.siyuan.config.editor.fontFamily}", var(--b3-font-family)}`;
}
// pad 端菜单移除显示,如工作空间
if ("ontouchend" in document) {

View file

@ -154,8 +154,10 @@ export const movePathTo = (cb: (toPath: string[], toNotebook: string[]) => void,
return;
}
const dialog = new Dialog({
title: `${title || window.siyuan.languages.move}
<div style="max-height: 16px;overflow: auto;line-height: 14px;-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0, #000 6px);padding-bottom: 4px;margin-bottom: -4px" class="ft__smaller ft__on-surface fn__hidescrollbar"></div>`,
title: `<div style="padding: 8px;">
${title || window.siyuan.languages.move}
<div style="max-height: 16px;overflow: auto;line-height: 14px;-webkit-mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0, #000 6px);padding-bottom: 4px;margin-bottom: -4px" class="ft__smaller ft__on-surface fn__hidescrollbar"></div>
</div>`,
content: `<div class="b3-form__icon" style="margin: 8px">
<span data-menu="true" class="b3-form__icon-list fn__a b3-tooltips b3-tooltips__s" aria-label="${updateHotkeyTip("")}">
<svg class="svg--mid"><use xlink:href="#iconSearch"></use></svg>
@ -178,6 +180,7 @@ export const movePathTo = (cb: (toPath: string[], toNotebook: string[]) => void,
}
}
});
dialog.element.querySelector(".b3-dialog__header").setAttribute("style", "padding:0");
dialog.element.setAttribute("data-key", Constants.DIALOG_MOVEPATHTO);
if (paths && paths.length > 0) {
fetchPost("/api/filetree/getHPathsByPaths", {paths}, (response) => {
@ -260,7 +263,7 @@ export const movePathTo = (cb: (toPath: string[], toNotebook: string[]) => void,
const toggleMovePathHistory = () => {
const keys = window.siyuan.storage[Constants.LOCAL_MOVE_PATH].keys;
if (!keys || keys.length === 0) {
if (!keys || keys.length === 0 || (keys.length === 1 && keys[0] === inputElement.value)) {
return;
}
const menu = new Menu("move-path-history");

View file

@ -1,5 +1,5 @@
import {Constants} from "../constants";
import {webFrame} from "electron";
import {ipcRenderer, webFrame} from "electron";
import {fetchPost} from "../util/fetch";
import {adjustLayout, getInstanceById, JSONToCenter} from "../layout/util";
import {resizeTabs} from "../layout/tabUtil";
@ -16,6 +16,11 @@ import {initWindowEvent} from "../boot/globalEvent/event";
export const init = (app: App) => {
webFrame.setZoomFactor(window.siyuan.storage[Constants.LOCAL_ZOOM]);
ipcRenderer.send(Constants.SIYUAN_CMD, {
cmd: "setTrafficLightPosition",
zoom: window.siyuan.storage[Constants.LOCAL_ZOOM],
position: Constants.SIZE_ZOOM.find((item) => item.zoom === window.siyuan.storage[Constants.LOCAL_ZOOM]).position
});
initWindowEvent(app);
fetchPost("/api/system/getEmojiConf", {}, response => {
window.siyuan.emojis = response.data as IEmoji[];

File diff suppressed because one or more lines are too long

View file

@ -75,13 +75,6 @@ module.exports = (env, argv) => {
},
],
},
{
test: /\.woff2$/,
type: "asset/resource",
generator: {
filename: "../fonts/[name][ext]",
},
},
{
test: /\.(png|svg)$/,
use: [

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