include ../widgets/page/banner if theme.says.enable #bber section.timeline.page-1 ul.list.waterfall case theme.says.style when 1 script. !async function () { let aplayerRegex = /{aplayer,(.*?),(.*?)}/g; let linkRegex = /(?<!!)\[([^\]]*)]\(([^)]*)\)/g; let bilibiliRegex = /{bilibili,(.*?)}/g; let playerRegex = /{player,(.*?)}/g; let imageRegex = /!\[(.*?)]\((.*?)\)/g; let contentRegex = /#.*?\s([^{\n]*)/g;
await fetch("!{url_for(theme.says.link)}") .then(res => res.json()) .then(data => { let list = data.slice(0, !{theme.says.strip}); let aplayer = null; let video = null; let imageBox = null;
document.querySelector('.waterfall').innerHTML = list.map(item => { aplayer = item.content.match(aplayerRegex); aplayer = aplayer ? `<div class="bber-music"><meting-js server="${aplayer[0].replace(aplayerRegex, '$1')}" type="song" id="${aplayer[0].replace(aplayerRegex, '$2')}" mutex="true" preload="none" theme="var(--efu-main)" data-lrctype="0"></meting-js></div>` : null; video = item.content.match(playerRegex); video = video ? `<div class="bber-video"><video src="${video[0].replace(playerRegex, '$1')}" controls="controls" style="object-fit: cover;"></video></div>` : item.content.match(bilibiliRegex); video = item.content.match(bilibiliRegex) ? `<div class="bber-video"><iframe src="//player.bilibili.com/player.html?autoplay=0&bvid=${video[0].replace(bilibiliRegex, '$1')}" scrolling="no" bozrder="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>` : video; imageBox = item.content.match(imageRegex); imageBox = imageBox ? `<div class="bber-content-img">${imageBox.map(img => `<img src="${img.replace(imageRegex, '$2')}" alt="${img.replace(imageRegex, '$1')}" />`).join('')}</div>` : ''; let time = new Date(item.createdTs * 1000).toString().replace('Z', '08:00'); let content = item.content.match(contentRegex).map(item => item.replace(contentRegex, '$1')); let link = item.content.match(linkRegex); link = link ? `<a class="bber-content-link" href='${link[0].replace(linkRegex, '$2')}' title="${link[0].replace(linkRegex, '$1')}" target="_blank"><i class="solitude st-link-m-line"></i>链接</a>` : ''; return `<li class="item"> <div id="bber-content"> <p class="datacont">${content}</p> ${imageBox || ''} </div> ${video || ''} ${aplayer || ''} <hr> <div class="bber-bottom"> <div class="bber-info"> <div class="bber-info-time"> <i class="solitude st-calendar-todo-fill"></i> <time class="datetime" datetime="${time}"></time> </div> ${link} </div> ${content ? `<a class="bber-reply goComment" onclick="sco.toTalk('${content}')"><i class="solitude st-chat-fill" style="font-size: 1rem;"></i></a>` : ''} </div> </li>`; }).join(''); }).catch(error => console.log(error)); }(); when 2 script. !async function () { let aplayerRegex = /{aplayer,(.*?),(.*?)}/g; let bilibiliRegex = /{bilibili,(.*?)}/g; let playerRegex = /{player,(.*?)}/g; let imageRegex = /!\[(.*?)]\((.*?)\)/g; let contentRegex = /#.*?\s([^{\n]*)/g;
await fetch("!{url_for(theme.says.link)}") .then(res => res.json()) .then(data => { let list = data.slice(0, !{theme.says.strip}) let aplayer = null; let video = null; let imageBox = null;
.bbTimeList.container#bbTimeList(class=is_home_first_page() ? '' : 'more-page') i.bber-logo.solitude.st-bblogo(onclick=`pjax.loadUrl('/essay/')`) .swiper-container.swiper-no-swiping.swiper-container-initialized.swiper-container-vertical.swiper-container-pointer-events#bbtalk(tabindex="-1" onclick=`pjax.loadUrl('/essay/')`) .swiper-wrapper#bber-talk script. async function getSays() { const talk = document.querySelector('#bber-talk') if (talk === null) return talk.innerHTML = '<div class="li-style swiper-slide"><i class="solitude st-loading-line"></i></div>' await fetch('!{theme.says.link}') .then(response => response.json()) .then(data => { let aplayerRegex = /{aplayer,(.*?),(.*?)}/g; let bilibiliRegex = /{bilibili,(.*?)}/g; let playerRegex = /{player,(.*?)}/g; let linkRegex = /(?<!\!)\[([^\]]*)\]\(([^\)]*)\)/g; let imageRegex = /!\[(.*?)]\((.*?)\)/g; let contentRegex = /#.*?\s([^{\n]*)/g const list = data.slice(0, 10) document.querySelector('#bber-talk').innerHTML = list.map(item => { let content = item.content.match(contentRegex, '$1').map(item => item.replace(contentRegex, '$1')); let imageBox = item.content.match(imageRegex) ? '<i class="solitude st-image-fill"></i>' : ''; let aplayer = item.content.match(aplayerRegex) ? '<i class="solitude st-disc-fill"></i>' : ''; let video = item.content.match(playerRegex) ? '<i class="solitude st-video-fill"></i>' : item.content.match(bilibiliRegex) ? '<i class="solitude st-bilibili-line"></i>' : ''; let link = item.content.match(linkRegex) ? `<i class="solitude st-link"></i>` : ''; return `<div class="li-style swiper-slide">${content + aplayer + video + imageBox + link}</div>` }).join(' ') setTimeout(() => { sco.initbbtalk() }, 500) }) .catch(error => console.error('bbtime | ', error)); } document.addEventListener('DOMContentLoaded', getSays) document.addEventListener('pjax:complete', getSays) i.bber-gotobb.solitude.st-right-btn-fill(title=_p('home.bbtime.text') onclick=`pjax.loadUrl('/essay/')`)
配置文件
找到 says,添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 即刻短文 # talk now # 前置要求:需配置即刻短文页面 # Pre-requirements: talk now page needs to be configured says: enable: false # 主页的即刻轮播条 # Talk carousel bar on the homepage home_mini: false # 1:张洪heo样式 / 2:Leonus样式 # 1: Zhang Hong heo style / 2: Leonus style style: 1 # 即刻短文仅展示前n条 # Talk short text only shows the first n strip: 30 + link: # 你的 memos 部署地址,例如: https://example.com/api/v1/memo?creatorId=1&tag=says
let aplayerRegex = /{aplayer,(.*?),(.*?)}/g; let linkRegex = /(?<!\!)\[([^\]]*)\]\(([^\)]*)\)/g; let bilibiliRegex = /{bilibili,(.*?)}/g; let playerRegex = /{player,(.*?)}/g; let imageRegex = /!\[(.*?)]\((.*?)\)/g; let contentRegex = /#.*?\s([^{\n]*)/g;