1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| mixin renderArticle(item) .item .bber-content if item.content p.datacont= item.content
if item.image .bber-image each iten, indey in item.image - const image = item.image[indey].split('||') img(src=image[0] alt=image[1] ? image[1] : '' title=image[1] ? '' : '即刻短文配图' )
if item.video .bber-video if item.video.bilibili - const autoplay = item.video.autoplay ? '&autoplay=1' : '&autoplay=0' - const biliurl = '//player.bilibili.com/player.html?bvid=' + item.video.bilibili.match(/(BV\w+)/)[1] + autoplay
iframe(src=biliurl scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true") else if item.video.player video(src=item.video.player controls="controls" style="object-fit: cover")
if item.aplayer .bber-music .aplayer(data-id=item.aplayer.id data-server=item.aplayer.server data-type="song" data-autoplay="false" data-mutex="true" data-theme='var(--icat-theme)')
hr
.bber-bottom .bber-info .bber-info-time i.MeuiCat.icon-calendar-todo-fill time.datatime(datetime=item.date)= 'Loading'
if item.from .bber-info-from span= item.from
if item.link - const link = item.link.split('||') a.bber-content-link(target="_blank" href=link[0] title=link[1] ? link[1] : '跳转到短文指引的链接') i.MeuiCat.icon-link-m-line | 链接
if item.top .bber-info-top i.MeuiCat.icon-hot-top-fill | 置顶
if item.content .bber-reply(onclick="commentText(" + `'${item.content}'` + ")") i.MeuiCat.icon-chat-fill
- const {strip, mode, mode_link} = theme.essay
if theme.essay.enable section#bber case mode.trim() when 'local' - const essaydata = site.data.essay.essay_list
if essaydata && essaydata.length > 0 #waterfall.list - const limitedList = strip === -1 ? essaydata : essaydata.slice(0, strip) each item in essaydata.filter(item => item.top) +renderArticle(item) each item in limitedList.filter(item => !item.top) +renderArticle(item)
#bber-tips if strip === -1 || Math.abs(strip) >= essaydata.length | - 已展开所有短文 - else | - 只展示最近 #{strip} 条短文 -
when 'json' #page-load img(src="https://img.meuicat.com/blog/loading.svg") script. async function essayFormat(data) { const renderArticle = async (item) => { let image = '', video = '', type = ''
if (item.image) item.image.map(e => image += `<img src="${e.split(' || ')[0]}" ${e.split(' || ').length > 1 ? `alt='${e.split(' || ')[1]}'` : `title="即刻短文配图"`} />`).join('') let aplayer = item.aplayer ? `<div class="bber-music"><div class="aplayer" data-server="${item.aplayer.server}" data-type="song" data-id="${item.aplayer.id}" data-autoplay="false" data-mutex="true" data-theme="var(--icat-theme)"></div></div>` : '' if (item.video) video = item.video.player ? `<div class="bber-video"><video src="${item.video.player}" controls="controls" style="object-fit: cover;"></video></div>` : item.video.bilibili ? `<div class="bber-video"><iframe src="//player.bilibili.com/player.html?bvid=${item.video.bilibili.match(/(BV\w+)/)[1]}${item.video.autoplay ? '&autoplay=1' : '&autoplay=0'}" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>` : '' const time = changeTime(item.date) let link = item.link ? ((type = item.link.split(' || ')), `<a class="bber-content-link" href='${type[0].startsWith('/') ? type[0] : (type[0].startsWith('http') ? type[0] : 'https://' + type[0])}' title="${type.length > 1 ? type[1] : '跳转到短文指引的链接' }" target="_blank"><i class="MeuiCat icon-link-m-line"></i>链接</a>`) : ''; return `<div class="item"><div class="bber-content">${item.content ? `<p class="datacont">${item.content}</p>` : ''}${image ? `<div class="bber-image">${image}</div>` : ''}${aplayer}${video}</div><hr><div class="bber-bottom"><div class="bber-info"><div class="bber-info-time"><i class="MeuiCat icon-calendar-todo-fill"></i><time datetime="${item.date}">${time}</time></div>${link}${item.from ? `<div class="bber-info-from"><span>${item.from}</span></div>` : ''}${item.top ? `<div class="bber-info-top"><i class="MeuiCat icon-hot-top-fill"></i>置顶</div>` : ''}</div>${item.content ? `<div class="bber-reply" onclick="commentText('${item.content}')"><i class="MeuiCat icon-chat-fill"></i></div>` : ''}</div></div>` }
const { strip } = GLOBAL_CONFIG.essay let essayTips, items = [], topitem = []
const processedData = await Promise.all(data[0].essay_list.map(async (item) => { const formatdata = await renderArticle(item) if (!formatdata) return null if (item.top) { topitem.push(formatdata) } else { items.push(formatdata) } return formatdata })) essayTips = strip === -1 || strip >= items.length ? `<div id="bber-tips">- 已展开所有短文 -</div>` : (items = items.slice(0, (strip - topitem.length)), `<div id="bber-tips">- 只展示最近 ${strip} 条短文 -</div>`)
return `<div id="waterfall" class="list">${topitem.concat(items).filter(item => item !== null).join('')}</div>${essayTips}` }
when 'memos' #page-load img(src="https://img.meuicat.com/blog/loading.svg") script. async function essayFormat(data) { const renderArticle = async (item) => { const contentRegex = /#(.*?)\s|\n/g, imageRegex = /\!\[(.*?)\]\((.*?)\)/g, playerRegex = /{\s*player\s*(.*)\s*}/g, linkRegex = /(?<!\!)\[(.*?)\]\((.*?)\)/g, topRegex = /#top/g, fromRegex = /(?<![\w\/])(?<!\{)\{([^{}\s]+)\}(?!\})(?![\w\/])/g let time = new Date((item.createdTs - (new Date().getTimezoneOffset() * 60)) * 1000).toISOString(), content = item.content, image = '', img = content.match(imageRegex), aplayer = content.match(/{\s*music\s*(.*?)\s*(.*?)\s*}/g), video = content.match(playerRegex), link = content.match(linkRegex), type = '', from = content.match(fromRegex)
if (item.resourceList.length) { if (!img) img = [] item.resourceList.forEach(e => { if (e.externalLink) img.push(e.externalLink) else img.push(`${baseUrl}/o/r/${e.uid}`) }) }
if (img) image += img.map(e => `<img src="${e.replace(imageRegex, '$2')}" ${e.replace(imageRegex, '$1') ? `alt="${e.replace(imageRegex, '$1')}"` : `title="即刻短文配图"`} />`).join('') aplayer = aplayer ? `<div class="bber-music"><div class="aplayer" data-server="${aplayer[0].match(/\{\s*music\s*(.*?)\s*\d+\s*\}/)[1]}" data-type="song" data-id="${aplayer[0].match(/\d+/)[0]}" data-mutex="true" data-autoplay="false" data-theme="var(--icat-theme)"></div></div>` : '' video = video ? `<div class="bber-video"><video src="${video[0].replace(playerRegex, '$1').trim()}" controls="controls" style="object-fit: cover;"></video></div>` : content.match(/{\s*bilibili\s*(.*?)\s*}/g) video = Array.isArray(video) ? `<div class="bber-video"><iframe src="//player.bilibili.com/player.html?bvid=${video[0].match(/(BV\w+)/)[1]}${video[0].match(/{\s*bilibili\s*(.*?)\s*true\s*}/g) ? '&autoplay=1' : '&autoplay=0'}" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"></iframe></div>` : '' const timeFormat = changeTime(time) link = link ? ((type = link[0].replace(linkRegex, '$2')), `<a class="bber-content-link" href='${type.startsWith('/') ? type : (type.startsWith('http') ? type : 'https://' + type)}' title="${link[0].replace(linkRegex, '$1') ? link[0].replace(linkRegex, '$1') : '跳转到短文指引的链接' }" target="_blank"><i class="MeuiCat icon-link-m-line"></i>链接</a>`) : '' from = from ? `<div class="bber-info-from"><span>${from[0].replace(fromRegex, '$1')}</span></div>` : '' content = content.replace(contentRegex, '').replace(imageRegex, '').replace(/\{(.*?)\}/g, '').replace(linkRegex, '').trim()
return `<div class="item"><div class="bber-content">${content ? `<p class="datacont">${content}</p>` : ''}${image ? `<div class="bber-image">${image}</div>` : ''}${aplayer}${video}</div><hr><div class="bber-bottom"><div class="bber-info"><div class="bber-info-time"><i class="MeuiCat icon-calendar-todo-fill"></i><time class="datatime" datetime="${time}">${timeFormat}</time></div>${link}${from}${item.content.includes('#top') ? `<div class="bber-info-top"><i class="MeuiCat icon-hot-top-fill"></i>置顶</div>` : ''}</div>${content ? `<div class="bber-reply" onclick="commentText('${content}')"><i class="MeuiCat icon-chat-fill"></i></div>` : ''}</div></div>` }
const { strip, mode_link } = GLOBAL_CONFIG.essay const baseUrl = mode_link.substring(0, mode_link.indexOf("/", mode_link.indexOf("//") + 2)) let essayTips, items = [], topitem = []
const processedData = await Promise.all(data.map(async (item) => { const formatdata = await renderArticle(item,baseUrl) if (!formatdata) return null if (item.content.includes('#top')) { topitem.push(formatdata) } else { items.push(formatdata) } return formatdata })) essayTips = strip === -1 || strip >= items.length ? `<div id="bber-tips">- 已展开所有短文 -</div>` : (items = items.slice(0, (strip - topitem.length)), `<div id="bber-tips">- 只展示最近 ${strip} 条短文 -</div>`)
return `<div id="waterfall" class="list">${topitem.concat(items).filter(item => item !== null).join('')}</div>${essayTips}` }
|