hexo-theme-solitude 1.10.5 → 1.11.0

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 (60) hide show
  1. package/README.md +1 -1
  2. package/_config.yml +16 -0
  3. package/languages/default.yml +3 -0
  4. package/languages/en.yml +3 -0
  5. package/languages/zh-CN.yml +3 -0
  6. package/languages/zh-TW.yml +3 -0
  7. package/layout/includes/console.pug +5 -1
  8. package/layout/includes/inject/head.pug +1 -1
  9. package/layout/includes/page/recentcomment.pug +16 -0
  10. package/layout/includes/widgets/home/hometop.pug +0 -1
  11. package/layout/includes/widgets/home/topGroup.pug +9 -8
  12. package/layout/includes/widgets/page/banner.pug +2 -2
  13. package/layout/includes/widgets/page/message/artalk.pug +45 -0
  14. package/layout/includes/widgets/page/message/js.pug +5 -1
  15. package/layout/includes/widgets/page/message/twikoo.pug +19 -16
  16. package/layout/includes/widgets/page/message/valine.pug +12 -3
  17. package/layout/includes/widgets/page/message/waline.pug +42 -0
  18. package/layout/includes/widgets/page/recentcomment/artalk.pug +78 -0
  19. package/layout/includes/widgets/page/recentcomment/twikoo.pug +83 -0
  20. package/layout/includes/widgets/page/recentcomment/valine.pug +79 -0
  21. package/layout/includes/widgets/page/recentcomment/waline.pug +72 -0
  22. package/layout/includes/widgets/third-party/comments/artalk.pug +1 -1
  23. package/layout/includes/widgets/third-party/news-comment/artalk.pug +1 -1
  24. package/layout/includes/widgets/third-party/news-comment/twikoo.pug +1 -1
  25. package/layout/includes/widgets/third-party/news-comment/valine.pug +19 -17
  26. package/layout/includes/widgets/third-party/news-comment/waline.pug +2 -2
  27. package/layout/page.pug +2 -0
  28. package/package.json +1 -1
  29. package/plugins.yml +3 -3
  30. package/scripts/event/merge_config.js +7 -0
  31. package/source/css/_comments/comment.styl +1 -1
  32. package/source/css/_comments/valine.styl +1 -0
  33. package/source/css/_global/index.styl +27 -23
  34. package/source/css/_layout/article-container.styl +1 -1
  35. package/source/css/_layout/aside.styl +1 -0
  36. package/source/css/_layout/console.styl +13 -0
  37. package/source/css/_layout/footer.styl +1 -1
  38. package/source/css/_layout/header.styl +0 -27
  39. package/source/css/_layout/rightmenu.styl +1 -1
  40. package/source/css/_page/_about/about.styl +2 -1
  41. package/source/css/_page/_about/buff.styl +1 -1
  42. package/source/css/_page/_about/contentinfo.styl +2 -2
  43. package/source/css/_page/_about/maxim.styl +1 -1
  44. package/source/css/_page/_about/myphoto.styl +1 -1
  45. package/source/css/_page/_about/oneself.styl +2 -2
  46. package/source/css/_page/_about/personalities.styl +1 -1
  47. package/source/css/_page/_about/skills.styl +1 -1
  48. package/source/css/_page/_about/statistic.styl +1 -1
  49. package/source/css/_page/_home/home-top.styl +17 -96
  50. package/source/css/_page/_home/home.styl +1 -1
  51. package/source/css/_page/index.styl +3 -0
  52. package/source/css/_page/links.styl +0 -3
  53. package/source/css/_page/other.styl +127 -115
  54. package/source/css/_page/recentcomment.styl +85 -0
  55. package/source/css/_page/says.styl +5 -14
  56. package/source/css/_tags/gallery.styl +5 -3
  57. package/source/js/main.js +2 -22
  58. package/source/js/search/algolia.js +11 -0
  59. package/source/js/search/local.js +11 -0
  60. package/layout/includes/widgets/home/categoryGroup.pug +0 -12
