hexo-theme-solitude 1.5.11 → 1.6.1

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 (136) hide show
  1. package/.github/logo.svg +44 -10
  2. package/README.md +22 -2
  3. package/README_zh-cn.md +22 -2
  4. package/README_zh-tw.md +22 -2
  5. package/_config.yml +107 -107
  6. package/languages/en.yml +45 -63
  7. package/languages/zh-CN.yml +32 -55
  8. package/languages/zh-TW.yml +32 -55
  9. package/layout/404.pug +1 -1
  10. package/layout/includes/console.pug +5 -5
  11. package/layout/includes/footer.pug +7 -7
  12. package/layout/includes/head/config.pug +15 -9
  13. package/layout/includes/head/opengraph.pug +2 -2
  14. package/layout/includes/head/pwa.pug +6 -6
  15. package/layout/includes/head.pug +1 -1
  16. package/layout/includes/inject/body.pug +0 -4
  17. package/layout/includes/inject/head.pug +1 -2
  18. package/layout/includes/keyboard.pug +1 -1
  19. package/layout/includes/loading.pug +1 -1
  20. package/layout/includes/nav.pug +1 -1
  21. package/layout/includes/sidebar.pug +19 -3
  22. package/layout/includes/widgets/home/banner.pug +1 -1
  23. package/layout/includes/widgets/home/categoryBar.pug +2 -2
  24. package/layout/includes/widgets/home/categoryGroup.pug +0 -1
  25. package/layout/includes/widgets/home/postList.pug +74 -29
  26. package/layout/includes/widgets/home/topGroup.pug +2 -2
  27. package/layout/includes/widgets/nav/group.pug +2 -2
  28. package/layout/includes/widgets/nav/right.pug +1 -1
  29. package/layout/includes/widgets/page/about/award.pug +8 -9
  30. package/layout/includes/widgets/page/about/hobbies.pug +1 -1
  31. package/layout/includes/widgets/page/about/other.pug +1 -1
  32. package/layout/includes/widgets/page/banner.pug +1 -1
  33. package/layout/includes/widgets/page/links/banner.pug +5 -4
  34. package/layout/includes/widgets/page/moments/angle.pug +1 -1
  35. package/layout/includes/widgets/post/award.pug +10 -15
  36. package/layout/includes/widgets/post/copyright.pug +2 -2
  37. package/layout/includes/widgets/post/postMeta.pug +10 -10
  38. package/layout/includes/widgets/randomlink.pug +3 -2
  39. package/layout/includes/widgets/third-party/comments/twikoo.pug +1 -0
  40. package/layout/includes/widgets/third-party/comments/waline.pug +1 -0
  41. package/layout/page.pug +1 -1
  42. package/package.json +1 -1
  43. package/plugins.yml +0 -4
  44. package/scripts/event/cdn.js +6 -11
  45. package/scripts/event/merge_config.js +19 -3
  46. package/scripts/event/welcome.js +2 -2
  47. package/scripts/filter/checkThemeConfig.js +2 -2
  48. package/scripts/filter/default.js +4 -2
  49. package/scripts/filter/lazyload.js +18 -5
  50. package/scripts/filter/randomPosts.js +1 -1
  51. package/scripts/helper/stylus.js +8 -14
  52. package/source/css/{_widgets/_comment → _comments}/index.styl +14 -1
  53. package/source/css/{_widgets/_comment → _comments}/twikoo.styl +3 -0
  54. package/source/css/_global/index.styl +362 -1
  55. package/source/css/_highlight/prismjs/line-number.styl +1 -1
  56. package/source/css/{_widgets/_mixins → _layout}/article-sort.styl +1 -1
  57. package/source/css/_layout/aside.styl +751 -0
  58. package/source/css/_layout/capsule.styl +213 -0
  59. package/source/css/{_widgets/_extra → _layout}/console.styl +7 -6
  60. package/source/css/{_widgets/_mixins → _layout}/footer.styl +1 -0
  61. package/source/css/_layout/fullpage.styl +47 -0
  62. package/source/css/_layout/header.styl +2 -0
  63. package/source/css/_layout/keyboard.styl +60 -0
  64. package/source/css/_layout/pace.styl +40 -0
  65. package/source/css/_layout/rightmenu.styl +79 -0
  66. package/source/css/{_widgets/_mixins → _layout}/sidebar.styl +30 -20
  67. package/source/css/_layout/universe.styl +18 -0
  68. package/source/css/_page/_home/home-top.styl +2 -4
  69. package/source/css/_page/_home/recent-post.styl +407 -170
  70. package/source/css/_page/douban.styl +111 -109
  71. package/source/css/_page/links.styl +5 -5
  72. package/source/css/_page/share.styl +1 -17
  73. package/source/css/{_widgets/_post → _post}/content.styl +13 -3
  74. package/source/css/{_widgets/_post → _post}/tools.styl +3 -9
  75. package/source/css/index.styl +20 -5
  76. package/source/css/third_party/snackbar.min.css +1 -0
  77. package/source/css/{_global/var.styl → var.styl} +7 -1
  78. package/source/img/avatar.png +0 -0
  79. package/source/img/default.png +0 -0
  80. package/source/img/flower.gif +0 -0
  81. package/source/img/pwa/favicon.ico +0 -0
  82. package/source/img/pwa/favicon_128.ico +0 -0
  83. package/source/img/pwa/favicon_16.ico +0 -0
  84. package/source/img/pwa/favicon_256.ico +0 -0
  85. package/source/img/pwa/favicon_32.ico +0 -0
  86. package/source/js/{comment/twikoo_commentBarrage.js → commentBarrage/twikoo.js} +0 -6
  87. package/source/js/{comment/waline_commentBarrage.js → commentBarrage/waline.js} +0 -2
  88. package/source/js/main.js +73 -71
  89. package/source/js/utils.js +1 -1
  90. package/layout/includes/recent-posts.pug +0 -9
  91. package/layout/includes/widgets/rightside/index.pug +0 -87
  92. package/source/css/_layout/basic.styl +0 -308
  93. package/source/css/_layout/index.styl +0 -125
  94. package/source/css/_widgets/_aside/allinfo.styl +0 -168
  95. package/source/css/_widgets/_aside/flip.styl +0 -67
  96. package/source/css/_widgets/_aside/index.styl +0 -90
  97. package/source/css/_widgets/_aside/info.styl +0 -263
  98. package/source/css/_widgets/_aside/newPost.styl +0 -61
  99. package/source/css/_widgets/_aside/toc.styl +0 -108
  100. package/source/css/_widgets/_aside/welcome.styl +0 -14
  101. package/source/css/_widgets/_extra/fullpage.styl +0 -46
  102. package/source/css/_widgets/_extra/music.styl +0 -218
  103. package/source/css/_widgets/_extra/pace.styl +0 -39
  104. package/source/css/_widgets/_extra/rightmenu.styl +0 -78
  105. package/source/css/_widgets/_mixins/keyboard.styl +0 -59
  106. package/source/css/_widgets/index.styl +0 -56
  107. package/source/img/logo.png +0 -0
  108. package/source/js/rightside.js +0 -221
  109. /package/source/css/{_widgets/_comment → _comments}/waline.styl +0 -0
  110. /package/source/css/{_widgets/_mixins → _layout}/other.styl +0 -0
  111. /package/source/css/{_widgets/_post → _post}/commentBarrage.styl +0 -0
  112. /package/source/css/{_widgets/_post → _post}/copyright.styl +0 -0
  113. /package/source/css/{_widgets/_post → _post}/index.styl +0 -0
  114. /package/source/css/{_widgets/_post → _post}/meta.styl +0 -0
  115. /package/source/css/{_widgets/_post → _post}/pagination.styl +0 -0
  116. /package/source/css/{_widgets/_post → _post}/postAI.styl +0 -0
  117. /package/source/css/{_widgets/_post → _post}/relatedPost.styl +0 -0
  118. /package/source/css/{_widgets/_search → _search}/algolia-search.styl +0 -0
  119. /package/source/css/{_widgets/_search → _search}/local-search.styl +0 -0
  120. /package/source/css/{_widgets/_tags → _tags}/button.styl +0 -0
  121. /package/source/css/{_widgets/_tags → _tags}/checkbox.styl +0 -0
  122. /package/source/css/{_widgets/_tags → _tags}/fold.styl +0 -0
  123. /package/source/css/{_widgets/_tags → _tags}/gallery.styl +0 -0
  124. /package/source/css/{_widgets/_tags → _tags}/index.styl +0 -0
  125. /package/source/css/{_widgets/_tags → _tags}/label.styl +0 -0
  126. /package/source/css/{_widgets/_tags → _tags}/link.styl +0 -0
  127. /package/source/css/{_widgets/_tags → _tags}/media.styl +0 -0
  128. /package/source/css/{_widgets/_tags → _tags}/mermaid.styl +0 -0
  129. /package/source/css/{_widgets/_tags → _tags}/note.styl +0 -0
  130. /package/source/css/{_widgets/_tags → _tags}/span.styl +0 -0
  131. /package/source/css/{_widgets/_tags → _tags}/tabs.styl +0 -0
  132. /package/source/css/{_widgets/_tags → _tags}/timeline.styl +0 -0
  133. /package/source/js/{lately.min.js → third_party/lately.min.js} +0 -0
  134. /package/source/js/{sco-ai.min.js → third_party/sco-ai.min.js} +0 -0
  135. /package/source/js/{universe.min.js → third_party/universe.min.js} +0 -0
  136. /package/source/js/{waterfall.min.js → third_party/waterfall.min.js} +0 -0
