hexo-theme-shokax 0.0.2-alpha2 → 0.0.2-alpha3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. package/CODE_OF_CONDUCT.md +128 -0
  2. package/CONTRIBUTING.md +56 -0
  3. package/LICENSE +28 -28
  4. package/LICENSE-shoka +21 -21
  5. package/README.md +46 -55
  6. package/README_en.MD +25 -0
  7. package/_config.yml +392 -355
  8. package/_images.yml +100 -100
  9. package/languages/README.md +19 -19
  10. package/languages/default.yml +1 -1
  11. package/languages/en.yml +151 -151
  12. package/languages/ja.yml +146 -146
  13. package/languages/zh-CN.yml +154 -154
  14. package/languages/zh-HK.yml +146 -146
  15. package/languages/zh-TW.yml +146 -146
  16. package/layout/_alternate/atom.ejs +30 -30
  17. package/layout/_alternate/json.ejs +16 -16
  18. package/layout/_alternate/rss.ejs +34 -34
  19. package/layout/_mixin/breadcrumb.pug +33 -33
  20. package/layout/_mixin/card.pug +37 -37
  21. package/layout/_mixin/comment.pug +66 -12
  22. package/layout/_mixin/postmeta.pug +30 -30
  23. package/layout/_mixin/segment.pug +32 -32
  24. package/layout/_mixin/sidebar.pug +36 -36
  25. package/layout/_mixin/widgets.pug +31 -29
  26. package/layout/_partials/footer.pug +40 -40
  27. package/layout/_partials/head/head.pug +51 -58
  28. package/layout/_partials/head/head_com.pug +17 -17
  29. package/layout/_partials/head/pwa.pug +18 -18
  30. package/layout/_partials/header.pug +18 -18
  31. package/layout/_partials/layout.pug +143 -153
  32. package/layout/_partials/loading.pug +13 -13
  33. package/layout/_partials/pagination.pug +4 -4
  34. package/layout/_partials/post/copyright.pug +20 -20
  35. package/layout/_partials/post/footer.pug +14 -14
  36. package/layout/_partials/post/nav.pug +13 -13
  37. package/layout/_partials/post/post.pug +28 -28
  38. package/layout/_partials/post/reward.pug +18 -18
  39. package/layout/_partials/sidebar/menu.pug +37 -37
  40. package/layout/_partials/sidebar/overview.pug +41 -42
  41. package/layout/_partials/third-party/baidu-analytics.pug +11 -11
  42. package/layout/_partials/third-party/clarity.pug +8 -8
  43. package/layout/archive.pug +118 -118
  44. package/layout/category.pug +63 -63
  45. package/layout/index.pug +33 -33
  46. package/layout/page.pug +56 -56
  47. package/layout/post.pug +35 -35
  48. package/layout/tag.pug +43 -43
  49. package/package.json +35 -35
  50. package/scripts/filters/locals.js +59 -59
  51. package/scripts/filters/post.js +23 -23
  52. package/scripts/generaters/archive.js +141 -141
  53. package/scripts/generaters/config.js +43 -43
  54. package/scripts/generaters/images.js +26 -26
  55. package/scripts/generaters/index.js +110 -110
  56. package/scripts/generaters/pages.js +19 -19
  57. package/scripts/generaters/script.js +89 -89
  58. package/scripts/helpers/asset.js +183 -237
  59. package/scripts/helpers/engine.js +190 -190
  60. package/scripts/helpers/list_categories.js +140 -140
  61. package/scripts/helpers/symbols_count_time.js +76 -76
  62. package/scripts/plugin/index.js +6 -6
  63. package/scripts/plugin/lib/injects-point.js +19 -19
  64. package/scripts/plugin/lib/injects.js +89 -88
  65. package/scripts/tags/links.js +86 -86
  66. package/scripts/tags/media.js +19 -19
  67. package/source/assets/algolia_logo.svg +9 -9
  68. package/source/assets/logo.svg +16 -16
  69. package/source/css/_colors.styl +207 -207
  70. package/source/css/_common/components/components.styl +6 -6
  71. package/source/css/_common/components/highlight/highlight.styl +353 -353
  72. package/source/css/_common/components/highlight/operation.styl +21 -21
  73. package/source/css/_common/components/pages/collapse.styl +119 -119
  74. package/source/css/_common/components/pages/home.styl +385 -385
  75. package/source/css/_common/components/pages/pages.styl +56 -56
  76. package/source/css/_common/components/pages/tag-cloud.styl +12 -12
  77. package/source/css/_common/components/post/breadcrumb.styl +39 -39
  78. package/source/css/_common/components/post/copyright.styl +41 -41
  79. package/source/css/_common/components/post/expand.styl +264 -264
  80. package/source/css/_common/components/post/footer.styl +11 -11
  81. package/source/css/_common/components/post/header.styl +79 -79
  82. package/source/css/_common/components/post/nav.styl +63 -63
  83. package/source/css/_common/components/post/post.styl +29 -29
  84. package/source/css/_common/components/post/reward.styl +50 -50
  85. package/source/css/_common/components/post/rtl.styl +12 -12
  86. package/source/css/_common/components/post/tags.styl +39 -39
  87. package/source/css/_common/components/tags/collapse.styl +72 -72
  88. package/source/css/_common/components/tags/container.styl +49 -49
  89. package/source/css/_common/components/tags/label.styl +12 -12
  90. package/source/css/_common/components/tags/links.styl +77 -77
  91. package/source/css/_common/components/tags/list.styl +131 -131
  92. package/source/css/_common/components/tags/note.styl +70 -70
  93. package/source/css/_common/components/tags/player.styl +361 -361
  94. package/source/css/_common/components/tags/quiz.styl +200 -200
  95. package/source/css/_common/components/tags/tabs.styl +83 -83
  96. package/source/css/_common/components/tags/tags.styl +9 -9
  97. package/source/css/_common/components/third-party/loading.styl +222 -222
  98. package/source/css/_common/components/third-party/mermaid/class.styl +90 -90
  99. package/source/css/_common/components/third-party/mermaid/flowchart.styl +72 -72
  100. package/source/css/_common/components/third-party/mermaid/gantt.styl +251 -251
  101. package/source/css/_common/components/third-party/mermaid/git.styl +7 -7
  102. package/source/css/_common/components/third-party/mermaid/mermaid.styl +37 -37
  103. package/source/css/_common/components/third-party/mermaid/pie.styl +9 -9
  104. package/source/css/_common/components/third-party/mermaid/sequence.styl +95 -95
  105. package/source/css/_common/components/third-party/mermaid/state.styl +130 -130
  106. package/source/css/_common/components/third-party/pace.styl +18 -18
  107. package/source/css/_common/components/third-party/search.styl +167 -167
  108. package/source/css/_common/components/third-party/theme.styl +151 -151
  109. package/source/css/_common/components/third-party/third-party.styl +22 -22
  110. package/source/css/_common/components/third-party/valine.styl +548 -548
  111. package/source/css/_common/components/third-party/widgets.styl +57 -57
  112. package/source/css/_common/outline/footer/footer.styl +69 -69
  113. package/source/css/_common/outline/header/brand.styl +77 -77
  114. package/source/css/_common/outline/header/header.styl +20 -20
  115. package/source/css/_common/outline/header/image.styl +79 -79
  116. package/source/css/_common/outline/header/menu.styl +117 -117
  117. package/source/css/_common/outline/header/nav.styl +81 -81
  118. package/source/css/_common/outline/header/right.styl +15 -15
  119. package/source/css/_common/outline/header/tool.styl +207 -207
  120. package/source/css/_common/outline/header/waves.styl +50 -50
  121. package/source/css/_common/outline/mobile.styl +46 -46
  122. package/source/css/_common/outline/outline.styl +78 -78
  123. package/source/css/_common/outline/sidebar/author.styl +59 -59
  124. package/source/css/_common/outline/sidebar/dimmer.styl +23 -23
  125. package/source/css/_common/outline/sidebar/menu.styl +63 -63
  126. package/source/css/_common/outline/sidebar/quick.styl +43 -43
  127. package/source/css/_common/outline/sidebar/related.styl +56 -56
  128. package/source/css/_common/outline/sidebar/sidebar.styl +75 -75
  129. package/source/css/_common/outline/sidebar/social.styl +69 -69
  130. package/source/css/_common/outline/sidebar/state.styl +37 -37
  131. package/source/css/_common/outline/sidebar/tab.styl +71 -71
  132. package/source/css/_common/outline/sidebar/toc.styl +47 -47
  133. package/source/css/_common/scaffolding/animate.styl +318 -318
  134. package/source/css/_common/scaffolding/base.styl +172 -172
  135. package/source/css/_common/scaffolding/buttons.styl +48 -48
  136. package/source/css/_common/scaffolding/divider.styl +36 -36
  137. package/source/css/_common/scaffolding/iconfont.styl +443 -443
  138. package/source/css/_common/scaffolding/normalize.styl +289 -289
  139. package/source/css/_common/scaffolding/pagination.styl +81 -81
  140. package/source/css/_common/scaffolding/ribbon.styl +38 -38
  141. package/source/css/_common/scaffolding/scaffolding.styl +14 -14
  142. package/source/css/_common/scaffolding/scrollbar.styl +37 -37
  143. package/source/css/_common/scaffolding/tables.styl +50 -50
  144. package/source/css/_common/scaffolding/tip.styl +19 -19
  145. package/source/css/_common/scaffolding/toggles.styl +59 -59
  146. package/source/css/_iconfont.styl +451 -451
  147. package/source/css/_mixins.styl +146 -146
  148. package/source/css/_variables.styl +89 -89
  149. package/source/css/app.styl +36 -36
  150. package/source/css/comment.styl +5 -5
  151. package/source/css/mermaid.styl +5 -5
  152. package/source/js/_app/components.js +330 -330
  153. package/source/js/_app/global.js +317 -317
  154. package/source/js/_app/library.js +302 -302
  155. package/source/js/_app/page.js +623 -623
  156. package/source/js/_app/player.js +748 -748
  157. package/source/js/_app/vue.js +43 -43
