hexo-theme-solitude 1.10.6 → 1.11.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.
- package/.github/FUNDING.yml +3 -3
- package/_config.yml +28 -0
- package/languages/default.yml +5 -0
- package/languages/en.yml +5 -0
- package/languages/zh-CN.yml +5 -0
- package/languages/zh-TW.yml +5 -0
- package/layout/includes/console.pug +5 -1
- package/layout/includes/head/config.pug +5 -0
- package/layout/includes/inject/head.pug +12 -1
- package/layout/includes/page/recentcomment.pug +16 -0
- package/layout/includes/page/says.pug +4 -0
- package/layout/includes/widgets/page/about/other.pug +47 -20
- package/layout/includes/widgets/page/banner.pug +2 -2
- package/layout/includes/widgets/page/message/artalk.pug +45 -0
- package/layout/includes/widgets/page/message/js.pug +5 -1
- package/layout/includes/widgets/page/message/twikoo.pug +19 -16
- package/layout/includes/widgets/page/message/valine.pug +12 -3
- package/layout/includes/widgets/page/message/waline.pug +42 -0
- package/layout/includes/widgets/page/recentcomment/artalk.pug +78 -0
- package/layout/includes/widgets/page/recentcomment/twikoo.pug +83 -0
- package/layout/includes/widgets/page/recentcomment/valine.pug +79 -0
- package/layout/includes/widgets/page/recentcomment/waline.pug +72 -0
- package/layout/includes/widgets/third-party/comments/artalk.pug +1 -1
- package/layout/includes/widgets/third-party/news-comment/valine.pug +19 -17
- package/layout/includes/widgets/third-party/news-comment/waline.pug +3 -3
- package/layout/page.pug +2 -0
- package/package.json +1 -1
- package/plugins.yml +3 -3
- package/scripts/event/merge_config.js +7 -0
- package/source/css/_comments/comment.styl +1 -1
- package/source/css/_comments/valine.styl +1 -0
- package/source/css/_global/index.styl +9 -1
- package/source/css/_layout/console.styl +11 -0
- package/source/css/_layout/footer.styl +4 -1
- package/source/css/_layout/other.styl +2 -1
- package/source/css/_page/_about/skills.styl +1 -1
- package/source/css/_page/_about/statistic.styl +1 -1
- package/source/css/_page/_home/home-top.styl +3 -0
- package/source/css/_page/index.styl +3 -0
- package/source/css/_page/other.styl +1 -6
- package/source/css/_page/recentcomment.styl +85 -0
- package/source/css/_page/says.styl +5 -13
- package/source/js/main.js +36 -5
@@ -0,0 +1,83 @@
|
|
1
|
+
- const {envId} = theme.twikoo
|
2
|
+
|
3
|
+
script(pjax).
|
4
|
+
(async () => {
|
5
|
+
document.querySelector('#comments-page').textContent = `#{__("loading")}`
|
6
|
+
const emojiReg = /<img class="tk-owo-emotion" [^>]+>/g
|
7
|
+
let cache = utils.saveToLocal.get('twikoo-recent-comments')
|
8
|
+
if (cache) {
|
9
|
+
setHtml(document.querySelector('#comments-page'), cache)
|
10
|
+
return
|
11
|
+
}
|
12
|
+
let ls = []
|
13
|
+
|
14
|
+
await fetch('!{envId}', {
|
15
|
+
method: "POST",
|
16
|
+
body: JSON.stringify({
|
17
|
+
"event": "GET_RECENT_COMMENTS",
|
18
|
+
"includeReply": true,
|
19
|
+
"pageSize": !{limit}
|
20
|
+
}),
|
21
|
+
headers: {'Content-Type': 'application/json'}
|
22
|
+
}).then(res => res.json()).then(async ({data}) => {
|
23
|
+
for (const i of data) {
|
24
|
+
if (i.avatar === undefined) i.avatar = '!{avatar}/avatar/d615d5793929e8c7d70eab5f00f7f5f1?d=mp'
|
25
|
+
let title = ''
|
26
|
+
if (i.url) {
|
27
|
+
await fetch(i.url).then(res => res.text()).then(html => {
|
28
|
+
const parser = new DOMParser()
|
29
|
+
const doc = parser.parseFromString(html, 'text/html')
|
30
|
+
title = doc.querySelector('title').innerText
|
31
|
+
}).catch(() => {
|
32
|
+
title = i.url
|
33
|
+
})
|
34
|
+
}
|
35
|
+
if (title.indexOf('|') > 0) {
|
36
|
+
title = title.split('|')[0]
|
37
|
+
}
|
38
|
+
ls.push({
|
39
|
+
avatar: i.avatar,
|
40
|
+
nick: i.nick,
|
41
|
+
title: title,
|
42
|
+
content: i.comment,
|
43
|
+
url: i.url + '#' + i.id,
|
44
|
+
time: i.created
|
45
|
+
})
|
46
|
+
}
|
47
|
+
setHtml(document.querySelector('#comments-page'), ls)
|
48
|
+
utils.saveToLocal.set('twikoo-recent-comments', ls, !{cache})
|
49
|
+
});
|
50
|
+
|
51
|
+
function setHtml(el, data) {
|
52
|
+
el.innerHTML = data.map(i => `
|
53
|
+
<div class="comment-card" title="${i.title}" onclick="pjax.loadUrl('${i.url}')">
|
54
|
+
<div class="comment-info">
|
55
|
+
<img src="${i.avatar}" class="nolazyload" alt="${i.nick}">
|
56
|
+
<div>
|
57
|
+
<span class="comment-user">${i.nick}</span>
|
58
|
+
</div>
|
59
|
+
<time class="comment-time" datetime="${new Date(i.time)}"></time>
|
60
|
+
</div>
|
61
|
+
<div class="comment-content">${formatContent(i.content)}</div>
|
62
|
+
<div class="comment-title">
|
63
|
+
<i class="solitude st-chat-fill"></i>
|
64
|
+
${i.title}</div>
|
65
|
+
</div>
|
66
|
+
`).join('')
|
67
|
+
if (typeof sco !== 'undefined') sco.changeTimeFormat(document.querySelectorAll('.comment-time'))
|
68
|
+
else {
|
69
|
+
document.addEventListener('pjax:complete', () => sco.changeTimeFormat(document.querySelectorAll('.comment-time')))
|
70
|
+
document.addEventListener('DOMContentLoaded', () => sco.changeTimeFormat(document.querySelectorAll('.comment-time')))
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
function formatContent(content) {
|
75
|
+
content = content.replace(emojiReg, '!{__("console.newest_comment.emoji")}')
|
76
|
+
content = content.replace(/<\/*br>|[\s\uFEFF\xA0]+/g, '');
|
77
|
+
content = content.replace(/<img.*?>/g, '[!{__("console.newest_comment.image")}]');
|
78
|
+
content = content.replace(/<a.*?>.*?<\/a>/g, '[!{__("console.newest_comment.link")}]');
|
79
|
+
content = content.replace(/<pre.*?>.*?<\/pre>/g, '[!{__("console.newest_comment.code")}]');
|
80
|
+
content = content.replace(/<.*?>/g, '');
|
81
|
+
return content
|
82
|
+
}
|
83
|
+
})()
|
@@ -0,0 +1,79 @@
|
|
1
|
+
- const { appId, appKey, serverURLs } = theme.valine
|
2
|
+
|
3
|
+
script(pjax).
|
4
|
+
(async () => {
|
5
|
+
document.querySelector('#comments-page').textContent = `#{__("loading")}`
|
6
|
+
const emojiReg = /:[a-z0-9_\u4e00-\u9fa5]+:/g
|
7
|
+
let cache = utils.saveToLocal.get('valine-recent-comments')
|
8
|
+
if (cache) {
|
9
|
+
setHtml(document.querySelector('#comments-page'), cache)
|
10
|
+
return
|
11
|
+
}
|
12
|
+
let ls = []
|
13
|
+
if (typeof md5 === "undefined") await utils.getScript('!{url_for(theme.cdn.blueimp_md5)}')
|
14
|
+
await fetch('!{serverURLs}/1.1/classes/Comment?limit=8&order=-createdAt', {
|
15
|
+
method: "GET",
|
16
|
+
headers: {
|
17
|
+
"X-LC-Id": '!{appId}',
|
18
|
+
"X-LC-Key": '!{appKey}',
|
19
|
+
"Content-Type": "application/json"
|
20
|
+
}
|
21
|
+
}).then(async res => res.json()).then(async results => {
|
22
|
+
for (const i of results.results) {
|
23
|
+
let title = ''
|
24
|
+
if (i.url) {
|
25
|
+
await fetch(i.url).then(res => res.text()).then(html => {
|
26
|
+
const parser = new DOMParser()
|
27
|
+
const doc = parser.parseFromString(html, 'text/html')
|
28
|
+
title = doc.querySelector('title').innerText
|
29
|
+
}).catch(() => {
|
30
|
+
title = i.url
|
31
|
+
})
|
32
|
+
}
|
33
|
+
if (title.indexOf('|') > 0) {
|
34
|
+
title = title.split('|')[0]
|
35
|
+
}
|
36
|
+
ls.push({
|
37
|
+
title: title,
|
38
|
+
url: i.url,
|
39
|
+
nick: i.nick,
|
40
|
+
avatar: '!{avatar}' + '/avatar/' + md5(i.mail.trim().toLowerCase()),
|
41
|
+
time: i.createdAt,
|
42
|
+
content: formatContent(i.comment)
|
43
|
+
})
|
44
|
+
}
|
45
|
+
setHtml(document.querySelector('#comments-page'), ls)
|
46
|
+
utils.saveToLocal.set('valine-recent-comments', ls, !{cache})
|
47
|
+
})
|
48
|
+
|
49
|
+
function setHtml(el, data) {
|
50
|
+
el.innerHTML = data.map(i => `
|
51
|
+
<div class="comment-card" title="${i.title}" onclick="pjax.loadUrl('${i.url}')">
|
52
|
+
<div class="comment-info">
|
53
|
+
<img src="${i.avatar}" class="nolazyload" alt="${i.nick}">
|
54
|
+
<div>
|
55
|
+
<span class="comment-user">${i.nick}</span>
|
56
|
+
</div>
|
57
|
+
<time class="comment-time" datetime="${i.time}"></time>
|
58
|
+
</div>
|
59
|
+
<div class="comment-content">${i.content}</div>
|
60
|
+
<div class="comment-title">
|
61
|
+
<i class="solitude st-chat-fill"></i>
|
62
|
+
${i.title}</div>
|
63
|
+
</div>
|
64
|
+
`).join('')
|
65
|
+
if (typeof sco !== 'undefined') sco.changeTimeFormat(document.querySelectorAll('.comment-time'))
|
66
|
+
else {
|
67
|
+
document.addEventListener('pjax:complete', () => sco.changeTimeFormat(document.querySelectorAll('.comment-time')))
|
68
|
+
document.addEventListener('DOMContentLoaded', () => sco.changeTimeFormat(document.querySelectorAll('.comment-time')))
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
function formatContent(content) {
|
73
|
+
content = content.replace(emojiReg, '[!{__("console.newest_comment.emoji")}]')
|
74
|
+
content = content.replace(/!\[.*?\]\((.*?)\)/g, '[!{__("console.newest_comment.image")}]')
|
75
|
+
content = content.replace(/\[.*?\]\((.*?)\)/g, '[!{__("console.newest_comment.link")}]')
|
76
|
+
content = content.replace(/```.*?```/g, '[!{__("console.newest_comment.code")}]')
|
77
|
+
return content
|
78
|
+
}
|
79
|
+
})()
|
@@ -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(
|
44
|
+
artalkItem.setDarkMode(isDark)
|
45
45
|
}
|
46
46
|
utils.addGlobalFn('themeChange', artalkChangeMode, 'artalk')
|
47
47
|
if ('!{use[0]}' === 'Artalk' || !{lazyload}) {
|
@@ -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(
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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=
|
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,9 +37,9 @@ 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})
|
44
44
|
generateHtml(walineArray)
|
45
45
|
}).catch(error => {
|
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
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.
|
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.
|
34
|
+
version: 2.8.6
|
35
35
|
artalk_js:
|
36
36
|
name: artalk
|
37
37
|
file: dist/Artalk.js
|
38
|
-
version: 2.8.
|
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: {
|
@@ -422,4 +422,12 @@ span.tags-punctuation::before
|
|
422
422
|
|
423
423
|
#post-info &
|
424
424
|
font-size 14px
|
425
|
-
line-height 32px
|
425
|
+
line-height 32px
|
426
|
+
|
427
|
+
if hexo-config('memorial.enable')
|
428
|
+
.memorial
|
429
|
+
-webkit-filter grayscale(100%)
|
430
|
+
-moz-filter grayscale(100%)
|
431
|
+
-ms-filter grayscale(100%)
|
432
|
+
-o-filter grayscale(100%)
|
433
|
+
filter grayscale(100%)
|
@@ -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
|
@@ -104,6 +113,8 @@
|
|
104
113
|
font-size 36px
|
105
114
|
font-weight 700
|
106
115
|
line-height 1
|
116
|
+
display flex
|
117
|
+
align-items center
|
107
118
|
|
108
119
|
.aside-list-item
|
109
120
|
.thumbnail
|
@@ -135,7 +135,7 @@
|
|
135
135
|
.footer-title-group
|
136
136
|
display flex
|
137
137
|
align-items center
|
138
|
-
margin
|
138
|
+
margin .5rem 0 .7rem 8px
|
139
139
|
|
140
140
|
a
|
141
141
|
margin-left 8px
|
@@ -197,6 +197,9 @@
|
|
197
197
|
padding 0 8px
|
198
198
|
margin 0 4px
|
199
199
|
|
200
|
+
.footer-bar-link
|
201
|
+
margin 0
|
202
|
+
|
200
203
|
.footer-bar-link
|
201
204
|
margin 0 4px
|
202
205
|
color var(--efu-fontcolor)
|
@@ -13,7 +13,7 @@ span.tags-punctuation
|
|
13
13
|
color var(--efu-gray)
|
14
14
|
font-size 14px;
|
15
15
|
position absolute
|
16
|
-
bottom
|
16
|
+
bottom 1rem
|
17
17
|
left 2rem
|
18
18
|
|
19
19
|
+maxWidth768()
|
@@ -22,6 +22,7 @@ span.tags-punctuation
|
|
22
22
|
a
|
23
23
|
color var(--efu-gray)
|
24
24
|
border none
|
25
|
+
margin-left 4px
|
25
26
|
|
26
27
|
&:hover
|
27
28
|
color var(--efu-main)
|
@@ -132,11 +132,6 @@ div#banners
|
|
132
132
|
font-weight 700
|
133
133
|
box-shadow var(--efu-shadow-blackdeep)
|
134
134
|
|
135
|
-
#page &
|
136
|
-
+maxWidth768()
|
137
|
-
width 50px
|
138
|
-
height 50px
|
139
|
-
|
140
135
|
&:nth-child(even)
|
141
136
|
margin-top 1rem
|
142
137
|
transform translate(-60px)
|
@@ -224,7 +219,7 @@ div#banners
|
|
224
219
|
|
225
220
|
.banner-button-group
|
226
221
|
position absolute
|
227
|
-
bottom
|
222
|
+
bottom 1rem
|
228
223
|
right 2rem
|
229
224
|
|
230
225
|
.banner-button
|
@@ -0,0 +1,85 @@
|
|
1
|
+
div#comments-page
|
2
|
+
display flex
|
3
|
+
flex-wrap wrap
|
4
|
+
gap 12px
|
5
|
+
min-height 100px
|
6
|
+
width 100%
|
7
|
+
margin-top .5rem
|
8
|
+
|
9
|
+
.comment-card
|
10
|
+
position relative
|
11
|
+
width calc(100% / 3 - 8px)
|
12
|
+
background var(--efu-card-bg)
|
13
|
+
border-radius 12px
|
14
|
+
border var(--style-border-always)
|
15
|
+
padding 14px
|
16
|
+
cursor pointer
|
17
|
+
transition .3s
|
18
|
+
overflow hidden
|
19
|
+
gap 8px
|
20
|
+
display flex
|
21
|
+
flex-direction column
|
22
|
+
|
23
|
+
+maxWidth900()
|
24
|
+
width calc(100% / 2 - 6px)
|
25
|
+
|
26
|
+
+maxWidth768()
|
27
|
+
width 100%
|
28
|
+
|
29
|
+
&:hover
|
30
|
+
border-color var(--style-border-hover-always)
|
31
|
+
|
32
|
+
.comment-info
|
33
|
+
display flex
|
34
|
+
align-items center
|
35
|
+
gap 8px
|
36
|
+
border-bottom var(--style-border-always)
|
37
|
+
padding-bottom 8px
|
38
|
+
|
39
|
+
div
|
40
|
+
display flex
|
41
|
+
flex-direction column
|
42
|
+
line-height 1.5
|
43
|
+
|
44
|
+
.comment-article, .comment-content
|
45
|
+
transition .3s
|
46
|
+
overflow hidden
|
47
|
+
text-overflow ellipsis
|
48
|
+
display -webkit-box
|
49
|
+
-webkit-box-orient vertical
|
50
|
+
-webkit-line-clamp 2
|
51
|
+
line-height 1.7
|
52
|
+
font-size 14px
|
53
|
+
|
54
|
+
.comment-title
|
55
|
+
font-size 12px
|
56
|
+
color var(--efu-secondtext)
|
57
|
+
margin-top auto
|
58
|
+
transition .3s
|
59
|
+
overflow hidden
|
60
|
+
text-overflow ellipsis
|
61
|
+
display -webkit-box
|
62
|
+
-webkit-box-orient vertical
|
63
|
+
-webkit-line-clamp 1
|
64
|
+
line-height 1
|
65
|
+
opacity .6
|
66
|
+
padding-top 8px
|
67
|
+
|
68
|
+
i
|
69
|
+
font-size 12px
|
70
|
+
line-height 12px
|
71
|
+
|
72
|
+
#comments-page .comment-info img
|
73
|
+
width 30px
|
74
|
+
height 30px
|
75
|
+
object-fit cover
|
76
|
+
border-radius 30px
|
77
|
+
margin 0
|
78
|
+
|
79
|
+
span.comment-user
|
80
|
+
font-weight 700
|
81
|
+
|
82
|
+
time.comment-time
|
83
|
+
font-size 12px
|
84
|
+
color var(--efu-secondtext)
|
85
|
+
margin-left auto
|