hexo-theme-solitude 2.1.6 → 2.1.8

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 (73) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/LICENSE +1 -1
  3. package/README.md +1 -1
  4. package/README_en-US.md +1 -1
  5. package/README_zh-Hant.md +1 -1
  6. package/SECURITY.md +1 -1
  7. package/_config.yml +16 -20
  8. package/languages/default.yml +173 -173
  9. package/layout/archive.pug +3 -1
  10. package/layout/category.pug +3 -1
  11. package/layout/includes/inject/body.pug +1 -1
  12. package/layout/includes/page/default.pug +1 -1
  13. package/layout/includes/page/links.pug +1 -1
  14. package/layout/includes/page/tlink.pug +1 -1
  15. package/layout/includes/rightmenu.pug +6 -5
  16. package/layout/includes/widgets/page/about/hobbies.pug +18 -17
  17. package/layout/includes/widgets/page/about/tenyear.pug +24 -25
  18. package/layout/includes/widgets/page/links/linksCard.pug +5 -2
  19. package/layout/includes/widgets/page/message/content.pug +1 -1
  20. package/layout/includes/widgets/third-party/hot/artalk.pug +56 -0
  21. package/layout/includes/widgets/third-party/hot/twikoo.pug +57 -0
  22. package/layout/includes/widgets/third-party/pjax.pug +2 -1
  23. package/layout/index.pug +1 -1
  24. package/layout/post.pug +1 -1
  25. package/layout/tag.pug +2 -0
  26. package/package.json +1 -1
  27. package/plugins.yml +10 -10
  28. package/scripts/event/init.js +0 -1
  29. package/scripts/event/merge_config.js +14 -39
  30. package/scripts/event/welcome.js +11 -7
  31. package/scripts/filter/default.js +20 -21
  32. package/scripts/filter/lazyload.js +2 -4
  33. package/scripts/filter/randomPosts.js +14 -3
  34. package/scripts/helper/getArchiveLength.js +9 -11
  35. package/scripts/helper/related_post.js +56 -56
  36. package/scripts/tags/article.js +53 -15
  37. package/scripts/tags/tabs.js +37 -46
  38. package/source/css/_comments/comment.styl +4 -3
  39. package/source/css/_comments/twikoo.styl +6 -7
  40. package/source/css/_global/animation.styl +0 -15
  41. package/source/css/_global/index.styl +19 -19
  42. package/source/css/_highlight/highlight/diff.styl +13 -1
  43. package/source/css/_highlight/index.styl +2 -2
  44. package/source/css/_highlight/prismjs/diff.styl +13 -1
  45. package/source/css/_highlight/prismjs/index.styl +1 -1
  46. package/source/css/_highlight/prismjs/line-number.styl +1 -1
  47. package/source/css/_layout/article-container.styl +1 -1
  48. package/source/css/_layout/console.styl +1 -0
  49. package/source/css/_layout/recent-post.styl +2 -2
  50. package/source/css/_page/_about/about.styl +1 -1
  51. package/source/css/_page/_about/game.styl +2 -17
  52. package/source/css/_page/error.styl +2 -3
  53. package/source/css/_page/links.styl +2 -2
  54. package/source/css/_page/other.styl +1 -0
  55. package/source/css/_page/says.styl +4 -3
  56. package/source/css/_tags/gallery.styl +1 -1
  57. package/source/css/_tags/tabs.styl +2 -2
  58. package/source/img/error_load.avif +0 -0
  59. package/source/js/covercolor/api.js +29 -14
  60. package/source/js/covercolor/ave.js +38 -24
  61. package/source/js/covercolor/local.js +60 -52
  62. package/source/js/main.js +253 -248
  63. package/source/js/music.js +21 -39
  64. package/source/js/right_menu.js +64 -127
  65. package/source/js/third_party/barrage.min.js +93 -1
  66. package/source/js/third_party/envelope.min.js +1 -1
  67. package/source/js/third_party/post_ai.min.js +184 -1
  68. package/source/js/tw_cn.js +17 -16
  69. package/source/js/utils.js +50 -57
  70. package/layout/includes/widgets/home/hot/artalk.pug +0 -45
  71. package/layout/includes/widgets/home/hot/twikoo.pug +0 -46
  72. package/source/img/loading.avif +0 -0
  73. /package/layout/includes/widgets/{home → third-party}/hot/index.pug +0 -0
