<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><!--Title--> - <!--Sitename--></title>
<link rel="shortcut icon" href="<!--base_path-->favicon.ico" type="image/x-icon">
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/2.2.4/jquery.min.js"></script>
<!--MdRequireStart-->
<link rel="stylesheet" href="https://unpkg.com/github-markdown-css@3.0.1/github-markdown.css">
<script type="text/javascript" src="?jsFile=marked.js"></script>
<!--MdRequireEnd-->
<!--IsFileStart-->
<!--IsvideoFileStart-->
<script src="https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js"></script>
<!--IsvideoFileEnd-->
<!--IspdfFileStart-->
<script src="https://npm.onmicrosoft.cn/pdfjs-dist@2.4.456/build/pdf.min.js"></script>
<!--IspdfFileEnd-->
<!--IstxtFileStart-->
<script src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/monaco-editor/0.31.1/min/vs/loader.min.js"></script>
<script>
require.config({ paths: { 'vs': 'https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/monaco-editor/0.31.1/min/vs' } });
require(['vs/editor/editor.main'], function () { editor_init() });
</script>
<!--IstxtFileEnd-->
<!--IsFileEnd-->
<style>
/* 全局样式 */
:root {
--primary: #1e3c72;
--primary-light: #2a4a8a;
--bg: #f8fafc;
--card: #ffffff;
--text: #1e293b;
--text-light: #64748b;
--border: #e2e8f0;
--shadow: 0 4px 12px rgba(0,0,0,0.03);
--radius: 16px;
--radius-sm: 12px;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, 'PingFang SC', 'Microsoft YaHei', 'Segoe UI', sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.5;
min-height: 100vh;
}
a {
text-decoration: none;
color: inherit;
}
/* 头部 */
.header {
max-width: 1000px;
margin: 0 auto;
padding: 24px 24px 0;
display: flex;
align-items: center;
justify-content: space-between;
}
.site-title {
font-size: 1.6rem;
font-weight: 500;
color: var(--primary);
letter-spacing: -0.3px;
}
.login-icon {
width: 24px;
height: 24px;
fill: var(--text-light);
cursor: pointer;
transition: fill 0.2s;
}
.login-icon:hover {
fill: var(--primary);
}
/* 主容器 */
.main {
max-width: 1000px;
margin: 0 auto;
padding: 24px 24px 60px;
}
/* 面包屑 - 可点击返回 */
.breadcrumb {
margin-bottom: 28px;
font-size: 1.1rem;
color: var(--text-light);
background: var(--card);
padding: 14px 20px;
border-radius: var(--radius-sm);
border: 1px solid var(--border);
box-shadow: var(--shadow);
cursor: pointer;
transition: background 0.2s;
}
.breadcrumb:hover {
background: #f1f5f9;
}
.breadcrumb a {
color: var(--text-light);
transition: color 0.2s;
pointer-events: none;
}
.breadcrumb span {
color: var(--primary);
font-weight: 500;
}
.breadcrumb .separator {
margin: 0 8px;
color: var(--border);
}
/* 卡片 */
.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: var(--radius);
margin-bottom: 24px;
overflow: hidden;
box-shadow: var(--shadow);
transition: box-shadow 0.2s;
}
.card:hover {
box-shadow: 0 8px 20px rgba(0,0,0,0.06);
}
.card-header {
padding: 16px 24px;
background: #fafcfc;
border-bottom: 1px solid var(--border);
font-weight: 600;
color: var(--primary);
font-size: 1.1rem;
letter-spacing: 0.3px;
}
/* 文件列表表格 */
.file-table {
width: 100%;
border-collapse: collapse;
}
.file-table th {
text-align: left;
padding: 16px 20px;
background: #fafcfc;
border-bottom: 2px solid var(--primary);
font-weight: 600;
color: var(--text-light);
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.file-table td {
padding: 16px 20px;
border-bottom: 1px solid var(--border);
color: var(--text);
vertical-align: middle;
}
.file-table tr:last-child td {
border-bottom: none;
}
.file-table tbody tr {
transition: background 0.2s;
cursor: pointer;
}
.file-table tbody tr:hover {
background: #f1f5f9;
}
.file-table .file-cell {
display: flex;
align-items: center;
gap: 12px;
}
.file-table .file-icon {
width: 28px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
color: var(--primary);
flex-shrink: 0;
}
.file-table .file-icon svg {
width: 22px;
height: 22px;
fill: currentColor;
}
.file-table .file-name {
font-weight: 500;
color: var(--text);
word-break: break-word;
}
.file-table .file-meta {
color: var(--text-light);
font-size: 0.95rem;
}
.file-table .file-size {
color: var(--text-light);
font-family: monospace;
font-size: 0.95rem;
text-align: right;
}
.file-table .file-download {
text-align: center;
width: 60px;
}
.download-icon-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background: var(--primary);
color: white;
transition: all 0.2s;
cursor: pointer;
border: none;
}
.download-icon-btn:hover {
background: var(--primary-light);
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(30,60,114,0.3);
}
.download-icon-btn svg {
width: 18px;
height: 18px;
fill: white;
}
.folder-row .file-icon {
color: #f59e0b;
}
.video-row .file-icon {
color: var(--primary);
}
.video-row td:first-child {
border-left: 3px solid var(--primary);
}
.back-row td {
background: #f8fafc;
color: var(--text-light);
}
.back-row .file-name {
color: var(--text-light);
font-weight: normal;
}
/* 分页 */
.pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
margin-top: 32px;
flex-wrap: wrap;
}
.page-btn {
min-width: 80px;
padding: 10px 18px;
background: var(--card);
border: 1px solid var(--border);
border-radius: 40px;
text-align: center;
cursor: pointer;
font-size: 0.95rem;
color: var(--text);
transition: all 0.2s;
box-shadow: var(--shadow);
}
.page-btn:hover {
background: var(--primary);
color: white;
border-color: var(--primary);
transform: translateY(-1px);
}
.page-btn.active {
background: var(--primary);
color: white;
border-color: var(--primary);
}
/* 预览区域 */
.preview-image {
width: 100%;
border-radius: var(--radius-sm);
}
.video-container {
aspect-ratio: 16/9;
background: #000;
}
.video-container artplayer {
border-radius: 0 !important;
}
.pdf-container canvas {
width: 100%;
margin-bottom: 16px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
}
audio {
width: 100%;
}
.txt-editor {
height: 500px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
}
/* 下载区域 */
.download-area {
padding: 24px;
}
.download-title {
font-size: 1.2rem;
font-weight: 500;
margin-bottom: 8px;
color: var(--text);
}
.download-desc {
color: var(--text-light);
font-size: 0.95rem;
margin-bottom: 20px;
}
.url-box {
display: flex;
background: #f8fafc;
border: 1px solid var(--border);
border-radius: 60px;
margin-bottom: 20px;
overflow: hidden;
}
.url-box textarea {
flex: 1;
padding: 14px 20px;
border: none;
background: transparent;
font-family: monospace;
font-size: 0.95rem;
resize: none;
outline: none;
color: var(--text);
word-break: break-all;
white-space: normal;
min-height: 60px;
max-height: 120px;
}
.copy-btn {
padding: 0 28px;
background: var(--primary);
color: white;
border: none;
font-size: 0.95rem;
font-weight: 500;
cursor: pointer;
transition: background 0.2s;
white-space: nowrap;
}
.copy-btn:hover {
background: var(--primary-light);
}
.action-btns {
display: flex;
gap: 16px;
margin-top: 20px;
}
.action-btn {
flex: 1;
padding: 14px 24px;
border: none;
border-radius: 60px;
font-size: 1rem;
font-weight: 500;
cursor: pointer;
text-align: center;
transition: all 0.2s;
display: inline-block;
}
.action-btn.primary {
background: var(--primary);
color: white;
}
.action-btn.primary:hover {
background: var(--primary-light);
transform: translateY(-1px);
box-shadow: 0 8px 16px rgba(30,60,114,0.15);
}
.action-btn.secondary {
background: #e9ecef;
color: var(--text);
}
.action-btn.secondary:hover {
background: #dee2e6;
transform: translateY(-1px);
}
/* Toast提示 */
.toast {
position: fixed;
top: 24px;
left: 50%;
transform: translateX(-50%) translateY(-20px);
background: var(--primary);
color: white;
padding: 12px 36px;
border-radius: 60px;
font-size: 0.95rem;
box-shadow: 0 10px 25px rgba(30,60,114,0.3);
opacity: 0;
transition: all 0.3s;
z-index: 9999;
pointer-events: none;
font-weight: 500;
}
.toast.show {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
/* 加密文件夹 */
.password-form {
max-width: 360px;
margin: 0 auto;
text-align: center;
padding: 20px;
}
.password-input {
width: 100%;
padding: 14px 18px;
border: 1px solid var(--border);
border-radius: 60px;
font-size: 0.95rem;
margin-bottom: 16px;
transition: all 0.2s;
}
.password-input:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(30,60,114,0.1);
}
.submit-btn {
width: 100%;
padding: 14px 24px;
background: var(--primary);
color: white;
border: none;
border-radius: 60px;
font-size: 1rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.submit-btn:hover {
background: var(--primary-light);
transform: translateY(-1px);
}
/* 页脚 */
.footer {
text-align: center;
padding: 48px 20px 20px;
color: var(--text-light);
font-size: 0.9rem;
}
/* 移动端 */
@media (max-width: 640px) {
.header {
padding: 20px 20px 0;
}
.site-title {
font-size: 1.4rem;
}
.main {
padding: 20px 20px 40px;
}
.breadcrumb {
padding: 12px 16px;
font-size: 1rem;
margin-bottom: 16px;
}
.card-header {
padding: 14px 20px;
}
.file-table th {
padding: 14px 12px;
}
.file-table td {
padding: 14px 12px;
}
.file-table th:nth-child(2),
.file-table td:nth-child(2) {
display: none;
}
.file-table .file-size {
text-align: left;
font-size: 0.9rem;
}
.file-table .file-download {
width: 50px;
}
.download-icon-btn {
width: 32px;
height: 32px;
}
.download-icon-btn svg {
width: 16px;
height: 16px;
}
.action-btns {
flex-direction: column;
gap: 12px;
}
.url-box {
flex-direction: column;
border-radius: 30px;
}
.url-box textarea {
padding: 16px;
min-height: 80px;
max-height: 150px;
font-size: 0.9rem;
}
.copy-btn {
padding: 14px;
width: 100%;
}
.page-btn {
min-width: 70px;
padding: 8px 14px;
font-size: 0.9rem;
}
.toast {
width: 90%;
text-align: center;
padding: 12px 20px;
white-space: normal;
}
}
</style>
</head>
<body>
<!-- 头部 -->
<div class="header">
<a href="<!--base_path-->" class="site-title"><!--Sitename--></a>
<!--LoginStart-->
<div onclick="window.location.href = '/?login=admin'">
<svg class="login-icon" viewBox="0 0 16 16">
<path d="M6.22176 13.9567C3.55468 13.653 2 11.8026 2 10V9.5C2 8.67157 2.67157 8 3.5 8H5.59971C5.43777 8.31679 5.30564 8.65136 5.20703 9H3.5C3.22386 9 3 9.22386 3 9.5V10C3 11.1281 3.88187 12.333 5.50235 12.7996C5.69426 13.216 5.93668 13.6043 6.22176 13.9567ZM9.62596 5.06907C9.70657 4.81036 9.75 4.53525 9.75 4.25C9.75 2.73122 8.51878 1.5 7 1.5C5.48122 1.5 4.25 2.73122 4.25 4.25C4.25 5.53662 5.13357 6.61687 6.32704 6.91706C6.64202 6.55055 7.00446 6.226 7.40482 5.95294C7.27488 5.98371 7.13934 6 7 6C6.0335 6 5.25 5.2165 5.25 4.25C5.25 3.2835 6.0335 2.5 7 2.5C7.9665 2.5 8.75 3.2835 8.75 4.25C8.75 4.73141 8.55561 5.16743 8.24104 5.48382C8.67558 5.28783 9.14016 5.14664 9.62596 5.06907Z"/>
</svg>
</div>
<!--LoginEnd-->
</div>
<!-- 主内容 -->
<div class="main">
<!-- 面包屑 - 可点击返回上级目录 -->
<div class="breadcrumb" onclick="goToParentDir()">
<a href="<!--base_path-->"><!--Sitename--></a>
<!--DiskPathArrayStart-->
<span class="separator">/</span>
<a href="<!--PathArrayLink-->"><!--PathArrayName--></a>
<!--DiskPathArrayEnd-->
</div>
<!--ListStart-->
<!--HeadomfStart-->
<div class="card">
<div class="card-body markdown-body"><!--HeadomfContent--></div>
</div>
<!--HeadomfEnd-->
<!--HeadmdStart-->
<div class="card">
<div class="card-body markdown-body" id="head">
<textarea id="head-md" style="display:none;"><!--HeadmdContent--></textarea>
</div>
</div>
<!--HeadmdEnd-->
<!--EncryptedStart-->
<div class="card">
<div class="card-header">🔒 加密文件夹</div>
<div class="card-body">
<div class="password-form">
<form action="" method="post">
<input id="password1" name="password1" type="password" class="password-input" placeholder="请输入文件夹密码">
<input type="submit" value="确认" class="submit-btn">
</form>
</div>
</div>
</div>
<!--EncryptedEnd-->
<!--IsFileStart-->
<!-- 文件预览区域 - 只有在文件页面才显示 -->
<!--IsimgFileStart-->
<div class="card">
<div class="card-header">🖼️ 图片预览</div>
<div class="card-body">
<img src="<!--FileDownUrl-->" alt="<!--FileName-->" class="preview-image">
</div>
</div>
<!--IsimgFileEnd-->
<!--IsvideoFileStart-->
<div class="card">
<div class="card-header">🎬 视频预览</div>
<div class="card-body" style="padding:0;">
<div id="video-a0" class="video-container"></div>
</div>
</div>
<!--IsvideoFileEnd-->
<!--IspdfFileStart-->
<div class="card">
<div class="card-header">📄 文档预览</div>
<div class="card-body">
<div id="pdf-d" class="pdf-container">加载中...</div>
</div>
</div>
<!--IspdfFileEnd-->
<!--IsmusicFileStart-->
<div class="card">
<div class="card-header">🎵 音频预览</div>
<div class="card-body">
<audio src="<!--FileDownUrl-->" controls></audio>
</div>
</div>
<!--IsmusicFileEnd-->
<!--IstxtFileStart-->
<div class="card">
<div class="card-header">📝 文本预览</div>
<div class="card-body" style="padding:0;">
<div id="txt-a" class="txt-editor"></div>
</div>
</div>
<!--IstxtFileEnd-->
<!-- 下载区域 - 只有在文件页面才显示 -->
<div class="card">
<div class="card-header">📥 下载</div>
<div class="download-area">
<div class="download-title"><!--FileEncodeReplaceName--></div>
<div class="download-desc">分享链接,永久有效</div>
<div class="url-box">
<textarea id="fileUrl" rows="2" readonly></textarea>
<button class="copy-btn" onclick="copyFileUrl()">复制</button>
</div>
<div class="action-btns">
<a href="<!--FileEncodeUrl-->" class="action-btn primary" target="_blank" rel="noopener noreferrer">直接下载</a>
<!-- 返回按钮使用面包屑相同的返回上级功能 -->
<a href="javascript:void(0);" class="action-btn secondary" onclick="goToParentDir()">返回上级</a>
</div>
</div>
</div>
<!--IsFileEnd-->
<!--IsFolderStart-->
<!-- 文件列表 - 文件夹页面 -->
<div class="card">
<div class="card-header">📁 文件列表</div>
<table class="file-table">
<thead>
<tr>
<th>文件名</th>
<th>修改时间</th>
<th class="file-size">大小</th>
<!-- 下载列标题 - 只在有文件时才显示,由JS控制 -->
</tr>
</thead>
<tbody>
<!--BackArrowStart-->
<tr class="back-row" onclick="goToParentDirWithUrl('<!--BackArrowUrl-->')">
<td colspan="4">
<div class="file-cell">
<span class="file-icon">
<svg viewBox="0 0 24 24">
<path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/>
</svg>
</span>
<span class="file-name">← 返回上级</span>
</div>
</td>
</tr>
<!--BackArrowEnd-->
<!--FolderListStart-->
<tr class="folder-row" onclick="window.location.href='<!--FileEncodeReplaceUrl-->/'">
<td>
<div class="file-cell">
<span class="file-icon">
<svg viewBox="0 0 24 24">
<path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/>
</svg>
</span>
<span class="file-name"><!--FileEncodeReplaceName--></span>
</div>
</td>
<td class="file-meta"><!--lastModifiedDateTime--></td>
<td class="file-size"><!--size--></td>
<!-- 文件夹没有下载列,由JS动态添加 -->
</tr>
<!--FolderListEnd-->
<!--FileListStart-->
<tr class="video-row has-download" onclick="window.location.href='<!--FileEncodeReplaceUrl-->?preview'">
<td>
<div class="file-cell">
<span class="file-icon">
<svg viewBox="0 0 24 24">
<path d="M18 4v16H6V4h12zM4 2v20h16V2H4zm7 6h2v8h-2V8zm4 0h2v8h-2V8zm-8 0h2v8H7V8z"/>
</svg>
</span>
<span class="file-name"><!--FileEncodeReplaceName--></span>
</div>
</td>
<td class="file-meta"><!--lastModifiedDateTime--></td>
<td class="file-size"><!--size--></td>
<!-- 文件下载列,由JS动态添加 -->
</tr>
<!--FileListEnd-->
</tbody>
</table>
</div>
<!-- 动态添加下载列的脚本 - 只在有文件时显示 -->
<script>
(function() {
// 检查是否有文件行
var hasFiles = document.querySelectorAll('.video-row').length > 0;
var table = document.querySelector('.file-table');
if (table && hasFiles) {
// 添加下载列表头
var headerRow = table.querySelector('thead tr');
if (headerRow && !headerRow.querySelector('.download-header')) {
var downloadTh = document.createElement('th');
downloadTh.className = 'file-download download-header';
downloadTh.textContent = '下载';
headerRow.appendChild(downloadTh);
}
// 为所有文件行添加下载列
document.querySelectorAll('.video-row').forEach(function(row) {
if (!row.querySelector('.file-download')) {
// 获取下载URL
var fileName = row.querySelector('.file-name')?.textContent || '';
var downloadUrl = window.location.pathname.replace(/\/$/, '') + '/' + encodeURIComponent(fileName);
var downloadTd = document.createElement('td');
downloadTd.className = 'file-download';
downloadTd.innerHTML = '<a href="' + downloadUrl + '" class="download-icon-btn" onclick="event.stopPropagation()" target="_blank" rel="noopener noreferrer" title="下载"><svg viewBox="0 0 24 24"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></svg></a>';
row.appendChild(downloadTd);
}
});
// 为文件夹行和返回行添加空列
document.querySelectorAll('.folder-row, .back-row').forEach(function(row) {
if (row.children.length === 3) {
var emptyTd = document.createElement('td');
emptyTd.className = 'file-download';
row.appendChild(emptyTd);
}
});
}
})();
</script>
<!--MorePageStart-->
<form action="" method="POST" id="pageForm">
<input type="hidden" id="pageNum" name="pagenum" value="">
<div class="pagination">
<!--PrePageStart-->
<div class="page-btn" onclick="nextPage('<!--PrePageNum-->');">上一页</div>
<!--PrePageEnd-->
<!--MorePageListStart-->
<div class="page-btn" onclick="nextPage('<!--PageNum-->');"><!--PageNum--></div>
<!--MorePageListEnd-->
<!--MorePageListNowStart-->
<div class="page-btn active"><!--PageNum--></div>
<!--MorePageListNowEnd-->
<!--NextPageStart-->
<div class="page-btn" onclick="nextPage('<!--NextPageNum-->');">下一页</div>
<!--NextPageEnd-->
</div>
</form>
<script>
function nextPage(num) {
document.getElementById('pageNum').value = num;
document.getElementById('pageForm').submit();
}
</script>
<!--MorePageEnd-->
<!--IsFolderEnd-->
<!--ReadmemdStart-->
<div class="card">
<div class="card-body markdown-body" id="readme">
<textarea id="readme-md" style="display:none;"><!--ReadmemdContent--></textarea>
</div>
</div>
<!--ReadmemdEnd-->
<!--FootomfStart-->
<div class="card">
<div class="card-body markdown-body"><!--FootomfContent--></div>
</div>
<!--FootomfEnd-->
<!-- 页脚 - 移除多余的返回按钮 -->
<div class="footer">
© <span id="currentYear"></span> <!--Sitename-->
</div>
<!--ListEnd-->
</div>
<!-- Toast提示 -->
<div id="toast" class="toast"></div>
<script>
// 当前年份
document.getElementById('currentYear').textContent = new Date().getFullYear();
// Toast提示函数
function showToast(msg) {
var toast = document.getElementById('toast');
toast.textContent = msg;
toast.classList.add('show');
clearTimeout(window.toastTimer);
window.toastTimer = setTimeout(() => toast.classList.remove('show'), 2000);
}
// 获取上级目录路径
function getParentDirPath() {
var path = window.location.pathname;
// 去掉末尾的 /
if (path.endsWith('/')) {
path = path.slice(0, -1);
}
// 获取最后一个 / 之前的部分
var lastSlashIndex = path.lastIndexOf('/');
if (lastSlashIndex > 0) {
return path.substring(0, lastSlashIndex + 1);
} else {
return '/';
}
}
// 返回上级目录 - 通用函数
function goToParentDir() {
var parentPath = getParentDirPath();
window.location.href = parentPath;
}
// 返回上级目录 - 带备用URL
function goToParentDirWithUrl(url) {
if (url && url !== '' && url !== 'javascript:void(0);') {
window.location.href = url;
} else {
goToParentDir();
}
}
<!--IsFileStart-->
// 设置下载链接 - 只在文件页面执行
(function() {
var urlEl = document.getElementById('fileUrl');
if (urlEl) {
var url = decodeURIComponent(window.location.href.replace('?preview', ''));
urlEl.value = url;
// 自动调整高度
urlEl.style.height = 'auto';
urlEl.style.height = urlEl.scrollHeight + 'px';
}
})();
// 复制链接
function copyFileUrl() {
var url = document.getElementById('fileUrl').value;
if (!url) return;
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(url).then(
() => showToast('✅ 复制成功'),
() => fallbackCopy(url)
);
} else {
fallbackCopy(url);
}
}
function fallbackCopy(text) {
var ta = document.createElement('textarea');
ta.value = text;
ta.style.position = 'fixed';
ta.style.opacity = '0';
document.body.appendChild(ta);
ta.select();
ta.setSelectionRange(0, 99999);
var success = document.execCommand('copy');
showToast(success ? '✅ 复制成功' : '❌ 复制失败');
document.body.removeChild(ta);
}
<!--IsFileEnd-->
</script>
<!-- 视频播放器 -->
<!--IsvideoFileStart-->
<script>
new Artplayer({
container: '#video-a0',
url: '<!--FileDownUrl-->',
theme: '#1e3c72',
autoplay: false,
playbackRate: true,
fullscreen: true
});
</script>
<!--IsvideoFileEnd-->
<!-- PDF预览 -->
<!--IspdfFileStart-->
<script>
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://unpkg.com/pdfjs-dist@2.4.456/build/pdf.worker.min.js';
pdfjsLib.getDocument({ url: "<!--FileDownUrl-->" }).promise.then(function(pdf) {
var container = document.getElementById('pdf-d');
container.innerHTML = '';
for (var i = 1; i <= pdf.numPages; i++) {
(function(p) {
pdf.getPage(p).then(function(page) {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var viewport = page.getViewport({ scale: 1.5 });
canvas.height = viewport.height;
canvas.width = viewport.width;
canvas.style.width = '100%';
canvas.style.height = 'auto';
page.render({ canvasContext: ctx, viewport: viewport });
container.appendChild(canvas);
});
})(i);
}
});
</script>
<!--IspdfFileEnd-->
<!-- 文本编辑器 -->
<!--IstxtFileStart-->
<script>
function editor_init() {
window.monaco.editor.create(document.getElementById("txt-a"), {
value: `<!--TxtContent-->`,
readOnly: true,
theme: 'vs',
fontSize: 14,
minimap: { enabled: false }
});
}
</script>
<!--IstxtFileEnd-->
<!--IsFileEnd-->
<!-- Markdown渲染 -->
<!--HeadmdStart-->
<script>
var head = document.getElementById('head');
var headMd = document.getElementById('head-md');
if (head && headMd) head.innerHTML = marked(headMd.value);
</script>
<!--HeadmdEnd-->
<!--ReadmemdStart-->
<script>
var readme = document.getElementById('readme');
var readmeMd = document.getElementById('readme-md');
if (readme && readmeMd) readme.innerHTML = marked(readmeMd.value);
</script>
<!--ReadmemdEnd-->
</body>
</html>
文件备份boss.zip