hexo-theme-fluid 1.9.7 → 1.9.9

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 (47) hide show
  1. package/README.md +7 -18
  2. package/_config.yml +83 -30
  3. package/languages/de.yml +5 -0
  4. package/languages/en.yml +5 -0
  5. package/languages/eo.yml +5 -0
  6. package/languages/es.yml +5 -0
  7. package/languages/ja.yml +5 -0
  8. package/languages/ru.yml +6 -1
  9. package/languages/zh-CN.yml +5 -0
  10. package/languages/zh-HK.yml +5 -0
  11. package/languages/zh-TW.yml +11 -6
  12. package/layout/_partials/comments/cusdis.ejs +33 -1
  13. package/layout/_partials/comments/disqus.ejs +6 -1
  14. package/layout/_partials/comments/waline.ejs +4 -4
  15. package/layout/_partials/css.ejs +1 -1
  16. package/layout/_partials/footer/statistics.ejs +37 -2
  17. package/layout/_partials/footer.ejs +0 -4
  18. package/layout/_partials/head.ejs +5 -0
  19. package/layout/_partials/header/banner.ejs +39 -3
  20. package/layout/_partials/header/navigation.ejs +74 -1
  21. package/layout/_partials/plugins/analytics.ejs +19 -19
  22. package/layout/_partials/plugins/typed.ejs +4 -0
  23. package/layout/_partials/post/copyright.ejs +8 -2
  24. package/layout/_partials/post/meta-top.ejs +14 -0
  25. package/layout/_partials/post/toc.ejs +66 -2
  26. package/layout/about.ejs +1 -1
  27. package/layout/index.ejs +1 -0
  28. package/package.json +1 -1
  29. package/scripts/events/index.js +1 -0
  30. package/scripts/events/lib/footnote.js +11 -2
  31. package/scripts/events/lib/random-banner.js +45 -0
  32. package/scripts/filters/post-filter.js +24 -1
  33. package/scripts/helpers/wordcount.js +3 -6
  34. package/scripts/tags/checkbox.js +2 -1
  35. package/scripts/tags/fold.js +1 -1
  36. package/scripts/tags/note.js +1 -1
  37. package/source/css/_pages/_base/_widget/header.styl +98 -0
  38. package/source/css/_pages/_base/_widget/toc.styl +32 -1
  39. package/source/css/_pages/_base/base.styl +3 -0
  40. package/source/css/_pages/_base/keyframes.styl +8 -0
  41. package/source/css/_pages/_post/post-page.styl +6 -4
  42. package/source/img/random/default.png +0 -0
  43. package/source/js/color-schema.js +34 -21
  44. package/source/js/events.js +48 -3
  45. package/source/js/openkounter.js +173 -0
  46. package/source/js/umami-view.js +101 -0
  47. package/source/js/utils.js +11 -6
package/README.md CHANGED
@@ -111,18 +111,16 @@ layout: about
111
111
  <table>
112
112
  <thead>
113
113
  <tr>
114
- <th align="center" style="width: 240px;">
115
- <a href="https://flowus.cn/share/eebf2144-8db7-4d68-b31e-bc2c116871de">
116
- <img src="https://github-production-user-asset-6210df.s3.amazonaws.com/32983588/243899272-092eeb46-9172-4c10-9e72-53561ff37a00.png" height="200px"><br>
117
- <sub>首席赞助商 ORENCEAI</sub><br>
118
- <sub>全新的 ChatGPT 人工智能对话平台</sub>
119
- </a>
120
- </th>
121
114
  <th align="center" style="width: 240px;">
122
115
  <a href="https://www.jetbrains.com/?from=hexo-theme-fluid">
123
116
  <img src="https://raw.githubusercontent.com/fluid-dev/static/690616966f34a58d66aa15ac7b550dd7bbc03967/hexo-theme-fluid/jetbrains.svg" height="200px"><br>
124
117
  <sub>免费开发工具提供方 JetBrains</sub><br>
125
- <sub>专注于创建智能开发工具</sub>
118
+ </a>
119
+ </th>
120
+ <th align="center" style="width: 240px;">
121
+ <a href="https://dartnode.com">
122
+ <img src="https://dartnode.com/branding/DN-Open-Source-sm.png" height="200px"><br>
123
+ <sub>免费 VPS 提供方 DartNode</sub><br>
126
124
  </a>
127
125
  </th>
128
126
  </tr>
@@ -146,21 +144,12 @@ layout: about
146
144
  <table>
