UP 视频模块
This commit is contained in:
@@ -136,7 +136,7 @@
|
||||
opacity: .9;
|
||||
}
|
||||
.talk_bottom .icon {
|
||||
color: var(--font-color);
|
||||
color: var(--primary,#673ab7);
|
||||
float: right;
|
||||
transition: all .3s;
|
||||
}
|
||||
@@ -207,66 +207,64 @@
|
||||
|
||||
<div class="limit">- 只展示最近30条说说 -</div>
|
||||
<script>
|
||||
if(1) {
|
||||
let url = '{{ .Data.memos_url }}'
|
||||
fetch(url + '/api/v1/memo?creatorId={{ .Data.memos_user }}&tag={{ .Data.memos_tag }}&limit=30').then(res => res.json()).then(data => { // 注意修改域名和用户id
|
||||
let items = [],
|
||||
html = '',
|
||||
icon = '<svg viewBox="0 0 512 512"xmlns="http://www.w3.org/2000/svg"class="is-badge icon"><path d="m512 268c0 17.9-4.3 34.5-12.9 49.7s-20.1 27.1-34.6 35.4c.4 2.7.6 6.9.6 12.6 0 27.1-9.1 50.1-27.1 69.1-18.1 19.1-39.9 28.6-65.4 28.6-11.4 0-22.3-2.1-32.6-6.3-8 16.4-19.5 29.6-34.6 39.7-15 10.2-31.5 15.2-49.4 15.2-18.3 0-34.9-4.9-49.7-14.9-14.9-9.9-26.3-23.2-34.3-40-10.3 4.2-21.1 6.3-32.6 6.3-25.5 0-47.4-9.5-65.7-28.6-18.3-19-27.4-42.1-27.4-69.1 0-3 .4-7.2 1.1-12.6-14.5-8.4-26-20.2-34.6-35.4-8.5-15.2-12.8-31.8-12.8-49.7 0-19 4.8-36.5 14.3-52.3s22.3-27.5 38.3-35.1c-4.2-11.4-6.3-22.9-6.3-34.3 0-27 9.1-50.1 27.4-69.1s40.2-28.6 65.7-28.6c11.4 0 22.3 2.1 32.6 6.3 8-16.4 19.5-29.6 34.6-39.7 15-10.1 31.5-15.2 49.4-15.2s34.4 5.1 49.4 15.1c15 10.1 26.6 23.3 34.6 39.7 10.3-4.2 21.1-6.3 32.6-6.3 25.5 0 47.3 9.5 65.4 28.6s27.1 42.1 27.1 69.1c0 12.6-1.9 24-5.7 34.3 16 7.6 28.8 19.3 38.3 35.1 9.5 15.9 14.3 33.4 14.3 52.4zm-266.9 77.1 105.7-158.3c2.7-4.2 3.5-8.8 2.6-13.7-1-4.9-3.5-8.8-7.7-11.4-4.2-2.7-8.8-3.6-13.7-2.9-5 .8-9 3.2-12 7.4l-93.1 140-42.9-42.8c-3.8-3.8-8.2-5.6-13.1-5.4-5 .2-9.3 2-13.1 5.4-3.4 3.4-5.1 7.7-5.1 12.9 0 5.1 1.7 9.4 5.1 12.9l58.9 58.9 2.9 2.3c3.4 2.3 6.9 3.4 10.3 3.4 6.7-.1 11.8-2.9 15.2-8.7z"fill="#1da1f2"></path></svg>';
|
||||
data.forEach(item => { items.push(Format(item)) });
|
||||
if (items.length == 30) document.querySelector('.limit').style.display = 'block';
|
||||
items.forEach(item => {
|
||||
html += `<div class="talk_item"><div class="talk_meta"><img class="no-lightbox no-lazyload avatar" src="https://q1.qlogo.cn/g?b=qq&nk={{ .Data.qq }}&s=5"><div class="info"><span class="talk_nick">{{ .Data.author }}${icon}</span><span class="talk_date">${item.date}</span></div></div><div class="talk_content">${item.content}</div><div class="talk_bottom"><div><span class="talk_tag"># ${item.tag}</span></div><a href="javascript:;"onclick="goComment('${item.text}')"><span class="icon"><i class="fa-solid fa-message fa-fw"></i></span></a></div></div>` // 注意修改头像链接和名称
|
||||
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);
|
||||
if (imgs) imgs = imgs.map(item => { return item.replace(/!\[.*\]\((.*?)\)/, '$1') })
|
||||
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}`)
|
||||
})
|
||||
document.getElementById('talk').innerHTML = html
|
||||
}
|
||||
content = content.replace(/#(.*?)\s/g, '').replace(/{.*}/g, '').replace(/\!\[(.*?)\]\((.*?)\)/g, '').replace(/```/g, '')
|
||||
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>'
|
||||
}
|
||||
if (musics) musics.forEach(item => { content += `<meting-js auto="${item.replace(/{\s*music\s*(.*)\s*}/, '$1')}" theme="var(--leonus-main)" preload="metadata"></meting-js>` })
|
||||
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>`
|
||||
})
|
||||
// 页面评论
|
||||
function goComment(e) {
|
||||
var n = document.querySelector(".el-textarea__inner")
|
||||
n.value = `> ${e}\n\n`;
|
||||
n.focus();
|
||||
btf.snackbarShow("无需删除空行,直接输入评论即可", !1, 2e3);
|
||||
}
|
||||
// 页面内容格式化
|
||||
function Format(item) {
|
||||
let date = getTime(new Date(item.createdTs * 1000).toString()),
|
||||
content = item.content,
|
||||
tag = item.content.match(/\{(.*?)\}/g),
|
||||
imgs = content.match(/!\[.*\]\(.*?\)/g),
|
||||
text = ''
|
||||
if (imgs) imgs = imgs.map(item => { return item.replace(/!\[.*\]\((.*?)\)/, '$1') })
|
||||
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}`)
|
||||
})
|
||||
}
|
||||
text = content.replace(/#(.*?)\s/g, '').replace(/\!?\[(.*?)\]\((.*?)\)/g, '').replace(/\{(.*?)\}/g, '')
|
||||
content = text.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" src="${e}"></a>` // 2023-02-06更新
|
||||
)
|
||||
content += '</div>'
|
||||
}
|
||||
return {
|
||||
content: content,
|
||||
tag: tag ? tag[0].replace(/\{(.*?)\}/,'$1') : '无标签',
|
||||
date: date,
|
||||
text: text.replace(/\[(.*?)\]\((.*?)\)/g, '[链接]' + `${imgs?'[图片]':''}`)
|
||||
}
|
||||
}
|
||||
// 页面时间格式化
|
||||
function getTime(time) {
|
||||
let d = new Date(time),
|
||||
ls = [d.getFullYear(), d.getMonth() + 1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()];
|
||||
for (let i = 0; i < ls.length; i++) {
|
||||
ls[i] = ls[i] <= 9 ? '0' + ls[i] : ls[i] + ''
|
||||
}
|
||||
if (new Date().getFullYear() == ls[0]) return ls[1] + '月' + ls[2] + '日 ' + ls[3] +':'+ ls[4]
|
||||
else return ls[0] + '年' + ls[1] + '月' + ls[2] + '日 ' + ls[3] +':'+ ls[4]
|
||||
return { content, date, text }
|
||||
}
|
||||
function getTime(time) {
|
||||
var nol = function (h) { return h > 9 ? h : '0' + h }
|
||||
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]
|
||||
}
|
||||
}
|
||||
fetch('{{ .Data.url }}/api/v1/memo?creatorId={{ .Data.user }}&tag={{ .Data.tag }}&limit=30').then(res => res.json()).then(data => {
|
||||
let items = [], html = ''
|
||||
data.forEach(item => { items.push(Format(item)) })
|
||||
if (items.length == 30) document.querySelector('.limit').style.display = 'block'
|
||||
items.forEach(item => {
|
||||
html += `<div class="talk_item"><div class="talk_meta"><img class="no-lightbox no-lazyload avatar" src="https://q1.qlogo.cn/g?b=qq&nk={{ .Data.qq }}&s=5"><div class="info"><span class="talk_nick">Leonus</span><span class="talk_date">${item.date}</span></div><a href="javascript:;" class="goComment" onclick="goComment('${item.text}')"><span class="icon"><i class="fa-solid fa-message fa-fw"></i></span></a></div><div class="talk_content">${item.content}</div></div>`
|
||||
})
|
||||
document.getElementById('talk').innerHTML = html
|
||||
imgStatus.watch('.talk-img', () => { waterfall('#talk') })
|
||||
})
|
||||
</script>
|
||||
<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>
|
||||
{{template "footer" .}}
|
||||
|
Reference in New Issue
Block a user