hexo-theme-shokax 0.4.14 → 0.4.15
Sign up to get free protection for your applications and to get access to all the features.
- package/_config.yml +7 -5
- package/layout/_partials/head/head.pug +3 -0
- package/package.json +2 -3
- package/scripts/generaters/script.js +32 -1
- package/scripts/plugin/index.js +3 -0
- package/source/js/_app/components/cloudflare.ts +19 -0
- package/source/js/_app/library/declare.d.ts +3 -0
- package/source/js/_app/library/scriptPjax.ts +0 -18
- package/source/js/_app/page/post.ts +2 -2
package/_config.yml
CHANGED
@@ -27,10 +27,13 @@ experiments:
|
|
27
27
|
optimizeLongPosts: false # 优化长文章,这能让长文章的FPS提升70%-150%并解决假死问题,但存在一些副作用
|
28
28
|
# 具体见https://docs.kaitaku.xyz/guide/theme.html#%E9%95%BF%E6%96%87%E7%AB%A0%E4%BC%98%E5%8C%96
|
29
29
|
mobileWidth: 820px # 移动版和桌面版导航栏最短切换长度
|
30
|
+
# 使用 Cloudflare Rocket 或其他优化功能时需开启下列补丁,否则主题无法渲染
|
31
|
+
cloudflarePatch: false
|
30
32
|
coverConfig:
|
31
33
|
enableCover: true # 是否开启头图
|
32
34
|
enablePreload: true #是否开启预加载头图
|
33
|
-
enableNextGradientCover:
|
35
|
+
enableNextGradientCover: false # 使用CSS渐变作为上/下一页封面
|
36
|
+
copyrightLength: 50 # 自定义复制时显示copyright的长度
|
34
37
|
|
35
38
|
homeConfig:
|
36
39
|
gradient: false # 使用CSS渐变作为文章封面
|
@@ -99,13 +102,13 @@ polyfill:
|
|
99
102
|
# 参阅 https://github.com/D-Sketon/mouse-firework
|
100
103
|
fireworks:
|
101
104
|
enable: true
|
102
|
-
options:
|
105
|
+
options:
|
103
106
|
excludeElements: ["a"]
|
104
107
|
particles:
|
105
108
|
- shape: circle
|
106
109
|
move: ["emit"]
|
107
110
|
easing: easeOutExpo
|
108
|
-
colors:
|
111
|
+
colors:
|
109
112
|
- "rgba(255,182,185,.9)"
|
110
113
|
- "rgba(250,227,217,.9)"
|
111
114
|
- "rgba(187,222,214,.9)"
|
@@ -225,7 +228,6 @@ summary:
|
|
225
228
|
remote: "https://api.openai.com"
|
226
229
|
apikey: "key"
|
227
230
|
|
228
|
-
|
229
231
|
# Social Links
|
230
232
|
# Usage: `Key: permalink || icon || color`
|
231
233
|
# Key is the link label showing to end users.
|
@@ -401,4 +403,4 @@ vendors:
|
|
401
403
|
justifiedGallery:
|
402
404
|
source: cdnjs
|
403
405
|
url: justifiedGallery/3.8.1/css/justifiedGallery.min.css
|
404
|
-
sri: "sha384-V/1Ew9pYm8xpy/L9i078ZXT6HSEOrGC6KNFYLbXOdtqb3+c6brpGqVzZtEPSQOiz"
|
406
|
+
sri: "sha384-V/1Ew9pYm8xpy/L9i078ZXT6HSEOrGC6KNFYLbXOdtqb3+c6brpGqVzZtEPSQOiz"
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "hexo-theme-shokax",
|
3
|
-
"version": "0.4.
|
3
|
+
"version": "0.4.15",
|
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",
|
@@ -46,8 +46,7 @@
|
|
46
46
|
"theme-shokax-anime": "^0.0.7",
|
47
47
|
"theme-shokax-pjax": "^0.0.3",
|
48
48
|
"twikoo": "^1.6.39",
|
49
|
-
"unlazy": "^0.11.3"
|
50
|
-
"vue": "^3.5.7"
|
49
|
+
"unlazy": "^0.11.3"
|
51
50
|
},
|
52
51
|
"engines": {
|
53
52
|
"node": ">=18.0.0"
|
@@ -64,6 +64,9 @@ hexo.extend.generator.register("script", function(locals) {
|
|
64
64
|
priority: theme.quicklink.priority
|
65
65
|
},
|
66
66
|
playerAPI: theme.playerAPI,
|
67
|
+
experiments: {
|
68
|
+
copyrightLength: theme.experiments.copyrightLength
|
69
|
+
},
|
67
70
|
audio: void 0,
|
68
71
|
fireworks: theme.fireworks && theme.fireworks.enable && theme.fireworks.options ? theme.fireworks.options : void 0,
|
69
72
|
waline: {
|
@@ -93,10 +96,12 @@ hexo.extend.generator.register("script", function(locals) {
|
|
93
96
|
if (theme?.audio) {
|
94
97
|
siteConfig.audio = theme.audio;
|
95
98
|
}
|
96
|
-
let enterPoint;
|
99
|
+
let enterPoint, patchDir;
|
97
100
|
if (import_node_fs.default.existsSync("themes/shokaX/source/js/_app/pjax/siteInit.ts")) {
|
101
|
+
patchDir = "themes/shokaX/source/js/_app/components/cloudflare.ts";
|
98
102
|
enterPoint = "themes/shokaX/source/js/_app/pjax/siteInit.ts";
|
99
103
|
} else {
|
104
|
+
patchDir = "node_modules/hexo-theme-shokax/source/js/_app/components/cloudflare.ts";
|
100
105
|
enterPoint = "node_modules/hexo-theme-shokax/source/js/_app/pjax/siteInit.ts";
|
101
106
|
}
|
102
107
|
(0, import_esbuild.buildSync)({
|
@@ -164,5 +169,31 @@ hexo.extend.generator.register("script", function(locals) {
|
|
164
169
|
});
|
165
170
|
}
|
166
171
|
});
|
172
|
+
if (theme.experiments.cloudflarePatch) {
|
173
|
+
const result = (0, import_esbuild.buildSync)({
|
174
|
+
entryPoints: [patchDir],
|
175
|
+
bundle: true,
|
176
|
+
platform: "browser",
|
177
|
+
format: "iife",
|
178
|
+
tsconfigRaw: {
|
179
|
+
compilerOptions: {
|
180
|
+
target: "ES2022",
|
181
|
+
esModuleInterop: true,
|
182
|
+
module: "ESNext",
|
183
|
+
moduleResolution: "Node",
|
184
|
+
skipLibCheck: true
|
185
|
+
}
|
186
|
+
},
|
187
|
+
target: ["es2022"],
|
188
|
+
minify: true,
|
189
|
+
outfile: "cf-patch.js"
|
190
|
+
});
|
191
|
+
res.push({
|
192
|
+
path: theme.js + "/cf-patch.js",
|
193
|
+
data: function() {
|
194
|
+
return result;
|
195
|
+
}
|
196
|
+
});
|
197
|
+
}
|
167
198
|
return res;
|
168
199
|
});
|
package/scripts/plugin/index.js
CHANGED
@@ -31,6 +31,9 @@ var fs = __toESM(require("node:fs"));
|
|
31
31
|
hexo.on("generateBefore", () => {
|
32
32
|
(0, import_injects.default)(hexo);
|
33
33
|
fs.rmSync("./shokaxTemp", { force: true, recursive: true });
|
34
|
+
if (fs.existsSync("cf-patch.js")) {
|
35
|
+
fs.unlinkSync("cf-patch.js");
|
36
|
+
}
|
34
37
|
if (fs.existsSync("request.lock")) {
|
35
38
|
fs.unlinkSync("request.lock");
|
36
39
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
// rocket-loader & Auto minify(cloudflare) 补丁
|
2
|
+
// cloudflare 的上述功能会导致DOMContentLoaded事件无法触发,此补丁会将DOMContentLoaded重定向为load事件
|
3
|
+
function cloudflareInit () {
|
4
|
+
let inCloudFlare = true
|
5
|
+
window.addEventListener('DOMContentLoaded', function () {
|
6
|
+
inCloudFlare = false
|
7
|
+
})
|
8
|
+
|
9
|
+
if (document.readyState === 'loading') {
|
10
|
+
window.addEventListener('load', function () {
|
11
|
+
if (inCloudFlare) {
|
12
|
+
window.dispatchEvent(new Event('DOMContentLoaded'))
|
13
|
+
console.log('%c ☁️cloudflare patch ' + '%c running', 'color: white; background: #ff8c00; padding: 5px 3px;', 'padding: 4px;border:1px solid #ff8c00')
|
14
|
+
}
|
15
|
+
})
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
cloudflareInit()
|
@@ -1,21 +1,3 @@
|
|
1
|
-
// rocket-loader & Auto minify(cloudflare) 补丁
|
2
|
-
// cloudflare 的上述功能会导致DOMContentLoaded事件无法触发,此补丁会将DOMContentLoaded重定向为load事件
|
3
|
-
export function cloudflareInit () {
|
4
|
-
let inCloudFlare = true
|
5
|
-
window.addEventListener('DOMContentLoaded', function () {
|
6
|
-
inCloudFlare = false
|
7
|
-
})
|
8
|
-
|
9
|
-
if (document.readyState === 'loading') {
|
10
|
-
window.addEventListener('load', function () {
|
11
|
-
if (inCloudFlare) {
|
12
|
-
window.dispatchEvent(new Event('DOMContentLoaded'))
|
13
|
-
console.log('%c ☁️cloudflare patch ' + '%c running', 'color: white; background: #ff8c00; padding: 5px 3px;', 'padding: 4px;border:1px solid #ff8c00')
|
14
|
-
}
|
15
|
-
})
|
16
|
-
}
|
17
|
-
}
|
18
|
-
|
19
1
|
export const getScript = (url: string,sri: string, callback?: Function, condition?: string): void => {
|
20
2
|
// url: 脚本文件的URL地址
|
21
3
|
// callback: 当脚本加载完成时要执行的回调函数
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { $dom } from '../library/dom'
|
2
2
|
import { postFancybox } from './fancybox'
|
3
3
|
import { clipBoard, showtip } from '../globals/tools'
|
4
|
-
import { BODY } from '../globals/globalVars'
|
4
|
+
import { CONFIG, BODY } from '../globals/globalVars'
|
5
5
|
import { pageScroll, transition } from '../library/anime'
|
6
6
|
import { mediaPlayer } from '../player'
|
7
7
|
import { getDisplay, setDisplay, wrapObject } from '../library/proto'
|
@@ -22,7 +22,7 @@ export const postBeauty = () => {
|
|
22
22
|
}
|
23
23
|
|
24
24
|
const copyright = document.getElementById('copyright')
|
25
|
-
if (window.getSelection().toString().length >
|
25
|
+
if (window.getSelection().toString().length > CONFIG.experiments.copyrightLength && copyright) {
|
26
26
|
event.preventDefault()
|
27
27
|
const author = '# ' + (copyright.querySelector('.author') as HTMLElement).innerText
|
28
28
|
const link = '# ' + (copyright.querySelector('.link') as HTMLElement).innerText
|