147
145
  <thead>
148
146
  <tr>
149
- <th align="center" style="width: 240px;">
147
+ <th align="center" width="240">
150
148
  <div>
151
149
  <img src="https://github.com/fluid-dev/static/blob/master/hexo-theme-fluid/sponsor.png?s=200&v=4" height="200px" alt="微信赞赏码"><br>
152
150
  <sub>微信赞赏码</sub>
153
151
  </div>
154
152
  </th>
155
- <th align="center" style="width: 240px;">
156
- <div>
157
- <a href="https://etherscan.io/address/0x0021395954710be29c0BFDCB3f98f4D2fa5A1448">
158
- <img src="https://avatars.githubusercontent.com/u/6250754?s=200&v=4" height="200px" alt="ERC20 Token">
159
- </a>
160
- <br>
161
- <sub>ERC20 Token: 0x0021395954710<br>be29c0BFDCB3f98f4D2fa5A1448</sub>
162
- </div>
163
- </th>
164
153
  </tr>
165
154
  </thead>
166
155
  </table>
package/_config.yml CHANGED
@@ -24,7 +24,7 @@ favicon: /img/fluid.png
24
24
  # Icon for Apple touch
25
25
  apple_touch_icon: /img/fluid.png
26
26
 
27
- # 浏览器标签页中的标题分隔符,效果: 文章名 - 站点名
27
+ # 浏览器标签页中的标题分隔符,效果:文章名 - 站点名
28
28
  # Title separator in browser tab, eg: article - site
29
29
  tab_title_separator: " - "
30
30
 
@@ -62,7 +62,7 @@ code:
62
62
  highlightjs:
63
63
  # 在链接中挑选 style 填入
64
64
  # Select a style in the link
65
- # See: https://highlightjs.org/static/demo/
65
+ # See: https://highlightjs.org/demo/
66
66
  style: "github gist"
67
67
  style_dark: "dark"
68
68
 
@@ -109,8 +109,10 @@ fun_features:
109
109
  element: h1,h2,h3,h4,h5,h6
110
110
  # Options: left | right
111
111
  placement: left
112
- # Options: hover | always | touch
112
+
113
+ # Options: hover | always
113
114
  visible: hover
115
+
114
116
  # Options: § | # | ❡
115
117
  icon: ""
116
118
 
@@ -128,7 +130,7 @@ fun_features:
128
130
  dark_mode:
129
131
  enable: true
130
132
  # 默认的选项(当用户手动切换后则不再按照默认模式),选择 `auto` 会优先遵循 prefers-color-scheme,其次按用户本地时间 18 点到次日 6 点之间进入暗色模式
131
- # Default option (when the visitor switches manually, the default mode is no longer followed), choosing `auto` will give priority to prefers-color-scheme, and then enter the dark mode from 18:00 to 6:00 in the visitors local time
133
+ # Default option (when the visitor switches manually, the default mode is no longer followed), choosing `auto` will give priority to prefers-color-scheme, and then enter the dark mode from 18:00 to 6:00 in the visitor's local time
132
134
  # Options: auto | light | dark
133
135
  default: auto
134
136
 
@@ -154,7 +156,7 @@ color:
154
156
  navbar_text_color_dark: "#d0d0d0"
155
157
 
156
158
  # 副标题字体色
157
- # Color of navigation bar text
159
+ # Color of subtitle text
158
160
  subtitle_color: "#fff"
159
161
  subtitle_color_dark: "#d0d0d0"
160
162
 
@@ -239,7 +241,7 @@ custom_css:
239
241
 
240
242
  # 网页访问统计
241
243
  # Analysis of website visitors
242
- web_analytics: # 网页访问统计
244
+ web_analytics:
243
245
  enable: false
244
246
 
245
247
  # 遵循访客浏览器"请勿追踪"的设置,如果开启则不统计其访问
@@ -265,16 +267,6 @@ web_analytics: # 网页访问统计
265
267
  sid:
266
268
  cid:
267
269
 
268
- # 51.la 站点统计 ID
269
- # 51.la analytics
270
- # See: https://www.51.la/user/site/index
271
- woyaola: # 51.la 站点统计 ID,参见
272
-
273
- # 友盟/cnzz 站点统计 web_id
274
- # cnzz analytics
275
- # See: https://web.umeng.com/main.php?c=site&a=show
276
- cnzz:
277
-
278
270
  # LeanCloud 计数统计,可用于 PV UV 展示,如果 `web_analytics: enable` 没有开启,PV UV 展示只会查询不会增加