@@ -0,0 +1,72 @@
1
+ script(pjax).
2
+ (async () => {
3
+ document.querySelector('#comments-page').textContent = `#{__("loading")}`
4
+ const emojiReg = /<img [^>]+ class="wl-emoji">/g
5
+ let cache = utils.saveToLocal.get('waline-recent-comments')
6
+ if (cache) {
7
+ setHtml(document.querySelector('#comments-page'), cache)
8
+ return
9
+ }
10
+ let ls = []
11
+ await fetch('!{theme.waline.envId}/api/comment?type=recent&count=!{limit}', {method: 'GET'}).then(async res => res.json())
12
+ .then(async data => {
13
+ console.log(data)
14
+ for (const i of data.data) {
15
+ let title = ''
16
+ if (i.url) {
17
+ await fetch(i.url).then(res => res.text()).then(html => {
18
+ const parser = new DOMParser()
19
+ const doc = parser.parseFromString(html, 'text/html')
20
+ title = doc.querySelector('title').innerText
21
+ }).catch(() => {
22
+ title = i.url
23
+ })
24
+ }
25
+ if (title.indexOf('|') > 0) {
26
+ title = title.split('|')[0]
27
+ }
28
+ ls.push({
29
+ title: title,
30
+ url: i.url,
31
+ nick: i.nick,
32
+ avatar: i.avatar,
33
+ time: new Date(i.time),
34
+ content: formatContent(i.comment)
35
+ })
36
+ }
37
+ setHtml(document.querySelector('#comments-page'), ls)
38
+ utils.saveToLocal.set('waline-recent-comments', ls, !{cache})
39
+ })
40
+
41
+ function setHtml(el, data) {
42
+ el.innerHTML = data.map(i => `
43
+ <div class="comment-card" title="${i.title}" onclick="pjax.loadUrl('${i.url}')">
44
+ <div class="comment-info">
45
+ <img src="${i.avatar}" class="nolazyload" alt="${i.nick}">
46
+ <div>
47
+ <span class="comment-user">${i.nick}</span>
48
+ </div>
49
+ <time class="comment-time" datetime="${i.time}"></time>
50
+ </div>
51
+ <div class="comment-content">${i.content}</div>
52
+ <div class="comment-title">
53
+ <i class="solitude st-chat-fill"></i>
54
+ ${i.title}</div>
55
+ </div>
56
+ `).join('')
57
+ if (typeof sco !== 'undefined') sco.changeTimeFormat(document.querySelectorAll('.comment-time'))
58
+ else {
59
+ document.addEventListener('pjax:complete', () => sco.changeTimeFormat(document.querySelectorAll('.comment-time')))
60
+ document.addEventListener('DOMContentLoaded', () => sco.changeTimeFormat(document.querySelectorAll('.comment-time')))
61
+ }
62
+ }
63
+
64
+ function formatContent(content) {
65
+ content = content.replace(emojiReg, '[!{__("console.newest_comment.emoji")}]')
66
+ content = content.replace(/<img.*?>/g, '[!{__("console.newest_comment.image")}]');
67
+ content = content.replace(/<a.*?>.*?<\/a>/g, '[!{__("console.newest_comment.link")}]');
68
+ content = content.replace(/<pre.*?>.*?<\/pre>/g, '[!{__("console.newest_comment.code")}]');
69
+ content = content.replace(/<.*?>/g, '');
70
+ return content
71
+ }
72
+ })()
@@ -41,7 +41,7 @@ script.
41
41
  const artalkWrap = document.getElementById('artalk-wrap')
42
42
  if (!(artalkWrap && artalkWrap.children.length)) return
43
43
  const isDark = theme === 'dark'
44
- artalkItem.setDarkMode(!isDark)
44
+ artalkItem.setDarkMode(isDark)
45
45
  }
46
46
  utils.addGlobalFn('themeChange', artalkChangeMode, 'artalk')
47
47
  if ('!{use[0]}' === 'Artalk' || !{lazyload}) {
@@ -61,7 +61,7 @@ script.
61
61
  nick: e.nick,
62
62
  url: e.page_key,
63
63
  date: e.date,
64
- }))
64
+ })).slice(0, 6)
65
65
  utils.saveToLocal.set('artalk-newest-comments', artalk, !{theme.comment.newest_comment.storage})