@@ -6,80 +6,80 @@
6
6
  'use strict'
7
7
 
8
8
  hexo.extend.helper.register('related_posts', function (currentPost, allPosts) {
9
- const relatedPosts = []
10
- const config = hexo.theme.config
11
- const limitNum = config.related_post.limit || 6
12
- const dateType = config.related_post.date_type || 'created'
13
- const headlineLang = this._p('star')
9
+ const config = hexo.theme.config;
10
+ const limitNum = config.related_post.limit || 6;
11
+ const dateType = config.related_post.date_type || 'created';
12
+ const headlineLang = this._p('star');
14
13
 
15
- currentPost.tags.forEach(function (tag) {
16
- allPosts.forEach(function (post) {
14
+ const relatedPostsMap = new Map();
15
+
16
+ currentPost.tags.forEach(tag => {
17
+ allPosts.forEach(post => {
17
18
  if (isTagRelated(tag.name, post.tags) && currentPost.path !== post.path) {
18
- const relatedPost = {
19
- title: post.title,
20
- path: post.path,
21
- cover: post.cover,
22
- cover_type: post.cover_type,
23
- weight: 1,
24
- updated: post.updated,
25
- created: post.date
26
- }
27
- const index = findItem(relatedPosts, 'path', post.path)
28
- if (index !== -1) {
29
- relatedPosts[index].weight += 1
19
+ if (!relatedPostsMap.has(post.path)) {
20
+ relatedPostsMap.set(post.path, {
21
+ title: post.title,
22
+ path: post.path,
23
+ cover: post.cover || 'var(--default-bg-color)',
24
+ weight: 1,
25
+ updated: post.updated,
26
+ created: post.date
27
+ });
30
28
  } else {
31
- relatedPosts.push(relatedPost)
29
+ relatedPostsMap.get(post.path).weight += 1;
32
30
  }
33
31
  }
34
- })
35
- })
32
+ });
33
+ });
36
34
 
35
+ const relatedPosts = Array.from(relatedPostsMap.values());
37
36
  if (relatedPosts.length === 0) {
38
- return ''
37
+ return '';
39
38
  }
40
39
 
41
- relatedPosts.sort(compare('weight', dateType))
40
+ relatedPosts.sort(compare('weight', dateType));
42
41
 
43
- let result = '<div class="relatedPosts">'
44
- result += `<div class="headline"><i class="solitude fa-solid fa-star"></i><span>${headlineLang}</span><div class="relatedPosts-link"><a onclick="event.preventDefault(); toRandomPost();" href="javascript:void(0);" rel="external nofollow" data-pjax-state="">${this._p('random')}</a></div></div>`
45
- result += '<div class="relatedPosts-list">'
42
+ let result = `
43
+ <div class="relatedPosts">
44
+ <div class="headline">
45
+ <i class="solitude fa-solid fa-star"></i>
46
+ <span>${headlineLang}</span>
47
+ <div class="relatedPosts-link">
48
+ <a onclick="event.preventDefault(); toRandomPost();" href="javascript:void(0);" rel="external nofollow" data-pjax-state="">${this._p('random')}</a>
49
+ </div>
50
+ </div>
51
+ <div class="relatedPosts-list">`;
46
52
 
47
53
  for (let i = 0; i < Math.min(relatedPosts.length, limitNum); i++) {
48
- const cover = relatedPosts[i].cover || 'var(--default-bg-color)'
49
- const title = this.escape_html(relatedPosts[i].title)
50
- result += `<div><a href="${this.url_for(relatedPosts[i].path)}" title="${title}">`
51
- result += `<img class="cover" src="${this.url_for(cover)}" alt="cover">`
52
- result += `<div class="content is-center"><div class="title">${title}</div></div>`
53
- result += '</a></div>'
54
+ const { cover, title, path } = relatedPosts[i];
55
+ result += `
56
+ <div>
57
+ <a href="${this.url_for(path)}" title="${this.escape_html(title)}">
58
+ <img class="cover" src="${this.url_for(cover)}" alt="cover">
59
+ <div class="content is-center">
60
+ <div class="title">${this.escape_html(title)}</div>
61
+ </div>
62
+ </a>
63
+ </div>`;
54
64
  }
55
65
 
56
- result += '</div></div>'
57
- return result
58
- })
59
-
60
- function isTagRelated(tagName, TBDtags) {
61
- return TBDtags.some(function (tag) {
62
- return tagName === tag.name
63
- })
64
- }
66
+ result += `
67
+ </div>
68
+ </div>`;
69
+ return result;
70
+ });
65
71
 
