hexo-theme-stellar 2.0.0-rc.3 → 2.0.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/_config.yml +20 -24
  3. package/_data/icons.yml +3 -6
  4. package/layout/_partial/components/collection-item.ejs +1 -0
  5. package/layout/_partial/head.ejs +5 -30
  6. package/layout/_partial/main/article/share.ejs +2 -9
  7. package/layout/_partial/main/listing_nav/blog.ejs +2 -1
  8. package/layout/_partial/main/listing_nav/wiki.ejs +0 -2
  9. package/layout/_partial/main/navbar/article_banner.ejs +13 -11
  10. package/layout/_partial/main/pin_slider.ejs +0 -230
  11. package/layout/_partial/main/post_list/post_card.ejs +1 -1
  12. package/layout/_partial/main/post_list/wiki_card.ejs +1 -1
  13. package/layout/_partial/scripts/defines.ejs +12 -66
  14. package/layout/_partial/scripts.ejs +1 -1
  15. package/layout/_partial/search/shortcut.ejs +1 -1
  16. package/layout/_partial/sidebar/brand.ejs +15 -11
  17. package/layout/_partial/sidebar/menu.ejs +0 -42
  18. package/layout/index_wiki.ejs +0 -38
  19. package/layout/layout.ejs +3 -21
  20. package/package.json +4 -2
  21. package/scripts/filters/lib/img_onerror.js +5 -2
  22. package/scripts/filters/runtime-minify.js +17 -0
  23. package/scripts/generators/stellar-icons.js +10 -24
  24. package/scripts/helpers/brand.js +0 -5
  25. package/scripts/helpers/extension_assets.js +8 -0
  26. package/scripts/helpers/json_ld.js +0 -1
  27. package/scripts/helpers/ui_classes.js +1 -5
  28. package/scripts/lib/client-assets.js +73 -0
  29. package/scripts/lib/config-schema.js +4 -18
  30. package/scripts/lib/contribution-registry.js +14 -0
  31. package/scripts/lib/image-fallback.js +24 -0
  32. package/scripts/lib/menu.js +1 -1
  33. package/scripts/lib/models/notebook.js +0 -1
  34. package/scripts/lib/models/post.js +0 -1
  35. package/scripts/lib/models/shared.js +3 -8
  36. package/scripts/lib/models/topic.js +0 -1
  37. package/scripts/lib/models/wiki.js +2 -4
  38. package/scripts/lib/seo.js +1 -5
  39. package/scripts/lib/share-services.js +5 -20
  40. package/scripts/lib/widget-registry.js +3 -2
  41. package/scripts/schema/config-rules.js +12 -3
  42. package/scripts/schema/content-config-rules.js +4 -9
  43. package/scripts/schema/content-config-schema.js +1 -1
  44. package/scripts/schema/model-schema.js +7 -7
  45. package/scripts/tags/lib/dropdown.js +1 -1
  46. package/scripts/tags/lib/image.js +0 -1
  47. package/source/css/_appearances/_mixins.styl +29 -19
  48. package/source/css/_appearances/glass.styl +5 -0
  49. package/source/css/_appearances/minimal.styl +18 -3
  50. package/source/css/_common/dropdown.styl +4 -3
  51. package/source/css/_common/loading.styl +2 -0
  52. package/source/css/_common/md-link.styl +0 -3
  53. package/source/css/_common/title.styl +14 -7
  54. package/source/css/_components/collection.styl +17 -6
  55. package/source/css/_components/layout.styl +57 -5
  56. package/source/css/_components/list.styl +2 -1
  57. package/source/css/_components/pages/article-story.styl +15 -5
  58. package/source/css/_components/pages/article-tech.styl +1 -11
  59. package/source/css/_components/partial/article-banner.styl +4 -2
  60. package/source/css/_components/partial/article-share.styl +7 -7
  61. package/source/css/_components/pin-slider.styl +1 -4
  62. package/source/css/_components/sidebar/brand.styl +8 -0
  63. package/source/css/_components/sidebar/nav-area.styl +1 -1
  64. package/source/css/_components/sidebar/search.styl +7 -5
  65. package/source/css/_components/sidebar/sidebar.styl +4 -2
  66. package/source/css/_components/tag-plugins/banner.styl +1 -1
  67. package/source/css/_components/tag-plugins/frame.styl +1 -0
  68. package/source/css/_components/tag-plugins/okr.styl +3 -1
  69. package/source/css/_components/widgets/toc.styl +90 -18
  70. package/source/css/_custom.styl +1 -1
  71. package/source/css/_defines/theme_colorful.styl +5 -2
  72. package/source/js/main.js +56 -21
  73. package/source/js/runtime/extensions/adaptive-text.js +22 -0
  74. package/source/js/runtime/extensions/comments.js +54 -63
  75. package/source/js/runtime/extensions/pin-slider.js +220 -0
  76. package/source/js/runtime/extensions/reveal.js +15 -11
  77. package/source/js/search/shortcut.js +0 -15
  78. package/source/js/services/siteinfo.js +1 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,55 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.0-rc.5