279
271
  # LeanCloud count statistics, which can be used for PV UV display. If `web_analytics: enable` is false, PV UV display will only query and not increase
280
272
  leancloud:
@@ -290,6 +282,54 @@ web_analytics: # 网页访问统计
290
282
  # If true, ignore localhost & 127.0.0.1
291
283
  ignore_local: false
292
284
 
285
+ # OpenKounter 计数统计(基于 EdgeOne Pages),可用于 PV UV 展示
286
+ # OpenKounter count statistics (based on EdgeOne Pages), which can be used for PV UV display
287
+ # See: https://github.com/Mintimate/open-kounter
288
+ openkounter:
289
+ # OpenKounter API 服务器地址
290
+ # OpenKounter API server URL
291
+ server_url: https://open-kounter.mintimate.cn
292
+ # 统计页面时获取路径的属性,通常使用 window.location.pathname
293
+ # Get the attribute of the page path during statistics
294
+ path: window.location.pathname
295
+ # 开启后不统计本地路径(localhost、127.0.0.1、[::1])
296
+ # If true, ignore localhost & 127.0.0.1 & [::1]
297
+ ignore_local: false
298
+
299
+ # Umami Analytics,仅支持自部署。如果要展示 PV UV 需要填写所有配置项,否则只填写 `src` 和 `website_id` 即可
300
+ # Umami Analytics, only Self-host support. If you want to display PV UV need to set all config items, otherwise only set 'src' and 'website_id'
301
+ # See: https://umami.is/docs
302
+ umami:
303
+ # umami js 文件地址,需要在 umami 后台创建站点后获取
304
+ # umami js file url, get after create website in umami
305
+ src:
306
+
307
+ # umami 的 website id,需要在 umami 后台创建站点后获取
308
+ # umami website id, get after create website in umami
309
+ website_id:
310
+
311
+ # 如果你只想统计特定的域名可以填入此字段,多个域名通过逗号分隔,这可以避免统计 localhost。
312
+ # If you only want to tracker to specific domains you can fill in this field, multiple domain names are separated by commas, which can avoid tracker localhost
313
+ domains:
314
+
315
+ # 用于统计 PV UV 的开始时间,格式为 "YYYY-MM-DD"
316
+ # statistics on the start time, the format is "YYYY-MM-DD"
317
+ start_time: 2024-01-01
318
+
319
+ # 新建一个 umami viewOnly 用户,然后通过 login api 获取该用户 token
320
+ # create an umami viewOnly user, and then get user token through the login api
321
+ token:
322
+
323
+ # 填写 umami 部署的服务器地址,如 "https://umami.example.com"
324
+ # server url of umami deployment, such as "https://umami.example.com"
325
+ api_server:
326
+
327
+ # Canonical 用于向 Google 搜索指定规范网址,开启前确保 hexo _config.yml 中配置 `url: http://yourdomain.com`
328
+ # Canonical, to specify a canonical URL for Google Search, need to set up `url: http://yourdomain.com` in hexo _config.yml
329
+ # See: https://support.google.com/webmasters/answer/139066
330
+ canonical:
331
+ enable: false
332
+
293
333
  # 对页面中的图片和评论插件进行懒加载处理,可见范围外的元素不会提前加载
294
334
  # Lazy loading of images and comment plugin on the page
295
335
  lazyload:
@@ -309,7 +349,7 @@ lazyload:
309
349
 
310
350
  # 图标库,包含了大量社交类图标,主题依赖的不包含在内,因此可自行修改,详见 https://hexo.fluid-dev.com/docs/icon/
311
351
  # Icon library, which includes many social icons, does not include those theme dependent, so your can modify link by yourself. See: https://hexo.fluid-dev.com/docs/en/icon/
312
- iconfont: //at.alicdn.com/t/font_1736178_lbnruvf0jn.css
352
+ iconfont: //at.alicdn.com/t/c/font_1736178_k526ubmyhba.css
313
353
 
314
354
 
315
355
  #---------------------------
@@ -373,6 +413,10 @@ search:
373
413
  # 首屏图片的相关配置
374
414
  # Config of the big image on the first screen
375
415
  banner:
