Blog/themes/blog/talk.gohtml

92 lines
6.8 KiB
Plaintext
Raw Permalink Normal View History

2024-05-03 10:34:32 +00:00
{{template "header" .}}
<div class="sub-title">- {{ .Title }} -</div>
<style>
2024-05-22 08:30:01 +00:00
div#page{background:none;border:0;padding:0}[data-theme=dark] #twikoo .tk-content,#twikoo .tk-content{padding:0;background:transparent}.talk_item,.tk-expand,.tk-comments-container>.tk-comment,.tk-submit:nth-child(1){border:1px solid #e0e3ed;box-shadow:0 5px 10px rgb(189 189 189 / 10%);transition:all .3s ease-in-out;border-radius:12px}.talk_item:hover,.tk-comments-container>.tk-comment:hover,.tk-submit:nth-child(1):hover{border-color:var(--primary,#673ab7)}.tk-submit{padding:20px 10px 0}.tk-comments-container>.tk-comment{padding:15px}#talk{margin-top:1rem}#talk .loading{display:flex;align-items:center;justify-content:center;flex-direction:column;margin:0 auto;width:100px;height:100px;border-radius:8px;background-color:var(--primary,#673ab7)}#talk .loading img{height:60px;width:60px}.talk_item{display:flex;flex-direction:column;padding:20px;margin-bottom:15px}.avatar{margin:0 !important;width:60px;height:60px;border-radius:10px}.talk_bottom,.talk_meta{display:flex;align-items:center;width:100%;line-height:1.5}.talk_bottom{justify-content:space-between}.info{display:flex;flex-direction:column;margin-left:10px}span.talk_nick{color:#6dbdc3;font-size:1.2rem}svg.is-badge.icon{width:15px;margin-left:5px;padding-top:3px}span.talk_date{opacity:.6}.talk_content{line-height:1.5;margin-top:10px}.zone_imgbox{display:flex;flex-wrap:wrap;--w:calc(25% - 8px);gap:10px;margin-top:5px}.zone_imgbox a{display:block;border-radius:12px;width:var(--w);aspect-ratio:1/1;position:relative}.zone_imgbox img{width:100%;height:100%;margin:0 !important;object-fit:cover}.talk_bottom{opacity:.9}.talk_bottom .icon{color:var(--primary,#673ab7);float:right;transition:all .3s}.talk_bottom .icon:hover{color:#49b1f5}span.talk_tag{font-size:14px}.talk_content>a{margin:0 3px;color:#ff7d73 !important}.talk_content>a:hover{text-decoration:none !important;color:#ff5143 !important}.limit{transition:all .3s ease-in-out;color:rgba(76,73,72,0.6)}[data-theme=dark] .limit{color:rgba(255,255,255,0.5)}.limit{display:none;text-align:center;margin-top:20px;color:var(--primary,#673ab7)}@media screen and (max-width:900px){.zone_imgbox{--w:calc(33% - 5px)}#talk{margin:10px 3px 0}#post-comment{margin:0 3px}}@media screen and (max-width:768px){.zone_imgbox{gap:6px}.zone_imgbox{--w:calc(50% - 3px)}span.talk_date{font-size:14px}}
2024-05-03 10:34:32 +00:00
</style>
<div id="talk">
2024-05-03 14:42:59 +00:00
<div class='loading'><img src="/public/img/loading.svg" alt="加载中...">
<a>加载中...</a>
</div>
2024-05-03 10:34:32 +00:00
</div>
<div class="limit">- 只展示最近30条说说 -</div>
<script>
2024-05-07 13:33:51 +00:00
function Format(item) {
let date = getTime(new Date(item.createdTs * 1000).toString()),
content = item.content,
imgs = content.match(/!\[.*\]\(.*?\)/g),
musics = content.match(/{\s*music\s*(.*)\s*}/g),
videos = content.match(/{\s*bilibili\s*(.*)\s*}/g);
2024-05-22 10:12:01 +00:00
codes = content.match(/```(.*)```/igs);
2024-05-07 13:46:06 +00:00
if (imgs) imgs = imgs.map(item => {
return item.replace(/!\[.*\]\((.*?)\)/, '$1')
})
2024-05-07 13:33:51 +00:00
if (item.resourceList.length) {
if (!imgs) imgs = []
item.resourceList.forEach(t => {
if (t.externalLink) imgs.push(t.externalLink)
else imgs.push(`${url}/o/r/${t.id}/${t.publicId}/${t.filename}`)
2024-05-03 10:34:32 +00:00
})
}
2024-05-22 10:12:01 +00:00
content = content.replace(/#(.*?)\s/g, '').replace(/{.*}/g, '').replace(/\!\[(.*?)\]\((.*?)\)/g, '').replace(/```(.*)```/igs, '')
2024-05-07 13:33:51 +00:00
let text = content.replace(/\[(.*?)\]\((.*?)\)/g, '[链接]').trim();
content = content.replace(/\[(.*?)\]\((.*?)\)/g, `<a href="$2">@$1</a>`);
if (imgs) {
content += `<div class="zone_imgbox">`
imgs.forEach(e => content += `<a href="${e}" data-fancybox="gallery" class="fancybox" data-thumb="${e}"><img class="no-lazyload talk-img" src="${e}"></a>`)
content += '</div>'
2024-05-03 10:34:32 +00:00
}
2024-05-07 13:46:06 +00:00
if (musics) musics.forEach(item => {
content += `<meting-js auto="${item.replace(/{\s*music\s*(.*)\s*}/, '$1')}" theme="var(--leonus-main)" preload="metadata"></meting-js>`
})
2024-05-07 13:33:51 +00:00
if (videos) videos.forEach(item => {
content += `<div style="position: relative; padding: 30% 45%;margin-top: 10px;margin-bottom: 10px"><iframe style="position: absolute; width: 100%; height: 100%; left: 0; top: 0;" src="//player.bilibili.com/player.html?autoplay=0&bvid=${item.replace(/{\s*bilibili\s*(.*)\s*}/, '$1').replace(/.*video\/([^\/]*).*/, '$1')}" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>`
})
2024-05-22 10:12:01 +00:00
if (codes) codes.forEach(item => {
content +=marked(item);
})
2024-05-07 13:46:06 +00:00
return {content, date, text}
2024-05-07 13:33:51 +00:00
}
function getTime(time) {
2024-05-07 13:46:06 +00:00
var nol = function (h) {
return h > 9 ? h : '0' + h
}
2024-05-07 13:33:51 +00:00
var now = new Date()
var yesterday = new Date(now.getTime() - (1000 * 60 * 60 * 24)).toLocaleDateString()
var twoDaysAgo = new Date(now.getTime() - 2 * (1000 * 60 * 60 * 24)).toLocaleDateString()
let d = new Date(time),
ls = [d.getFullYear(), nol(d.getMonth() + 1), nol(d.getDate()), nol(d.getHours()), nol(d.getMinutes()), nol(d.getSeconds())],
day = d.toLocaleDateString()
if (day === now.toLocaleDateString()) {
return '今天 ' + ls[3] + ':' + ls[4]
} else if (day === yesterday) {
return '昨天 ' + ls[3] + ':' + ls[4]
} else if (day === twoDaysAgo) {
return '前天 ' + ls[3] + ':' + ls[4]
} else {
if (now.getFullYear() == ls[0]) return ls[1] + '月' + ls[2] + '日 ' + ls[3] + ':' + ls[4]
else return ls[0] + '年' + ls[1] + '月' + ls[2] + '日 ' + ls[3] + ':' + ls[4]
2024-05-03 10:34:32 +00:00
}
}
2024-05-07 13:46:06 +00:00
2024-05-07 13:33:51 +00:00
fetch('{{ .Data.url }}/api/v1/memo?creatorId={{ .Data.user }}&tag={{ .Data.tag }}&limit=30').then(res => res.json()).then(data => {
let items = [], html = ''
2024-05-07 13:46:06 +00:00
data.forEach(item => {
items.push(Format(item))
})
2024-05-07 13:33:51 +00:00
if (items.length == 30) document.querySelector('.limit').style.display = 'block'
items.forEach(item => {
2024-05-15 08:43:25 +00:00
html += '<div class="talk_item"><div class="talk_meta">';
2024-05-15 08:53:43 +00:00
html += "<img class=\"no-lightbox no-lazyload avatar\" src=\"https://q1.qlogo.cn/g?b=qq&nk={{ .Data.qq }}&s=5\">";
2024-05-26 09:15:16 +00:00
html += `<div class="info"><span class="talk_nick">{{ .Data.author }}</span><span class="talk_date">${item.date}</span>`;
2024-05-15 08:37:12 +00:00
html += `</div></div><div class="talk_content">${item.content}</div></div>`;
2024-05-07 13:33:51 +00:00
})
2024-05-15 08:23:11 +00:00
document.getElementById('talk').innerHTML = html;
imgStatus.watch('.talk-img', () => { waterfall('#talk')});
2024-05-07 13:33:51 +00:00
})
2024-05-03 10:34:32 +00:00
</script>
2024-05-15 08:15:01 +00:00
<script defer src="https://cdn.jsdelivr.net/gh/jkjoy/14e/js/waterfall.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/gh/jkjoy/14e/js/imgStatus.min.js"></script>
2024-05-03 10:34:32 +00:00
{{template "footer" .}}