4
+
5
+ > 发布日期:2026-09-12
6
+
7
+ 本节记录从公开候选 `2.0.0-rc.4` 到 `2.0.0-rc.5` 最终文件树的净变化。
8
+
9
+ ### 新功能
10
+
11
+ - Leftbar Brand 支持 `ghrepo: owner/repo` 仓库统计,优先于 `ghuser`;搜索按钮移入 Brand,由 `leftbar.brand.search` 控制,默认开启。
12
+ - 完善侧栏初始折叠状态,Tree、Linklist、Related 支持折叠栏;右栏随左栏收起显示紧凑目录,支持悬停和键盘焦点展开,目录活动指示条平滑跟随当前条目。
13
+ - Reveal 支持 `duration/interval/distance/blur`,默认分别为 800ms、200ms、8px、4px,可配置依次播放、位移和模糊。
14
+
15
+ ### 修复与改进
16
+
17
+ - 共享客户端配置、图标样式与置顶轮播脚本改为外部资源,集中处理图片失败回退,减少逐页重复 HTML;为 hexo-minify 排除原生 Runtime ESM,保留模块语义。
18
+ - 评论在页面挂载时立即开始加载,第三方资源加载不再阻塞页面初始化;保留页面卸载时取消与清理。
19
+ - 横幅统一使用页面 `cover`,作者页使用作者 `cover`,同步 SEO 图片来源;改进背景文字自适应与头像边框。
20
+ - 调整标题装饰、导航下划线、搜索图标与快捷键提示、侧栏间距、移动正文顶部留白和长目录标题;修复 frame 媒体比例,mark 默认使用主题色并改进暗色配色。
21
+
22
+ ### 升级注意(配置变更与破坏性改动)
23
+
24
+ - 删除 Menu 中的 `type: search` 项,改用 `leftbar.brand.search`;搜索需要启用 Provider 且 Brand 有图片或名称。该字段支持主题、Profile、Collection 和 Page 覆盖。
25
+ - 分享服务 `wechat` 改为通用 `qrcode`,移除 `link` 与 `system`;检查 `article.footer.share` 及内容 `footer.share`,当前支持 qrcode、weibo、x、telegram、whatsapp、email。
26
+ - 页面 `banner.image` 改用顶层 `cover`;Collection 不再声明 `banner`,页面 `banner` 仅保留 enabled/avatar/headline/tagline。移除 `article.banner.ratio`,横幅不再使用独立比例配置。
27
+ - 移除 `appearance.typography.heading_prefixes`,标题装饰由主题样式维护。
28
+ - Site Info、Rating、Vote 的服务 endpoint 默认留空,需要自行部署并填写地址;升级后如依赖这些服务,请显式配置对应 endpoint。
29
+
30
+ Full Changelog: [2.0.0-rc.4...2.0.0-rc.5](https://github.com/xaoxuu/hexo-theme-stellar/compare/2.0.0-rc.4...2.0.0-rc.5)
31
+
32
+ ## 2.0.0-rc.4
33
+
34
+ > 发布日期:2026-09-10
35
+
36
+ 本节记录从公开候选 `2.0.0-rc.3` 到 `2.0.0-rc.4` 最终文件树的净变化。
37
+
38
+ ### 修复与改进
39
+
40
+ - 恢复博客列表导航中的专栏入口,使用当前上架专栏索引判断是否显示。
41
+ - 修复移动端专栏文章列表横向溢出,调整 OKR 标签宽度与右对齐;移动端根字号增量由 2px 调整为 1px。
42
+ - 统一集合控件、侧栏菜单与搜索结果字体,修复导航前缀和长标题的布局。
43
+ - minimal 外观下文章、专栏封面与置顶轮播在普通及交互状态均去除边框,保留键盘焦点 outline。
44
+ - Markdown 行内链接的站点信息请求失败时保留原图标,不再显示红色断链图标;数据加载失败时隐藏加载指示器。
45
+ - 将仅用于源码检查的 `glob` 移至开发依赖,并显式声明 ESLint 配置需要的 `@eslint/js` 与 `globals`。
46
+
47
+ ### 升级注意(配置变更与破坏性改动)
48
+
49
+ - 站点 Brand 的 GitHub 数据区改为显式读取 `leftbar.brand.ghuser`,默认 `null` 不显示;不再从 ghuser Widget 的 username 推断。需要保留统计时设置 `leftbar.brand.ghuser: 你的GitHub用户名`。该数据区仍仅在左栏 regular 样式下显示,Collection Brand 的仓库统计保持原有来源。
50
+
51
+ Full Changelog: [2.0.0-rc.3...2.0.0-rc.4](https://github.com/xaoxuu/hexo-theme-stellar/compare/2.0.0-rc.3...2.0.0-rc.4)
52
+
3
53
  ## 2.0.0-rc.3
4
54
 
5
55
  > 发布日期:2026-09-10
@@ -90,7 +140,7 @@ Full Changelog: [2.0.0-rc.1...2.0.0-rc.2](https://github.com/xaoxuu/hexo-theme-s
90
140
  - 浏览器后处理必须原样保留 `public/js/runtime/**/*.js` 的 ESM 语义、相对 import 与 JavaScript MIME 类型。
91
141
  - v2 当前源码从仓库 `main` 安装并需要执行 `npm install --prefix themes/stellar`;npm 包是否为 v2 以实际公开版本为准。
92
142
 
93
- Full Changelog: [1.44.0...main](https://github.com/xaoxuu/hexo-theme-stellar/compare/1.44.0...main)
143
+ Full Changelog: [1.44.0...2.0.0-rc.1](https://github.com/xaoxuu/hexo-theme-stellar/compare/1.44.0...2.0.0-rc.1)
94
144
 
95
145
  ## 1.44.0
96
146
 
package/_config.yml CHANGED
@@ -38,8 +38,14 @@ leftbar:
38
38
  default_state: expanded
39
39
  # 配置 Leftbar 固定 Brand 内容。
40
40
  brand:
41
+ # 控制 Brand 区域的搜索按钮;需要配置 search.provider。
42
+ search: true
41
43
  # 设置 Leftbar Brand 的视觉样式;可选值为 regular 或 compact。
42
44
  style: regular
45
+ # 设置 Brand 数据区的 GitHub 仓库(owner/repo);留空不显示仓库统计。
46
+ ghrepo: null
47
+ # 设置 Brand 数据区的 GitHub 用户名;未设置 ghrepo 时使用,留空不显示。
48
+ ghuser: null
43
49
  # 配置品牌图片。
44
50
  image:
45
51
  # 设置品牌图片地址;null 表示隐藏图片。
@@ -110,8 +116,6 @@ leftbar:
110
116
  icon: default:profile
111
117
  # 设置菜单链接。
112
118
  url: /about/
113
- # 声明默认的搜索入口。
114
- - type: search
115
119
  # 设置 Leftbar 内容 Widget;空数组表示清空内容区。
116
120
  widgets: []
117
121
  # 配置 Leftbar 固定底部区域。
@@ -470,10 +474,6 @@ article:
470
474
  category_colors:
471
475
  # 设置“探索号”分类的颜色。
472
476
  探索号: '#f44336'
473
- # 配置文章页横幅。
474
- banner:
475
- # 设置文章页横幅宽高比,数值必须大于 0。
476
- ratio: 2.5
477
477
  # 控制是否显示预计阅读时间。
478
478
  show_reading_time: false
479
479
  # 设置相关文章最大数量,0 表示不显示相关文章。
@@ -483,16 +483,14 @@ article:
483
483
  # 设置文章许可协议;false 表示不显示许可信息。
484
484
  license: 本文采用 [署名-非商业性使用-相同方式共享 4.0 国际](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可协议,转载请注明出处。
485
485
  # 设置文章分享服务;普通博客与 Topic 专栏博客默认全部启用,Wiki 与 Notebook 默认关闭,可通过 footer.share 显式开启。
486
- # 支持 wechat、weibo、x、telegram、whatsapp、email、link、system;空数组表示不显示分享入口。
486
+ # 支持 qrcode、weibo、x、telegram、whatsapp、email;空数组表示不显示分享入口。
487
487
  share:
488
- - wechat
488
+ - qrcode
489
489
  - weibo
490
490
  - x
491
491
  - telegram
492
492
  - whatsapp
493
493
  - email
494
- - link
495
- - system
496
494
  # 控制文章页页脚是否显示标签。
497
495
  show_tags: true
498
496
 
@@ -555,16 +553,6 @@ appearance:
555
553
  code_block: 0.8125rem
556
554
  # 设置正文对齐方式;可选值为 left、center、right 或 justify。
557
555
  content_align: left
558
- # 配置各级标题的前缀字符。
559
- heading_prefixes:
560
- # 设置二级标题前缀。
561
- h2: '#'
562
- # 设置三级标题前缀。
563
- h3: '='
564
- # 设置四级标题前缀。
565
- h4: '|'
566
- # 设置五级标题前缀。
567
- h5: ':'
568
556
 
569
557
  # 配置组件形状。
570
558
  shape:
@@ -830,7 +818,7 @@ tags:
830
818
  # 配置 mark 标签插件。
831
819
  mark:
832
820
  # 设置 mark 默认颜色。
833
- default_color: yellow
821
+ default_color: theme
834
822
  # 配置 hashtag 标签插件。
835
823
  hashtag:
836
824
  # 设置 hashtag 默认颜色;null 表示使用主题默认色。
@@ -889,6 +877,14 @@ features:
889
877
  reveal:
890
878
  # 控制是否启用滚动揭示动画。
891
879
  enabled: true
880
+ # 动画持续时间,单位毫秒,须大于或等于 0。
881
+ duration: 800
882
+ # 连续进入视口的元素依次开始播放的间隔,单位毫秒,须大于或等于 0;0 同时播放。
883
+ interval: 200
884
+ # 垂直移动距离,单位像素;正数从下方进入,负数从上方进入,0 仅淡入。
885
+ distance: 8
886
+ # 初始模糊半径,单位像素,须大于或等于 0;0 关闭模糊,较大值会增加渲染开销。
887
+ blur: 4
892
888
  # 配置卡片悬停效果。
893
889
  card_hover:
894
890
  # 控制是否启用鼠标跟随光照。
@@ -945,7 +941,7 @@ services:
945
941
  # 配置 site_info_api Provider。
946
942
  site_info_api:
947
943
  # 设置站点信息查询接口,{href} 会替换为目标网址。
948
- endpoint: https://api.xaox.cc/site_info/v1?url={href}
944
+ endpoint: # https://api.xaox.cc/site_info/v1?url={href} 需要自行部署服务:https://github.com/xaoxuu/site-info-api
949
945
  # 配置评分服务。
950
946
  rating:
951
947
  # 设置评分 Provider;可选值为 star_vote 或 null。
@@ -953,7 +949,7 @@ services:
953
949
  # 配置评分使用的 star_vote Provider。
954
950
  star_vote:
955
951
  # 设置评分接口地址。
956
- endpoint: https://star-vote.xaox.cc/api/rating
952
+ endpoint: # https://star-vote.xaox.cc/api/rating 需要自行部署服务:https://github.com/xaoxuu/star-vote
957
953
  # 配置投票服务。
958
954
  vote:
959
955
  # 设置投票 Provider;可选值为 star_vote 或 null。
@@ -961,7 +957,7 @@ services:
961
957
  # 配置投票使用的 star_vote Provider。
962
958
  star_vote:
963
959
  # 设置投票接口地址。
964
- endpoint: https://star-vote.xaox.cc/api/vote
960
+ endpoint: # https://star-vote.xaox.cc/api/vote 需要自行部署服务:https://github.com/xaoxuu/star-vote
965
961
  # 配置内容贡献者服务。
966
962
  contributors:
967
963
  # 设置贡献者 Provider。
package/_data/icons.yml CHANGED
@@ -3,12 +3,11 @@
3
3
 
4
4
  # 通用入口、Shell 与设置
5
5
  default:rss: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M5 21q-.825 0-1.412-.587T3 19q0-.825.588-1.412T5 17q.825 0 1.413.588T7 19q0 .825-.587 1.413T5 21m13.5 0q-.65 0-1.088-.475T16.9 19.4q-.275-2.425-1.312-4.537T12.9 11.1q-1.65-1.65-3.762-2.687T4.6 7.1q-.65-.075-1.125-.512T3 5.5q0-.65.45-1.062t1.075-.363q3.075.275 5.763 1.563t4.737 3.337q2.05 2.05 3.338 4.738t1.562 5.762q.05.625-.363 1.075T18.5 21m-6 0q-.625 0-1.075-.437T10.85 19.5q-.225-1.225-.787-2.262T8.65 15.35q-.85-.85-1.888-1.412T4.5 13.15q-.625-.125-1.062-.575T3 11.5q0-.65.45-1.075t1.075-.325q1.825.25 3.413 1.063t2.837 2.062q1.25 1.25 2.063 2.838t1.062 3.412q.1.625-.325 1.075T12.5 21"/></svg>
6
- default:search: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Google Material Icons by Material Design Authors - https://github.com/material-icons/material-icons/blob/master/LICENSE --><path fill="currentColor" d="M6 9H3c-.55 0-1-.45-1-1s.45-1 1-1h3c.55 0 1 .45 1 1s-.45 1-1 1m0 3H3c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1m13.88 6.29l-3.12-3.12c-.86.56-1.89.88-3 .82c-2.37-.11-4.4-1.96-4.72-4.31a5.013 5.013 0 0 1 5.83-5.61c1.95.33 3.57 1.85 4 3.78c.33 1.46.01 2.82-.7 3.9l3.13 3.13c.39.39.39 1.02 0 1.41s-1.03.39-1.42 0M17 11c0-1.65-1.35-3-3-3s-3 1.35-3 3s1.35 3 3 3s3-1.35 3-3M3 19h8c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1"/></svg>
6
+ default:search: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Adapted from Google Material Icons by Material Design Authors - https://github.com/material-icons/material-icons/blob/master/LICENSE --><g fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 8h3M3 13h3M3 18h8M16.83 13.83l3.76 3.76"/><circle cx="14" cy="11" r="4"/></g></svg>
7
7
  default:leftbar: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="1.5"><path d="M2 11c0-3.771 0-5.657 1.172-6.828C4.343 3 6.229 3 10 3h4c3.771 0 5.657 0 6.828 1.172C22 5.343 22 7.229 22 11v2c0 3.771 0 5.657-1.172 6.828C19.657 21 17.771 21 14 21h-4c-3.771 0-5.657 0-6.828-1.172C2 18.657 2 16.771 2 13z"/><path id="sep" stroke-linecap="round" d="M5.5 10h6m-5 4h4m4.5 7V3"/></g></svg>
8
8
  default:leftbar-toggle: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M3.172 4.172C2 5.343 2 7.229 2 11v2c0 3.771 0 5.657 1.172 6.828S6.229 21 10 21h5V3h-5C6.229 3 4.343 3 3.172 4.172" clip-rule="evenodd" opacity=".5"/><path fill="currentColor" d="M5.5 9.25a.75.75 0 0 0 0 1.5h6a.75.75 0 0 0 0-1.5zm1 4a.75.75 0 0 0 0 1.5h4a.75.75 0 0 0 0-1.5zM22 13v-2c0-3.771 0-5.657-1.172-6.828c-.974-.975-3.192-1.139-5.828-1.166v17.988c2.636-.027 4.854-.191 5.828-1.166C22 18.657 22 16.771 22 13"/></svg>
9
9
  default:settings: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><g fill="currentColor"><path fill-rule="evenodd" d="M12.4277 2C11.3139 2 10.2995 2.6007 8.27081 3.80211L7.58466 4.20846C5.55594 5.40987 4.54158 6.01057 3.98466 7C3.42773 7.98943 3.42773 9.19084 3.42773 11.5937V12.4063C3.42773 14.8092 3.42773 16.0106 3.98466 17C4.54158 17.9894 5.55594 18.5901 7.58466 19.7915L8.27081 20.1979C10.2995 21.3993 11.3139 22 12.4277 22C13.5416 22 14.5559 21.3993 16.5847 20.1979L17.2708 19.7915C19.2995 18.5901 20.3139 17.9894 20.8708 17C21.4277 16.0106 21.4277 14.8092 21.4277 12.4063V11.5937C21.4277 9.19084 21.4277 7.98943 20.8708 7C20.3139 6.01057 19.2995 5.40987 17.2708 4.20846L16.5847 3.80211C14.5559 2.6007 13.5416 2 12.4277 2Z" clip-rule="evenodd" opacity=".5"/><path d="M12.4277 8.25C10.3567 8.25 8.67773 9.92893 8.67773 12C8.67773 14.0711 10.3567 15.75 12.4277 15.75C14.4988 15.75 16.1777 14.0711 16.1777 12C16.1777 9.92893 14.4988 8.25 12.4277 8.25Z"/></g></svg>
10
10
  default:link: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><g fill="currentColor"><g opacity=".5"><path d="M19.7388 4.26118C17.0572 1.57961 12.7095 1.57961 10.0279 4.26118L9.30707 4.98203C9.01418 5.27492 9.01418 5.7498 9.30707 6.04269C9.59997 6.33558 10.0748 6.33558 10.3677 6.04269L11.0886 5.32184C13.1844 3.22605 16.5823 3.22605 18.6781 5.32184C20.7739 7.41763 20.7739 10.8156 18.6781 12.9114L17.9573 13.6322C17.6644 13.9251 17.6644 14.4 17.9573 14.6929C18.2502 14.9858 18.725 14.9858 19.0179 14.6929L19.7388 13.972C22.4203 11.2905 22.4203 6.94276 19.7388 4.26118Z"/><path d="M6.04269 9.30707C6.33558 9.59997 6.33558 10.0748 6.04269 10.3677L5.32184 11.0886C3.22605 13.1844 3.22605 16.5823 5.32184 18.6781C7.41763 20.7739 10.8156 20.7739 12.9114 18.6781L13.6322 17.9573C13.9251 17.6644 14.4 17.6644 14.6929 17.9573C14.9858 18.2501 14.9858 18.725 14.6929 19.0179L13.972 19.7388C11.2905 22.4203 6.94276 22.4203 4.26118 19.7388C1.57961 17.0572 1.57961 12.7095 4.26118 10.0279L4.98203 9.30707C5.27492 9.01418 5.7498 9.01418 6.04269 9.30707Z"/></g><path d="M14.6933 9.30707C14.9862 9.59997 14.9862 10.0748 14.6933 10.3677L10.3682 14.6928C10.0753 14.9857 9.60045 14.9857 9.30756 14.6928C9.01467 14.3999 9.01467 13.9251 9.30756 13.6322L13.6327 9.30707C13.9255 9.01418 14.4004 9.01418 14.6933 9.30707Z"/></g></svg>
11
- default:link-broken: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><path d="m10 5.049l.367-.343c2.432-2.275 6.376-2.275 8.809 0s2.432 5.961 0 8.235L16.974 15M14 18.928l-.366.35c-2.422 2.316-6.38 2.286-8.802-.03c-2.398-2.293-2.456-6.033-.091-8.358l.905-.89" opacity=".5"/><path d="M6.587 3L7.5 5.205m-3.998.882L9.05 8.795"/></g></svg>
12
11
  default:trash: <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><g fill="currentColor"><path d="M3 6.38597C3 5.90152 3.34538 5.50879 3.77143 5.50879L6.43567 5.50832C6.96502 5.49306 7.43202 5.11033 7.61214 4.54412C7.61688 4.52923 7.62232 4.51087 7.64185 4.44424L7.75665 4.05256C7.8269 3.81241 7.8881 3.60318 7.97375 3.41617C8.31209 2.67736 8.93808 2.16432 9.66147 2.03297C9.84457 1.99972 10.0385 1.99986 10.2611 2.00002H13.7391C13.9617 1.99986 14.1556 1.99972 14.3387 2.03297C15.0621 2.16432 15.6881 2.67736 16.0264 3.41617C16.1121 3.60318 16.1733 3.81241 16.2435 4.05256L16.3583 4.44424C16.3778 4.51087 16.3833 4.52923 16.388 4.54412C16.5682 5.11033 17.1278 5.49353 17.6571 5.50879H20.2286C20.6546 5.50879 21 5.90152 21 6.38597C21 6.87043 20.6546 7.26316 20.2286 7.26316H3.77143C3.34538 7.26316 3 6.87043 3 6.38597Z"/><path fill-rule="evenodd" d="M9.42543 11.4815C9.83759 11.4381 10.2051 11.7547 10.2463 12.1885L10.7463 17.4517C10.7875 17.8855 10.4868 18.2724 10.0747 18.3158C9.66253 18.3592 9.29499 18.0426 9.25378 17.6088L8.75378 12.3456C8.71256 11.9118 9.01327 11.5249 9.42543 11.4815Z" clip-rule="evenodd"/><path fill-rule="evenodd" d="M14.5747 11.4815C14.9868 11.5249 15.2875 11.9118 15.2463 12.3456L14.7463 17.6088C14.7051 18.0426 14.3376 18.3592 13.9254 18.3158C13.5133 18.2724 13.2126 17.8855 13.2538 17.4517L13.7538 12.1885C13.795 11.7547 14.1625 11.4381 14.5747 11.4815Z" clip-rule="evenodd"/><path d="M11.5956 22.0001H12.4044C15.1871 22.0001 16.5785 22.0001 17.4831 21.1142C18.3878 20.2283 18.4803 18.7751 18.6654 15.8686L18.9321 11.6807C19.0326 10.1037 19.0828 9.31524 18.6289 8.81558C18.1751 8.31592 17.4087 8.31592 15.876 8.31592H8.12405C6.59127 8.31592 5.82488 8.31592 5.37105 8.81558C4.91722 9.31524 4.96744 10.1037 5.06788 11.6807L5.33459 15.8686C5.5197 18.7751 5.61225 20.2283 6.51689 21.1142C7.42153 22.0001 8.81289 22.0001 11.5956 22.0001Z" opacity=".5"/></g></svg>
13
12
  default:rightbar: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6h11m-11 6h11m-11 6h11M4 6h1v4m-1 0h2m0 8H4c0-1 2-2 2-3s-1-1.5-2-1"/></svg>
14
13
  default:profile: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><g fill="currentColor"><path d="M12 2a10 10 0 1 0 0 20a10 10 0 0 0 0-20" opacity=".5"/><path d="M12 6a3 3 0 1 0 0 6a3 3 0 0 0 0-6m0 7.5c-3.04 0-5.5 1.57-5.5 3.5c0 .65.28 1.26.77 1.77A7.96 7.96 0 0 0 12 20.5a7.96 7.96 0 0 0 4.73-1.73c.49-.51.77-1.12.77-1.77c0-1.93-2.46-3.5-5.5-3.5"/></g></svg>
@@ -19,7 +18,7 @@ default:github: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" v
19
18
  default:monitor: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" d="M3 7c0-1.886 0-2.828.586-3.414C4.172 3 5.114 3 7 3h10c1.886 0 2.828 0 3.414.586C21 4.172 21 5.114 21 7v6c0 1.886 0 2.828-.586 3.414C19.828 17 18.886 17 17 17H7c-1.886 0-2.828 0-3.414-.586C3 15.828 3 14.886 3 13z" opacity=".5"/><path fill="currentColor" d="M12.75 17.75h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V17h1.5zM7 6.25h10a.75.75 0 0 1 0 1.5H7a.75.75 0 0 1 0-1.5"/></svg>
20
19
 
21
20
  # 内容标识与翻页
22
- default:back: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m15 5l-6 7l6 7"/></svg>
21
+ default:chevron-left: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="m15 4-8 8 8 8"/></svg>
23
22
  default:arrow-left: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" fill-rule="evenodd" d="M22 6.426v11.148c0 1.847-1.6 3.015-2.903 2.118L13 15.232V8.768l6.097-4.46C20.399 3.411 22 4.58 22 6.426" clip-rule="evenodd" opacity=".5"/><path fill="currentColor" d="M13 7.123v9.754c0 1.616-1.467 2.638-2.661 1.853L2.92 13.853c-1.228-.807-1.228-2.899 0-3.706l7.42-4.877c1.193-.785 2.66.237 2.66 1.853"/></svg>
24
23
  default:arrow-right: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" fill-rule="evenodd" d="M2 6.426v11.148c0 1.847 1.6 3.015 2.903 2.118L11 15.232V8.768l-6.097-4.46C3.601 3.411 2 4.58 2 6.426" clip-rule="evenodd" opacity=".5"/><path fill="currentColor" d="M11 7.123v9.754c0 1.616 1.467 2.638 2.661 1.853l7.418-4.877c1.228-.807 1.228-2.899 0-3.706L13.66 5.27C12.467 4.485 11 5.507 11 7.123"/></svg>
25
24
  default:documents: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M5.879 2.879C5 3.757 5 5.172 5 8v8c0 2.828 0 4.243.879 5.121C6.757 22 8.172 22 11 22h2c2.828 0 4.243 0 5.121-.879C19 20.243 19 18.828 19 16V8c0-2.828 0-4.243-.879-5.121C17.243 2 15.828 2 13 2h-2c-2.828 0-4.243 0-5.121.879M8.25 17a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 0 1.5H9a.75.75 0 0 1-.75-.75M9 12.25a.75.75 0 0 0 0 1.5h6a.75.75 0 0 0 0-1.5zM8.25 9A.75.75 0 0 1 9 8.25h6a.75.75 0 0 1 0 1.5H9A.75.75 0 0 1 8.25 9" clip-rule="evenodd"/><path fill="currentColor" d="M5.235 4.058C5 4.941 5 6.177 5 8v8c0 1.823 0 3.058.235 3.942L5 19.924c-.975-.096-1.631-.313-2.121-.803C2 18.243 2 16.828 2 14v-4c0-2.829 0-4.243.879-5.121c.49-.49 1.146-.707 2.121-.803zm13.53 15.884C19 19.058 19 17.822 19 16V8c0-1.823 0-3.059-.235-3.942l.235.018c.975.096 1.631.313 2.121.803C22 5.757 22 7.17 22 9.999v4c0 2.83 0 4.243-.879 5.122c-.49.49-1.146.707-2.121.803z" opacity=".5"/></svg>
@@ -60,14 +59,12 @@ github:fork: <svg aria-hidden="true" role="img" class="color-icon-primary" viewB
60
59
  github:tag: <svg aria-hidden="true" role="img" class="color-icon-primary" viewBox="0 0 16 16" width="1em" height="1em" fill="currentColor" style="user-select:none;overflow:visible"><path fill-rule="evenodd" d="M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"></path></svg>
61
60
 
62
61
  # 分享按钮
63
- share:wechat: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Simple Icons - https://creativecommons.org/publicdomain/zero/1.0/ --><path fill="currentColor" d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z"/></svg>
62
+ share:qrcode: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" d="M10.553 13.447c-.424-.424-.95-.596-1.535-.675c-.553-.074-1.25-.074-2.086-.074H5.827c-.58 0-1.065 0-1.459.037c-.411.04-.795.124-1.146.34c-.345.21-.634.5-.845.844c-.216.352-.3.735-.34 1.147C2 15.459 2 15.944 2 16.525v.068c0 .884 0 1.597.055 2.17c.056.592.175 1.108.459 1.571c.288.47.682.864 1.152 1.152c.463.284.979.403 1.57.46C5.81 22 6.524 22 7.407 22h.07c.58 0 1.064 0 1.458-.037c.412-.04.795-.124 1.147-.34c.344-.21.633-.5.844-.844c.216-.352.3-.736.34-1.147c.037-.394.037-.879.037-1.46v-1.104c0-.836 0-1.533-.074-2.086c-.079-.584-.251-1.111-.675-1.535m-1.62-11.41c.412.04.795.124 1.147.34c.344.21.633.5.844.845c.216.351.3.735.34 1.146c.037.394.037.879.037 1.46v1.104c0 .836 0 1.533-.074 2.086c-.079.584-.251 1.111-.675 1.535s-.95.596-1.535.675c-.553.074-1.25.074-2.086.074H5.827c-.58 0-1.065 0-1.459-.037c-.411-.04-.795-.124-1.146-.34a2.56 2.56 0 0 1-.845-.844c-.216-.352-.3-.735-.34-1.147C2 8.54 2 8.056 2 7.475v-.068c0-.884 0-1.597.055-2.17c.056-.592.175-1.108.459-1.571c.288-.47.682-.864 1.152-1.152c.463-.284.979-.403 1.57-.46C5.81 2 6.524 2 7.407 2h.07c.58 0 1.064 0 1.458.037M16.593 2h-.068c-.58 0-1.065 0-1.46.037c-.41.04-.794.124-1.146.34c-.344.21-.633.5-.844.845c-.216.351-.3.735-.34 1.146c-.037.394-.037.879-.037 1.46v1.104c0 .836 0 1.533.074 2.086c.079.584.251 1.111.675 1.535s.95.596 1.535.675c.553.074 1.25.074 2.086.074h1.105c.58 0 1.065 0 1.459-.037c.411-.04.795-.124 1.146-.34c.345-.21.634-.5.845-.844c.216-.352.3-.735.34-1.147C22 8.54 22 8.056 22 7.475v-.068c0-.884 0-1.597-.055-2.17c-.056-.592-.175-1.108-.459-1.571a3.5 3.5 0 0 0-1.152-1.152c-.463-.284-.979-.403-1.57-.46C18.19 2 17.477 2 16.594 2" opacity=".5"/><path fill="currentColor" d="M14.093 21.302a.698.698 0 1 1-1.396 0v-2.79h1.396z" opacity=".4"/><path fill="currentColor" d="M21.302 12.698a.7.7 0 0 0-.697.697v3.256H22v-3.256a.7.7 0 0 0-.698-.697" opacity=".5"/><path fill="currentColor" d="M16.076 16.617c-.076.184-.076.417-.076.883s0 .699.076.883a1 1 0 0 0 .541.54c.184.077.417.077.883.077s.699 0 .883-.076a1 1 0 0 0 .54-.541c.077-.184.077-.417.077-.883s0-.699-.076-.883a1 1 0 0 0-.541-.54C18.199 16 17.966 16 17.5 16s-.699 0-.883.076a1 1 0 0 0-.54.541"/><path fill="currentColor" d="M22 18.535v-.023h-1.396c0 .443 0 .74-.016.97c-.015.224-.043.333-.073.405a1.16 1.16 0 0 1-.629.63c-.072.029-.18.056-.405.072c-.23.015-.527.016-.97.016h-1.86V22h1.883c.414 0 .759 0 1.042-.02a2.6 2.6 0 0 0 .844-.175a2.56 2.56 0 0 0 1.384-1.384c.112-.27.156-.549.176-.844c.02-.283.02-.628.02-1.042" opacity=".7"/><path fill="currentColor" d="M12.697 16.616v.035h1.396c0-.668 0-1.116.035-1.458c.034-.33.093-.482.16-.583a1.2 1.2 0 0 1 .321-.32c.101-.068.254-.128.584-.161c.342-.035.79-.036 1.458-.036h1.86v-1.395h-1.896c-.623 0-1.142 0-1.563.043c-.44.044-.85.142-1.218.388c-.28.187-.519.426-.706.706c-.246.368-.343.777-.388 1.217c-.043.421-.043.94-.043 1.564" opacity=".6"/><path fill="currentColor" d="M5.508 18.69c.219.155.528.155 1.146.155c.619 0 .928 0 1.146-.155a.8.8 0 0 0 .2-.199c.154-.218.154-.527.154-1.146s0-.927-.155-1.146A.8.8 0 0 0 7.8 16c-.218-.155-.527-.155-1.146-.155s-.927 0-1.146.155a.8.8 0 0 0-.199.2c-.155.218-.155.527-.155 1.145c0 .619 0 .928.155 1.146a.8.8 0 0 0 .2.2M6.654 8.155c-.618 0-.927 0-1.146-.155a.8.8 0 0 1-.199-.2c-.155-.217-.155-.527-.155-1.145c0-.619 0-.928.155-1.146a.8.8 0 0 1 .2-.2c.218-.154.527-.154 1.145-.154c.619 0 .928 0 1.146.155a.8.8 0 0 1 .2.199c.154.218.154.527.154 1.146s0 .928-.155 1.146A.8.8 0 0 1 7.8 8c-.218.155-.527.155-1.146.155M16.2 8c.218.155.527.155 1.146.155s.927 0 1.146-.155a.8.8 0 0 0 .199-.199c.155-.218.155-.528.155-1.146c0-.619 0-.928-.155-1.146a.8.8 0 0 0-.2-.2c-.218-.154-.527-.154-1.145-.154c-.619 0-.928 0-1.146.155a.8.8 0 0 0-.2.199c-.154.218-.154.527-.154 1.146s0 .928.155 1.146A.8.8 0 0 0 16.2 8"/></svg>
64
63
  share:weibo: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Simple Icons - https://creativecommons.org/publicdomain/zero/1.0/ --><path fill="currentColor" d="M10.098 20.323c-3.977.391-7.414-1.406-7.672-4.02-.259-2.609 2.759-5.047 6.74-5.441 3.979-.394 7.413 1.404 7.671 4.018.259 2.6-2.759 5.049-6.737 5.439l-.002.004zM9.05 17.219c-.384.616-1.208.884-1.829.602-.612-.279-.793-.991-.406-1.593.379-.595 1.176-.861 1.793-.601.622.263.82.972.442 1.592zm1.27-1.627c-.141.237-.449.353-.689.253-.236-.09-.313-.361-.177-.586.138-.227.436-.346.672-.24.239.09.315.36.18.601l.014-.028zm.176-2.719c-1.893-.493-4.033.45-4.857 2.118-.836 1.704-.026 3.591 1.886 4.21 1.983.64 4.318-.341 5.132-2.179.8-1.793-.201-3.642-2.161-4.149zm7.563-1.224c-.346-.105-.57-.18-.405-.615.375-.977.42-1.804 0-2.404-.781-1.112-2.915-1.053-5.364-.03 0 0-.766.331-.571-.271.376-1.217.315-2.224-.27-2.809-1.338-1.337-4.869.045-7.888 3.08C1.309 10.87 0 13.273 0 15.348c0 3.981 5.099 6.395 10.086 6.395 6.536 0 10.888-3.801 10.888-6.82 0-1.822-1.547-2.854-2.915-3.284v.01zm1.908-5.092c-.766-.856-1.908-1.187-2.96-.962-.436.09-.706.511-.616.932.09.42.511.691.932.602.511-.105 1.067.044 1.442.465.376.421.466.977.316 1.473-.136.406.089.856.51.992.405.119.857-.105.992-.512.33-1.021.12-2.178-.646-3.035l.03.045zm2.418-2.195c-1.576-1.757-3.905-2.419-6.054-1.968-.496.104-.812.587-.706 1.081.104.496.586.813 1.082.707 1.532-.331 3.185.15 4.296 1.383 1.112 1.246 1.429 2.943.947 4.416-.165.48.106 1.007.586 1.157.479.165.991-.104 1.157-.586.675-2.088.241-4.478-1.338-6.235l.03.045z"/></svg>
65
64
  share:x: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Simple Icons - https://creativecommons.org/publicdomain/zero/1.0/ --><path fill="currentColor" d="M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z"/></svg>
66
65
  share:telegram: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Simple Icons - https://creativecommons.org/publicdomain/zero/1.0/ --><path fill="currentColor" d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12a12 12 0 0 0 12-12A12 12 0 0 0 12 0zm4.962 7.224c.1-.002.321.023.465.14a.5.5 0 0 1 .171.325c.016.093.036.306.02.472c-.18 1.898-.962 6.502-1.36 8.627c-.168.9-.499 1.201-.82 1.23c-.696.065-1.225-.46-1.9-.902c-1.056-.693-1.653-1.124-2.678-1.8c-1.185-.78-.417-1.21.258-1.91c.177-.184 3.247-2.977 3.307-3.23c.007-.032.014-.15-.056-.212s-.174-.041-.249-.024q-.159.037-5.061 3.345q-.72.495-1.302.48c-.428-.008-1.252-.241-1.865-.44c-.752-.245-1.349-.374-1.297-.789q.04-.324.893-.663q5.247-2.286 6.998-3.014c3.332-1.386 4.025-1.627 4.476-1.635"/></svg>
67
66
  share:whatsapp: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Simple Icons - https://creativecommons.org/publicdomain/zero/1.0/ --><path fill="currentColor" d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967c-.273-.099-.471-.148-.67.15c-.197.297-.767.966-.94 1.164c-.173.199-.347.223-.644.075c-.297-.15-1.255-.463-2.39-1.475c-.883-.788-1.48-1.761-1.653-2.059c-.173-.297-.018-.458.13-.606c.134-.133.298-.347.446-.52s.198-.298.298-.497c.099-.198.05-.371-.025-.52s-.669-1.612-.916-2.207c-.242-.579-.487-.5-.669-.51a13 13 0 0 0-.57-.01c-.198 0-.52.074-.792.372c-.272.297-1.04 1.016-1.04 2.479c0 1.462 1.065 2.875 1.213 3.074s2.096 3.2 5.077 4.487c.709.306 1.262.489 1.694.625c.712.227 1.36.195 1.871.118c.571-.085 1.758-.719 2.006-1.413s.248-1.289.173-1.413c-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214l-3.741.982l.998-3.648l-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884c2.64 0 5.122 1.03 6.988 2.898a9.82 9.82 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.82 11.82 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.9 11.9 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.82 11.82 0 0 0-3.48-8.413"/></svg>
68
67
  share:email: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" fill-rule="evenodd" d="M3.172 5.172C2 6.343 2 8.229 2 12s0 5.657 1.172 6.828C4.343 20 6.229 20 10 20h4c3.771 0 5.657 0 6.828-1.172C22 17.657 22 15.771 22 12s0-5.657-1.172-6.828C19.657 4 17.771 4 14 4h-4C6.229 4 4.343 4 3.172 5.172m15.404 2.348a.75.75 0 0 1-.096 1.056l-2.196 1.83c-.887.739-1.605 1.338-2.24 1.746-.66.424-1.303.693-2.044.693s-1.384-.269-2.045-.693c-.634-.408-1.352-1.007-2.239-1.745L5.52 8.576a.75.75 0 1 1 .96-1.152l2.159 1.799c.933.777 1.58 1.315 2.128 1.667.529.34.888.455 1.233.455s.704-.115 1.233-.455c.547-.352 1.195-.89 2.128-1.667l2.159-1.8a.75.75 0 0 1 1.056.097" clip-rule="evenodd"/></svg>
69
- share:link: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" d="M19.739 4.261a6.867 6.867 0 0 0-9.711 0l-.72.721a.75.75 0 0 0 1.06 1.06l.72-.72a5.367 5.367 0 1 1 7.59 7.59l-.72.72a.75.75 0 0 0 1.06 1.06l.72-.72a6.867 6.867 0 0 0 0-9.71M6.043 9.307a.75.75 0 0 1 0 1.06l-.721.722a5.367 5.367 0 1 0 7.59 7.59l.72-.722a.75.75 0 0 1 1.06 1.06l-.72.722a6.867 6.867 0 0 1-9.71-9.711l.72-.72a.75.75 0 0 1 1.06 0"/><path fill="currentColor" d="M14.693 9.307a.75.75 0 0 1 0 1.06l-4.325 4.326a.75.75 0 1 1-1.06-1.06l4.324-4.326a.75.75 0 0 1 1.06 0"/></svg>
70
- share:system: <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><path fill="currentColor" d="M1 13.529c0-4.667 0-7 1.45-8.45s3.783-1.45 8.45-1.45s7 0 8.45 1.45s1.45 3.783 1.45 8.45s0 7-1.45 8.45s-3.783 1.45-8.45 1.45s-7 0-8.45-1.45S1 18.196 1 13.53" opacity=".5"/><path fill="currentColor" d="m17.67 1.907l2.593 2.248c1.785 1.546 2.678 2.32 2.678 3.325c0 1.004-.893 1.778-2.678 3.325l-2.593 2.247c-.785.68-1.177 1.02-1.498.873c-.322-.146-.322-.666-.322-1.704v-1.677c-2.65 0-5.477.988-7.2 2.7c-.525.52-.788.781-.927.715c-.14-.066-.107-.403-.042-1.076c.648-6.721 5.061-8.468 8.169-8.468V2.74c0-1.04 0-1.558.322-1.705c.321-.147.713.193 1.498.873"/></svg>
71
68
 
72
69
  # 标签插件:通用
73
70
  copy:copy: <svg class="icon" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Solar by 480 Design - https://creativecommons.org/licenses/by/4.0/ --><g fill="currentColor"><path d="M6.59961 11.3974C6.59961 8.67119 6.59961 7.3081 7.44314 6.46118C8.28667 5.61426 9.64432 5.61426 12.3596 5.61426H15.2396C17.9549 5.61426 19.3125 5.61426 20.1561 6.46118C20.9996 7.3081 20.9996 8.6712 20.9996 11.3974V16.2167C20.9996 18.9429 20.9996 20.306 20.1561 21.1529C19.3125 21.9998 17.9549 21.9998 15.2396 21.9998H12.3596C9.64432 21.9998 8.28667 21.9998 7.44314 21.1529C6.59961 20.306 6.59961 18.9429 6.59961 16.2167V11.3974Z"/><path d="M4.17157 3.17157C3 4.34315 3 6.22876 3 10V12C3 15.7712 3 17.6569 4.17157 18.8284C4.78913 19.446 5.6051 19.738 6.79105 19.8761C6.59961 19.0353 6.59961 17.8796 6.59961 16.2167V11.3974C6.59961 8.6712 6.59961 7.3081 7.44314 6.46118C8.28667 5.61426 9.64432 5.61426 12.3596 5.61426H15.2396C16.8915 5.61426 18.0409 5.61426 18.8777 5.80494C18.7403 4.61146 18.4484 3.79154 17.8284 3.17157C16.6569 2 14.7712 2 11 2C7.22876 2 5.34315 2 4.17157 3.17157Z" opacity=".5"/></g></svg>
@@ -48,6 +48,7 @@ if (entryStyle.length > 0) primaryAttrs += ` style="${escape_html(entryStyle)}"`
48
48
  <%- `<${tagName} class="${escape_html(entryClasses)}"${primaryAttrs}${safeAttrs}>` %>
49
49
  <%- typeof entry.before === 'string' ? entry.before : '' %>
50
50
  <% if (entry.icon) { %><span class="ui-icon"><%- icon(entry.icon, 'no-lazy', true) %></span><% } %>
51
+ <% if (!entry.icon && showTitle) { %><span class="ui-collection__initial" aria-hidden="true"><%= (Array.from(entryTitle.trim())[0] || '').replace(/[a-z]/, function(letter) { return letter.toUpperCase() }) %></span><% } %>
51
52
  <% if (hasContent) { %>
52
53
  <span class="ui-collection__content">
53
54
  <% if (entryPrefix.length > 0) { %><span class="ui-collection__prefix"><%= entryPrefix %></span><% } %>
@@ -97,7 +97,7 @@ function og_args() {
97
97
  if (page.layout == 'post' && pageConfig.cover) {
98
98
  args.twitter_card = 'summary_large_image';
99
99
  }
100
- args.image = pageConfig.cover || pageConfig.banner?.image || first_content_image(page.content) || config.avatar || (config.email ? gravatar(config.email) : null);
100
+ args.image = pageConfig.cover || first_content_image(page.content) || config.avatar || (config.email ? gravatar(config.email) : null);
101
101
  return Object.assign(args, pageConfig.seo?.openGraph || {});
102
102
  }
103
103
 
@@ -256,33 +256,8 @@ function generate_canonical() {
256
256
  <%- page_meta(json_ld(pageViewModel || undefined)) %>
257
257
  <%- custom_inject('headEnd') %>
258
258
 
259
- <!-- icons.yml 驱动的 CSS 装饰图标 -->
260
- <%
261
- const iconCssVars = (() => {
262
- const map = {
263
- '--icon-h3-left': 'default:arrow-left',
264
- '--icon-h3-right': 'default:arrow-right',
265
- '--icon-quote-left': 'quot:quote-left',
266
- '--icon-quote-right': 'quot:quote-right'
267
- };
268
- let vars = [];
269
- for (const [name, key] of Object.entries(map)) {
270
- var raw = stellar_data('icons') && stellar_data('icons')[key];
271
- if (raw) vars.push(` ${name}: url("data:image/svg+xml,${encodeURIComponent(raw)}");`);
272
- }
273
- // 加载占位:由 icons.yml 的 default:loading 提供(内联 SVG 编码为 data URI,URL 直用)
274
- var loadingRaw = stellar_data('icons') && stellar_data('icons')['default:loading'];
275
- if (loadingRaw) {
276
- if (loadingRaw.trim().startsWith('<svg')) {
277
- vars.push(` --icon-loading: url("data:image/svg+xml,${encodeURIComponent(loadingRaw)}");`);
278
- } else {
279
- vars.push(` --icon-loading: url("${loadingRaw}");`);
280
- }
281
- }
282
- return vars.length > 0 ? `:root {\n${vars.join('\n')}\n}` : '';
283
- })();
284
- %>
285
- <% if (iconCssVars) { %>
286
- <style><%- iconCssVars %></style>
287
- <% } %>
259
+ <link rel="stylesheet" href="<%- stellar_client_assets().css.href %>">
260
+ <link rel="preload" as="script" href="<%- stellar_client_assets().js.href %>">
261
+ <% var inlineIconCss = stellar_client_assets().css.inline %>
262
+ <% if (inlineIconCss) { %><style><%- inlineIconCss %></style><% } %>
288
263
  </head>
@@ -22,12 +22,6 @@ function renderAction(service) {
22
22
  if (action.kind === 'toggle') {
23
23
  return `<a class="${classes}" onclick="util.toggle(&quot;${escape_html(action.target)}&quot;)" aria-label="${escape_html(label)}" title="${escape_html(label)}">${iconHtml}</a>`
24
24
  }
25
- if (action.kind === 'copy') {
26
- return `<a class="${classes}" data-copy-message="${escape_html(__('message.copied'))}" onclick="util.copy(&quot;${escape_html(action.target)}&quot;, this.dataset.copyMessage)" aria-label="${escape_html(label)}" title="${escape_html(label)}">${iconHtml}</a>`
27
- }
28
- if (action.kind === 'native') {
29
- return `<button type="button" class="${classes}" data-share-title="${escape_html(action.data.title)}" data-share-text="${escape_html(action.data.text)}" data-share-url="${escape_html(action.data.url)}" data-copy-target="${escape_html(action.target)}" data-copy-message="${escape_html(__('message.copied'))}" onclick="util.share(this)" aria-label="${escape_html(label)}" title="${escape_html(label)}">${iconHtml}</button>`
30
- }
31
25
  return ''
32
26
  }
33
27
 
@@ -39,13 +33,12 @@ function layoutDiv() {
39
33
  if (!share || !Array.isArray(share.services) || share.services.length === 0) return ''
40
34
  var buttons = share.services.map(renderAction).join('')
41
35
  if (buttons.length === 0) return ''
42
- var qrcode = share.services.includes('wechat')
43
- ? `<div class="qrcode" id="qrcode-wechat" style="opacity:0;height:0"><img src="https://api.qrserver.com/v1/create-qr-code/?size=256x256&amp;data=${urlenc(share.permalink)}"/></div>`
36
+ var qrcode = share.services.includes('qrcode')
37
+ ? `<div class="share-qrcode" id="share-qrcode" style="opacity:0;height:0"><img src="https://api.qrserver.com/v1/create-qr-code/?size=256x256&amp;data=${urlenc(share.permalink)}"/></div>`
44
38
  : ''
45
39
  return `
46
40
  <div class="article-share${scrollreveal(' ')}" id="share">
47
41
  <div class="body">
48
- <div class="link"><input class="copy-area" readonly="true" id="copy-link" value="${escape_html(share.permalink)}" /></div>
49
42
  <div class="social-wrap dis-select">${buttons}</div>
50
43
  ${qrcode}
51
44
  </div>
@@ -41,7 +41,8 @@ function layoutDiv() {
41
41
  }
42
42
  }
43
43
 
44
- if (stellar_data('topic')?.publish_list?.length > 0) {
44
+ var topicItems = stellar_data('topicIndex.items');
45
+ if (Array.isArray(topicItems) && topicItems.length > 0) {
45
46
  if (page.layout == 'index_topic') {
46
47
  el += '<a class="active" href="' + pretty_url(stellar_config('profiles.topic.path')) + '">' + __("btn.topic") + '</a>';
47
48
  } else {
@@ -21,7 +21,6 @@ function layoutDiv() {
21
21
  el += ' class="active"';
22
22
  }
23
23
  el += ' href="' + pretty_url(wikiIndex.path) + '">' + __("btn.all_wiki") + '</a>';
24
- el += '</a>';
25
24
  // 项目分类
26
25
  for (var tag of wikiIndex.tags) {
27
26
  var projects = tag.itemIds.filter(id => wikiIndex.allItems.some(item => item.id === id))
@@ -31,7 +30,6 @@ function layoutDiv() {
31
30
  el += ' class="active"';
32
31
  }
33
32
  el += ' href="' + escape_html(pretty_url(tag.path)) + '">' + escape_html(tag.name) + '</a>';
34
- el += '</a>';
35
33
  }
36
34
  }
37
35
 
@@ -8,7 +8,7 @@ var wikiViewModel = renderViewModel?.collection?.profile === 'wiki' ? renderView
8
8
  var notebookViewModel = renderViewModel?.collection?.profile === 'notebook' ? renderViewModel : null
9
9
  var pageConfig = content_config(page)
10
10
  var banner = Object.assign({}, page.author
11
- ? { image: page.author.banner, avatar: page.author.avatar, tagline: page.author.description }
11
+ ? { avatar: page.author.avatar, tagline: page.author.description }
12
12
  : wikiViewModel
13
13
  ? wikiViewModel.render.article.banner
14
14
  : notebookViewModel
@@ -17,6 +17,8 @@ var banner = Object.assign({}, page.author
17
17
  ? postViewModel.render.article.banner
18
18
  : postViewModel ? postViewModel.item.presentation.banner : pageConfig.banner || {})
19
19
 
20
+ var bannerImage = page.author ? page.author.cover : renderViewModel ? renderViewModel.item.cover : pageConfig.cover
21
+
20
22
  // 标题
21
23
  if (banner.headline == null) {
22
24
  banner.headline = renderViewModel ? renderViewModel.item.title : page.title
@@ -57,7 +59,7 @@ function layoutTop() {
57
59
  }
58
60
  // AI 成分标签:置于第一行最右(阅读时长右侧);
59
61
  // banner 含图片时不用配置色,继承默认文字色(--text-banner)
60
- const bannerHasImage = banner.image && banner.image.length > 0
62
+ var bannerHasImage = bannerImage && bannerImage.length > 0
61
63
  rightHtml += ai_label(renderViewModel ? renderViewModel.item.presentation.article?.aiLabel : pageConfig.article?.aiLabel, 'cap', bannerHasImage)
62
64
  if (rightHtml.length > 0) {
63
65
  el += `<div class="right">${rightHtml}</div>`
@@ -98,9 +100,9 @@ function layoutIcon() {
98
100
  }
99
101
 
100
102
  function layoutBottom() {
101
- const el_icon = layoutIcon()
102
- const el_title = layoutTitle()
103
- const el_subtitle = layoutSubtitle()
103
+ var el_icon = layoutIcon()
104
+ var el_title = layoutTitle()
105
+ var el_subtitle = layoutSubtitle()
104
106
  var cls = ''
105
107
  if (el_title.length > 0 && el_subtitle.length == 0) {
106
108
  cls += ' only-title'
@@ -124,8 +126,8 @@ function layoutDiv() {
124
126
  if (banner.enabled === false) {
125
127
  return ``
126
128
  }
127
- const bottom = layoutBottom()
128
- const top = layoutTop()
129
+ var bottom = layoutBottom()
130
+ var top = layoutTop()
129
131
  if (top.length == 0 && bottom.length == 0) {
130
132
  return ``
131
133
  }
@@ -133,15 +135,15 @@ function layoutDiv() {
133
135
  var adaptiveAttr = ``
134
136
  var maskHtml = ``
135
137
  var el = ``
136
- if (banner.image?.length > 0) {
137
- bannerStyle += ` style="--bg-url:url('${banner.image.replace(/'/g, '%27')}')"`
138
+ if (bannerImage?.length > 0) {
139
+ bannerStyle += ` style="--bg-url:url('${bannerImage.replace(/'/g, '%27')}')"`
138
140
  // 背景图上方文字颜色自适应
139
141
  adaptiveAttr = ` data-text-adaptive="split"`
140
142
  }
141
143
  el += `<div class="article-banner-wrap${scrollreveal(' ')}">`
142
144
  el += `<div class="article banner top"${bannerStyle}>`
143
- if (banner.image?.length > 0) {
144
- el += `<img class="lazy bg" data-src="${banner.image}">`
145
+ if (bannerImage?.length > 0) {
146
+ el += `<img class="lazy bg" data-src="${bannerImage}">`
145
147
  maskHtml = `<div class="banner-mask banner-mask-top" aria-hidden="true"></div><div class="banner-mask banner-mask-bottom" aria-hidden="true"></div>`
146
148
  }
147
149
  el += `