416
+ # 是否开启所有页面的随机头图,仅在页面对应 banner_img 为空时生效,将图片放在 source/img/random/ 目录下
417
+ # Enable random banner for all pages, only works when banner_img is empty, put images in the directory `source/img/random/`
418
+ random_img: false
419
+
376
420
  # 视差滚动,图片与板块会随着屏幕滚动产生视差效果
377
421
  # Scrolling parallax
378
422
  parallax: true
@@ -430,9 +474,9 @@ footer:
430
474
  statistics:
431
475
  enable: false
432
476
 
433
- # 统计数据来源,使用 leancloud 需要设置 `web_analytics: leancloud` 中的参数;使用 busuanzi 不需要额外设置,但是有时不稳定,另外本地运行时 busuanzi 显示统计数据很大属于正常现象,部署后会正常
434
- # Data source. If use leancloud, you need to set the parameter in `web_analytics: leancloud`
435
- # Options: busuanzi | leancloud
477
+ # 统计数据来源,使用 leancloud, umami, openkounter 需要设置 `web_analytics` 中对应的参数;使用 busuanzi 不需要额外设置,但是有时不稳定,另外本地运行时 busuanzi 显示统计数据很大属于正常现象,部署后会正常
478
+ # Data source. If use leancloud, umami, openkounter, you need to set the parameter in `web_analytics`
479
+ # Options: busuanzi | leancloud | umami | openkounter
436
480
  source: "busuanzi"
437
481
 
438
482
  # 国内大陆服务器的备案信息
@@ -463,7 +507,7 @@ index:
463
507
  # Available: 0 - 100
464
508
  banner_img_height: 100
465
509
 
466
- # 头图黑色蒙版的不透明度,available: 0 - 1.0, 1 是完全不透明
510
+ # 头图黑色蒙版的不透明度,available: 0 - 1.0,1 是完全不透明
467
511
  # Opacity of the banner mask, 1.0 is completely opaque
468
512
  # Available: 0 - 1.0
469
513
  banner_mask_alpha: 0.3
@@ -473,8 +517,8 @@ index:
473
517
  slogan:
474
518
  enable: true
475
519
 
476
- # 为空则按 hexo config.subtitle 显示
477
- # If empty, text based on `subtitle` in hexo config
520
+ # 为空则按 hexo config.subtitle 显示,支持列表格式来实现随机选择一行文字显示
521
+ # If empty, text based on `subtitle` in hexo config, support list format to random selection of a row for display
478
522
  text: "An elegant Material-Design theme for Hexo"
479
523
 
480
524
  # 通过 API 接口作为首页副标题的内容,必须返回的是 JSON 格式,如果请求失败则按 text 字段显示,该功能必须先开启 typing 打字机功能
@@ -575,7 +619,7 @@ post:
575
619
  enable: false
576
620
  # 统计数据来源
577
621
  # Data Source
578
- # Options: busuanzi | leancloud
622
+ # Options: busuanzi | leancloud | umami
579
623
  source: "busuanzi"
580
624
 
581
625
  # 在文章开头显示文章更新时间,该时间默认是 md 文件更新时间,可通过 front-matter 中 `updated` 手动指定(和 date 一样格式)
@@ -624,6 +668,9 @@ post:
624
668
  # Table of contents (TOC) in the sidebar
625
669
  toc:
626
670
  enable: true
671
+ # 进入文章时是否默认展开全部目录
672
+ # Expand all TOC items on enter
673
+ expand_all: true
627
674
 
628
675
  # 置于板块的左侧或右侧
629
676
  # place in the board
@@ -644,7 +691,8 @@ post:
644
691
  enable: true
645
692
 
646
693
  # CreativeCommons license
647
- # Options: BY | BY-SA | BY-ND | BY-NC | BY-NC-SA | BY-NC-ND
694
+ # See: https://creativecommons.org/share-your-work/cclicenses/
695
+ # Options: BY | BY-SA | BY-ND | BY-NC | BY-NC-SA | BY-NC-ND | ZERO
648
696
  license: 'BY'
649
697
 
650
698
  # 显示作者
@@ -752,11 +800,16 @@ utterances:
752
800
  # See: https://disqus.com
753
801
  disqus:
754
802
  shortname:
755
- # 以下为 Disqusjs 支持, 国内用户如果想使用 Disqus 建议配合使用
756
- # The following are Disqusjs configurations, please ignore if DisqusJS is not required
803
+ # 以下为 Disqusjs 支持, 国内用户如果想使用 Disqus 建议配合使用,支持填入多个 apikey,建议自行搭建 api 端点
804
+ # The following are Disqusjs configurations, please ignore if DisqusJS is not required, it supports filling in multiple apikeys, it is recommended to build the API endpoint by yourself
757
805
  # See: https://github.com/SukkaW/DisqusJS
