mirror of
https://github.com/KivotosRailway/website.git
synced 2026-11-04 03:08:00 +09:00
Add solitude
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
- const { server, site, option } = theme.artalk
|
||||
- const avatarCdn = theme.comment.avatar
|
||||
|
||||
script(pjax).
|
||||
(() => {
|
||||
const changeContent = content => {
|
||||
if (content === '') return content;
|
||||
const replacements = [
|
||||
{
|
||||
regex: /<img.*?src="(.*?)"?[^\>]+>/ig,
|
||||
replacement: '[!{_p("console.newest_comment.image")}]'
|
||||
},
|
||||
{
|
||||
regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,
|
||||
replacement: '[!{_p("console.newest_comment.link")}]'
|
||||
},
|
||||
{
|
||||
regex: /<pre><code>.*?<\/pre>/gi,
|
||||
replacement: '[!{_p("console.newest_comment.code")}]'
|
||||
},
|
||||
{
|
||||
regex: /<[^>]+>/g,
|
||||
replacement: ''
|
||||
}
|
||||
];
|
||||
content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content);
|
||||
return content.length > 150 ? content.substring(0, 100) + '...' : content;
|
||||
};
|
||||
|
||||
const generateHtml = (array, asideList) => {
|
||||
asideList.innerHTML = array.length ? array.map(item => `
|
||||
<div class='aside-list-item'>
|
||||
<div class='thumbnail'>
|
||||
<img src='${item.avatar}' alt='${item.nick}'>
|
||||
</div>
|
||||
<div class='content'>
|
||||
<div class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</div>
|
||||
<time class="datetime" datetime="${item.date}"></time>
|
||||
</div>
|
||||
</div>
|
||||
`).join('') : "!{_p('newest_comment.zero')}";
|
||||
window.lazyLoadInstance?.update();
|
||||
window.pjax?.refresh();
|
||||
sco?.changeTimeFormat(document.querySelectorAll('.aside-list-item time'));
|
||||
};
|
||||
|
||||
const getSetting = async () => {
|
||||
try {
|
||||
const res = await fetch('!{server}/api/v2/conf', {method: 'GET'});
|
||||
return await res.json();
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const getComment = async (asideList) => {
|
||||
const searchParams = new URLSearchParams({'site_name': "!{site}", 'limit': '6'});
|
||||
await fetch(`!{server}/api/v2/stats/latest_comments?${searchParams}`, {method: 'GET'}).then(async res => {
|
||||
const result = await res.json();
|
||||
const avatarConfig = await getSetting();
|
||||
const avatarCdn = '!{avatarCdn}' + '/avatar/';
|
||||
const params = avatarConfig?.gravatar?.params || '';
|
||||
const artalk = result.data.map(e => ({
|
||||
avatar: avatarCdn + e.email_encrypted + '?' + params,
|
||||
content: changeContent(e.content_marked),
|
||||
nick: e.nick,
|
||||
url: e.page_key + `#atk-comment-${e.id}`,
|
||||
date: e.date,
|
||||
})).slice(0, !{limit});
|
||||
utils.saveToLocal.set('artalk-newest-comments', artalk, !{theme.comment.newest_comment.storage});
|
||||
generateHtml(artalk, asideList);
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
asideList.textContent = "!{_p('newest_comment.error')}";
|
||||
});
|
||||
};
|
||||
|
||||
const newestCommentInit = (asideList) => {
|
||||
if (!asideList) return;
|
||||
const data = utils.saveToLocal.get('artalk-newest-comments');
|
||||
if (data) {
|
||||
generateHtml(data, asideList);
|
||||
} else {
|
||||
getComment(asideList);
|
||||
}
|
||||
};
|
||||
|
||||
const $asideList = document.querySelector('.card-recent-comment .aside-list');
|
||||
window.addEventListener('DOMContentLoaded', () => newestCommentInit($asideList), false)
|
||||
window.addEventListener('pjax:complete', () => newestCommentInit(document.querySelector('.card-recent-comment .aside-list')), false);
|
||||
})();
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
- var limit = theme.aside.newest_comment.limit ? theme.aside.newest_comment.limit : 5
|
||||
if theme.comment.use
|
||||
case theme.comment.use[0]
|
||||
when 'Twikoo'
|
||||
!=partial('includes/widgets/third-party/news-comment/twikoo', {limit}, {cache: true})
|
||||
when 'Waline'
|
||||
!=partial('includes/widgets/third-party/news-comment/waline', {limit}, {cache: true})
|
||||
when 'Valine'
|
||||
!=partial('includes/widgets/third-party/news-comment/valine', {limit}, {cache: true})
|
||||
when 'Artalk'
|
||||
!=partial('includes/widgets/third-party/news-comment/artalk', {limit}, {cache: true})
|
||||
@@ -0,0 +1,69 @@
|
||||
script.
|
||||
(() => {
|
||||
const changeContent = (content) => {
|
||||
if (!content) return '';
|
||||
const replacements = [
|
||||
{regex: /<img.*?src="(.*?)"?[^\>]+>/ig, replacement: '[!{_p("console.newest_comment.image")}]'},
|
||||
{
|
||||
regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,
|
||||
replacement: '[!{_p("console.newest_comment.link")}]'
|
||||
},
|
||||
{regex: /<pre><code>.*?<\/pre>/gi, replacement: '[!{_p("console.newest_comment.code")}]'},
|
||||
{regex: /<[^>]+>/g, replacement: ''}
|
||||
]
|
||||
content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content)
|
||||
return content.length > 150 ? `${content.substring(0, 100)}...` : content
|
||||
}
|
||||
const generateHtml = (array) => {
|
||||
const html = array.map(item => `
|
||||
<div class='aside-list-item'>
|
||||
<div class='thumbnail'>
|
||||
<img src='${item.avatar}' alt='${item.nick}'>
|
||||
</div>
|
||||
<div class='content'>
|
||||
<div class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</div>
|
||||
<time class="datetime" datetime="${item.date}"></time>
|
||||
</div>
|
||||
</div>
|
||||
`).join('')
|
||||
document.querySelector('.card-recent-comment .aside-list').innerHTML = array.length ? html : "!{_p('newest_comment.zero')}"
|
||||
window.lazyLoadInstance?.update()
|
||||
window.pjax?.refresh()
|
||||
sco?.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
|
||||
}
|
||||
const getComment = async () => {
|
||||
const runTwikoo = () => {
|
||||
twikoo.getRecentComments({
|
||||
envId: '!{theme.twikoo.envId}',
|
||||
region: '',
|
||||
pageSize: !{limit},
|
||||
includeReply: true
|
||||
}).then(res => {
|
||||
const twikooArray = res.map(e => ({
|
||||
content: changeContent(e.comment),
|
||||
avatar: e.avatar,
|
||||
nick: e.nick,
|
||||
url: `${e.url}#${e.id}`,
|
||||
date: new Date(e.created).toString()
|
||||
})).slice(0, 6)
|
||||
utils.saveToLocal.set('twikoo-newest-comment', twikooArray, !{theme.comment.newest_comment.storage})
|
||||
generateHtml(twikooArray)
|
||||
}).catch((err) => {
|
||||
console.error(err);
|
||||
document.querySelector('.card-recent-comment .aside-list').textContent = "!{_p('newest_comment.error')}"
|
||||
})
|
||||
}
|
||||
if (typeof twikoo === 'object') {
|
||||
runTwikoo()
|
||||
} else {
|
||||
utils.getScript('!{url_for(theme.cdn.twikoo)}').then(runTwikoo)
|
||||
}
|
||||
}
|
||||
const newestCommentInit = () => {
|
||||
if (!document.querySelector('.card-recent-comment')) return
|
||||
const data = utils.saveToLocal.get('twikoo-newest-comment')
|
||||
data ? generateHtml(data) : getComment()
|
||||
}
|
||||
window.addEventListener('DOMContentLoaded', newestCommentInit, false)
|
||||
window.addEventListener('pjax:complete', newestCommentInit, false);
|
||||
})()
|
||||
@@ -0,0 +1,85 @@
|
||||
script.
|
||||
(() => {
|
||||
const emojiReg = /:[a-z0-9_\u4e00-\u9fa5]+:/g
|
||||
const changeContent = (content) => {
|
||||
if (content === '') return content;
|
||||
|
||||
const replacements = [
|
||||
{regex: /<img.*?src="(.*?)"?[^\>]+>/ig, replacement: '[!{_p("console.newest_comment.image")}]'},
|
||||
{
|
||||
regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,
|
||||
replacement: '[!{_p("console.newest_comment.link")}]'
|
||||
},
|
||||
{regex: /```[\s\S]*?```/g, replacement: '[!{_p("console.newest_comment.code")}]'},
|
||||
{regex: /<[^>]+>/g, replacement: ""}
|
||||
];
|
||||
|
||||
content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content);
|
||||
|
||||
return content.length > 150 ? content.substring(0, 100) + '...' : content;
|
||||
}
|
||||
|
||||
const $asideList = document.querySelector('.card-recent-comment .aside-list')
|
||||
const newestCommentInit = () => {
|
||||
if (!document.querySelector('.card-recent-comment')) return
|
||||
const data = utils.saveToLocal.get('valine-newest-comment')
|
||||
if (data) {
|
||||
generateHtml(data)
|
||||
} else {
|
||||
getComment()
|
||||
}
|
||||
}
|
||||
|
||||
const getComment = async () => {
|
||||
const settings = {
|
||||
"method": "GET",
|
||||
"headers": {
|
||||
"X-LC-Id": '!{theme.valine.appId}',
|
||||
"X-LC-Key": '!{theme.valine.appKey}',
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
}
|
||||
if (typeof md5 === "undefined") await utils.getScript('!{url_for(theme.cdn.blueimp_md5)}')
|
||||
await fetch('!{theme.valine.serverURLs}/1.1/classes/Comment?limit=8&order=-createdAt', settings).then(res => res.json())
|
||||
.then(async result => {
|
||||
let ls = []
|
||||
for (const i of result.results.slice(0, !{limit})) {
|
||||
if (emojiReg.test(i.comment)) continue
|
||||
ls.push({
|
||||
content: changeContent(i.comment),
|
||||
avatar: '!{theme.comment.avatar}' + '/avatar/' + md5(i.mail.toLowerCase()),
|
||||
nick: i.nick,
|
||||
url: i.url,
|
||||
date: i.updatedAt || i.createdAt
|
||||
})
|
||||
}
|
||||
utils.saveToLocal.set('valine-newest-comment', ls, !{theme.comment.newest_comment.storage})
|
||||
generateHtml(ls)
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
$asideList.textContent = "!{_p('newest_comment.error')}"
|
||||
})
|
||||
}
|
||||
|
||||
const generateHtml = array => {
|
||||
const $dom = document.querySelector('.card-recent-comment .aside-list')
|
||||
$dom.innerHTML = array.length ? array.map(item => `
|
||||
<div class='aside-list-item'>
|
||||
<div onclick='pjax.loadUrl(\"${item.url}\")' class='thumbnail'>
|
||||
<img src='${item.avatar}' alt='${item.nick}'>
|
||||
<div class='name'><span>${item.nick}</span></div>
|
||||
</div>
|
||||
<div class='content'>
|
||||
<div class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</div>
|
||||
<time class="datetime" datetime="${item.date}"></time>
|
||||
</div>
|
||||
</div>
|
||||
`).join('') : "!{_p('newest_comment.zero')}"
|
||||
window.lazyLoadInstance?.update()
|
||||
window.pjax?.refresh()
|
||||
sco?.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', newestCommentInit, false)
|
||||
window.addEventListener('pjax:complete', newestCommentInit, false);
|
||||
})()
|
||||
@@ -0,0 +1,73 @@
|
||||
script.
|
||||
(() => {
|
||||
const changeContent = (content) => {
|
||||
if (content === '') return content;
|
||||
|
||||
const replacements = [
|
||||
{regex: /<img.*?src="(.*?)"?[^\>]+>/ig, replacement: '[!{_p("console.newest_comment.image")}]'},
|
||||
{
|
||||
regex: /<a[^>]+?href=["']?([^"']+)["']?[^>]*>([^<]+)<\/a>/gi,
|
||||
replacement: '[!{_p("console.newest_comment.link")}]'
|
||||
},
|
||||
{regex: /<pre><code>.*?<\/pre>/gi, replacement: '[!{_p("console.newest_comment.code")}]'},
|
||||
{regex: /<[^>]+>/g, replacement: ""}
|
||||
];
|
||||
|
||||
content = replacements.reduce((str, {regex, replacement}) => str.replace(regex, replacement), content);
|
||||
|
||||
return content.length > 150 ? content.substring(0, 100) + '...' : content;
|
||||
}
|
||||
|
||||
const $asideList = document.querySelector('.card-recent-comment .aside-list')
|
||||
const newestCommentInit = () => {
|
||||
if (!document.querySelector('.card-recent-comment')) return
|
||||
const data = utils.saveToLocal.get('waline-newest-comment')
|
||||
if (data) {
|
||||
generateHtml(data)
|
||||
} else {
|
||||
getComment()
|
||||
}
|
||||
}
|
||||
|
||||
const getComment = async () => {
|
||||
await fetch('!{theme.waline.envId}/api/comment?type=recent&count=!{limit}', {method: 'GET'}).then(async res => {
|
||||
const result = await res.json()
|
||||
const walineArray = result.data.map(e => {
|
||||
return {
|
||||
'content': changeContent(e.comment),
|
||||
'avatar': e.avatar,
|
||||
'nick': e.nick,
|
||||
'url': e.url + '#' + e.objectId,
|
||||
'date': new Date(e.time || e.insertedAt)
|
||||
}
|
||||
})
|
||||
utils.saveToLocal.set('waline-newest-comment', walineArray, !{theme.comment.newest_comment.storage})
|
||||
generateHtml(walineArray)
|
||||
}).catch(error => {
|
||||
console.error(error)
|
||||
$asideList.textContent = "!{_p('newest_comment.error')}"
|
||||
})
|
||||
}
|
||||
|
||||
const generateHtml = array => {
|
||||
const $dom = document.querySelector('.card-recent-comment .aside-list')
|
||||
$dom.innerHTML = array.length ? array.map(item => `
|
||||
<div class='aside-list-item'>
|
||||
<div onclick='pjax.loadUrl("${item.url}")' class='thumbnail'>
|
||||
<img src='${item.avatar}' alt='${item.nick}'>
|
||||
<div class='name'><span>${item.nick}</span></div>
|
||||
</div>
|
||||
<div class='content'>
|
||||
<div class='comment' onclick='pjax.loadUrl("${item.url}")'>${item.content}</div>
|
||||
<time class="datetime" datetime="${item.date}"></time>
|
||||
</div>
|
||||
</div>
|
||||
`).join('') : "!{_p('newest_comment.zero')}"
|
||||
window.lazyLoadInstance?.update()
|
||||
window.pjax?.refresh()
|
||||
sco?.changeTimeFormat(document.querySelectorAll('.aside-list-item time'))
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', newestCommentInit, false)
|
||||
window.addEventListener('pjax:complete', newestCommentInit, false);
|
||||
})()
|
||||
Reference in New Issue
Block a user