hexo-theme-solitude 1.7.14 → 1.8.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 (41) hide show
  1. package/README.md +25 -25
  2. package/{README_zh-cn.md → README_en.md} +25 -25
  3. package/README_zh-tw.md +3 -3
  4. package/_config.yml +41 -34
  5. package/layout/includes/body/mode.pug +6 -3
  6. package/layout/includes/console.pug +1 -1
  7. package/layout/includes/footer.pug +2 -2
  8. package/layout/includes/head/config.pug +3 -36
  9. package/layout/includes/head/page_config.pug +9 -0
  10. package/layout/includes/head.pug +4 -1
  11. package/layout/includes/inject/body.pug +1 -26
  12. package/layout/includes/inject/head.pug +8 -60
  13. package/layout/includes/rightmenu.pug +2 -2
  14. package/layout/includes/widgets/page/links/banner.pug +1 -1
  15. package/layout/includes/widgets/post/postMeta.pug +18 -17
  16. package/layout/includes/widgets/third-party/comments/artalk.pug +29 -18
  17. package/layout/includes/widgets/third-party/comments/comment.pug +48 -12
  18. package/layout/includes/widgets/third-party/comments/twikoo.pug +72 -55
  19. package/layout/includes/widgets/third-party/comments/valine.pug +43 -49
  20. package/layout/includes/widgets/third-party/comments/waline.pug +44 -52
  21. package/layout/includes/widgets/third-party/news-comment/artalk.pug +57 -67
  22. package/layout/includes/widgets/third-party/news-comment/newest-comment.pug +10 -10
  23. package/layout/includes/widgets/third-party/news-comment/twikoo.pug +41 -48
  24. package/layout/includes/widgets/third-party/news-comment/valine.pug +19 -17
  25. package/layout/includes/widgets/third-party/news-comment/waline.pug +3 -3
  26. package/layout/includes/widgets/third-party/pjax.pug +1 -0
  27. package/package.json +1 -1
  28. package/plugins.yml +2 -2
  29. package/scripts/event/merge_config.js +280 -255
  30. package/scripts/filter/comment.js +13 -0
  31. package/scripts/filter/default.js +1 -1
  32. package/source/css/_comments/comment.styl +73 -12
  33. package/source/css/_comments/valine.styl +1 -1
  34. package/source/css/_highlight/index.styl +1 -0
  35. package/source/css/_tags/link.styl +7 -2
  36. package/source/css/index.styl +1 -1
  37. package/source/js/barrage_comment.js +18 -12
  38. package/source/js/main.js +42 -18
  39. package/source/js/right_menu.js +3 -3
  40. package/source/js/tw_cn.js +3 -3
  41. package/source/js/utils.js +62 -0
@@ -1,42 +1,39 @@
1
- - const { server, site, option } = theme.comment.artalk
1
+ - const { server, site, option } = theme.artalk
2
2
  - const avatarCdn = option !== null && option.gravatar && option.gravatar.mirror
3
3
  - const avatarDefault = option !== null && option.gravatar && (option.gravatar.params || option.gravatar.default)
4
4
 
5
5
  script.
6
6
  window.addEventListener('load', () => {
7
- const changeContent = (content) => {
7
+ const changeContent = content => {
8
8
  if (content === '') return content
9
-
10
9
  const replacements = [
11
10
  {regex: /<img.*?src="(.*?)"?[^\>]+>/ig, replacement: '[!{_p("console.newest_comment.image")}]'},
12
- {regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,replacement: '[!{_p("console.newest_comment.link")}]'},
11
+ {
12
+ regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,
13
+ replacement: '[!{_p("console.newest_comment.link")}]'
14
+ },
13
15
  {regex: /<pre><code>.*?<\/pre>/gi, replacement: '[!{_p("console.newest_comment.code")}]'},
14
16
  {regex: /<[^>]+>/g, replacement: ''}
15
- ];
16
-
17
- content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content);
18
-
19
- return content.length > 150 ? content.substring(0, 150) + '...' : content;
17
+ ]
18
+ content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content)
19
+ return content.length > 150 ? content.substring(0, 150) + '...' : content
20
20
  }