758
806
  disqusjs: false
759
807
  apikey:
808
+ - 'KEY1'
809
+ #- 'KEY2'
810
+ api: https://disqus.skk.moe/disqus/
811
+ admin:
812
+ adminLabel:
760
813
 
761
814
  # Gitalk
762
815
  # 基于 GitHub Issues
@@ -955,7 +1008,7 @@ about:
955
1008
  name: "Fluid"
956
1009
  intro: "An elegant theme for Hexo"
957
1010
  # 更多图标可从 https://hexo.fluid-dev.com/docs/icon/ 查找,`class` 代表图标的 css class,添加 `qrcode` 后,图标不再是链接而是悬浮二维码
958
- # More icons can be found from https://hexo.fluid-dev.com/docs/en/icon/ `class` is the css class of the icon. If adding `qrcode`, The icon is no longer a link, but a hovering QR code
1011
+ # More icons can be found from https://hexo.fluid-dev.com/docs/en/icon/ `class` is the css class of the icon. If adding `qrcode`, the icon is no longer a link, but a hovering QR code
959
1012
  icons:
960
1013
  - { class: "iconfont icon-github-fill", link: "https://github.com", tip: "GitHub" }
961
1014
  - { class: "iconfont icon-douban-fill", link: "https://douban.com", tip: "豆瓣" }
@@ -1057,7 +1110,7 @@ static_prefix:
1057
1110
  internal_css: /css
1058
1111
  internal_img: /img
1059
1112
 
1060
- anchor: https://lib.baomitu.com/anchor-js/4.3.1/
1113
+ anchor: https://lib.baomitu.com/anchor-js/5.0.0/
1061
1114
 
1062
1115
  github_markdown: https://lib.baomitu.com/github-markdown-css/4.0.0/
1063
1116
 
@@ -1087,7 +1140,7 @@ static_prefix:
1087
1140
 
1088
1141
  valine: https://lib.baomitu.com/valine/1.5.1/
1089
1142
 
1090
- waline: https://cdn.staticfile.org/waline/2.15.5/
1143
+ waline: https://lib.baomitu.com/waline/3.6.0/
1091
1144
 
1092
1145
  gitalk: https://lib.baomitu.com/gitalk/1.8.0/
1093
1146
 
package/languages/de.yml CHANGED
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - Share-alike'
58
58
  NC: 'NC - Non-commercial'
59
59
  ND: 'ND - No derivative works'
60
+ ZERO: 'CC0 - No Copyright'
60
61
 
61
62
  footer:
62
63
  pv: 'Alle Aufrufe: {}'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: 'Stichwort'
68
69
 
69
70
  noscript_warning: 'Blog funktioniert am besten mit aktiviertem JavaScript'
71
+
72
+ darkmode:
73
+ light: 'Hell'
74
+ dark: 'Dunkel'
package/languages/en.yml CHANGED
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - Share-alike'
58
58
  NC: 'NC - Non-commercial'
59
59
  ND: 'ND - No derivative works'
60
+ ZERO: 'CC0 - No Copyright'
60
61
 
61
62
  footer:
62
63
  pv: 'Views: {}'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: 'Keyword'
68
69
 
69
70
  noscript_warning: 'Blog works best with JavaScript enabled'
71
+
72
+ darkmode:
73
+ light: 'Light'
74
+ dark: 'Dark'
package/languages/eo.yml CHANGED
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - Share-alike'
58
58
  NC: 'NC - Non-commercial'
59
59
  ND: 'ND - No derivative works'
60
+ ZERO: 'CC0 - No Copyright'
60
61
 
61
62
  footer:
62
63
  pv: 'Vidoj: {}'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: 'ŝlosivorto'
68
69
 
69
70
  noscript_warning: 'Blogo funkcias plej bone kun JavaScript ebligita'
71
+
72
+ darkmode:
73
+ light: 'Hela'
74
+ dark: 'Malhela'
package/languages/es.yml CHANGED
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - Compartir igual'
58
58
  NC: 'NC - No comercial'
59
59
  ND: 'ND - Sin obras derivadas'
60
+ ZERO: 'CC0 - Sin derechos autorales'
60
61
 
61
62
  footer:
62
63
  pv: 'Vistas: {}'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: 'Palabra clave'
