hexo-theme-shokax 0.3.12 → 0.3.13

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -1,18 +1,25 @@
1
- # 公告
1
+ # 📣 公告
2
2
  [关于ShokaX markdown扩展特性的讨论](https://github.com/theme-shoka-x/hexo-theme-shokaX/discussions/177) \
3
3
  [关于删除部分评论系统的讨论](https://github.com/theme-shoka-x/hexo-theme-shokaX/discussions/175)
4
+
4
5
  # hexo-theme-shokaX
5
6
  ![LICENSE]( https://img.shields.io/github/license/theme-shoka-x/hexo-theme-shokaX)
6
7
  ![stars](https://img.shields.io/github/stars/theme-shoka-x/hexo-theme-shokaX)
7
8
  ![version](https://shields.io/npm/v/hexo-theme-shokax)
8
9
  ![build](https://img.shields.io/github/actions/workflow/status/theme-shoka-x/hexo-theme-shokaX/build-theme.yml)
9
10
 
10
- 语言(language): 简体中文 | [English](./README_en.MD) \
11
+ #### 语言(language): 简体中文 | [English](./README_en.MD) \
11
12
  此项目是shoka的一个二次开发版(算精神续作),致力于提高性能和优化魔改体验 \
12
13
  诞生原因是目前shoka已经两年没有更新了,积压了大量BUG和功能请求。
13
14
 
14
15
  shokaX的社区资源导航和插件仓库为[awesome-shokaX](https://github.com/theme-shoka-x/awesome-shokaX)
15
16
 
17
+ ## 技术栈
18
+ ![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
19
+ ![Vue.js](https://img.shields.io/badge/vuejs-%2335495e.svg?style=for-the-badge&logo=vuedotjs&logoColor=%234FC08D)
20
+ ![Pug](https://img.shields.io/badge/Pug-FFF?style=for-the-badge&logo=pug&logoColor=A86454)
21
+ ![Stylus](https://img.shields.io/badge/stylus-%23ff6347.svg?style=for-the-badge&logo=stylus&logoColor=white)
22
+
16
23
  ## 💬 和shoka的区别
17
24
  原先shoka使用了javascript+Native+nunjucks的技术 \
18
25
  而shokaX则使用了typescript+Vue 3+Pug的技术搭配 \
@@ -61,7 +68,7 @@ SXC install shokaX
61
68
  - [Typescript 中文网](https://www.tslang.cn/docs/home.html)
62
69
  - [Easy hexo](https://easyhexo.com/)
63
70
 
64
- # 许可证
71
+ # [许可证](https://github.com/theme-shoka-x/hexo-theme-shokaX/blob/main/LICENSE)
65
72
  许可证: AGPL 3 or later
66
73
 
67
74
  ## 特别说明
package/README_en.MD CHANGED
@@ -7,12 +7,18 @@
7
7
  ![version](https://shields.io/npm/v/hexo-theme-shokax)
8
8
  ![build](https://img.shields.io/github/actions/workflow/status/theme-shoka-x/hexo-theme-shokaX/build-theme.yml)
9
9
 
10
- Language: [简体中文](./README.md) | English \
10
+ #### Language: [简体中文](./README.md) | English \
11
11
  This project is a fork (spiritual successor) of Shoka, aimed at improving performance and optimizing the modified experience. \
12
12
  The reason for its creation is that Shoka has not been updated for two years, accumulating a large number of bugs and feature requests.
13
13
 
14
14
  The community resource guide and plugin repository for shokaX are available at [awesome-shokaX](https://github.com/theme-shoka-x/awesome-shokaX)
15
15
 
16
+ ## Technology Stack
17
+ ![TypeScript](https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge&logo=typescript&logoColor=white)
18
+ ![Vue.js](https://img.shields.io/badge/vuejs-%2335495e.svg?style=for-the-badge&logo=vuedotjs&logoColor=%234FC08D)
19
+ ![Pug](https://img.shields.io/badge/Pug-FFF?style=for-the-badge&logo=pug&logoColor=A86454)
20
+ ![Stylus](https://img.shields.io/badge/stylus-%23ff6347.svg?style=for-the-badge&logo=stylus&logoColor=white)
21
+
16
22
  ## 💬 Differences from Shoka
17
23
  The original Shoka used a combination of JavaScript + Native + Nunjucks technologies. \
18
24
  ShokaX, on the other hand, uses TypeScript + Vue 3 + Pug technologies and has changed many hard-to-access CDN links.
@@ -35,7 +41,7 @@ Notes:
35
41
  ## 🔧 How to Install
36
42
  Note: This project requires node.js 18.x or higher to run. \
37
43
  It is recommended to use [ShokaX-CLI](https://github.com/zkz098/shokaX-CLI) \
38
- [Click here](https://docs.kaitaku.xyz/guide/#%E9%85%8D%E7%BD%AE%E4%B8%BB%E9%A2%98) for the next configuration steps.
44
+ [Click here](https://docs.kaitaku.xyz/en/guide/) for the next configuration steps.
39
45
 
40
46
  ## 📚 Sub-projects
41
47
  - [ShokaX docs](https://github.com/theme-shoka-x/shokaX-docs) ShokaX Theme Documentation (work in progress, contributions welcome!)
@@ -48,13 +54,15 @@ It is recommended to use [ShokaX-CLI](https://github.com/zkz098/shokaX-CLI) \
48
54
  [ShokaX Official Development Documentation](https://docs.kaitaku.xyz/develop/basic/)
49
55
 
50
56
  Recommended reading for contributing:
51
- - [Hexo Official Documentation](https://hexo.io/zh-cn/docs/templates)
52
- - [Stylus Chinese Documentation](http://stylus.bootcss.com/)
57
+ - [Hexo Official Documentation]([https://hexo.io/zh-cn/docs/templates](https://hexo.io/docs/templates.html))
58
+ - [Stylus Documentation](https://stylus-lang.com/)
59
+ - [Stylus Chinese Documentation](https://stylus.bootcss.com/)
53
60
  - [Pug Template Engine Chinese Documentation](https://www.pugjs.cn/api/getting-started.html)
61
+ - [TypeScript Documentation](https://www.typescriptlang.org/docs/)
54
62
  - [TypeScript Chinese Documentation](https://www.tslang.cn/docs/home.html)
55
63
  - [Easy Hexo](https://easyhexo.com/)
56
64
 
57
- # License
65
+ # [License](https://github.com/theme-shoka-x/hexo-theme-shokaX/blob/main/LICENSE)
58
66
  License: AGPL 3 or later
59
67
 
60
68
  ## Special Note
package/_config.yml CHANGED
@@ -21,7 +21,6 @@ pwa:
21
21
 
22
22
  # 实验性特性
23
23
  experiments:
24
- noIE: true # TODO 阻止IE浏览器访问(ShokaX不支持IE的任何版本)
25
24
  noPlayer: false # 禁用音乐播放器
26
25
  gradient: false # 使用CSS渐变作为文章封面
27
26
  fixedCover: "" # 主页面cover(为空则使用bing随机图片)
@@ -77,7 +76,7 @@ loader:
77
76
 
78
77
  # 使用polyfill.io自动处理浏览器兼容问题
79
78
  polyfill:
80
- enable: true
79
+ enable: false
81
80
  features:
82
81
  - default
83
82
  - fetch
@@ -155,9 +154,9 @@ font:
155
154
  external: true
156
155
  family: Inconsolata
157
156
 
158
- # project of https://www.iconfont.cn/
159
- # //at.alicdn.com/t/font_1832207_c8i9n1ulxlt.css => 1832207_c8i9n1ulxlt
160
- iconfont: "1832207_igi8uaupcus"
157
+ # //at.alicdn.com/t/c/font_4415496_59g1326wajd.css => 4415496_59g1326wajd
158
+ # 自定义iconfont图标参见文档教程
159
+ iconfont: "4415496_59g1326wajd"
161
160
 
162
161
  menu:
163
162
  home: / || home
@@ -175,9 +174,9 @@ menu:
175
174
  # https://twikoo.js.org
176
175
  twikoo:
177
176
  enable: false
178
- link: "https://cdn.staticfile.org/twikoo/1.6.10/twikoo.nocss.min.js"
177
+ link: "https://cdn.staticfile.org/twikoo/1.6.30/twikoo.all.min.js"
179
178
  mode: vercel # vercel或tencent
180
- envId: "https://114514.foo.bar" # twikoo环境ID,vercel填地址
179
+ envId: "https://example.com" # twikoo环境ID,vercel填地址
181
180
  region:
182
181
 
183
182
  # https://waline.js.org/
@@ -212,8 +211,6 @@ summary:
212
211
  openai:
213
212
  remote: "https://api.openai.com"
214
213
  apikey: "key"
215
- custom:
216
- remote: "http://localhost:8000"
217
214
 
218
215
 
219
216
  # Social Links
@@ -222,7 +219,7 @@ summary:
222
219
  # Value before `||` delimiter is the target permalink,
223
220
  # secend value is the name of Font icon.
224
221
  social:
225
- # github: https://github.com/name || github || "#191717"
222
+ github: https://github.com/name || github || "#191717"
226
223
  #google: https://plus.google.com/yourname || google
227
224
  #twitter: https://twitter.com/yourname || twitter || "#00aff0"
228
225
  #zhihu: https://www.zhihu.com/people/yourname || zhihu || "#1e88e5"
@@ -366,7 +363,7 @@ vendors:
366
363
  # mouse_firework: npm_webcache|mouse-firework@0.0.4/dist/index.umd.js
367
364
  async_js:
368
365
  fancybox: bytedance|??jquery/3.5.1/jquery.min.js,fancybox/3.5.7/jquery.fancybox.min.js,justifiedGallery/3.8.1/js/jquery.justifiedGallery.min.js
369
- copy_tex: npm_webcache|katex@0.16.7/contrib/copy-tex.min.js
366
+ copy_tex: npm_webcache|katex@0.16.7/dist/contrib/copy-tex.min.js
370
367
  css:
371
368
  katex: npm_webcache|katex@0.16.7/dist/katex.min.css
372
369
  comment: css/comment.css
@@ -11,7 +11,7 @@ mixin SMRender(item)
11
11
  div(class="cover" style=`background: linear-gradient(to bottom right, ${random_color()}, ${random_color()});`)
12
12
  else
13
13
  div(class="cover")
14
- != _url(link1, '<img data-src="'+ _cover(item) +'" alt="article cover">', {itemprop: 'url', title: postText})
14
+ != _url(link1, '<img loading="lazy" data-src="'+ _cover(item) +'" alt="article cover">', {itemprop: 'url', title: postText})
15
15
  div(class="info")
16
16
  +PMRender(item)
17
17
  h3
@@ -45,7 +45,6 @@ if fontConfig
45
45
 
46
46
  include pwa.pug
47
47
  if tk
48
- != _css("twikoo.css")
49
48
  script(src=theme.twikoo.link )
50
49
  else if wl
51
50
  link(rel="stylesheet" href="https://npm.webcache.cn/@waline/client@v2/dist/waline.css" media="none" onload="this.media='all'")
@@ -11,7 +11,7 @@ article(itemscope itemtype="http://schema.org/Article" class="post block" lang=t
11
11
  if post.photos && post.photos.length
12
12
  div(class="gallery" itemscope itemtype="http://schema.org/ImageGallery")
13
13
  each photo in post.photos
14
- img(data-src=_image_url(photo, post.path) itemprop="contentUrl")
14
+ img(loading="lazy" data-src=_image_url(photo, post.path) itemprop="contentUrl")
15
15
  if theme.summary.enable && page.layout === 'post'
16
16
  div(class='tabs' id='summary')
17
17
  div(class="show-btn")
@@ -13,6 +13,6 @@ if page.reward !== false
13
13
  else
14
14
  - var translation = name
15
15
  div
16
- img(data-src=`${url_for(theme.statics + theme.assets + image) }` alt=`${ author } ${ translation }`)
16
+ img(loading="lazy" data-src=`${url_for(theme.statics + theme.assets + image) }` alt=`${ author } ${ translation }`)
17
17
  p
18
18
  != translation
@@ -1,5 +1,5 @@
1
1
  div(class="author" itemprop="author" itemscope itemtype="http://schema.org/Person")
2
- img(class="image" itemprop="image" alt=author
2
+ img(loading="lazy" class="image" itemprop="image" alt=author
3
3
  data-src=url_for(theme.statics + theme.assets + '/'+ theme.sidebar.avatar))
4
4
  p(class="name" itemprop="name")
5
5
  != author
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "hexo-theme-shokax",
3
- "version": "0.3.12",
3
+ "version": "0.3.13",
4
4
  "description": "a hexo theme based on shoka",
5
5
  "main": "index.js",
6
6
  "repository": "https://github.com/theme-shoka-x/hexo-theme-shokaX",
7
7
  "author": "zkz098",
8
8
  "license": "AGPL-3.0-or-later",
9
+ "packageManager": "pnpm@8.14.1",
9
10
  "scripts": {
10
11
  "test": "tsc --build --verbose",
11
12
  "build": "cd ./source && tsc --build --verbose && cd ../scripts && tsc --build --verbose"
@@ -14,31 +15,30 @@
14
15
  "@types/fancybox": "^3.5.6",
15
16
  "@types/jquery": "^3.5.29",
16
17
  "@types/js-yaml": "^4.0.9",
17
- "@types/lozad": "^1.16.4",
18
- "@types/node": "^20.11.5",
19
- "@typescript-eslint/eslint-plugin": "^6.19.0",
20
- "@typescript-eslint/parser": "^6.19.0",
18
+ "@types/node": "^20.11.10",
19
+ "@typescript-eslint/eslint-plugin": "^6.19.1",
20
+ "@typescript-eslint/parser": "^6.19.1",
21
21
  "eslint": "^8.56.0",
22
22
  "eslint-config-standard": "~17",
23
23
  "eslint-plugin-import": "^2.29.1",
24
24
  "eslint-plugin-n": "^16.6.2",
25
25
  "eslint-plugin-promise": "^6.1.1",
26
26
  "eslint-plugin-vue": "^9.20.1",
27
- "instantsearch.js": "^4.64.0",
27
+ "instantsearch.js": "^4.64.1",
28
28
  "typescript": "^5.3.3",
29
29
  "vue": "^3.4.15"
30
30
  },
31
31
  "dependencies": {
32
- "esbuild": "^0.19.11",
32
+ "esbuild": "^0.20.0",
33
33
  "hexo": "7.0.0",
34
34
  "hexo-fs": "^4.1.1",
35
35
  "hexo-pagination": "^3.0.0",
36
36
  "hexo-util": "^3.2.0",
37
37
  "js-yaml": "^4.1.0",
38
- "lozad": "^1.16.0",
39
- "mouse-firework": "^0.0.4",
38
+ "mouse-firework": "^0.0.5",
40
39
  "theme-shokax-anime": "^0.0.6",
41
- "theme-shokax-pjax": "^0.0.3"
40
+ "theme-shokax-pjax": "^0.0.3",
41
+ "unlazy": "^0.10.4"
42
42
  },
43
43
  "engines": {
44
44
  "node": ">=18.0.0"
@@ -1,5 +1,5 @@
1
1
  /* global hexo */
2
2
  hexo.extend.filter.register('after_post_render', (data) => {
3
3
  // 使用正则表达式将<img>标签的src属性替换为data-src属性
4
- data.content = data.content.replace(/(<img[^>]*) src=/img, '$1 data-src=');
4
+ data.content = data.content.replace(/(<img[^>]*) src=/img, '$1 loading="lazy" data-src=');
5
5
  }, 0);
@@ -101,7 +101,10 @@ hexo.extend.generator.register('script', function (locals) {
101
101
  platform: 'browser',
102
102
  format: 'iife',
103
103
  target: ['es2022'],
104
- minify: true
104
+ minify: true,
105
+ define: {
106
+ __UNLAZY_LOGGING__: 'false'
107
+ }
105
108
  });
106
109
  text += fs.readFileSync('shokax_temp.js');
107
110
  const result = hexo.render.renderSync({ text, engine: 'js' });
@@ -11,7 +11,7 @@ let db;
11
11
  function postMessage(path, content, dbPath, startMessage) {
12
12
  if (node_fs_1.default.existsSync('summary.json')) {
13
13
  // @ts-ignore
14
- db = JSON.parse(node_fs_1.default.readFileSync('summary.json'));
14
+ db = JSON.parse(node_fs_1.default.readFileSync('summary.json', { encoding: 'utf-8' }));
15
15
  }
16
16
  else {
17
17
  db = {};
@@ -39,12 +39,14 @@
39
39
  width: auto;
40
40
  height: auto;
41
41
  background: none;
42
- border-radius: 10px;
42
+ border-radius: 0;
43
43
  border-bottom: .125rem solid transparent;
44
44
  }
45
45
 
46
46
  &.active::before {
47
47
  border-bottom-color: var(--primary-color);
48
+ left: 0;
49
+ right: 0;
48
50
  }
49
51
  }
50
52
  }
@@ -149,12 +149,12 @@ input, textarea {
149
149
  @font-face {
150
150
  font-family: 'ic';
151
151
  font-display: swap;
152
- src: url('//at.alicdn.com/t/font_' + $iconfont + '.eot');
153
- src: url('//at.alicdn.com/t/font_' + $iconfont + '.eot?#iefix') format('embedded-opentype'),
154
- url('//at.alicdn.com/t/font_' + $iconfont + '.woff2') format('woff2'),
155
- url('//at.alicdn.com/t/font_' + $iconfont + '.woff') format('woff'),
156
- url('//at.alicdn.com/t/font_' + $iconfont + '.ttf') format('truetype'),
157
- url('//at.alicdn.com/t/font_' + $iconfont + '.svg#ic') format('svg');
152
+ src: url('//at.alicdn.com/t/c/font_' + $iconfont + '.eot');
153
+ src: url('//at.alicdn.com/t/c/font_' + $iconfont + '.eot?#iefix') format('embedded-opentype'),
154
+ url('//at.alicdn.com/t/c/font_' + $iconfont + '.woff2') format('woff2'),
155
+ url('//at.alicdn.com/t/c/font_' + $iconfont + '.woff') format('woff'),
156
+ url('//at.alicdn.com/t/c/font_' + $iconfont + '.ttf') format('truetype'),
157
+ url('//at.alicdn.com/t/c/font_' + $iconfont + '.svg#ic') format('svg');
158
158
  }
159
159
 
160
160
  @font-face {
@@ -449,3 +449,7 @@
449
449
  .i-cloud-music:before {
450
450
  content: "\e76a";
451
451
  }
452
+
453
+ .i-gitee:before {
454
+ content: "\e607";
455
+ }
@@ -122,7 +122,6 @@ export const sidebarTOC = () => {
122
122
  if (navItems.length < 1) {
123
123
  return;
124
124
  }
125
- // @ts-ignore
126
125
  let sections = [...navItems];
127
126
  let activeLock = null;
128
127
  sections = sections.map((element, index) => {
@@ -70,46 +70,6 @@ export const scrollHandle = () => {
70
70
  $dom('.percent').changeOrGetWidth(scrollPercent);
71
71
  }
72
72
  };
73
- /**
74
- * 此函数用于修改右键点击显示菜单 <br/>
75
- * 需要在document下存在如下元素:
76
- * - id为clickMenu的容器(右键菜单容器)
77
- * - class为clickSubmenu的容器(可以有0到无限个)(子菜单容器)
78
- * CSS应有如下class:
79
- * - clickMenu的active类(控制显示)
80
- */
81
- export const clickMenu = () => {
82
- const menuElement = $dom('#clickMenu');
83
- window.oncontextmenu = function (event) {
84
- if (event.ctrlKey) { // 当按下ctrl键时不触发自定义菜单
85
- return;
86
- }
87
- event.preventDefault();
88
- let x = event.offsetX; // 触发点到页面窗口左边的距离
89
- let y = event.offsetY;
90
- const winWidth = window.innerWidth; // 窗口的内部宽度(包括滚动条)
91
- const winHeight = window.innerHeight;
92
- const menuWidth = menuElement.offsetWidth; // 菜单宽度
93
- const menuHeight = menuElement.offsetHeight;
94
- x = winWidth - menuWidth >= x ? x : winWidth - menuWidth;
95
- y = winHeight - menuHeight >= y ? y : winHeight - menuHeight;
96
- menuElement.style.top = y + 'px';
97
- menuElement.style.left = x + 'px';
98
- menuElement.classList.add('active');
99
- $dom.each('.clickSubmenu', (submenu) => {
100
- if (x > (winWidth - menuWidth - submenu.offsetWidth)) {
101
- submenu.style.left = '-200px';
102
- }
103
- else {
104
- submenu.style.left = '';
105
- submenu.style.right = '-200px';
106
- }
107
- });
108
- };
109
- window.addEventListener('click', () => {
110
- menuElement.classList.remove('active');
111
- });
112
- };
113
73
  // 可见度监听(离开页面和返回时更改document的title)
114
74
  export const visibilityListener = () => {
115
75
  const iconNode = $dom('[rel="icon"]');
@@ -1,15 +1,6 @@
1
1
  // 与第三方js的交互或第三方嵌入js
2
- import lozad from 'lozad';
3
2
  import { loadCat } from './globalVars';
4
3
  import { transition } from '../library/anime';
5
- /**
6
- * 懒加载图片
7
- */
8
- export const lazyload = lozad('img, [data-background-image]', {
9
- loaded(el) {
10
- el.addClass('lozaded');
11
- }
12
- });
13
4
  // 加载动画
14
5
  export const Loader = {
15
6
  timer: undefined,
@@ -49,44 +49,18 @@ export const positionInit = (comment) => {
49
49
  }
50
50
  };
51
51
  /*
52
- 这段代码是用来复制文本的。它使用了浏览器的 Clipboard API,如果浏览器支持该 API 并且当前页面是安全协议 (https),
53
- 它将使用 Clipboard API 将文本复制到剪贴板。如果不支持,它会创建一个隐藏的文本区域并使用 document.execCommand('copy') 将文本复制到剪贴板。
54
- 最后,它会回调传入的函数并传入一个布尔值表示是否成功复制。
52
+ 基于clipboard API的复制功能,仅在https环境下有效
55
53
  */
56
54
  export const clipBoard = (str, callback) => {
57
55
  if (navigator.clipboard && window.isSecureContext) {
58
56
  navigator.clipboard.writeText(str).then(() => {
59
- // eslint-disable-next-line chai-friendly/no-unused-expressions
60
57
  callback && callback(true);
61
58
  }, () => {
62
- // eslint-disable-next-line chai-friendly/no-unused-expressions
63
59
  callback && callback(false);
64
60
  });
65
61
  }
66
62
  else {
67
- // TODO 根据caniuse,需要此polyfill的设备不足5%,应考虑删除
68
- const ta = BODY.createChild('textarea', {
69
- style: {
70
- top: window.scrollY + 'px',
71
- position: 'absolute',
72
- opacity: '0'
73
- },
74
- readOnly: true,
75
- value: str
76
- });
77
- const selection = document.getSelection();
78
- const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
79
- ta.select();
80
- ta.setSelectionRange(0, str.length);
81
- ta.readOnly = false;
82
- const result = document.execCommand('copy');
83
- // eslint-disable-next-line chai-friendly/no-unused-expressions
84
- callback && callback(result);
85
- ta.blur(); // For iOS
86
- if (selected) {
87
- selection.removeAllRanges();
88
- selection.addRange(selected);
89
- }
90
- BODY.removeChild(ta);
63
+ console.error('Too old browser, clipborad API not supported.');
64
+ callback && callback(false);
91
65
  }
92
66
  };
@@ -66,6 +66,7 @@ export const transition = (target, type, complete, begin) => {
66
66
  };
67
67
  break;
68
68
  default:
69
+ // @ts-ignore
69
70
  animation = type;
70
71
  // @ts-ignore
71
72
  display = type.display;
@@ -76,12 +77,10 @@ export const transition = (target, type, complete, begin) => {
76
77
  duration: 200,
77
78
  easing: 'linear',
78
79
  begin() {
79
- // eslint-disable-next-line chai-friendly/no-unused-expressions
80
80
  begin && begin();
81
81
  },
82
82
  complete() {
83
83
  target.display(display);
84
- // eslint-disable-next-line chai-friendly/no-unused-expressions
85
84
  complete && complete();
86
85
  }
87
86
  }, animation)).play();
@@ -101,9 +100,7 @@ export const pageScroll = (target, offset, complete) => {
101
100
  scrollTop: offset || (typeof target === 'number' ? target : (target ? target.getTop() + document.documentElement.scrollTop - siteNavHeight : 0)),
102
101
  // 完成回调函数
103
102
  complete() {
104
- // eslint-disable-next-line chai-friendly/no-unused-expressions
105
103
  complete && complete();
106
104
  }
107
105
  }).play();
108
- // 调用 anime.js 函数,并传入参数
109
106
  };
@@ -25,8 +25,8 @@ export default function domInit() {
25
25
  backToTop.addEventListener('click', backToTopHandle);
26
26
  goToComment.addEventListener('click', goToCommentHandle);
27
27
  showContents.addEventListener('click', sideBarToggleHandle);
28
- if (typeof mediaPlayer !== 'undefined') {
29
- mediaPlayer(toolPlayer);
28
+ if (typeof mediaPlayer !== 'undefined' && !CONFIG.noPlayer) {
29
+ /* @__PURE__ */ mediaPlayer(toolPlayer);
30
30
  $dom('main').addEventListener('click', () => {
31
31
  toolPlayer.player.mini();
32
32
  });
@@ -9,7 +9,7 @@ import { loadCat, menuToggle, setLocalHash, setLocalUrl, setOriginTitle, sideBar
9
9
  import { mediaPlayer } from '../player';
10
10
  import { pagePosition, positionInit } from '../globals/tools';
11
11
  import { menuActive, sideBarTab, sidebarTOC } from '../components/sidebar';
12
- import { Loader, isOutime, lazyload } from '../globals/thirdparty';
12
+ import { Loader, isOutime } from '../globals/thirdparty';
13
13
  import { tabFormat } from '../page/tab';
14
14
  export const pjaxReload = () => {
15
15
  pagePosition();
@@ -48,6 +48,5 @@ export const siteRefresh = (reload) => {
48
48
  positionInit();
49
49
  }, 500);
50
50
  cardActive();
51
- lazyload.observe();
52
51
  isOutime();
53
52
  };
@@ -9,6 +9,7 @@ import { pagePosition } from '../globals/tools';
9
9
  import { initFireworks } from '../fireworks';
10
10
  import Pjax from 'theme-shokax-pjax';
11
11
  import { initVue } from '../library/vue';
12
+ import { lazyLoad } from 'unlazy';
12
13
  const siteInit = () => {
13
14
  domInit();
14
15
  initVue();
@@ -32,6 +33,7 @@ const siteInit = () => {
32
33
  themeColorListener();
33
34
  algoliaSearch(pjax);
34
35
  initFireworks();
36
+ lazyLoad();
35
37
  window.addEventListener('scroll', scrollHandle);
36
38
  window.addEventListener('resize', resizeHandle);
37
39
  window.addEventListener('pjax:send', pjaxReload);
@@ -6,10 +6,7 @@ import { $storage } from './library/storage';
6
6
  import { tabFormat } from './page/tab';
7
7
  let NOWPLAYING = null;
8
8
  const isMobile = /mobile/i.test(window.navigator.userAgent);
9
- export const mediaPlayer = (t, config) => {
10
- if (CONFIG.noPlayer) {
11
- return;
12
- }
9
+ export const mediaPlayer = /* @__PURE__ */ (t, config) => {
13
10
  const buttons = {
14
11
  el: {},
15
12
  create() {