66
- function findItem(arrayToSearch, attr, val) {
67
- return arrayToSearch.findIndex(function (item) {
68
- return item[attr] === val
69
- })
72
+ function isTagRelated(tagName, tags) {
73
+ return tags.some(tag => tagName === tag.name);
70
74
  }
71
75
 
72
76
  function compare(attr, dateType) {
73
- return function (a, b) {
74
- const val1 = a[attr]
75
- const val2 = b[attr]
77
+ return (a, b) => {
78
+ const val1 = a[attr];
79
+ const val2 = b[attr];
76
80
  if (val1 === val2) {
77
- if (dateType === 'created') {
78
- return b.created - a.created
79
- } else if (dateType === 'updated') {
80
- return b.updated - a.updated
81
- }
81
+ return dateType === 'created' ? b.created - a.created : b.updated - a.updated;
82
82
  }
83
- return val2 - val1
84
- }
83
+ return val2 - val1;
84
+ };
85
85
  }
@@ -1,18 +1,56 @@
1
- 'use strict'
1
+ 'use strict';
2
2
 
3
3
  const article = ([path]) => {
4
4
  const post = hexo.locals.get("posts").data.find(post => post.path === path);
5
- if (!post) {
6
- return '';
7
- }
8
- const tags = post.tags.map(tag => `<a class="article-meta__tags fancybox" href="${tag.path}" onclick="event.stopPropagation();"><span class="tags-punctuation"><i class="solitude fa-solid fa-hashtag"></i>${tag.name}</span></a>`).join('');
9
- const category = post.categories.data.length > 0 ? `<span class="article-meta sticky-warp"><span class="original">${post.categories.data[0].name}</span></span>` : '';
10
- const postCover = `<div class="post_cover"><a href="${'/' + post.path}" class="fancybox" title="${post.title}"><img class="post_bg" src="${post.cover}" alt="${post.title}"></a></div>`;
11
- const recentPostInfoTop = `<div class="recent-post-info-top"><div class="recent-post-info-top-tips">${category}</div><a class="article-title fancybox" href="${'/' + post.path}" title="${post.title}">${post.title}</a></div>`;
12
- const content = `<div class="content">${post.description ? post.description : ''}</div>`;
13
- const articleMetaWrap = `<div class="article-meta-wrap"><span class="article-meta tags">${tags}</span><span class="post-meta-date"><time datetime="${post.date}" style="display: inline;"></time></span></div>`;
14
- const recentPostInfo = `<div class="recent-post-info">${recentPostInfoTop + content + articleMetaWrap}</div>`
15
- return `<div class="recent-post-item" onclick="pjax.loadUrl('${'/' + post.path}')">${postCover + recentPostInfo}</div>`;
16
- }
17
-
18
- hexo.extend.tag.register('article', article)
5
+ if (!post) return '';
6
+
7
+ const createTagLinks = tags => tags.map(tag =>
8
+ `<a class="article-meta__tags fancybox" href="${tag.path}" onclick="event.stopPropagation();">
9
+ <span class="tags-punctuation">
10
+ <i class="solitude fa-solid fa-hashtag"></i>${tag.name}
11
+ </span>
12
+ </a>`
13
+ ).join('');
14
+
15
+ const createCategory = categories => categories.length > 0
16
+ ? `<span class="article-meta sticky-warp">
17
+ <span class="original">${categories[0].name}</span>
18
+ </span>`
19
+ : '';
20
+
21
+ const createPostCover = post =>
22
+ `<div class="post_cover">
23
+ <a href="/${post.path}" class="fancybox" title="${post.title}">
24
+ <img class="post_bg" src="${post.cover}" alt="${post.title}">
25
+ </a>
26
+ </div>`;
27
+
28
+ const createRecentPostInfoTop = (category, post) =>
29
+ `<div class="recent-post-info-top">
30
+ <div class="recent-post-info-top-tips">${category}</div>
31
+ <a class="article-title fancybox" href="/${post.path}" title="${post.title}">${post.title}</a>
32
+ </div>`;
33
+
34
+ const createContent = description =>
35
+ `<div class="content">${description || ''}</div>`;
36
+
37
+ const createArticleMetaWrap = (tags, date) =>
38
+ `<div class="article-meta-wrap">
39
+ <span class="article-meta tags">${tags}</span>
40
+ <span class="post-meta-date">
41
+ <time datetime="${date}" style="display: inline;"></time>
42
+ </span>
43
+ </div>`;
44
+
45
+ const tags = createTagLinks(post.tags);
46
+ const category = createCategory(post.categories.data);
47
+ const postCover = createPostCover(post);
48
+ const recentPostInfoTop = createRecentPostInfoTop(category, post);
49
+ const content = createContent(post.description);
50
+ const articleMetaWrap = createArticleMetaWrap(tags, post.date);
51
+ const recentPostInfo = `<div class="recent-post-info">${recentPostInfoTop + content + articleMetaWrap}</div>`;
52
+
53
+ return `<div class="recent-post-item" onclick="pjax.loadUrl('/${post.path}')">${postCover + recentPostInfo}</div>`;
54
+ };
55
+
56
+ hexo.extend.tag.register('article', article);
@@ -5,51 +5,42 @@
5
5
 