68
69
 
69
70
  noscript_warning: 'El blog funciona mejor con JavaScript habilitado'
71
+
72
+ darkmode:
73
+ light: 'Claro'
74
+ dark: 'Oscuro'
package/languages/ja.yml CHANGED
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - Share-alike'
58
58
  NC: 'NC - Non-commercial'
59
59
  ND: 'ND - No derivative works'
60
+ ZERO: 'CC0 - No Copyright'
60
61
 
61
62
  footer:
62
63
  pv: '閲覧合計数: {}'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: 'キーワード'
68
69
 
69
70
  noscript_warning: 'ブログは JavaScript を有効にすると最適に機能します'
71
+
72
+ darkmode:
73
+ light: 'ライト'
74
+ dark: 'ダーク'
package/languages/ru.yml CHANGED
@@ -22,7 +22,7 @@ tag:
22
22
  title: 'Теги'
23
23
  subtitle: 'Теги'
24
24
  post_total: '%d сообщений всего'
25
-
25
+
26
26
  about:
27
27
  menu: 'О'
28
28
  title: 'О'
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - Share-alike'
58
58
  NC: 'NC - Non-commercial'
59
59
  ND: 'ND - No derivative works'
60
+ ZERO: 'CC0 - No Copyright'
60
61
 
61
62
  footer:
62
63
  pv: 'Просмотров: {}'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: 'Ключевое слово'
68
69
 
69
70
  noscript_warning: 'Блог лучше всего работает с включенным JavaScript'
71
+
72
+ darkmode:
73
+ light: 'Светлая'
74
+ dark: 'Тёмная'
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - 相同方式共享'
58
58
  NC: 'NC - 非商业性使用'
59
59
  ND: 'ND - 禁止演绎'
60
+ ZERO: 'CC0 - 无版权'
60
61
 
61
62
  footer:
62
63
  pv: '总访问量 {} 次'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: '关键词'
68
69
 
69
70
  noscript_warning: '博客在允许 JavaScript 运行的环境下浏览效果更佳'
71
+
72
+ darkmode:
73
+ light: '开灯'
74
+ dark: '关灯'
@@ -57,6 +57,7 @@ post:
57
57
  SA: 'SA - 相同方式共享'
58
58
  NC: 'NC - 非商業性使用'
59
59
  ND: 'ND - 禁止演繹'
60
+ ZERO: 'CC0 - 無著作權'
60
61
 
61
62
  footer:
62
63
  pv: '總訪問量 {} 次'
@@ -67,3 +68,7 @@ search:
67
68
  keyword: '關鍵字'
68
69
 
69
70
  noscript_warning: '博客在允許 JavaScript 運行的環境下瀏覽效果更佳'
71
+
72
+ darkmode:
73
+ light: '開燈'
74
+ dark: '關燈'
@@ -52,11 +52,12 @@ post:
52
52
  posted: '發布於'
53
53
  updated: '更新於'
54
54
  licensed: '許可協議'
55
- CC: 'CC - 知識共享許可協議'
56
- BY: 'BY - 署名'
57
- SA: 'SA - 相同方式共享'
58
- NC: 'NC - 非商業性使用'
59
- ND: 'ND - 禁止演繹'
55
+ CC: 'CC - 創用 CC 授權'
56
+ BY: 'BY - 姓名標示'
57
+ SA: 'SA - 相同方式分享'
58
+ NC: 'NC - 非商業性'
59
+ ND: 'ND - 禁止改作'
60
+ ZERO: 'CC0 - 公眾領域貢獻宣告'
60
61
 
61
62
  footer:
62
63
  pv: '總訪問量 {} 次'
@@ -66,4 +67,8 @@ search:
66
67
  title: '搜尋'
67
68
  keyword: '關鍵字'
68
69
 