21
-
22
- const $asideList = document.querySelector('#card-newest-comments .aside-list')
23
-
24
- const generateHtml = array => {
25
- $asideList.innerHTML = array.length ? array.map(item => `
26
- <div class='aside-list-item'>
27
- <a onclick='pjax.loadUrl("${item.url}")' class='thumbnail'>
28
- <img src='${item.avatar}' alt='${item.nick}'>
29
- <div class='name'><span>${item.nick}</span></div>
30
- </a>
31
- <div class='content'>
32
- <a class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</a>
33
- <time class="datetime" datetime="${item.date}"></time>
34
- </div>
35
- </div>
36
- `).join('') : "!{_p('newest_comment.zero')}"
37
- window.lazyLoadInstance && window.lazyLoadInstance.update()
38
- window.pjax && window.pjax.refresh()
39
- sco && sco.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
21
+ const generateHtml = (array, asideList) => {
22
+ asideList.innerHTML = array.length ? array.map(item => `
23
+ <div class='aside-list-item'>
24
+ <a onclick='pjax.loadUrl("${item.url}")' class='thumbnail'>
25
+ <img src='${item.avatar}' alt='${item.nick}'>
26
+ <div class='name'><span>${item.nick}</span></div>
27
+ </a>
28
+ <div class='content'>
29
+ <a class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</a>
30
+ <time class="datetime" datetime="${item.date}"></time>
31
+ </div>
32
+ </div>
33
+ `).join('') : "!{_p('newest_comment.zero')}"
34
+ window.lazyLoadInstance?.update()
35
+ window.pjax?.refresh()
36
+ sco?.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
40
37
  }
41
38
 
42
39
  const getSetting = async () => {
@@ -44,55 +41,48 @@ script.
44
41
  const res = await fetch('!{server}/api/v2/conf', {method: 'GET'})
45
42
  return await res.json()
46
43
  } catch (e) {
47
- console.log(e)
44
+ console.error(e)
45
+ return null
48
46
  }
49
47
  }
50
48
 
51
- const headerList = {
52
- method: 'GET',
53
- }
54
-
55
- const searchParams = new URLSearchParams({
56
- 'site_name': "!{site}",
57
- 'limit': '6',
58
- })
59
-
60
- const getComment = async () => {
49
+ const getComment = async (asideList) => {
61
50
  try {
62
- const res = await fetch(`!{server}/api/v2/stats/latest_comments?${searchParams}`, headerList)
51
+ const searchParams = new URLSearchParams({'site_name': "!{site}", 'limit': '6'})
52
+ const res = await fetch(`!{server}/api/v2/stats/latest_comments?${searchParams}`, {method: 'GET'})
63
53
  const result = await res.json()
64
- const avatarStr = await getSetting()
65
- const {mirror, params, default: defaults} = avatarStr.frontend_conf.gravatar
54
+ const avatarConfig = await getSetting()
55
+ const {mirror, params, default: defaults} = avatarConfig.frontend_conf.gravatar
66
56
  const avatarCdn = !{avatarCdn} || mirror
67
57
  let avatarDefault = !{avatarDefault} || params || defaults
68
58
  avatarDefault = avatarDefault.startsWith('d=') ? avatarDefault : `d=${avatarDefault}`
69
- const artalk = result.data.map(function (e) {
70
- return {
71
- 'avatar': `${avatarCdn}${e.email_encrypted}?${avatarDefault}`,
72
- 'content': changeContent(e.content_marked),
73
- 'nick': e.nick,
74
- 'url': e.page_url,
75
- 'date': e.date,
76
- }
77
- })
78
- saveToLocal.set('artalk-newest-comments', artalk, !{theme.comment.newest_comment.storage})
79
- generateHtml(artalk)
59
+ const artalk = result.data.map(e => ({
60
+ avatar: `${avatarCdn}${e.email_encrypted}?${avatarDefault}`,
61
+ content: changeContent(e.content_marked),
62
+ nick: e.nick,
63
+ url: e.page_key,
64
+ date: e.date,
65
+ }))
66
+ utils.saveToLocal.set('artalk-newest-comments', artalk, !{theme.comment.newest_comment.storage})
67
+ generateHtml(artalk, asideList)
80
68
  } catch (e) {
81
- console.log(e)
82
- $asideList.textContent = "!{_p('newest_comment.error')}"
69
+ console.error(e);
70
+ asideList.textContent = "!{_p('newest_comment.error')}"
83
71
  }
84
- }
72
+ };
85
73
 