@@ -3,7 +3,6 @@
3
3
 
4
4
  if group
5
5
  .categoryGroup
6
-
7
6
  each item in group
8
7
  - var array = item[1].split('||')
9
8
  .categoryItem
@@ -1,34 +1,79 @@
1
+ mixin cover
2
+ a(href=url_for(post.path), title=post.title)
3
+ img.post_bg(src=url_for(post.cover), alt=post.title)
4
+
5
+ mixin info
6
+ div.recent-post-info-top
7
+ div.recent-post-info-top-tips
8
+ if post.sticky && is_home()
9
+ span.article-meta.sticky-warp
10
+ i.solitude.st-thumbtack-solid.sticky.orange
11
+ span.sticky.orange= _p('home.sticky')
12
+ each category in post.categories.data
13
+ span.original= category.name
14
+
15
+ if post.prev == null && is_home()
16
+ span.original= _p('home.new')
17
+
18
+ a.unvisited-post(href=url_for(post.path))= _p('home.read')
19
+
20
+ a.article-title(href=url_for(post.path), title=post.title)= post.title
21
+
22
+ case theme.index_post_list.content
23
+ when false
24
+ break
25
+ when 1
26
+ .content!= post.description
27
+ when 2
28
+ if post.description
29
+ .content!= post.description
30
+ else
31
+ - const content = strip_html(post.content)
32
+ - let expert = content.substring(0, theme.index_post_list.length)
33
+ - content.length > theme.index_post_list.length ? expert += ' ...' : ''
34
+ .content!= expert
35
+ default
36
+ - const content = strip_html(post.content)
37
+ - let expert = content.substring(0, theme.index_post_list.length)
38
+ - content.length > theme.index_post_list.length ? expert += ' ...' : ''
39
+ .content!= expert
40
+
41
+ div.article-meta-wrap
42
+ span.article-meta.tags
43
+ each tag in post.tags.data
44
+ a.article-meta__tags(href=url_for(tag.path), onclick="event.stopPropagation();")
45
+ span.tags-punctuation=tag.name
46
+
47
+ span.post-meta-date
48
+ time(datetime=moment(post.date))
49
+
50
+ - const { direction, cover } = theme.index_post_list
51
+
52
+ if direction === 'row'
53
+ - var position = cover === 'both' ? index % 2 === 0 ? 0 : 1 : cover === 'left' ? 0 : 1
54
+
1
55
  div.recent-post-item(onclick="pjax.loadUrl('" + url_for(post.path) + "')")