69
- noscript_warning: '博客在允許 JavaScript 運行的環境下瀏覽效果更佳'
70
+ noscript_warning: '部落格在允許 JavaScript 執行的環境下瀏覽效果更佳'
71
+
72
+ darkmode:
73
+ light: '開燈'
74
+ dark: '關燈'
@@ -1,6 +1,7 @@
1
1
  <% if (theme.cusdis.host && theme.cusdis.app_id) { %>
2
- <div class="cusdis" style="width:100%">
2
+ <div class="cusdis" style="width:100%; overflow:visible; min-height:480px;">
3
3
  <div id="cusdis_thread"
4
+ style="width:100%; overflow:visible;"
4
5
  data-host="<%= theme.cusdis.host %>"
5
6
  data-app-id="<%= theme.cusdis.app_id %>"
6
7
  data-page-id="<%= md5(page.path) %>"
@@ -15,6 +16,37 @@
15
16
  Fluid.utils.createScript('<%= url_join(theme.cusdis.host,
16
17
  `/js/widget/lang/${ String(theme.cusdis.lang || 'zh-cn').toLowerCase() }.js`) %>');
17
18
  Fluid.utils.createScript('<%= url_join(theme.cusdis.host, 'js/cusdis.es.js') %>');
19
+
20
+ // 取消容器滚动条,尝试让 iframe 展开显示
21
+ var container = document.querySelector('.cusdis');
22
+ var thread = document.querySelector('#cusdis_thread');
23
+ if (container) container.style.overflow = 'visible';
24
+ if (thread) thread.style.overflow = 'visible';
25
+
26
+ // 等待 widget 加载后调整 iframe 样式
27
+ setTimeout(function() {
28
+ try {
29
+ var iframe = thread && thread.querySelector('iframe');
30
+ if (iframe) {
31
+ iframe.style.width = '100%';
32
+ iframe.style.border = 'none';
33
+ iframe.style.overflow = 'visible';
34
+ iframe.style.minHeight = '600px';
35
+ iframe.setAttribute('scrolling', 'no');
36
+
37
+ // 若同源,尝试根据内容自适应高度
38
+ try {
39
+ var doc = iframe.contentDocument || iframe.contentWindow.document;
40
+ if (doc && doc.body) {
41
+ iframe.style.height = doc.body.scrollHeight + 'px';
42
+ }
43
+ } catch (e) {
44
+ }
45
+ }
46
+ } catch (e) {
47
+ }
48
+ }, 600);
49
+
18
50
  var schema = document.documentElement.getAttribute('data-user-color-scheme');
19
51
  if (schema) {
20
52
  document.querySelector('#cusdis_thread').dataset.theme = schema
@@ -8,7 +8,12 @@
8
8
  Fluid.utils.createScript('<%= url_join(theme.static_prefix.disqusjs, 'disqus.js') %>', function() {
9
9
  new DisqusJS({
10
10
  shortname: '<%= theme.disqus.shortname %>',
11
- apikey: '<%= theme.disqus.apikey %>'
11
+ apikey: <%- JSON.stringify(theme.disqus.apikey) %>,
12
+ api: '<%= theme.disqus.api %>',
13
+ url: '<%= page.permalink %>',
14
+ identifier: '<%= url_for(page.path) %>',
15
+ admin: '<%= theme.disqus.admin %>',
16
+ adminLabel: '<%= theme.disqus.adminLabel %>'
12
17
  });
13
18
  });
14
19
  });