86
- const newestCommentInit = () => {
87
- if ($asideList) {
88
- const data = saveToLocal.get('artalk-newest-comments')
89
- if (data) {
90
- generateHtml(data)
91
- } else {
92
- getComment()
93
- }
74
+ const newestCommentInit = (asideList) => {
75
+ const data = utils.saveToLocal.get('artalk-newest-comments')
76
+ if (data) {
77
+ generateHtml(data, asideList)
78
+ } else {
79
+ getComment(asideList)
94
80
  }
95
81
  }
96
- newestCommentInit()
97
- utils.addGlobalFn('pjaxComplete', newestCommentInit, 'artalk_newestComment')
98
- })
82
+
83
+ const $asideList = document.querySelector('#card-newest-comments .aside-list')
84
+ if ($asideList) {
85
+ newestCommentInit($asideList)
86
+ utils.addGlobalFn('pjaxComplete', () => newestCommentInit($asideList), 'artalk_newestComment')
87
+ }
88
+ });
@@ -1,10 +1,10 @@
1
- if theme.comment.enable && theme.console_plus && theme.comment.newest_comment.enable
2
- case theme.comment.type
3
- when 'twikoo'
4
- !=partial('includes/widgets/third-party/news-comment/twikoo',{}, {cache: true})
5
- when 'waline'
6
- !=partial('includes/widgets/third-party/news-comment/waline',{}, {cache: true})
7
- when 'valine'
8
- !=partial('includes/widgets/third-party/news-comment/valine',{}, {cache: true})
9
- when 'artalk'
10
- !=partial('includes/widgets/third-party/news-comment/artalk',{}, {cache: true})
1
+ if theme.comment.use && theme.console_plus && theme.comment.newest_comment.enable
2
+ case theme.comment.use[0]
3
+ when 'Twikoo'
4
+ !=partial('includes/widgets/third-party/news-comment/twikoo', {}, {cache: true})
5
+ when 'Waline'
6
+ !=partial('includes/widgets/third-party/news-comment/waline', {}, {cache: true})
7
+ when 'Valine'
8
+ !=partial('includes/widgets/third-party/news-comment/valine', {}, {cache: true})
9
+ when 'Artalk'
10
+ !=partial('includes/widgets/third-party/news-comment/artalk', {}, {cache: true})
@@ -1,8 +1,7 @@
1
1
  script.
2
2
  window.addEventListener('load', () => {
3
3
  const changeContent = (content) => {
4
- if (content === '') return content;
5
-
4
+ if (!content) return '';
6
5
  const replacements = [
7
6
  {regex: /<img.*?src="(.*?)"?[^\>]+>/ig, replacement: '[!{_p("console.newest_comment.image")}]'},
8
7
  {
@@ -11,65 +10,59 @@ script.
11
10
  },
12
11
  {regex: /<pre><code>.*?<\/pre>/gi, replacement: '[!{_p("console.newest_comment.code")}]'},
13
12
  {regex: /<[^>]+>/g, replacement: ''}
14
- ];
15
- content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content);
16
-
17
- return content.length > 150 ? content.substring(0, 150) + '...' : content;
13
+ ]
14
+ content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content)
15
+ return content.length > 150 ? `${content.substring(0, 150)}...` : content
18
16
  }
