\n'
+ '
\n'
+ ' ' + cover + '\n'
+ '
\n'
+ '
' + title + '
\n'
+ '
' + stats + '
\n'
+ '
\n'
+ '
\n'
+ '
\n'
+ '
\n'
/**
* 音视频分离时:视频**静音**播画面,声音交给下面这个
\n'
+ '
\n'
/**
* 下载按钮(用户要求「网页界面可以下载」):
* 走 `/video?download=1`,服务端会带上 `Content-Disposition: attachment` 与处理过的文件名。
* 放在播放器下面单独一条 —— 作品信息可能缺(那时不会渲染操作按钮排),下载入口不能跟着一起消失。
*/
+ '
\n'
+ sourceRow + linkRow + '\n'
+ (actions ? '
' + actions + '
\n' : '')
+ (info.localOnly
? '
未配置公网地址,仅本机可访问:这条链接用的是管理员机器的本机地址,'
+ '只有本机 / 内网能打开。公网访问请让管理员在「通用 → 在线播放器设置 → 播放器公网地址」里填上自己的域名'
+ '(就是用户能访问到的那个域名),再用 Nginx / Caddy 之类把域名代理到播放器端口。
\n'
: '')
+ ' \n'
+ '
\n'
+ '\n'
+ '\n\n'
}
/**
* 过期 / 无效令牌的提示页(HTTP 状态码是 404)。
* 用户从群里点进来的链接多半已经躺在聊天记录里很久了,这里要说清楚「为什么打不开」。
*/
/**
* 「直接跳转 / 手动复制」两个按钮的行为(播放页与过期页共用一份逻辑)。
*
* 真地址用 `location.href` 在浏览器里取:服务端不知道用户是从哪个域名/端口进来的
* (配了公网地址 + 反向代理时更是如此),写死服务端看到的地址会给出错链接。
* 剪贴板 API 在 http / QQ 内置浏览器里可能不可用,失败就退化成可全选的文本框。
*/
const EXPIRED_LINK_SCRIPT = [
"(function () {",
" 'use strict'",
" var textEl = document.getElementById('pageLinkText')",
" var hintEl = document.getElementById('pageLinkHint')",
" var jumpBtn = document.getElementById('pageLinkJump')",
" var copyBtn = document.getElementById('pageLinkCopy')",
" var pageUrl = location.href",
" if (textEl) textEl.textContent = pageUrl",
" /** 点完按钮收起原始链接文本(用户要求:点击后删除链接的显示) */",
" function collapseLink (hint) {",
" if (textEl) { textEl.textContent = '(链接已收起,点上方按钮仍可使用)'; textEl.style.color = '#7d818a' }",
" if (hintEl) hintEl.textContent = hint || ''",
" }",
" if (jumpBtn) jumpBtn.addEventListener('click', function () {",
" window.open(pageUrl, '_blank', 'noopener')",
" collapseLink('已在新标签打开')",
" })",
" if (copyBtn) copyBtn.addEventListener('click', function () {",
" function fallbackCopy () {",
" var ta = document.createElement('textarea')",
" ta.value = pageUrl",
" ta.style.position = 'fixed'; ta.style.opacity = '0'",
" document.body.appendChild(ta)",
" ta.select(); ta.setSelectionRange(0, ta.value.length)",
" var ok = false",
" try { ok = document.execCommand('copy') } catch (err) { ok = false }",
" document.body.removeChild(ta)",
" collapseLink(ok ? '已复制' : '复制失败,请长按上面的链接文本手动复制')",
" return ok",
" }",
" if (navigator.clipboard && navigator.clipboard.writeText) {",
" navigator.clipboard.writeText(pageUrl).then(function () { collapseLink('已复制') }, fallbackCopy)",
" } else {",
" fallbackCopy()",
" }",
" })",
"})()"
].join('\n')
export function renderExpiredPage (): string {
return '\n\n\n'
+ '