2
- div.post_cover
3
- a(href=url_for(post.path), title=post.title)
4
- img.post_bg(src=url_for(post.cover), alt=post.title)
5
- div.recent-post-info
6
- div.recent-post-info-top
7
- div.recent-post-info-top-tips
8
- if post.sticky && is_home()
9
- span.article-meta.sticky-warp
10
- i.solitude.st-thumbtack-solid.sticky.orange
11
- span.sticky.orange= _p('home.recent-post.sticky')
12
- each category in post.categories.data
13
- span.original= category.name
14
-
15
- if post.prev == null && is_home()
16
- span.original= _p('home.recent-post.new')
17
-
18
- a.unvisited-post(href=url_for(post.path))= _p('home.recent-post.read')
19
-
20
- a.article-title(href=url_for(post.path), title=post.title)= post.title
21
-
22
- div.article-meta-wrap
23
- span.article-meta.tags
24
- each tag in post.tags.data
25
- a.article-meta__tags(href=tag.path, onclick="event.stopPropagation();")
26
- span.tags-punctuation=tag.name
27
-
28
- span.post-meta-date
29
- time(datetime=moment(post.date))
56
+ if direction === 'column'
57
+ div.post_cover
58
+ +cover()
59
+ div.recent-post-info
60
+ +info()
61
+ else
62
+ case position
63
+ when 0
64
+ div.post_cover
65
+ +cover()
66
+ div.recent-post-info
67
+ +info()
68
+ when 1
69
+ div.recent-post-info
70
+ +info()
71
+ div.post_cover
72
+ +cover()
73
+
74
+
30
75
  if (theme.google_adsense && theme.google_adsense.enable && theme.google_adsense.auto_ads === false)
31
- if (index + 1) % 3 == 0
76
+ if (index + 1) % 3 === 0
32
77
  div.recent-post-item.google-ads-warp
33
78
  ins.adsbygoogle(style="display:block; text-align:center;", data-ad-layout="in-article", data-ad-format="fluid", data-ad-client=theme.google_adsense.client, data-ad-slot=theme.google_adsense.slot)
34
79
  script.
@@ -3,7 +3,7 @@ each post in filteredPosts
3
3
  .recent-post-item
4
4
  .post_cover
5
5
  a(href=url_for(post.path), title=post.title)
6
- span.recent-post-top-text= _p('home.top-group.recommend')
6
+ span.recent-post-top-text= _p('home.recommend')
7
7
  img.post_bg(alt=post.title, src=post.cover)
8
8
  .recent-post-info