19
-
20
- const $asideList = document.querySelector('#card-newest-comments .aside-list')
21
-
22
- const getComment = () => {
17
+ const generateHtml = (array) => {
18
+ const html = array.map(item => `
19
+ <div class='aside-list-item'>
20
+ <a onclick='pjax.loadUrl("${item.url}")' class='thumbnail'>
21
+ <img src='${item.avatar}' alt='${item.nick}'>
22
+ <div class='name'><span>${item.nick}</span></div>
23
+ </a>
24
+ <div class='content'>
25
+ <a class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</a>
26
+ <time class="datetime" datetime="${item.date}"></time>
27
+ </div>
28
+ </div>
29
+ `).join('')
30
+ document.querySelector('#card-newest-comments .aside-list').innerHTML = array.length ? html : "!{_p('newest_comment.zero')}"
31
+ window.lazyLoadInstance?.update()
32
+ window.pjax?.refresh()
33
+ sco?.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
34
+ }
35
+ const getComment = async () => {
23
36
  const runTwikoo = () => {
24
37
  twikoo.getRecentComments({
25
- envId: GLOBAL_CONFIG.comment.url,
38
+ envId: '!{theme.twikoo.envId}',
26
39
  region: '',
27
40
  pageSize: 6,
28
41
  includeReply: true
29
- }).then(function (res) {
42
+ }).then(res => {
30
43
  const twikooArray = res.map(e => ({
31
- 'content': changeContent(e.comment),
32
- 'avatar': e.avatar,
33
- 'nick': e.nick,
34
- 'url': `${e.url}#${e.id}`,
35
- 'date': new Date(e.created).toISOString()
44
+ content: changeContent(e.comment),
45
+ avatar: e.avatar,
46
+ nick: e.nick,
47
+ url: `${e.url}#${e.id}`,
48
+ date: new Date(e.created).toString()
36
49
  }))
37
- saveToLocal.set('twikoo-newest-comment', twikooArray, !{theme.comment.newest_comment.storage})
50
+ utils.saveToLocal.set('twikoo-newest-comment', twikooArray, !{theme.comment.newest_comment.storage})
38
51
  generateHtml(twikooArray)
39
- }).catch(function (err) {
40
- console.error(err)
41
- $asideList.textContent = "!{_p('newest_comment.error')}"
52
+ }).catch((err) => {
53
+ console.error(err);
54
+ document.querySelector('#card-newest-comments .aside-list').textContent = "!{_p('newest_comment.error')}"
42
55
  })
43
56
  }
44
- runTwikoo()
45
- }
46
-
47
- const generateHtml = array => {
48
- $asideList.innerHTML = array.length ? array.map(item => `
49
- <div class='aside-list-item'>
50
- <a onclick='pjax.loadUrl("${item.url}")' class='thumbnail'>
51
- <img src='${item.avatar}' alt='${item.nick}'>
52
- <div class='name'><span>${item.nick}</span></div>
53
- </a>
54
- <div class='content'>
55
- <a class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</a>
56
- <time class="datetime" datetime="${item.date}"></time>
57
- </div>
58
- </div>
59
- `).join('') : "!{_p('newest_comment.zero')}"
60
- window.lazyLoadInstance && window.lazyLoadInstance.update()
61
- window.pjax && window.pjax.refresh()
62
- sco && sco.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
63
- }
64
-
65
- const newestCommentInit = () => {
66
- const data = saveToLocal.get('twikoo-newest-comment')
67
- if (data) {
68
- generateHtml(data)
57
+ if (typeof twikoo === 'object') {
58
+ runTwikoo()
69
59
  } else {
70
- getComment()
60
+ utils.getScript('!{url_for(theme.cdn.twikoo)}').then(runTwikoo)
71
61
  }
72
62
  }
73
-
63
+ const newestCommentInit = () => {
64
+ const data = utils.saveToLocal.get('twikoo-newest-comment')
65
+ data ? generateHtml(data) : getComment()
66
+ }
74
67
  newestCommentInit()
75
68
  })
@@ -5,7 +5,10 @@ script.
5
5
 
6
6
  const replacements = [
7
7
  {regex: /<img.*?src="(.*?)"?[^\>]+>/ig, replacement: '[!{_p("console.newest_comment.image")}]'},
8
- {regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi, replacement: '[!{_p("console.newest_comment.link")}]'},
8
+ {
9
+ regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,
10
+ replacement: '[!{_p("console.newest_comment.link")}]'
11
+ },
9
12
  {regex: /```[\s\S]*?```/g, replacement: '[!{_p("console.newest_comment.code")}]'},
10
13
  {regex: /<[^>]+>/g, replacement: ""}
11
14
  ];
@@ -17,7 +20,7 @@ script.
17
20
 
18
21
  const $asideList = document.querySelector('#card-newest-comments .aside-list')