6
6
  'use strict'
7
7
 
8
- function postTabs ([name, active], content) {
9
- const tabBlock = /<!--\s*tab (.*?)\s*-->\n([\w\W\s\S]*?)<!--\s*endtab\s*-->/g
10
-
11
- const matches = []
12
- let match
13
- let tabId = 0
14
- let tabNav = ''
15
- let tabContent = ''
16
-
17
- active = Number(active) || 0
18
-
19
- while ((match = tabBlock.exec(content)) !== null) {
20
- matches.push(match[1])
21
- matches.push(match[2])
22
- }
23
-
24
- for (let i = 0; i < matches.length; i += 2) {
25
- const tabParameters = matches[i].split('@')
26
- let postContent = matches[i + 1]
27
- let tabCaption = tabParameters[0] || ''
28
- let tabIcon = tabParameters[1] || ''
29
- let tabHref = ''
30
-
31
- postContent = hexo.render.renderSync({ text: postContent, engine: 'markdown' }).trim()
32
- tabHref = (name + ' ' + tabId).toLowerCase().split(' ').join('-');
33
-
34
- ((tabCaption.length === 0) && (tabIcon.length === 0)) && (tabCaption = name + ' ' + tabId)
35
-
36
- const isOnlyicon = tabIcon.length > 0 && tabCaption.length === 0 ? ' style="text-align: center;"' : ''
37
- const icon = tabIcon.trim()
38
- tabIcon.length > 0 && (tabIcon = `<i ${isOnlyicon} class="tab solitude ${icon}"></i>`)
39
-
40
- const toTop = '<button type="button" class="tab-to-top" aria-label="scroll to top"><i class="solitude fas fa-arrow-up"></i></button>'
41
- const isActive = active === tabId ? ' active' : ''
42
- tabNav += `<li class="tab${isActive}"><button type="button" data-href="#${tabHref}">${tabIcon + tabCaption.trim()}</button></li>`
43
- tabContent += `<div class="tab-item-content${isActive}" id="${tabHref}">${postContent + toTop}</div>`
44
- tabId += 1
45
- }
46
-
47
- tabNav = `<ul class="nav-tabs">${tabNav}</ul>`
48
- tabContent = `<div class="tab-contents">${tabContent}</div>`
49
-
50
- return `<div class="tabs" id="${name.toLowerCase().split(' ').join('-')}">${tabNav + tabContent}</div>`
8
+ function postTabs([name, active], content) {
9
+ const tabBlock = /<!--\s*tab (.*?)\s*-->\n([\w\W\s\S]*?)<!--\s*endtab\s*-->/g;
10
+ const matches = [...content.matchAll(tabBlock)];
11
+
12
+ active = Number(active) || 0;
13
+
14
+ const generateTabItems = (matches, name, active) => {
15
+ return matches.map((match, tabId) => {
16
+ const [tabCaption = '', tabIcon = ''] = match[1].split('@');
17
+ const postContent = hexo.render.renderSync({ text: match[2], engine: 'markdown' }).trim();
18
+ const tabHref = `${name.toLowerCase().replace(/\s+/g, '-')}-${tabId}`;
19
+
20
+ const iconHtml = tabIcon ? `<i class="${tabIcon.trim()} tab solitude"></i>` : '';
21
+ const isActive = active === tabId ? ' active' : '';
22
+ const toTopButton = '<button type="button" class="tab-to-top" aria-label="scroll to top"><i class="solitude fas fa-arrow-up"></i></button>';
23
+
24
+ return {
25
+ nav: `<li class="tab${isActive}"><button type="button" data-href="#${tabHref}">${iconHtml}${tabCaption.trim() || `${name} ${tabId}`}</button></li>`,
26
+ content: `<div class="tab-item-content${isActive}" id="${tabHref}">${postContent}${toTopButton}</div>`
27
+ };
28
+ });
29
+ };
30
+
31
+ const tabItems = generateTabItems(matches, name, active);
32
+
33
+ const createTabStructure = (tabItems) => {
34
+ const tabNav = `<ul class="nav-tabs">${tabItems.map(item => item.nav).join('')}</ul>`;
35
+ const tabContent = `<div class="tab-contents">${tabItems.map(item => item.content).join('')}</div>`;
36
+ return { tabNav, tabContent };
37
+ };
38
+
39
+ const { tabNav, tabContent } = createTabStructure(tabItems);
40
+
41
+ return `<div class="tabs" id="${name.toLowerCase().replace(/\s+/g, '-')}">${tabNav}${tabContent}</div>`;
51
42
  }
52
43
 
53
- hexo.extend.tag.register('tabs', postTabs, { ends: true })
54
- hexo.extend.tag.register('subtabs', postTabs, { ends: true })
55
- hexo.extend.tag.register('subsubtabs', postTabs, { ends: true })
44
+ hexo.extend.tag.register('tabs', postTabs, { ends: true });
45
+ hexo.extend.tag.register('subtabs', postTabs, { ends: true });
46
+ hexo.extend.tag.register('subsubtabs', postTabs, { ends: true });
@@ -3,7 +3,7 @@
3
3
  .comment-headline
4
4
  display inline-block
5
5
  vertical-align middle
6
- font-weight 700
6
+ font-weight bold
7
7
  font-size 20px
8
8
 
9
9
  #comment-switch
@@ -31,7 +31,7 @@
31
31
  background-color #307af6
32
32
  vertical-align middle
33
33
  cursor pointer
34
- transition all .4s ease 0s
34
+ transition all .4s ease
35
35
 
36
36
  &::before
37
37
  position absolute
@@ -42,7 +42,7 @@
42
42
  border-radius 50%
43
43
  background-color #fff
44
44
  content ""
45
- transition all .4s ease 0s
45
+ transition all .4s ease
46
46
 
47
47
  &.move
48
48
  background-color #ff7242
@@ -77,6 +77,7 @@
77
77
  font-size .6rem
78
78
  color var(--efu-secondtext)
79
79
  border-radius 8px
80
+
80
81
  if hexo-config('comment.use')[1] || ',' in hexo-config('comment.use')
81
82
  &.move
82
83
  if hexo-config('comment.count')
@@ -36,7 +36,7 @@
36
36
  color var(--efu-lighttext) !important
37
37
  cursor pointer
38
38
  user-select none
39
- padding 0 12px 0 12px
39
+ padding 0 12px
40
40
  transition all .3s
41
41
  border-radius 8px
42
42
  background-color var(--efu-secondbg)
@@ -49,7 +49,6 @@
49
49
  .tk-action-icon svg
50
50
  fill var(--efu-card-bg) !important
51
51
 
52
-
53
52
  .tk-action-icon
54
53
  svg
55
54
  transition all .3s
@@ -187,7 +186,7 @@
187
186
  .tk-content
188
187
  .tk-owo-emotion
189
188
  width 3em
190
- margin 0 2px 0 2px
189
+ margin 0 2px
191
190
 
192
191
  .tk-owo-emotion,
193
192
  .twikoo
@@ -302,7 +301,7 @@
302
301
  color var(--efu-secondtext)
303
302
 
304
303
  .tk-content
305
- margin-top 0!important
304
+ margin-top 0 !important
306
305
 
307
306
  .tk-meta-input
308
307
  .el-input
@@ -350,13 +349,13 @@ img.tk-avatar-img
350
349
  border var(--style-border-always)
351
350
 
352
351
  .el-input-group__append, .el-input-group__prepend
353
- background-color var(--efu-card-bg) !important
352
+ background-color var(--efu-card-bg)
354
353
  color var(--efu-fontcolor) !important
355
354
  border 0 !important
356
355
  font-weight 700
357
356
 
358
357
  .el-input__inner
359
- background var(--efu-secondbg) !important
358
+ background-color var(--efu-secondbg) !important
360
359
  border 0 !important
361
360
  color var(--efu-fontcolor) !important
362
361
  padding-left 8px
@@ -372,7 +371,7 @@ img.tk-avatar-img
372
371
  border none
373
372
 
374
373
  .el-textarea__inner
375
- background var(--efu-secondbg) !important
374
+ background-color var(--efu-secondbg)
376
375
  color var(--efu-fontcolor) !important
377
376
  border-radius 12px !important
378
377
  min-height 100px !important
@@ -21,7 +21,6 @@
21
21
  50%
22
22
  top -16px
23
23
  opacity 1
24
- filter none
25
24
  100%
26
25
  top 0
27
26
  opacity .4
@@ -32,7 +31,6 @@
32
31
  transform translateY(-50px)
33
32
  100%
34
33
  opacity 1
35
- filter none
36
34
  transform translateY(0)
37
35
 
38
36
  @keyframes headerNoOpacity
@@ -47,7 +45,6 @@
47
45
  margin-top 50px
48
46
  100%
49
47
  opacity 1
50
- filter none
51
48
  margin-top 0
52
49
 
53
50
  @keyframes titlescale
@@ -56,7 +53,6 @@
56
53
  transform scale(.7)
57
54
  100%
58
55
  opacity 1
59
- filter none
60
56
  transform scale(1)
61
57
 
62
58
  @keyframes search_close
@@ -72,12 +68,10 @@
72
68
  opacity 0
73
69
  100%
74
70
  opacity 1
75
- filter none
76
71
 
77
72
  @keyframes to_hide
78
73
  0%
79
74
  opacity 1
80
- filter none
81
75
  100%
82
76
  opacity 0
83
77
 
@@ -99,7 +93,6 @@
99
93
  transform translateY(10px)
100
94
  100%
101
95
  opacity 1
102
- filter none
103
96
  transform translateY(0)
104
97
 
105
98
  @keyframes donate_effcet
@@ -108,13 +101,11 @@
108
101
  transform translateY(-20px)
109
102
  100%
110
103
  opacity 1
111
- filter none
112
104
  transform translateY(0)
113
105
 
114
106
  @keyframes announ_animation
115
107
  0%, 100%
116
108
  transform scale(1)
117
- filter blur(0)
118
109
  50%
119
110
  transform scale(1.2)
120
111
  filter blur(20px)
@@ -260,15 +251,9 @@
260
251
  @keyframes light_tag
261
252
  0%
262
253
  transform skewx(0)
263
- -o-transform skewx(0)
264
- -moz-transform skewx(0)
265
- -webkit-transform skewx(0)
266
254
  left -150px
267
255
  99%
268
256
  transform skewx(-25deg)
269
- -o-transform skewx(-25deg)
270
- -moz-transform skewx(-25deg)
271
- -webkit-transform skewx(-25deg)
272
257
  left 50px
273
258
 
274
259
  @keyframes floating
@@ -77,9 +77,9 @@ html
77
77
  line-height 1.15
78
78
  -webkit-text-size-adjust 100%
79
79
  text-size-adjust 100%
80
- height: 100%;
81
- font-size: 20px
82
- overflow-y: overlay
80
+ height: 100%
81
+ font-size 20px
82
+ overflow-y overlay
83
83
 
84
84
  main
85
85
  display block
@@ -146,7 +146,7 @@ hr
146
146
  box-sizing content-box
147
147
  height 0
148
148
  overflow visible
149
- display: none
149
+ display none
150
150
 
151
151
  a
152
152
  color var(--efu-fontcolor)
@@ -363,29 +363,29 @@ i.solitude
363
363
  font-synthesis style
364
364
 
365
365
  #body-wrap
366
- display: flex
367
- flex-direction: column
368
- min-height: 100vh
369
- justify-content: space-between
366
+ display flex
367
+ flex-direction column
368
+ min-height 100vh
369
+ justify-content space-between
370
370
 
371
371
  .layout
372
- display: flex
373
- margin: 0 auto
374
- padding: 0 1.5rem
372
+ display flex
373
+ margin 0 auto
374
+ padding 0 1.5rem
375
375
  width 100%
376
- max-width: 1200px
376
+ max-width 1200px
377
377
  +maxWidth768()
378
378
  padding 0
379
379
 
380
380
  &#content-inner
381
- max-width: 1400px
382
- flex-grow: 1
381
+ max-width 1400px
382
+ flex-grow 1
383
383
 
384
384
  /.hide-aside.layout
385
- max-width: 1400px
385
+ max-width 1400px
386
386
 
387
387
  > div
388
- width: 100% !important
388
+ width 100% !important
389
389
 
390
390
  > div:first-child
391
391
  width calc(100% - 300px)
@@ -419,10 +419,10 @@ i.solitude
419
419
  span.tags-punctuation
420
420
  i
421
421
  font-weight bold
422
- font-size: 12px
422
+ font-size 12px
423
423
  transition none
424
- margin-right: 2px
425
- opacity: .4
424
+ margin-right 2px
425
+ opacity .4
426
426
 
427
427
  .hide-aside #page &
428
428
  font-size 16px
@@ -27,6 +27,12 @@ figure.highlight
27
27
 
28
28
  .emphasis
29
29
  color $highlight-emphasis-light
30
+
31
+ .addition
32
+ color $highlight-inserted
33
+
34
+ .deletion
35
+ color $highlight-deleted
30
36
 
31
37
  [data-theme=dark] &
32
38
  .keyword
@@ -48,4 +54,10 @@ figure.highlight
48
54
  color $highlight-title-dark
49
55
 
50
56
  .emphasis
51
- color $highlight-emphasis-dark
57
+ color $highlight-emphasis-dark
58
+
59
+ .addition
60
+ color $highlight-inserted
61
+
62
+ .deletion
63
+ color $highlight-deleted
@@ -80,8 +80,8 @@ figure
80
80
 
81
81
  .caption
82
82
  position absolute
83
- right 2.7rem
84
- font-size 0.85em
83
+ right 3.5rem
84
+ font-size 14px
85
85
  color var(--efu-secondtext)
86
86
 
87
87
  +maxWidth768()
@@ -39,6 +39,12 @@ pre[class*='language-']
39
39
  .inserted
40
40
  color $highlight-inserted
41
41
 
42
+ .addition
43
+ color $highlight-inserted
44
+
45
+ .deletion
46
+ color $highlight-deleted
47
+
42
48
  [data-theme='dark'] &
43
49
  .keyword
44
50
  .function
@@ -77,4 +83,10 @@ pre[class*='language-']
77
83
  color $highlight-deleted
78
84
 
79
85
  .inserted
80
- color $highlight-inserted
86
+ color $highlight-inserted
87
+
88
+ .addition
89
+ color $highlight-inserted
90
+
91
+ .deletion
92
+ color $highlight-deleted
@@ -3,7 +3,7 @@
3
3
  if hexo-config('highlight.enable')
4
4
  @require diff
5
5
 
6
- #article-container
6
+ .article-container
7
7
  pre[class*='language-']
8
8
  margin 0
9
9
  overflow-x auto
@@ -1,4 +1,4 @@
1
- #article-container
1
+ .article-container
2
2
  pre[class*='language-']
3
3
  &.line-numbers
4
4
  position relative
@@ -1,4 +1,4 @@
1
- .post-content
1
+ .article-container
2
2
  overflow-wrap break-word
3
3
  +maxWidth768()
4
4
  overflow hidden
@@ -118,6 +118,7 @@
118
118
  line-height 1
119
119
  display flex
120
120
  align-items center
121
+ justify-content space-between
121
122
 
122
123
  .aside-list
123
124
  display flex
@@ -23,7 +23,7 @@ if hexo-config('index_post_list.direction') == "column"
23
23
 
24
24
  +maxWidth1300()
25
25
  margin-bottom .5rem
26
- #tag &
26
+ #tag &:first-child
27
27
  margin-top: 2.5rem
28
28
 
29
29
  +maxWidth768()
@@ -255,7 +255,7 @@ else if hexo-config('index_post_list.direction') == "row"
255
255
  flex-direction row
256
256
  width 100%
257
257
  box-shadow var(--efu-shadow-border)
258
- #tag &
258
+ #tag &:first-child
259
259
  margin-top: 2.5rem
260
260
 
261
261
  +maxWidth768()