9
9
  a.article-title(href=url_for(post.path), title=post.title)= post.title
@@ -16,7 +16,7 @@ mixin todayCardContent
16
16
  .banner-button-group
17
17
  a.banner-button(onclick="window.event.cancelBubble=true;sco.hideTodayCard();")
18
18
  i.solitude.st-add-fill
19
- span.banner-button-text= _p('home.top-group.recommendmore')
19
+ span.banner-button-text= _p('home.recommendmore')
20
20
 
21
21
  case theme.hometop.recommendList.url.startsWith('/')
22
22
  when true
@@ -7,7 +7,7 @@ if menu
7
7
  .back-menu-list
8
8
  each data, label in value
9
9
  - var array = data.split('||')
10
- a.back-menu-item(href=url_for(trim(array[0])), title=index)
10
+ a.back-menu-item(href=url_for(trim(array[0])), title=label)
11
11
  if array[1]
12
- img.back-menu-item-icon(src=trim(array[1]), alt=index)
12
+ img.nolazyload.back-menu-item-icon(src=trim(array[1]), alt=label)
13
13
  span.back-menu-item-text= label
@@ -1,7 +1,7 @@
1
1
  - var custom = theme.nav.right.custom || []
2
2
  each item in custom
3
3
  .nav-button(id=item.id)
4
- a.site-page(href=item.url || 'javascript:void(0);', onclick=item.onclick, title=item.title || '')
4
+ a.site-page(href=url_for(item.url) || 'javascript:void(0);', onclick=item.onclick, title=item.title || '')
5
5
  i.solitude(class=item.icon || '')
6
6
  if theme.nav.right.random
7
7
  .nav-button#randomPost_button
@@ -4,8 +4,8 @@
4
4
  if site.data.about.rewardList
5
5
  .author-content
6
6
  .author-content-item.single.reward
7
- .author-content-item-tips= _p('award.about.tip')
8
- span.author-content-item-title= _p('award.about.title')
7
+ .author-content-item-tips= _p('award.thanks')
8
+ span.author-content-item-title= _p('award.title')
9
9
  .author-content-item-description
10
10
  = award.description
11
11
  .reward-list-all
@@ -22,18 +22,17 @@ if site.data.about.rewardList
22
22
  if theme.post.award.enable
23
23
  .post-reward
24
24
  .post-reward(onclick="AddRewardMask()")
25
- .reward-button(title=_p('award.about.tip1'))
25
+ .reward-button(title=_p('award.tipping'))
26
26
  i.solitude.st-hand-heart-fill
27
- = _p('award.about.tip1')
27
+ = _p('award.tipping')
28
28
  .reward-main
29
29
  ul.reward-all
30
- span.reward-title= _p('award.about.tip2')
30
+ span.reward-title= theme.post.award.title
31
31
  ul.reward-group
32
- - var rewards = [{image: theme.post.award.wechat, description: _p('award.wechat')}, {image: theme.post.award.alipay, description: _p('award.alipay')}]
32
+ - var rewards = theme.post.award.list
33
33
  each reward in rewards
34
34
  li.reward-item
35
- a(href=reward.image, target="_blank")
36
- img.post-qr-code-img(alt=reward.description, src=reward.image)
37
- .post-qr-code-desc= reward.description
35
+ img.post-qr-code-img(alt=reward.name, src=reward.qcode, style="border-color:" + reward.color)
36
+ .post-qr-code-desc= reward.name
38
37
  .reward-list-tips
39
38
  p= award.tips.replace('{sum}', sum.toFixed(2))
@@ -32,6 +32,6 @@ if site.data.about.likes
32
32
  .tips= like.subtips
33
33
  if like.button
34
34
  .banner-button-group
35
- a.banner-button(href=like.button_link)
35
+ a.banner-button(href=url_for(like.button_link))
36
36
  i.solitude.st-right-btn-fill
37
37
  span.banner-button-text= like.button_text
@@ -10,7 +10,7 @@
10
10
  #statistic
11
11
  .post-tips
12
12
  | 统计信息来自
13
- a(href="https://invite.51.la/1NzKqTeb?target=V6") 51la网站统计
13
+ a(href="https://v6.51.la/") 51la网站统计
14
14
 
15
15
  script.
16
16
  fetch("#{tj.url}")
@@ -10,6 +10,6 @@
10
10
  if page.rightbtn
11
11
  .banner-button-group
12
12
  - const isInternalLink = page.rightbtnlink.startsWith('/')
13
- a.banner-button(onclick=isInternalLink ? `pjax.loadUrl("${page.rightbtnlink}")` : null, href=isInternalLink ? null : page.rightbtnlink, target=isInternalLink ? null : "_blank")
13
+ a.banner-button(onclick=isInternalLink ? `pjax.loadUrl("${page.rightbtnlink}")`: null, href=isInternalLink ? null : url_for(page.rightbtnlink), target=isInternalLink ? null : "_blank")
14
14
  i.solitude.st-right-btn-fill