@@ -1,237 +1,183 @@
1
- /* global hexo */
2
-
3
- 'use strict'
4
- const { htmlTag, url_for, stripHTML } = require('hexo-util')
5
- const theme_env = require('../../package.json')
6
-
7
- hexo.extend.helper.register('_init_comments', function (mode) {
8
- if (mode === 'twikoo') {
9
- const options = {
10
- // eslint-disable-next-line no-useless-escape
11
- envId: `${hexo.theme.config?.twikoo?.envId}`,
12
- el: '#tcomments'
13
- }
14
- if (hexo.theme.config.twikoo.mode === 'tencent') {
15
- // eslint-disable-next-line no-useless-escape
16
- options.region = `\'${hexo.theme.config.twikoo.region}\'`
17
- }
18
- return `
19
- <script data-pjax>
20
- setTimeout(function () {
21
- twikoo.init(${JSON.stringify(options)})
22
- }, 1000)
23
- </script>`
24
- } else if (mode === 'waline') {
25
- const options = {
26
- el: '#wcomments',
27
- serverURL: hexo.theme.config.waline.serverURL
28
- }
29
- return `
30
- <script type="module">
31
- import { init } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs'
32
- init(${JSON.stringify(options)});
33
- </script>
34
- <script nomodule type="text/javascript">
35
- Waline.init(${JSON.stringify(options)});
36
- </script>
37
- `
38
- }
39
- })
40
-
41
- hexo.extend.helper.register('_new_comments', function (mode) {
42
- if (mode === 'twikoo') {
43
- return `<script data-pjax type="module">
44
- let comments = []
45
- twikoo.getRecentComments({
46
- envId: "${hexo.theme.config?.twikoo?.envId}",
47
- pageSize: 10
48
- }).then(function (res) {
49
- res.forEach(function (item) {
50
- let cText = item.commentText
51
- if (item.commentText.length > 50) {
52
- cText = item.commentText.substring(0,50)+'...'
53
- }
54
- const siteLink = item.url + "#" + item.id
55
- comments.push({
56
- href: siteLink,
57
- nick: item.nick,
58
- time: item.relativeTime,
59
- text: cText
60
- })
61
- });
62
- Vue.createApp({
63
- data() {
64
- return {
65
- coms: comments
66
- }
67
- }
68
- }).mount('#new-comment')
69
- }).catch(function (err) {
70
- console.error(err)
71
- })
72
- </script>`
73
- } else if (mode === 'waline') {
74
- return `
75
- <script type="module">
76
- import { RecentComments } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs'
77
- RecentComments({
78
- el: '#new-comment',
79
- serverURL: '${hexo.theme.config.waline.serverURL}',
80
- count: 10,
81
- });
82
- </script>
83
- <script nomodule type="text/javascript">
84
- Waline.RecentComments({
85
- el: '#new-comment',
86
- serverURL: '${hexo.theme.config.waline.serverURL}',
87
- count: 10,
88
- });
89
- </script>
90
- `
91
- }
92
- })
93
-
94
- hexo.extend.helper.register('_safedump', (source) => {
95
- return JSON.stringify(source)
96
- })
97
-
98
- hexo.extend.helper.register('hexo_env', function (type) {
99
- return this.env[type]
100
- })
101
-
102
- hexo.extend.helper.register('theme_env', function (type) {
103
- return theme_env[type]
104
- })
105
-
106
- hexo.extend.helper.register('_vendor_font', () => {
107
- const config = hexo.theme.config.font
108
-
109
- if (!config || !config.enable) return ''
110
-
111
- const fontDisplay = '&display=swap'
112
- const fontSubset = '&subset=latin,latin-ext'
113
- const fontStyles = ':300,300italic,400,400italic,700,700italic'
114
- const fontHost = '//fonts.geekzu.org'
115
-
116
- // Get a font list from config
117
- let fontFamilies = ['global', 'logo', 'title', 'headings', 'posts', 'codes'].map(item => {
118
- if (config[item] && config[item].family && config[item].external) {
119
- return config[item].family + fontStyles
120
- }
121
- return ''
122
- })
123
-
124
- fontFamilies = fontFamilies.filter(item => item !== '')
125
- fontFamilies = [...new Set(fontFamilies)]
126
- fontFamilies = fontFamilies.join('|')
127
-
128
- // Merge extra parameters to the final processed font string
129
- return fontFamilies
130
- ? htmlTag('link', {
131
- rel: 'stylesheet',
132
- href: `${fontHost}/css?family=${fontFamilies.concat(fontDisplay, fontSubset)}`
133
- })
134
- : ''
135
- })
136
-
137
- hexo.extend.helper.register('_local_fonts', () => {
138
- let res = '<style>'
139
- const fonts = hexo.theme.config.custom.font
140
- fonts.forEach((item) => {
141
- const tmp = `
142
- @font-face {
143
- font-family: ${item.family};
144
- src: ${item.src};
145
- font-display: swap;
146
- };`
147
- res += tmp
148
- })
149
- res += '</style>'
150
- return res
151
- })
152
-
153
- hexo.extend.helper.register('_vendor_js', () => {
154
- const config = hexo.theme.config.vendors.js
155
-
156
- if (!config) return ''
157
-
158
- // Get a font list from config
159
- let vendorJs = ['pace', 'pjax', 'fetch', 'anime', 'algolia', 'instantsearch', 'lazyload', 'quicklink'].map(item => {
160
- if (config[item]) {
161
- return config[item]
162
- }
163
- return ''
164
- })
165
-
166
- vendorJs = vendorJs.filter(item => item !== '')
167
- vendorJs = [...new Set(vendorJs)]
168
- vendorJs = vendorJs.join(',')
169
- return vendorJs ? htmlTag('script', { src: `https://cdn.jsdelivr.net/combine/${vendorJs}` }, '') : ''
170
- })
171
-
172
- hexo.extend.helper.register('_css', function (...urls) {
173
- const { statics, css } = hexo.theme.config
174
-
175
- return urls.map(url => htmlTag('link', {
176
- rel: 'stylesheet',
177
- href: url_for.call(this, `${statics}${css}/${url}?v=${theme_env.version}`)
178
- })).join('')
179
- })
180
-
181
- hexo.extend.helper.register('_js', function (...urls) {
182
- const { statics, js } = hexo.theme.config
183
-
184
- return urls.map(url => htmlTag('script', { src: url_for.call(this, `${statics}${js}/${url}?v=${theme_env.version}`) }, '')).join('')
185
- })
186
- hexo.extend.helper.register('_list_vendor_js', () => {
187
- return hexo.theme.config.vendorsList.js
188
- })
189
-
190
- hexo.extend.helper.register('_adv_vendor_js', function (js_name) {
191
- const srcHelpers = (src) => { return src.endsWith('/') ? src : src + '/' }
192
- const config = hexo.theme.config.advVendors.js[js_name]
193
- const themeConfig = hexo.theme.config
194
- const src = config.src
195
- const publicCdns = {
196
- npm: srcHelpers(themeConfig.advVendors.npm),
197
- gh: srcHelpers(themeConfig.advVendors.github),
198
- combine: srcHelpers(themeConfig.advVendors.combine),
199
- bytedance: 'https://lf9-cdn-tos.bytecdntp.com/cdn/expire-6-M/',
200
- baomitu: 'https://lib.baomitu.com/'
201
- }
202
- let result
203
- if (src.startsWith('http')) {
204
- result = src
205
- } else if (src.startsWith('combine:')) {
206
- hexo.log.info('The combine feature is not recommended!')
207
- result = publicCdns.combine + src
208
- } else if (src.startsWith('npm:')) {
209
- result = publicCdns.npm + src.substring(4)
210
- } else if (src.startsWith('gh:')) {
211
- result = publicCdns.gh + src.substring(3)
212
- } else if (src.startsWith('bytedance:')) {
213
- result = publicCdns.bytedance + src.substring(10)
214
- } else if (src.startsWith('baomitu:')) {
215
- result = publicCdns.baomitu + src.substring(8)
216
- } else {
217
- result = '/' + src
218
- }
219
- const attr = { src: result }
220
- if (config.async) attr.async = 'async'
221
- if (config['data-pjax']) attr['data-pjax'] = 'data-pjax'
222
- if (config['hash-value']) attr.integrity = config['hash-value']
223
- if (config.deferLoad) {
224
- return htmlTag('script', { 'data-pjax': true }, `
225
- const script=document.createElement("script");script.src="${result}",script.async=true,document.body.appendChild(script)
226
- `)
227
- }
228
- return htmlTag('script', attr, '')
229
- })
230
-
231
- hexo.extend.helper.register('_striptags', function (data) {
232
- return stripHTML(data)
233
- })
234
-
235
- hexo.extend.helper.register('_truncate', function (data, end) {
236
- return data.substring(0, end)
237
- })
1
+ /* global hexo */
2
+
3
+ 'use strict'
4
+ const { htmlTag, url_for, stripHTML } = require('hexo-util')
5
+ const theme_env = require('../../package.json')
6
+
7
+ hexo.extend.helper.register('_new_comments', function (mode) {
8
+ if (mode === 'twikoo') {
9
+ return `<script data-pjax type="module">
10
+ let comments = []
11
+ twikoo.getRecentComments({
12
+ envId: "${hexo.theme.config?.twikoo?.envId}",
13
+ pageSize: 10
14
+ }).then(function (res) {
15
+ res.forEach(function (item) {
16
+ let cText = item.commentText
17
+ if (item.commentText.length > 50) {
18
+ cText = item.commentText.substring(0,50)+'...'
19
+ }
20
+ const siteLink = item.url + "#" + item.id
21
+ comments.push({
22
+ href: siteLink,
23
+ nick: item.nick,
24
+ time: item.relativeTime,
25
+ text: cText
26
+ })
27
+ });
28
+ Vue.createApp({
29
+ data() {
30
+ return {
31
+ coms: comments
32
+ }
33
+ }
34
+ }).mount('#new-comment')
35
+ }).catch(function (err) {
36
+ console.error(err)
37
+ })
38
+ </script>`
39
+ } else if (mode === 'waline') {
40
+ return `
41
+ <script type="module">
42
+ import { RecentComments } from 'https://unpkg.com/@waline/client@v2/dist/waline.mjs'
43
+ RecentComments({
44
+ el: '#new-comment',
45
+ serverURL: '${hexo.theme.config.waline.serverURL}',
46
+ count: 10,
47
+ });
48
+ </script>
49
+ `
50
+ } else {
51
+ console.log(`${mode} is not supported recent comment`)
52
+ }
53
+ })
54
+
55
+ hexo.extend.helper.register('_safedump', (source) => {
56
+ return JSON.stringify(source)
57
+ })
58
+
59
+ hexo.extend.helper.register('hexo_env', function (type) {
60
+ return this.env[type]
61
+ })
62
+
63
+ hexo.extend.helper.register('theme_env', function (type) {
64
+ return theme_env[type]
65
+ })
66
+
67
+ hexo.extend.helper.register('_vendor_font', () => {
68
+ const config = hexo.theme.config.font
69
+
70
+ if (!config || !config.enable) return ''
71
+
72
+ const fontDisplay = '&display=swap'
73
+ const fontSubset = '&subset=latin,latin-ext'
74
+ const fontStyles = ':300,300italic,400,400italic,700,700italic'
75
+ const fontHost = '//fonts.geekzu.org'
76
+
77
+ // Get a font list from config
78
+ let fontFamilies = ['global', 'logo', 'title', 'headings', 'posts', 'codes'].map(item => {
79
+ if (config[item] && config[item].family && config[item].external) {
80
+ return config[item].family + fontStyles
81
+ }
82
+ return ''
83
+ })
84
+
85
+ fontFamilies = fontFamilies.filter(item => item !== '')
86
+ fontFamilies = [...new Set(fontFamilies)]
87
+ fontFamilies = fontFamilies.join('|')
88
+
89
+ // Merge extra parameters to the final processed font string
90
+ return fontFamilies
91
+ ? htmlTag('link', {
92
+ rel: 'stylesheet',
93
+ href: `${fontHost}/css?family=${fontFamilies.concat(fontDisplay, fontSubset)}`
94
+ })
95
+ : ''
96
+ })
97
+
98
+ // TODO 废弃方法
99
+ hexo.extend.helper.register('_vendor_js', () => {
100
+ const config = hexo.theme.config.vendors.js
101
+
102
+ if (!config) return ''
103
+
104
+ // Get a font list from config
105
+ let vendorJs = ['pace', 'pjax', 'fetch', 'anime', 'algolia', 'instantsearch', 'lazyload', 'quicklink'].map(item => {
106
+ if (config[item]) {
107
+ return config[item]
108
+ }
109
+ return ''
110
+ })
111
+
112
+ vendorJs = vendorJs.filter(item => item !== '')
113
+ vendorJs = [...new Set(vendorJs)]
114
+ vendorJs = vendorJs.join(',')
115
+ return vendorJs ? htmlTag('script', { src: `https://cdn.jsdelivr.net/combine/${vendorJs}` }, '') : ''
116
+ })
117
+
118
+ hexo.extend.helper.register('_css', function (...urls) {
119
+ const { statics, css } = hexo.theme.config
120
+
121
+ return urls.map(url => htmlTag('link', {
122
+ rel: 'stylesheet',
123
+ href: url_for.call(this, `${statics}${css}/${url}?v=${theme_env.version}`)
124
+ })).join('')
125
+ })
126
+
127
+ hexo.extend.helper.register('_js', function (...urls) {
128
+ const { statics, js } = hexo.theme.config
129
+
130
+ return urls.map(url => htmlTag('script', { src: url_for.call(this, `${statics}${js}/${url}?v=${theme_env.version}`) }, '')).join('')
131
+ })
132
+ hexo.extend.helper.register('_list_vendor_js', () => {
133
+ return hexo.theme.config.vendorsList.js
134
+ })
135
+
136
+ hexo.extend.helper.register('_adv_vendor_js', function (js_name) {
137
+ const srcHelpers = (src) => { return src.endsWith('/') ? src : src + '/' }
138
+ const config = hexo.theme.config.advVendors.js[js_name]
139
+ const themeConfig = hexo.theme.config
140
+ const src = config.src
141
+ const publicCdns = {
142
+ npm: srcHelpers(themeConfig.advVendors.npm),
143
+ gh: srcHelpers(themeConfig.advVendors.github),
144
+ combine: srcHelpers(themeConfig.advVendors.combine),
145
+ bytedance: 'https://lf9-cdn-tos.bytecdntp.com/cdn/expire-6-M/',
146
+ baomitu: 'https://lib.baomitu.com/'
147
+ }
148
+ let result
149
+ if (src.startsWith('http')) {
150
+ result = src
151
+ } else if (src.startsWith('combine:')) {
152
+ hexo.log.info('The combine feature is not recommended!')
153
+ result = publicCdns.combine + src
154
+ } else if (src.startsWith('npm:')) {
155
+ result = publicCdns.npm + src.substring(4)
156
+ } else if (src.startsWith('gh:')) {
157
+ result = publicCdns.gh + src.substring(3)
158
+ } else if (src.startsWith('bytedance:')) {
159
+ result = publicCdns.bytedance + src.substring(10)
160
+ } else if (src.startsWith('baomitu:')) {
161
+ result = publicCdns.baomitu + src.substring(8)
162
+ } else {
163
+ result = '/' + src
164
+ }
165
+ const attr = { src: result }
166
+ if (config.async) attr.async = 'async'
167
+ if (config['data-pjax']) attr['data-pjax'] = 'data-pjax'
168
+ if (config['hash-value']) attr.integrity = config['hash-value']
169
+ if (config.deferLoad) {
170
+ return htmlTag('script', { 'data-pjax': true }, `
171
+ const script=document.createElement("script");script.src="${result}",script.async=true,document.body.appendChild(script)
172
+ `)
173
+ }
174
+ return htmlTag('script', attr, '')
175
+ })
176
+
177
+ hexo.extend.helper.register('_striptags', function (data) {
178
+ return stripHTML(data)
179
+ })
180
+
181
+ hexo.extend.helper.register('_truncate', function (data, end) {
182
+ return data.substring(0, end)
183
+ })