@@ -1,9 +1,9 @@
1
1
  <% if (theme.waline.serverURL) { %>
2
2
  <div id="waline"></div>
3
- <script type="text/javascript">
3
+ <script type="module">
4
4
  Fluid.utils.loadComments('#waline', function() {
5
- Fluid.utils.createCssLink('<%= url_join(theme.static_prefix.waline, 'waline.min.css') %>')
6
- Fluid.utils.createScript('<%= url_join(theme.static_prefix.waline, 'waline.min.js') %>', function() {
5
+ Fluid.utils.createCssLink('<%= url_join(theme.static_prefix.waline, 'waline.css') %>')
6
+ import('<%= url_join(theme.static_prefix.waline, 'waline.js') %>').then(({ init }) => {
7
7
  var options = Object.assign(
8
8
  <%- JSON.stringify(theme.waline || {}) %>,
9
9
  {
@@ -11,7 +11,7 @@
11
11
  path: <%= theme.waline.path %>
12
12
  }
13
13
  )
14
- Waline.init(options);
14
+ init(options);
15
15
  Fluid.utils.waitElementVisible('#waline .vcontent', () => {
16
16
  var imgSelector = '#waline .vcontent img:not(.vemoji)';
17
17
  Fluid.plugins.imageCaption(imgSelector);
@@ -8,7 +8,7 @@
8
8
 
9
9
  <!-- 主题依赖的图标库,不要自行修改 -->
10
10
  <!-- Do not modify the link that theme dependent icons -->
11
- <%- css('//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css') %>
11
+ <%- css('//at.alicdn.com/t/c/font_1749284_5i9bdhy70f8.css') %>
12
12
 
13
13
  <%- css(theme.static_prefix.iconfont || theme.iconfont) %>
14
14
 
@@ -1,6 +1,6 @@
1
1
  <div class="statistics">
2
- <% var pv_texts = (theme.footer.statistics.pv_format || __('footer.pv')).split('{}') %>
3
- <% var uv_texts = (theme.footer.statistics.uv_format || __('footer.uv')).split('{}') %>
2
+ <% let pv_texts = (theme.footer.statistics.pv_format || __('footer.pv')).split('{}') %>
3
+ <% let uv_texts = (theme.footer.statistics.uv_format || __('footer.uv')).split('{}') %>
4
4
 
5
5
  <% if (theme.footer.statistics.source === 'leancloud') { %>
6
6
  <% if (pv_texts.length >= 2) { %>
@@ -19,6 +19,23 @@
19
19
  <% } %>
20
20
  <% import_js(theme.static_prefix.internal_js, 'leancloud.js', 'defer') %>
21
21
 
22
+ <% } else if (theme.footer.statistics.source === 'openkounter') { %>
23
+ <% if (pv_texts.length >= 2) { %>
24
+ <span id="openkounter-site-pv-container" style="display: none">
25
+ <%- pv_texts[0] %>
26
+ <span id="openkounter-site-pv"></span>
27
+ <%- pv_texts[1] %>
28
+ </span>
29
+ <% } %>
30
+ <% if (uv_texts.length >= 2) { %>
31
+ <span id="openkounter-site-uv-container" style="display: none">
32
+ <%- uv_texts[0] %>
33
+ <span id="openkounter-site-uv"></span>
34
+ <%- uv_texts[1] %>
35
+ </span>
36
+ <% } %>
37
+ <% import_js(theme.static_prefix.internal_js, 'openkounter.js', 'defer') %>
38
+
22
39
  <% } else if (theme.footer.statistics.source === 'busuanzi') { %>
23
40
  <% if (pv_texts.length >= 2) { %>
24
41
  <span id="busuanzi_container_site_pv" style="display: none">
@@ -35,5 +52,23 @@
35
52
  </span>
36
53
  <% } %>
37
54
  <% import_js(theme.static_prefix.busuanzi, 'busuanzi.pure.mini.js', 'defer') %>
55
+
56
+ <% } else if (theme.footer.statistics.source === 'umami') { %>
57
+ <% if (pv_texts.length >= 2) { %>
58
+ <span id="umami-site-pv-container" style="display: none">
59
+ <%- pv_texts[0] %>
60
+ <span id="umami-site-pv"></span>
61
+ <%- pv_texts[1] %>
62
+ </span>
63
+ <% } %>
64
+ <% if (uv_texts.length >= 2) { %>
65
+ <span id="umami-site-uv-container" style="display: none">
66
+ <%- uv_texts[0] %>
67
+ <span id="umami-site-uv"></span>
68
+ <%- uv_texts[1] %>
69
+ </span>
70
+ <% } %>
71
+ <% import_js(theme.static_prefix.internal_js, 'umami-view.js', 'defer') %>
38
72
  <% } %>
73
+
39
74
  </div>
@@ -11,8 +11,4 @@
11
11
  <!-- 备案信息 ICP for China -->
12
12
  <%- partial('_partials/footer/beian.ejs') %>
13
13
  <% } %>
14
- <% if(theme.web_analytics.cnzz) { %>
15
- <!-- cnzz Analytics Icon -->
16
- <span id="cnzz_stat_icon_<%= theme.web_analytics.cnzz %>" style="display: none"></span>
17
- <% } %>
18
14
  </div>
@@ -15,8 +15,13 @@ var ogConfig = Object.assign({ image: ogImage && url_for(ogImage) }, theme.open_
15
15
 
16
16
  <head>
17
17
  <meta charset="UTF-8">
18
+
18
19
  <link rel="apple-touch-icon" sizes="76x76" href="<%= url_for(theme.apple_touch_icon) %>">
19
20
  <link rel="icon" href="<%= url_for(theme.favicon) %>">
21
+ <% if (theme.canonical.enable) { %>
22
+ <link rel="canonical" href="<%= url_join(config.url, page.canonical_path.replace('index.html', '')) %>"/>
23
+ <% } %>
24
+
20
25
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
21
26
  <meta http-equiv="x-ua-compatible" content="ie=edge">
22
27
  <% if (theme.force_https) { %>