Files
website/themes/solitude/layout/includes/widgets/third-party/news-comment/twikoo.pug
T
2024-07-05 21:01:19 +08:00

69 lines
3.3 KiB
Plaintext

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);
})()