hexo-theme-shokax 0.0.2-alpha2 → 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 (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,23 +1,23 @@
1
- 'use strict'
2
-
3
- hexo.extend.filter.register('after_post_render', data => {
4
- const { config } = hexo
5
- const theme = hexo.theme.config
6
-
7
- data.content = data.content.replace(/(<img[^>]*) src=/img, '$1 data-src=')
8
-
9
- const url = require('url')
10
- // eslint-disable-next-line n/no-deprecated-api
11
- const siteHost = url.parse(config.url).hostname || config.url
12
- data.content = data.content.replace(/<a[^>]* href="([^"]+)"[^>]*>([^<]*)<\/a>/img, (match, href, html) => {
13
- // Exit if the href attribute doesn't exists.
14
- if (!href) return match
15
-
16
- // Exit if the url has same host with `config.url`, which means it's an internal link.
17
- // eslint-disable-next-line n/no-deprecated-api
18
- const link = url.parse(href)
19
- if (!link.protocol || link.hostname === siteHost) return match
20
-
21
- return `<span class="exturl" data-url="${Buffer.from(href).toString('base64')}">${html}</span>`
22
- })
23
- }, 0)
1
+ 'use strict'
2
+
3
+ hexo.extend.filter.register('after_post_render', data => {
4
+ const { config } = hexo
5
+ const theme = hexo.theme.config
6
+
7
+ data.content = data.content.replace(/(<img[^>]*) src=/img, '$1 data-src=')
8
+
9
+ const url = require('url')
10
+ // eslint-disable-next-line n/no-deprecated-api
11
+ const siteHost = url.parse(config.url).hostname || config.url
12
+ data.content = data.content.replace(/<a[^>]* href="([^"]+)"[^>]*>([^<]*)<\/a>/img, (match, href, html) => {
13
+ // Exit if the href attribute doesn't exists.
14
+ if (!href) return match
15
+
16
+ // Exit if the url has same host with `config.url`, which means it's an internal link.
17
+ // eslint-disable-next-line n/no-deprecated-api
18
+ const link = url.parse(href)
19
+ if (!link.protocol || link.hostname === siteHost) return match
20
+
21
+ return `<span class="exturl" data-url="${Buffer.from(href).toString('base64')}">${html}</span>`
22
+ })
23
+ }, 0)
@@ -1,141 +1,141 @@
1
- /* global hexo */
2
- 'use strict'
3
-
4
- const pagination = require('hexo-pagination')
5
-
6
- const fmtNum = num => {
7
- return num < 10 ? '0' + num : num
8
- }
9
-
10
- if (!(hexo.config.archive && hexo.config.archive.enabled === false)) {
11
- // when archive disabled pagination, per_page should be 0.
12
- let per_page
13
-
14
- if (hexo.config.archive === 1) {
15
- per_page = 0
16
- } else if (typeof hexo.config.per_page === 'undefined') {
17
- per_page = 10
18
- } else {
19
- per_page = hexo.config.per_page
20
- }
21
-
22
- hexo.config.archive_generator = Object.assign({
23
- per_page,
24
- yearly: true,
25
- monthly: true,
26
- daily: false
27
- }, hexo.config.archive_generator)
28
-
29
- hexo.extend.generator.register('archive', function (locals) {
30
- const config = hexo.config
31
- let archiveDir = config.archive_dir
32
- const paginationDir = config.pagination_dir || 'page'
33
- const allPosts = locals.posts.sort(config.archive_generator.order_by || '-date')
34
- const perPage = config.archive_generator.per_page
35
- let result = []
36
-
37
- if (!allPosts.length) return
38
-
39
- if (archiveDir[archiveDir.length - 1] !== '/') archiveDir += '/'
40
-
41
- function generate (path, posts, options) {
42
- options = options || {}
43
- options.archive = true
44
-
45
- result = result.concat(pagination(path, posts, {
46
- perPage: path === archiveDir ? 0 : perPage,
47
- layout: ['archive', 'index'],
48
- format: paginationDir + '/%d/',
49
- data: options
50
- }))
51
- }
52
-
53
- generate(archiveDir, allPosts)
54
-
55
- if (!config.archive_generator.yearly) return result
56
-
57
- const posts = {}
58
-
59
- // Organize posts by date
60
- allPosts.forEach(post => {
61
- const date = post.date
62
- const year = date.year()
63
- const month = date.month() + 1 // month is started from 0
64
-
65
- if (!Object.prototype.hasOwnProperty.call(posts, year)) {
66
- // 13 arrays. The first array is for posts in this year
67
- // and the other arrays is for posts in this month
68
- posts[year] = [
69
- [],
70
- [],
71
- [],
72
- [],
73
- [],
74
- [],
75
- [],
76
- [],
77
- [],
78
- [],
79
- [],
80
- [],
81
- []
82
- ]
83
- }
84
-
85
- posts[year][0].push(post)
86
- posts[year][month].push(post)
87
- // Daily
88
- if (config.archive_generator.daily) {
89
- const day = date.date()
90
- if (!Object.prototype.hasOwnProperty.call(posts[year][month], 'day')) {
91
- posts[year][month].day = {}
92
- }
93
-
94
- (posts[year][month].day[day] || (posts[year][month].day[day] = [])).push(post)
95
- }
96
- })
97
-
98
- const Query = this.model('Post').Query
99
- const years = Object.keys(posts)
100
- let year, data, month, monthData, url
101
-
102
- // Yearly
103
- for (let i = 0, len = years.length; i < len; i++) {
104
- year = +years[i]
105
- data = posts[year]
106
- url = archiveDir + year + '/'
107
- if (!data[0].length) continue
108
-
109
- generate(url, new Query(data[0]), { year })
110
-
111
- if (!config.archive_generator.monthly && !config.archive_generator.daily) continue
112
-
113
- // Monthly
114
- for (month = 1; month <= 12; month++) {
115
- monthData = data[month]
116
- if (!monthData.length) continue
117
- if (config.archive_generator.monthly) {
118
- generate(url + fmtNum(month) + '/', new Query(monthData), {
119
- year,
120
- month
121
- })
122
- }
123
-
124
- if (!config.archive_generator.daily) continue
125
-
126
- // Daily
127
- for (let day = 1; day <= 31; day++) {
128
- const dayData = monthData.day[day]
129
- if (!dayData || !dayData.length) continue
130
- generate(url + fmtNum(month) + '/' + fmtNum(day) + '/', new Query(dayData), {
131
- year,
132
- month,
133
- day
134
- })
135
- }
136
- }
137
- }
138
-
139
- return result
140
- })
141
- }
1
+ /* global hexo */
2
+ 'use strict'
3
+
4
+ const pagination = require('hexo-pagination')
5
+
6
+ const fmtNum = num => {
7
+ return num < 10 ? '0' + num : num
8
+ }
9
+
10
+ if (!(hexo.config.archive && hexo.config.archive.enabled === false)) {
11
+ // when archive disabled pagination, per_page should be 0.
12
+ let per_page
13
+
14
+ if (hexo.config.archive === 1) {
15
+ per_page = 0
16
+ } else if (typeof hexo.config.per_page === 'undefined') {
17
+ per_page = 10
18
+ } else {
19
+ per_page = hexo.config.per_page
20
+ }
21
+
22
+ hexo.config.archive_generator = Object.assign({
23
+ per_page,
24
+ yearly: true,
25
+ monthly: true,
26
+ daily: false
27
+ }, hexo.config.archive_generator)
28
+
29
+ hexo.extend.generator.register('archive', function (locals) {
30
+ const config = hexo.config
31
+ let archiveDir = config.archive_dir
32
+ const paginationDir = config.pagination_dir || 'page'
33
+ const allPosts = locals.posts.sort(config.archive_generator.order_by || '-date')
34
+ const perPage = config.archive_generator.per_page
35
+ let result = []
36
+
37
+ if (!allPosts.length) return
38
+
39
+ if (archiveDir[archiveDir.length - 1] !== '/') archiveDir += '/'
40
+
41
+ function generate (path, posts, options) {
42
+ options = options || {}
43
+ options.archive = true
44
+
45
+ result = result.concat(pagination(path, posts, {
46
+ perPage: path === archiveDir ? 0 : perPage,
47
+ layout: ['archive', 'index'],
48
+ format: paginationDir + '/%d/',
49
+ data: options
50
+ }))
51
+ }
52
+
53
+ generate(archiveDir, allPosts)
54
+
55
+ if (!config.archive_generator.yearly) return result
56
+
57
+ const posts = {}
58
+
59
+ // Organize posts by date
60
+ allPosts.forEach(post => {
61
+ const date = post.date
62
+ const year = date.year()
63
+ const month = date.month() + 1 // month is started from 0
64
+
65
+ if (!Object.prototype.hasOwnProperty.call(posts, year)) {
66
+ // 13个数组. 第一个数组是给这一年的文章准备的
67
+ // 其他则是各个月份的文章
68
+ posts[year] = [
69
+ [],
70
+ [],
71
+ [],
72
+ [],
73
+ [],
74
+ [],
75
+ [],
76
+ [],
77
+ [],
78
+ [],
79
+ [],
80
+ [],
81
+ []
82
+ ]
83
+ }
84
+
85
+ posts[year][0].push(post)
86
+ posts[year][month].push(post)
87
+ // Daily
88
+ if (config.archive_generator.daily) {
89
+ const day = date.date()
90
+ if (!Object.prototype.hasOwnProperty.call(posts[year][month], 'day')) {
91
+ posts[year][month].day = {}
92
+ }
93
+
94
+ (posts[year][month].day[day] || (posts[year][month].day[day] = [])).push(post)
95
+ }
96
+ })
97
+
98
+ const Query = this.model('Post').Query
99
+ const years = Object.keys(posts)
100
+ let year, data, month, monthData, url
101
+
102
+ // Yearly
103
+ for (let i = 0, len = years.length; i < len; i++) {
104
+ year = +years[i]
105
+ data = posts[year]
106
+ url = archiveDir + year + '/'
107
+ if (!data[0].length) continue
108
+
109
+ generate(url, new Query(data[0]), { year })
110
+
111
+ if (!config.archive_generator.monthly && !config.archive_generator.daily) continue
112
+
113
+ // Monthly
114
+ for (month = 1; month <= 12; month++) {
115
+ monthData = data[month]
116
+ if (!monthData.length) continue
117
+ if (config.archive_generator.monthly) {
118
+ generate(url + fmtNum(month) + '/', new Query(monthData), {
119
+ year,
120
+ month
121
+ })
122
+ }
123
+
124
+ if (!config.archive_generator.daily) continue
125
+
126
+ // Daily
127
+ for (let day = 1; day <= 31; day++) {
128
+ const dayData = monthData.day[day]
129
+ if (!dayData || !dayData.length) continue
130
+ generate(url + fmtNum(month) + '/' + fmtNum(day) + '/', new Query(dayData), {
131
+ year,
132
+ month,
133
+ day
134
+ })
135
+ }
136
+ }
137
+ }
138
+
139
+ return result
140
+ })
141
+ }
@@ -1,43 +1,43 @@
1
- 'use strict'
2
- /* global hexo */
3
-
4
- const merge = require('hexo-util').deepMerge || require('lodash/merge')
5
- const fs = require('hexo-fs')
6
- const path = require('path')
7
- const yaml = require('js-yaml')
8
-
9
- hexo.extend.filter.register('before_generate', () => {
10
- if (hexo.config.theme_config) {
11
- hexo.theme.config = merge(hexo.theme.config, hexo.config.theme_config)
12
- }
13
-
14
- const data = hexo.locals.get('data')
15
-
16
- if (data.languages) {
17
- const { language } = hexo.config
18
- const { i18n } = hexo.theme
19
-
20
- const mergeLang = lang => {
21
- if (data.languages[lang]) { i18n.set(lang, merge(i18n.get([lang]), data.languages[lang])) }
22
- }
23
-
24
- for (const lang of ['en', 'ja', 'zh-CN', 'zh-HK', 'zh-TW']) {
25
- mergeLang(lang)
26
- }
27
- }
28
-
29
- hexo.theme.config.style = {}
30
-
31
- for (const style of ['iconfont', 'colors', 'custom']) {
32
- const custom_file = 'source/_data/' + style + '.styl'
33
- if (fs.existsSync(custom_file)) {
34
- hexo.theme.config.style[style] = path.resolve(hexo.base_dir, custom_file)
35
- }
36
- }
37
-
38
- if (data.images && data.images.length >= 6) {
39
- hexo.theme.config.image_list = data.images
40
- } else {
41
- hexo.theme.config.image_list = yaml.load(fs.readFileSync(path.join(__dirname, '../../_images.yml')))
42
- }
43
- })
1
+ 'use strict'
2
+ /* global hexo */
3
+
4
+ const merge = require('hexo-util').deepMerge || require('lodash/merge')
5
+ const fs = require('hexo-fs')
6
+ const path = require('path')
7
+ const yaml = require('js-yaml')
8
+
9
+ hexo.extend.filter.register('before_generate', () => {
10
+ if (hexo.config.theme_config) {
11
+ hexo.theme.config = merge(hexo.theme.config, hexo.config.theme_config)
12
+ }
13
+
14
+ const data = hexo.locals.get('data')
15
+
16
+ if (data.languages) {
17
+ const { language } = hexo.config
18
+ const { i18n } = hexo.theme
19
+
20
+ const mergeLang = lang => {
21
+ if (data.languages[lang]) { i18n.set(lang, merge(i18n.get([lang]), data.languages[lang])) }
22
+ }
23
+
24
+ for (const lang of ['en', 'ja', 'zh-CN', 'zh-HK', 'zh-TW']) {
25
+ mergeLang(lang)
26
+ }
27
+ }
28
+
29
+ hexo.theme.config.style = {}
30
+
31
+ for (const style of ['iconfont', 'colors', 'custom']) {
32
+ const custom_file = 'source/_data/' + style + '.styl'
33
+ if (fs.existsSync(custom_file)) {
34
+ hexo.theme.config.style[style] = path.resolve(hexo.base_dir, custom_file)
35
+ }
36
+ }
37
+
38
+ if (data.images && data.images.length >= 6) {
39
+ hexo.theme.config.image_list = data.images
40
+ } else {
41
+ hexo.theme.config.image_list = yaml.load(fs.readFileSync(path.join(__dirname, '../../_images.yml')))
42
+ }
43
+ })
@@ -1,26 +1,26 @@
1
- /* global hexo */
2
- 'use strict'
3
-
4
- const fs = require('hexo-fs')
5
-
6
- hexo.extend.generator.register('images', function (locals) {
7
- const config = hexo.config
8
- const theme = hexo.theme.config
9
- const dir = 'source/_data/' + theme.assets + '/'
10
-
11
- if (!fs.existsSync(dir)) { return }
12
-
13
- const result = []
14
- const files = fs.listDirSync(dir)
15
-
16
- files.forEach((file) => {
17
- result.push({
18
- path: theme.assets + '/' + file,
19
- data: function () {
20
- return fs.createReadStream(dir + file)
21
- }
22
- })
23
- })
24
-
25
- return result
26
- })
1
+ /* global hexo */
2
+ 'use strict'
3
+
4
+ const fs = require('hexo-fs')
5
+
6
+ hexo.extend.generator.register('images', function (locals) {
7
+ const config = hexo.config
8
+ const theme = hexo.theme.config
9
+ const dir = 'source/_data/' + theme.assets + '/'
10
+
11
+ if (!fs.existsSync(dir)) { return }
12
+
13
+ const result = []
14
+ const files = fs.listDirSync(dir)
15
+
16
+ files.forEach((file) => {
17
+ result.push({
18
+ path: theme.assets + '/' + file,
19
+ data: function () {
20
+ return fs.createReadStream(dir + file)
21
+ }
22
+ })
23
+ })
24
+
25
+ return result
26
+ })