15
15
  span.banner-button-text= page.rightbtn
@@ -6,10 +6,11 @@
6
6
  if theme.footer.randomlink
7
7
  a.banner-button.secondary(onclick="travelling()")
8
8
  i.solitude.st-signal-tower-fill
9
- span.banner-button-text 随机访问
10
- a.banner-button(onclick="sco.scrollToComment()")
11
- i.solitude.st-right-btn-fill
12
- span.solitude.banner-button-text 申请友链
9
+ span.banner-button-text=_p('link.banner.random')
10
+ if theme.comment.enable
11
+ a.banner-button(onclick="sco.scrollToComment()")
12
+ i.solitude.st-right-btn-fill
13
+ span.solitude.banner-button-text=_p('link.banner.toComment')
13
14
 
14
15
  .tags-group-all.nowrapMove
15
16
  .tags-group-wrapper
@@ -5,7 +5,7 @@
5
5
  i.solitude.st-restart-line
6
6
  .title-h2-a-right
7
7
  if page.type !== 'links'
8
- a.random-post-all(href="/links/", data-pjax-state="") 全部友链
8
+ a.random-post-all(href=url_for("/links/"), data-pjax-state="") 全部友链
9
9
 
10
10
  #random-post
11
11
 
@@ -1,24 +1,19 @@
1
1
  .post-reward(onclick="AddRewardMask()")
2
- .reward-button(title="赞赏作者")
2
+ .reward-button(title=_p('award.tipping'))
3
3
  i.solitude.st-hand-heart-fill
4
- | 打赏作者
4
+ =_p('award.tipping')
5
5
  .reward-main
6
6
  ul.reward-all
7
- span.reward-title 感谢你赐予我前进的力量
7
+ span.reward-title=theme.post.award.title
8
8
  ul.reward-group
9
- if theme.post.award.wechat
9
+ - let list = theme.post.award.list || []
10
+ for item in list
10
11
  li.reward-item
11
- a(href=theme.post.award.wechat)
12
- img.post-qr-code-img(src=theme.post.award.wechat alt="微信")
13
- .post-qr-code-desc 微信
14
- if theme.post.award.alipay
15
- li.reward-item
16
- a(href=theme.post.award.alipay target="_blank")
17
- img.post-qr-code-img(src=theme.post.award.alipay alt="支付宝")
18
- .post-qr-code-desc 支付宝
19
- a.reward-main-btn(href=url_for(theme.post.award.url))
20
- .reward-text 赞赏者名单
21
- .reward-dec 因为你们的支持让我意识到写文章的价值🙏
12
+ img.post-qr-code-img.nolazyload(src=item.qcode, alt=item.name, style="border-color: " + item.color)
13
+ .post-qr-code-desc=item.name
14
+ a.reward-main-btn(href=url_for(theme.post.award.appreciators))
15
+ .reward-text= _p('award.title')
16
+ .reward-dec=theme.post.award.desc
22
17
 
23
18
  script.
