hexo-theme-shokax 0.0.2-alpha1 → 0.0.2-alpha3

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 (159) 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 -53
  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 -20
  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 -27
  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 -38
  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
  158. package/layout/_partials/third-party/qweather.pug +0 -35
  159. package/source/css/plugin.styl +0 -174
@@ -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
+ })