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,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
+ })