24
19
  function RemoveRewardMask() {
@@ -1,6 +1,6 @@
1
1
  .post-copyright
2
2
  .post-copyright__author_group
3
- a.post-copyright__author_img(href="/about/")
3
+ a.post-copyright__author_img(href=url_for("/about/"))
4
4
  img.post-copyright__author_img_front(src=theme.site.icon)
5
5
  .post-copyright__author_name= config.title
6
6
  .post-copyright__author_desc= config.subtitle
@@ -24,4 +24,4 @@
24
24
  a(href=url_for(theme.post.default.copyright.licenurl))
25
25
  | #{theme.post.default.copyright.license}
26
26
  | 协议,完整转载请注明来自
27
- a(href="/") #{config.title}
27
+ a(href=url_for("/")) #{config.title}
@@ -3,11 +3,11 @@
3
3
  #post-info
4
4
  #post-firstinfo
5
5
  .meta-firstline
6
- - var cc = page.reprint ? _p('post.meta_reprint') : _p('post.meta_original')
7
- a.post-meta-original(title=_p('post.meta_cc').replace(/\$\{cc}/, cc))= cc
6
+ - var cc = page.reprint ? _p('post.reprint') : _p('post.original')
7
+ a.post-meta-original(title=_p('post.copyright').replace(/\$\{cc}/, cc))= cc
8
8
  if page.categories.data.length > 0
9
9
  span.post-meta-categories
10
- a.post-meta-categories(href='/' + page.categories.data[0].path)= page.categories.data[0].name
10
+ a.post-meta-categories(href=url_for('/' + page.categories.data[0].path))= page.categories.data[0].name
11
11
  .tag_share
12
12
  .post-meta__tag-list
13
13
  each tag in page.tags.data
@@ -17,28 +17,28 @@
17
17
  #post-meta
18
18
  .meta-secondline
19
19
  if theme.post.meta.date
20
- span.post-meta-date(title=_p('meta_posted') + ' ' + full_date(page.date))
20
+ span.post-meta-date(title=_p('post.posted') + ' ' + full_date(page.date))
21
21
  i.post-meta-icon.solitude.st-calendar-todo-fill
22
22
  time(datetime=date_xml(page.date))= date_xml(page.date)
23
23
  if theme.post.meta.updated
24
- span.post-meta-date(title=_p('meta_updated') + ' ' + full_date(page.updated))
24
+ span.post-meta-date(title=_p('post.updated') + ' ' + full_date(page.updated))
25
25
  i.post-meta-icon.solitude.st-refresh-line
26
26
  time(datetime=date_xml(page.updated))= date_xml(page.updated)
27
27
  if theme.wordcount
28
28
  span.post-meta-wordcount
29
29
  if theme.post.meta.wordcount
30
- i.post-meta-icon.solitude.st-word-fill(title=_p('post.meta_wordcount'))
30
+ i.post-meta-icon.solitude.st-word-fill(title=_p('post.wordcount'))
31
31
  span.word-count= wordcount(page.content)
32
32
  span.post-meta-separator
33
33
  if theme.post.meta.readtime
34
- i.post-meta-icon.solitude.st-clock-fill(title=_p('post.meta_minread'))
34
+ i.post-meta-icon.solitude.st-clock-fill(title=_p('post.minread'))
35
35
  span= min2read(page.content) + " min"
36
36
  if theme.post.meta.locate
37
- span.post-meta-position(title=_p('post.meta_ip') + page.locate)
37
+ span.post-meta-position(title=_p('post.ip') + page.locate)
38
38
  i.post-meta-icon.solitude.st-map-pin-fill
39
39
  span= page.locate
40
40
  if theme.post.meta.pv
41
- a.post-meta-pv(href=url_for(page.path), title=_p('post.meta_pv'))
41
+ a.post-meta-pv(href=url_for(page.path), title=_p('post.pv'))
42
42
  i.post-meta-icon.solitude.st-fire-fill
43
43
  if theme.comment.enable
44
44
  case theme.comment.type
@@ -52,7 +52,7 @@
52
52
  span#busuanzi_value_page_pv
53
53
  i.solitude.st-loading-line
54
54
  if theme.post.meta.comment && page.comment
55
- span.post-meta-commentcount(title=_p('post.meta_comment'), onclick="sco.scrollTo('post-comment')")
55
+ span.post-meta-commentcount(title=_p('post.comment'), onclick="sco.scrollTo('post-comment')")
56
56
  i.solitude.st-chat-fill
57
57
  a(href=url_for(page.path) + "#post-comment")
58
58
  case theme.comment.type
@@ -8,9 +8,10 @@ if(data)
8
8
 
9
9
  script.
10
10
  const links = !{JSON.stringify(datalinks)}
11
+ const randomText = '!{_p('link.random')}'
11
12
  function travelling() {
12
13
  const link = links[utils.randomNum(links.length)];
13
- utils.snackbarShow('您即将前往 ⌈ ' + link.name + ' ⌋ , 安全性未知', false, 3000);
14
+ utils.snackbarShow(randomText.replace(/\$\{name}/, link.name), false, 3000);
14
15
  setTimeout(() => {
15
16
  window.open(link.link, "_blank")
16
17
  }, 3000)
@@ -33,5 +34,5 @@ if theme.footer.randomlink
33
34
  linksCopy.splice(index, 1);
34
35
  }
35
36
 
36
- linkcard.innerHTML = data + '<a class="footer-item" href="/links/">更多</a>';
37
+ linkcard.innerHTML = data + '<a class="footer-item" href="#{url_for(/links/)}">#{_p('more')}</a>';
37
38
  }
@@ -6,6 +6,7 @@ script.
6
6
  el: '#comment',
7
7
  onCommentLoaded: function () {
8
8
  GLOBAL_CONFIG.lightbox && utils.lightbox(document.querySelectorAll('#twikoo .tk-content img:not(.tk-owo-emotion)'))
9
+ sco.owoBig()
9
10
  },
10
11
  lang: '#{theme.comment.twikoo.lang}',
11
12
  }
@@ -13,4 +13,5 @@ script.
13
13
  }, !{JSON.stringify(option)}))
14
14
 
15
15
  GLOBAL_CONFIG.lightbox && utils.lightbox(document.querySelectorAll('#comment .wl-content img:not(.wl-emoji)'))
16
+ sco.owoBig()
16
17
  }
package/layout/page.pug CHANGED
@@ -22,7 +22,7 @@ block content
22
22
  include includes/page/moment
23
23
  when 'douban'
24
24
  include includes/widgets/page/banner
25
- include includes/page/default
25
+ != page.content
26
26
  when 'music'
27
27
  include includes/page/music
28
28
  default
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-theme-solitude",
3
- "version": "1.5.11",
3
+ "version": "1.6.1",
4
4
  "description": "A beautiful, powerful, and efficient Hexo theme developed by the wleelw",