66
66
  generateHtml(artalk, asideList)
67
67
  }).catch(error => {
@@ -46,7 +46,7 @@ script.
46
46
  nick: e.nick,
47
47
  url: `${e.url}#${e.id}`,
48
48
  date: new Date(e.created).toString()
49
- }))
49
+ })).slice(0, 6)
50
50
  utils.saveToLocal.set('twikoo-newest-comment', twikooArray, !{theme.comment.newest_comment.storage})
51
51
  generateHtml(twikooArray)
52
52
  }).catch((err) => {
@@ -1,5 +1,6 @@
1
1
  script.
2
2
  window.addEventListener('load', () => {
3
+ const emojiReg = /:[a-z0-9_\u4e00-\u9fa5]+:/g
3
4
  const changeContent = (content) => {
4
5
  if (content === '') return content;
5
6
 
@@ -38,31 +39,32 @@ script.
38
39
  },
39
40
  }
40
41
  if (typeof md5 === "undefined") await utils.getScript('!{url_for(theme.cdn.blueimp_md5)}')
41
- await fetch('!{theme.valine.serverURLs}/1.1/classes/Comment?limit=8&order=-createdAt', settings).then(async res => {
42
- const result = await res.json()
43
- window.res = result
44
- const valineArray = result.results.map(e => {
45
- return {
46
- 'content': changeContent(e.comment),
47
- 'avatar': '!{theme.comment.avatar}' + '/avatar/' + md5(e.mail.toLowerCase()),
48
- 'nick': e.nick,
49
- 'url': e.url + '#' + e.objectId,
50
- 'date': e.updatedAt || e.createdAt
42
+ await fetch('!{theme.valine.serverURLs}/1.1/classes/Comment?limit=8&order=-createdAt', settings).then(res => res.json())
43
+ .then(async result => {
44
+ let ls = []
45
+ for (const i of result.results.slice(0, 6)) {
46
+ if (emojiReg.test(i.comment)) continue
47
+ ls.push({
48
+ content: changeContent(i.comment),
49
+ avatar: '!{theme.comment.avatar}' + '/avatar/' + md5(i.mail.toLowerCase()),
50
+ nick: i.nick,
51
+ url: i.url,
52
+ date: i.updatedAt || i.createdAt
53
+ })
51
54
  }
55
+ utils.saveToLocal.set('valine-newest-comment', ls, !{theme.comment.newest_comment.storage})
56
+ generateHtml(ls)
57
+ }).catch(error => {
58
+ console.error(error);
59
+ $asideList.textContent = "!{_p('newest_comment.error')}"
52
60
  })
53
- utils.saveToLocal.set('valine-newest-comment', valineArray, !{theme.comment.newest_comment.storage})
54
- generateHtml(valineArray)
55
- }).catch(error => {
56
- console.error(error);
57
- $asideList.textContent = "!{_p('newest_comment.error')}"
58
- })
59
61
  }
60
62
 
61
63
  const generateHtml = array => {
62
64
  const $dom = document.querySelector('#card-newest-comments .aside-list')
63
65
  $dom.innerHTML = array.length ? array.map(item => `
64
66
  <div class='aside-list-item'>
65
- <div onclick='pjax.loadUrl("${item.url}")' class='thumbnail'>
67
+ <div onclick='pjax.loadUrl(\"${item.url}\")' class='thumbnail'>
66
68
  <img src='${item.avatar}' alt='${item.nick}'>
67
69
  <div class='name'><span>${item.nick}</span></div>
68
70
  </div>
@@ -29,7 +29,7 @@ script.
29
29
  }
30
30
 
31
31
  const getComment = async () => {
32
- await fetch('!{theme.waline.envId}/api/comment?type=recent&count=8', {method: 'GET'}).then(async res => {
32
+ await fetch('!{theme.waline.envId}/api/comment?type=recent&count=6', {method: 'GET'}).then(async res => {
33
33
  const result = await res.json()
34
34
  const walineArray = result.data.map(e => {
35
35
  return {
@@ -37,7 +37,7 @@ script.
37
37
  'avatar': e.avatar,
38
38
  'nick': e.nick,
39
39
  'url': e.url + '#' + e.objectId,
40
- 'date': e.time || e.insertedAt
40
+ 'date': new Date(e.time || e.insertedAt)
41
41
  }
42
42
  })
43
43
  utils.saveToLocal.set('waline-newest-comment', walineArray, !{theme.comment.newest_comment.storage})
package/layout/page.pug CHANGED
@@ -22,6 +22,8 @@ block content
22
22
  include includes/page/music
23
23
  when 'message'
24
24
  !=partial('includes/page/message', {}, {cache: true})
25
+ when 'recentcomment'
26
+ !=partial('includes/page/recentcomment', {}, {cache: true})
25
27
  when 'banner'
26
28
  include includes/widgets/page/banner
27
29
  if page.container
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-theme-solitude",
3
- "version": "1.10.5",
3
+ "version": "1.11.0",
4
4
  "description": "A beautiful, powerful, and efficient Hexo theme developed by EverFu.",
5
5
  "main": "package.json",
6
6
  "scripts": {
package/plugins.yml CHANGED
@@ -5,7 +5,7 @@ algolia_search:
5
5
  instantsearch:
6
6
  name: instantsearch.js
7
7
  file: dist/instantsearch.production.min.js
8
- version: 4.67.0
8
+ version: 4.68.1
9
9
  pjax:
10
10
  name: pjax
11
11
  file: pjax.min.js
@@ -31,11 +31,11 @@ valine:
31
31
  artalk_css:
32
32
  name: artalk
33
33
  file: dist/Artalk.css
34
- version: 2.8.5
34
+ version: 2.8.6
35
35
  artalk_js:
36
36
  name: artalk
37
37
  file: dist/Artalk.js
38
- version: 2.8.5
38
+ version: 2.8.6
39
39
  katex:
40
40
  name: katex
41
41
  file: dist/katex.min.css
@@ -200,12 +200,19 @@ hexo.extend.filter.register('before_generate', () => {
200
200
  style: 1,
201
201
  strip: 30
202
202
  },
203
+ recent_comments: {
204
+ enable: false,
205
+ limit: 50,
206
+ console: false,
207
+ page: '/recentcomments/'
208
+ },
203
209
  envelope: {
204
210
  enable: false,
205
211
  line: 10,
206
212
  speed: 20,
207
213
  hover: true,
208
214
  loop: true,
215
+ page: '/message/'
209
216
  },
210
217
  meting_api: "https://meting.qjqq.cn/?server=:server&type=:type&id=:id&auth=:auth&r=:r",
211
218
  music: {
@@ -154,7 +154,7 @@ div#post-comment
154
154
  border var(--style-border-always)
155
155
  border-radius 10px
156
156
  z-index 9999
157
- width 142px
157
+ max-width 142px
158
158
  display none
159
159
  transform translate(0, -105%)
160
160
  overflow hidden
@@ -46,6 +46,7 @@
46
46
  padding 0
47
47
  overflow: inherit;
48
48
  flex-direction column-reverse
49
+ margin-bottom 0
49
50
 
50
51
  .vheader
51
52
  display flex
@@ -86,15 +86,38 @@ main
86
86
 
87
87
  // scrollbar - chrome/safari
88
88
  *::-webkit-scrollbar
89
- width 5px
90
- height 5px
89
+ width 12px
90
+ height 6px
91
91
 
92
92
  *::-webkit-scrollbar-thumb
93
93
  background var(--scrollbar-color)
94
+ opacity .5
95
+ border-radius 8px
96
+ cursor pointer
97
+ border 2px solid var(--efu-background)
98
+
99
+ &:hover
100
+ background var(--efu-lighttext)
101
+ display block
94
102
 
95
103
  *::-webkit-scrollbar-track
96
104
  background-color transparent
97
105
 
106
+ ::-webkit-scrollbar-thumb
107
+ background var(--efu-card-border)
108
+ opacity .5
109
+ border-radius 8px
110
+ cursor pointer
111
+ border 2px solid var(--efu-background)
112
+
113
+ ::-webkit-scrollbar-thumb:hover
114
+ background var(--efu-main)
115
+ opacity 1
116
+ display block !important
117
+
118
+ ::-webkit-scrollbar-track
119
+ background-color var(--efu-none)
120
+
98
121
  if hexo-config('lazyload.enable') && !hexo-config('lazyload.placeholder')
99
122
  img
100
123
  &[data-lazy-src]:not(.loaded)
@@ -116,7 +139,7 @@ h1, h2, h3, h4, h5, h6
116
139
  padding-left 0
117
140
  font-weight 700
118
141
  position relative
119
- margin 1rem 0 0.7rem
142
+ margin .5rem 0
120
143
  color var(--efu-fontcolor)
121
144
 
122
145
  hr
@@ -319,25 +342,6 @@ li, ul
319
342
  margin 0
320
343
  padding 0
321
344
 
322
- ::-webkit-scrollbar
323
- width 10px
324
- height 6px
325
-
326
- ::-webkit-scrollbar-thumb
327
- background var(--efu-card-border)
328
- opacity .5
329
- border-radius 8px
330
- cursor pointer
331
- border 2px solid var(--efu-background)
332
-
333
- ::-webkit-scrollbar-thumb:hover
334
- background var(--efu-main)
335
- opacity 1
336
- display block !important
337
-
338
- ::-webkit-scrollbar-track
339
- background-color var(--efu-none)
340
-
341
345
  [data-theme=dark] img
342
346
  filter brightness(1)
343
347
 
@@ -383,7 +387,7 @@ i.solitude
383
387
  +maxWidth1200()
384
388
  width 100%
385
389
 
386
- > #post,#category,#tag,#archive
390
+ > #post, #category, #tag, #archive
387
391
  box-shadow var(--efu-shadow-border)
388
392
  padding 1rem 2rem
389
393
  border-radius 12px
@@ -191,7 +191,7 @@
191
191
  font-size 1.3rem
192
192
  line-height 1.3
193
193
  border-top 1px dashed var(--efu-theme-op)
194
- padding-top 1.5rem
194
+ padding-top 1rem
195
195
 
196
196
  h3
197
197
  font-size 1.1rem
@@ -678,6 +678,7 @@ if hexo-config('aside.card.style') == 2
678
678
  opacity 0
679
679
  transition .3s
680
680
  display flex
681
+ pointer-events none
681
682
  gap 5px
682
683
  .more-info
683
684
  if hexo-config('aside.position') == 0
@@ -17,6 +17,15 @@
17
17
  &.show .close-btn i
18
18
  transform rotate(0)
19
19
 
20
+ if hexo-config('recent_comments.enable') && hexo-config('recent_comments.console')
21
+ .recent-comment-more
22
+ margin-left auto
23
+ display flex
24
+ align-items center
25
+
26
+ &:hover
27
+ color var(--efu-main)
28
+
20
29
  .console-card-group
21
30
  display flex
22
31
  justify-content space-between
@@ -35,11 +44,13 @@
35
44
  +maxHeight800()
36
45
  display none
37
46
 
47
+
38
48
  &.show
39
49
  .console-card-group
40
50
  transform translateY(0)
41
51
  opacity 1
42
52
  transition-delay .1s
53
+ max-height 80%
43
54
 
44
55
  .console-card-group-left
45
56
  margin-right .5rem
@@ -102,6 +113,8 @@
102
113
  font-size 36px
103
114
  font-weight 700
104
115
  line-height 1
116
+ display flex
117
+ align-items center
105
118
 
106
119
  .aside-list-item
107
120
  .thumbnail
@@ -135,7 +135,7 @@
135
135
  .footer-title-group
136
136
  display flex
137
137
  align-items center
138
- margin 1rem 0 .7rem 8px
138
+ margin .5rem 0 .7rem 8px
139
139
 
140
140
  a
141
141
  margin-left 8px
@@ -521,33 +521,6 @@
521
521
  padding 4px
522
522
  transition transform .3s ease 0s
523
523
 
524
- &.hide-menu
525
- #toggle-menu
526
- display inline-block
527
-
528
- +minWidth768()
529
- display none
530
-
531
- .site-page
532
- font-size inherit
533
-
534
- +maxWidth768()
535
- width 35px
536
- height 35px
537
- display flex
538
- align-items center
539
- justify-content center
540
-
541
- .menus_items
542
- position absolute
543
- left 0
544
- visibility hidden
545
- opacity 0
546
-
547
- #search-button
548
- span
549
- display none
550
-
551
524
  #search-button
552
525
  display inline
553
526
  padding 0 .4rem
@@ -23,7 +23,7 @@ if hexo-config('right_menu.enable')
23
23
  box-shadow var(--efu-shadow-theme)
24
24
 
25
25
  .rightMenu-group
26
- padding .5rem .3rem
26
+ padding .35rem .3rem
27
27
 
28
28
  &.rightMenu-small
29
29
  display flex
@@ -3,11 +3,12 @@
3
3
  padding-top 1rem
4
4
  flex-direction column
5
5
  align-items center
6
+ gap .5rem
6
7
 
7
8
  .author-title
8
9
  font-size 2rem
9
10
  font-weight 700
10
- margin 1rem 0
11
+ margin .5rem 0
11
12
  line-height 1
12
13
 
13
14
  if "tenyear" in $about
@@ -13,7 +13,7 @@
13
13
  animation gradient 15s ease infinite
14
14
  min-height 200px
15
15
  height fit-content
16
- width 59%
16
+ width 59.5%
17
17
 
18
18
  .card-content
19
19
  display flex
@@ -7,7 +7,7 @@
7
7
  background linear-gradient(120deg, #5b27ff 0, #00d4ff 100%)
8
8
  background-size 200%
9
9
  animation gradient 15s ease infinite
10
- width 59%
10
+ width 59.5%
11
11
 
12
12
  .title1
13
13
  opacity .8
@@ -28,7 +28,7 @@
28
28
  justify-content center
29
29
  align-items flex-start
30
30
  flex-direction column
31
- width 39%
31
+ width 39.5%
32
32
 
33
33
  h2
34
34
  margin-right auto
@@ -7,7 +7,7 @@
7
7
  align-items flex-start
8
8
  flex-direction column
9
9
  justify-content center
10
- width 39%
10
+ width 39.5%
11
11
 
12
12
  .maxim-title
13
13
  display flex
@@ -4,7 +4,7 @@
4
4
  min-height 240px
5
5
  position relative
6
6
  overflow hidden
7
- width 39%
7
+ width 39.5%
8
8
  display flex
9
9
  align-items center
10
10
  justify-content center
@@ -10,7 +10,8 @@
10
10
  width 100% !important
11
11
 
12
12
  &.mapAndInfo
13
- width 59%
13
+ width 59.5%
14
+ gap .5rem
14
15
 
15
16
  .author-content-item
16
17
  +minWidth1300()
@@ -22,7 +23,6 @@
22
23
  max-height 400px
23
24
  position relative
24
25
  overflow hidden
25
- margin-bottom 0.5rem
26
26
  height 60%
27
27
  background-size 100%
28
28
  transition 1s ease-in-out
@@ -1,7 +1,7 @@
1
1
  .author-content-item.personalities
2
2
  overflow hidden
3
3
  position relative
4
- width 59%
4
+ width 59.5%
5
5
  +maxWidth768()
6
6
  min-height 360px
7
7
 
@@ -4,7 +4,7 @@
4
4
  justify-content center
5
5
  align-items flex-start
6
6
  flex-direction column
7
- width 49%
7
+ width 49.5%
8
8
  min-height 450px
9
9
 
10
10
  .tags-group-all
@@ -5,7 +5,7 @@
5
5
 
6
6
  .about-statistic
7
7
  min-height 380px
8
- width 39%
8
+ width 39.5%
9
9
  background-size cover
10
10
  color var(--efu-white)
11
11
  overflow hidden