19
22
  const newestCommentInit = () => {
20
- const data = saveToLocal.get('valine-newest-comment')
23
+ const data = utils.saveToLocal.get('valine-newest-comment')
21
24
  if (data) {
22
25
  generateHtml(data)
23
26
  } else {
@@ -26,17 +29,16 @@ script.
26
29
  }
27
30
 
28
31
  const getComment = async () => {
29
- try {
30
- const settings = {
31
- "method": "GET",
32
- "headers": {
33
- "X-LC-Id": '!{theme.comment.valine.appId}',
34
- "X-LC-Key": '!{theme.comment.valine.appKey}',
35
- "Content-Type": "application/json"
36
- },
37
- }
38
-
39
- const res = await fetch('!{theme.comment.valine.serverURLs}/1.1/classes/Comment?limit=8&order=-createdAt', settings)
32
+ const settings = {
33
+ "method": "GET",
34
+ "headers": {
35
+ "X-LC-Id": '!{theme.valine.appId}',
36
+ "X-LC-Key": '!{theme.valine.appKey}',
37
+ "Content-Type": "application/json"
38
+ },
39
+ }
40
+ 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 => {
40
42
  const result = await res.json()
41
43
  window.res = result
42
44
  const valineArray = result.results.map(e => {
@@ -48,12 +50,12 @@ script.
48
50
  'date': e.updatedAt || e.createdAt
49
51
  }
50
52
  })
51
- saveToLocal.set('valine-newest-comment', valineArray, !{theme.comment.newest_comment.storage})
53
+ utils.saveToLocal.set('valine-newest-comment', valineArray, !{theme.comment.newest_comment.storage})
52
54
  generateHtml(valineArray)
53
- } catch (err) {
54
- console.error(err)
55
+ }).catch(error => {
56
+ console.error(error);
55
57
  $asideList.textContent = "!{_p('newest_comment.error')}"
56
- }
58
+ })
57
59
  }
58
60
 
59
61
  const generateHtml = array => {
@@ -17,7 +17,7 @@ script.
17
17
 
18
18
  const $asideList = document.querySelector('#card-newest-comments .aside-list')
19
19
  const newestCommentInit = () => {
20
- const data = saveToLocal.get('waline-newest-comment')
20
+ const data = utils.saveToLocal.get('waline-newest-comment')
21
21
  if (data) {
22
22
  generateHtml(data)
23
23
  } else {
@@ -27,7 +27,7 @@ script.
27
27
 
28
28
  const getComment = async () => {
29
29
  try {
30
- const res = await fetch('!{theme.comment.waline.envId}/api/comment?type=recent&count=8', {method: 'GET'})
30
+ const res = await fetch('!{theme.waline.envId}/api/comment?type=recent&count=8', {method: 'GET'})
31
31
  const result = await res.json()
32
32
  const walineArray = result.data.map(e => {
33
33
  return {
@@ -38,7 +38,7 @@ script.
38
38
  'date': e.time || e.insertedAt
39
39
  }
40
40
  })
41
- saveToLocal.set('waline-newest-comment', walineArray, !{theme.comment.newest_comment.storage})
41
+ utils.saveToLocal.set('waline-newest-comment', walineArray, !{theme.comment.newest_comment.storage})
42
42
  generateHtml(walineArray)
43
43
  } catch (err) {
44
44
  console.error(err)
@@ -6,6 +6,7 @@ script.
6
6
  'meta[name="description"]',
7
7
  '#js-pjax',
8
8
  'meta[property^="og:"]',
9
+ '#config-diff'
9
10
  ]
10
11
 
11
12
  const pjax = new Pjax({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hexo-theme-solitude",
3
- "version": "1.7.14",
3
+ "version": "1.8.1",
4
4
  "description": "A beautiful, powerful, and efficient Hexo theme developed by the efu.",
5
5
  "main": "package.json",
6
6
  "scripts": {
package/plugins.yml CHANGED
@@ -29,11 +29,11 @@ valine:
29
29
  version: 1.5.1
30
30
  artalk_css:
31
31
  name: artalk
32
- file: Artalk.css
32
+ file: dist/Artalk.css
33
33
  version: 2.8.4
34
34
  artalk_js:
35
35
  name: artalk
36
- file: Artalk.js
36
+ file: dist/Artalk.js
37
37
  version: 2.8.4
38
38
  katex:
39
39
  name: katex