5
5
  "main": "package.json",
6
6
  "scripts": {
package/plugins.yml CHANGED
@@ -74,10 +74,6 @@ busuanzi_js:
74
74
  name: busuanzi
75
75
  file: bsz.pure.mini.js
76
76
  version: 2.3.0
77
- snackbar_css:
78
- name: node-snackbar
79
- file: dist/snackbar.min.css
80
- version: 0.1.16
81
77
  snackbar:
82
78
  name: node-snackbar
83
79
  file: dist/snackbar.min.js
@@ -44,11 +44,6 @@ hexo.extend.filter.register('before_generate', () => {
44
44
  file: 'js/covercolor/api.js',
45
45
  version
46
46
  },
47
- rightside_js: {
48
- name: 'hexo-theme-solitude',
49
- file: 'js/rightside.js',
50
- version
51
- },
52
47
  music_js: {
53
48
  name: 'hexo-theme-solitude',
54
49
  file: 'js/music.js',
@@ -61,32 +56,32 @@ hexo.extend.filter.register('before_generate', () => {
61
56
  },
62
57
  sco_ai_js: {
63
58
  name: 'hexo-theme-solitude',
64
- file: 'js/sco-ai.min.js',
59
+ file: 'js/third_party/sco-ai.min.js',
65
60
  version
66
61
  },
67
62
  twikoo_commentBarrage: {
68
63
  name: 'hexo-theme-solitude',
69
- file: 'js/comment/twikoo_commentBarrage.js',
64
+ file: 'js/commentBarrage/twikoo.js',
70
65
  version
71
66
  },
72
67
  waline_commentBarrage: {
73
68
  name: 'hexo-theme-solitude',
74
- file: 'js/comment/waline_commentBarrage.js',
69
+ file: 'js/commentBarrage/waline.js',
75
70
  version
76
71
  },
77
72
  waterfall: {
78
73
  name: 'hexo-theme-solitude',
79
- file: 'js/waterfall.min.js',
74
+ file: 'js/third_party/waterfall.min.js',
80
75
  version
81
76
  },
82
77
  universe_js: {
83
78
  name: 'hexo-theme-solitude',
84
- file: 'js/universe.min.js',
79
+ file: 'js/third_party/universe.min.js',
85
80
  version
86
81
  },
87
82
  lately_js: {
88
83
  name: 'hexo-theme-solitude',
89
- file: 'js/lately.min.js',
84
+ file: 'js/third_party/lately.min.js',
90
85
  version
91
86
  },
92
87
  }
@@ -58,6 +58,8 @@ hexo.extend.filter.register('before_generate', () => {
58
58
  runtimeenable: true,
59
59
  runtime: "2023-04-20 00:00:00",
60
60
  },
61
+ }, index_post_list: {
62
+ direction: 'column', content: false, length: 500, cover: 'both'
61
63
  }, page: {
62
64
  error: true, tags: true, categories: true, default: {
63
65
  cover: ['/img/default.png'],
@@ -128,14 +130,14 @@ hexo.extend.filter.register('before_generate', () => {
128
130
  }, keyboard: {
129
131
  enable: false, list: []
130
132
  }, lazyload: {
131
- enable: false, placeholder: '/img/loading.gif', errorimg: '/img/error_load.png'
133
+ enable: false, field: 'site', placeholder: '/img/loading.gif', errorimg: '/img/error_load.png'
132
134
  }, loading: {
133
135
  fullpage: false, pace: true,
134
136
  }, highlight: {
135
137
  enable: true, limit: 200, copy: true, expand: true, theme: 'default', color: 'default',
136
138
  }, lightbox: false, fancybox: false, mediumZoom: false, mermaid: false, translate: {
137
139
  enable: false, defaultEncoding: 2, translateDelay: 0,
138
- }, opengraph: {
140
+ }, OpenGraph: {
139
141
  enable: false, options: null
140
142
  }, wordcount: false, busuanzi: false, search: {
141
143
  enable: false, type: 'local', tags: [], algolia: null, local: {
@@ -143,7 +145,15 @@ hexo.extend.filter.register('before_generate', () => {
143
145
  }
144
146
  }, rightside: {
145
147
  enable: false
146
- }, post_ai: {
148
+ },
149
+ copy: {
150
+ enable: true,
151
+ copyright: {
152
+ enable: false,
153
+ limit_count: 50
154
+ }
155
+ }
156
+ , post_ai: {
147
157
  enable: false,
148
158
  modelName: 'GPT 3',
149
159
  key: 'your key',
@@ -167,6 +177,12 @@ hexo.extend.filter.register('before_generate', () => {
167
177
  },
168
178
  verify_site: [],
169
179
  css_prefix: false,
180
+ font: {
181
+ 'font-size': '16px',
182
+ 'code-font-size': '16px',
183
+ 'font-family': '"PingFang SC","Hiragino Sans GB","Microsoft YaHei"',
184
+ 'code-font-family': '"monospace", "monospace"',
185
+ },
170
186
  extends: {
171
187
  head: [], body: [],
172
188
  },
@@ -1,6 +1,6 @@
1
1
  hexo.on('ready', () => {
2
- const { version } = require('../../package.json')
3
- hexo.log.info(`
2
+ const {version} = require('../../package.json')
3
+ hexo.log.info(`
4
4
  ===================================================================
5
5
  ##### #### # ##### ###### # # ###### ######
6
6
  # # # # # # # # # # #
@@ -4,12 +4,12 @@ hexo.extend.filter.register('before_post_render', () => {
4
4
  const data = hexo.locals.get('data');
5
5
  const logger = hexo.log;
6
6
  const theme = hexo.theme.config;
7
- if (theme.hometop.banner.enable && !theme.hometop.banner.icon) {
7
+ if (theme.hometop.enable && !theme.hometop.banner.icon) {
8
8
  logger.error('\n 启用banner的情况下,必须提供 icon 图片!\n 请在主题配置文件中设置 hometop.banner.icon 选项。');
9
9
  logger.error('\n If banner is enabled, icon image must be supplied! \n Please set the hometop.banner.icon option in the theme configuration file.');
10
10
  process.exit(-1);
11
11
  }
12
- if (theme.says.enable && theme.says.mode === 'local' && !data.essay) {
12
+ if (theme.says.enable && !data.essay) {
13
13
  logger.error('\n 启用说说的情况下,必须提供 essay 数据文件!\n 请新建 essay.yaml。');
14
14
  logger.error('\n If says is enabled, essay data must be supplied! \n Please create essay.yaml.');
15
15
  process.exit(-1);
@@ -4,7 +4,8 @@ hexo.extend.filter.register('after_post_render', function (data) {
4
4
  data.title = data.title || 'Untitled';
5
5
  const {config} = hexo.theme;
6
6
  if (data.layout === 'post') {
7
- const {copyright, locate, cover} = hexo.theme.config.post.default
7
+ let {copyright, locate, cover} = hexo.theme.config.post.default
8
+ cover = cover !== null ? cover : ['/img/default.png']
8
9
  data.locate = data.locate || locate
9
10
  data.cc = data.cc || copyright
10
11
  data.cover = data.cover || cover[getRandomInt(0, cover?.length)]
@@ -12,7 +13,8 @@ hexo.extend.filter.register('after_post_render', function (data) {
12
13
  data.toc = !!(config.aside.toc.post && data.toc !== false);
13
14
  }
14
15
  if (data.layout === 'page') {
15
- const {cover} = hexo.theme.config.page.default
16
+ let {cover} = hexo.theme.config.page.default
17
+ cover = cover !== null ? cover : ['/img/default.png']
16
18
  data.cover = data.cover || cover[getRandomInt(0, cover?.length)]
17
19
  data.excerpt = data.title
18
20
  data.toc = !!(config.aside.toc.page && data.toc !== false && data.aside);
@@ -1,7 +1,20 @@
1
+ 'use strict'
2
+
3
+ const urlFor = require('hexo-util').url_for.bind(hexo)
4
+
5
+ const lazyload = (content, img) => {
6
+ return content.replace(/(<img(?!.*?class[\t]*=[\t]*['"].*?nolazyload.*?['"]).*? src=)/gi, `$1 "${img}" data-lazy-src=`)
7
+ }
8
+
1
9
  hexo.extend.filter.register('after_render:html', function (data) {
2
- if (!hexo.theme.config.lazyload.enable) return
3
- return data.replace(
4
- /(<img(?!.*?class\t*=\t*['"].*?nolazyload.*?['"]).*?)( src=)/gi,
5
- `$1 data-lazy-src=`
6
- )
10
+ const { enable, placeholder ,field } = hexo.theme.config.lazyload
11
+ if (!enable || field !== 'site') return;
12
+ return lazyload(data, urlFor(placeholder))
13
+ })
14
+
15
+ hexo.extend.filter.register('after_post_render', data => {
16
+ const { enable, placeholder, field } = hexo.theme.config.lazyload
17
+ if (!enable || field !== 'post') return
18
+ data.content = lazyload(data.content, urlFor(placeholder))
19
+ return data
7
20
  })
@@ -1,5 +1,5 @@
1
1
  hexo.extend.filter.register('after_render:html', function (data) {
2
2
  const posts = hexo.locals.get('posts').filter(post => post.random !== false).map(post => post.path);
3
- data += `<script>const posts=${JSON.stringify(posts)};function toRandomPost(){ pjax.loadUrl('/'+posts[Math.floor(Math.random()*posts.length)]); };</script>`;
3
+ data += `<script>const posts=${JSON.stringify(posts)};function toRandomPost(){ pjax.loadUrl('/'+posts[Math.floor(Math.random()*posts.length)]); }</script>`;
4
4
  return data;
5
5
  });