This commit is contained in:
2026-06-18 20:17:57 +08:00
parent 51d73095b7
commit 407b840b9e
+39 -17
View File
@@ -9,18 +9,21 @@ body{font-size:18px!important;line-height:2;font-family:sans-serif;margin:.5em 1
h1{font-size:24px!important;margin-top:0;margin-bottom:.5em;border-bottom:2px solid #ccc;padding-bottom:.3em}
.breadcrumb{font-size:18px;margin-bottom:.75em}
.breadcrumb a{color:#0066cc;cursor:pointer}
.tools-nav{margin-bottom:.75em}
.tools-link{text-decoration:underline;font-style:italic}
.loading{font-size:20px;color:#666}
.error{color:#c00;font-size:18px}
.user-bar{margin-bottom:.4em;padding:.25em 0;display:flex;align-items:center;justify-content:flex-end;gap:1em}
.user-bar .logged-in{color:green}
.user-bar .logout-btn{padding:.3em .8em;font-size:16px;cursor:pointer;background:#0066cc;color:#fff;border:none;border-radius:4px}
.user-bar .logout-btn:hover{background:#0052a3}
.file-list{width:100%}
.file-table{width:100%;border-collapse:collapse;margin-top:.25em;table-layout:fixed}
.file-table th,.file-table td{padding:.45em .65em;border-bottom:1px solid #ddd;text-align:left;vertical-align:middle;word-break:break-word}
.file-table th{font-size:17px;font-weight:600;color:#333;background:#f5f5f5;border-bottom:2px solid #ccc}
.file-table td:nth-child(1){width:52%}
.file-table td:nth-child(2),.file-table td:nth-child(3){font-size:16px;color:#555;white-space:nowrap}
.file-list{margin-top:.25em;overflow-x:auto}
.file-table{border-collapse:collapse;width:75%;table-layout:fixed}
.file-table th,.file-table td{padding:.45em .65em;border-bottom:1px solid #ddd;text-align:left;vertical-align:middle}
.file-table thead th{font-size:17px;font-weight:600;color:#333;background:#f5f5f5;border-bottom:2px solid #ccc}
.file-table .col-name{width:70%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.file-table .col-size{width:10%;white-space:nowrap;font-size:16px;color:#555}
.file-table .col-mtime{width:20%;white-space:nowrap;font-size:16px;color:#555}
.file-table a{font-size:19px!important;color:#0066cc;text-decoration:none}
.file-table a:hover{text-decoration:underline}
.file-table .dir{font-weight:bold;cursor:pointer}
@@ -85,22 +88,38 @@ return mtime;
}
}
function normalizeName(name){
return (name||"").replace(/\/$/,"");
}
function isDirectory(item){
return item.type==="directory"||/\/$/.test(item.name||"");
}
function renderBreadcrumb(path){
var parts=path?path.split("/").filter(Boolean):[];
if(parts.length===0){
document.getElementById("breadcrumb").innerHTML="";
return;
}
var html="";
var inTools=parts[0]==="tools";
var html='<a'+(inTools?' class="tools-link"':'')+' onclick="navigateTo(\'/\')">根目录</a>';
var acc="";
for(var i=0;i<parts.length;i++){
acc+=(acc?"/":"")+parts[i];
if(i>0)html+=" / ";
html+='<a onclick="navigateTo(\'/'+acc+'/\')">'+ parts[i]+"</a>";
var linkClass=parts[i]==="tools"?' class="tools-link"':'';
html+=' / <a'+linkClass+' onclick="navigateTo(\'/'+acc+'/\')">'+escapeHtml(parts[i])+"</a>";
}
document.getElementById("breadcrumb").innerHTML=html;
}
function buildToolsNavHtml(path,items){
if(path)return "";
var hasTools=items.some(function(item){return isDirectory(item)&&normalizeName(item.name)==="tools"});
if(!hasTools)return "";
return '<div class="breadcrumb tools-nav"><a class="tools-link" onclick="navigateTo(\'/tools/\')">tools</a></div>';
}
window.navigateTo=function(path){
window.location.href=path;
};
@@ -133,28 +152,31 @@ renderBreadcrumb(path);
var rows="";
var items=Array.isArray(data)?data:[];
var toolsHtml=buildToolsNavHtml(path,items);
items.forEach(function(item){
if(shouldHideFile(item.name))return;
var fullPath=(path?path+"/":"")+item.name;
var isDir=item.type==="directory";
var name=normalizeName(item.name);
if(!path&&isDirectory(item)&&name==="tools")return;
var fullPath=(path?path+"/":"")+name;
var isDir=isDirectory(item);
var size=formatSize(item.size);
var mtime=formatMtime(item.mtime);
var nameEsc=escapeHtml(item.name);
var nameEsc=escapeHtml(name)+(isDir?"/":"");
if(isDir){
var navPath="/"+fullPath+"/";
rows+="<tr><td><a onclick=\"navigateTo("+JSON.stringify(navPath)+")\" class=\"dir\" href=\"javascript:void(0)\">"+nameEsc+"/</a></td><td>"+escapeHtml(size)+"</td><td>"+escapeHtml(mtime)+"</td></tr>";
rows+="<tr><td class=\"col-name\"><a onclick='navigateTo("+JSON.stringify(navPath)+")' class=\"dir\" href=\"javascript:void(0)\">"+nameEsc+"</a></td><td class=\"col-size\">"+escapeHtml(size)+"</td><td class=\"col-mtime\">"+escapeHtml(mtime)+"</td></tr>";
}else{
rows+="<tr><td><a href=\"/"+fullPath+"?u="+encodeURIComponent(username)+"\" download>"+nameEsc+"</a></td><td>"+escapeHtml(size)+"</td><td>"+escapeHtml(mtime)+"</td></tr>";
rows+="<tr><td class=\"col-name\"><a href=\"/"+fullPath+"?u="+encodeURIComponent(username)+"\" download>"+nameEsc+"</a></td><td class=\"col-size\">"+escapeHtml(size)+"</td><td class=\"col-mtime\">"+escapeHtml(mtime)+"</td></tr>";
}
});
var tableStart='<table class="file-table"><thead><tr><th>文件名称</th><th>文件大小</th><th>上传时间</th></tr></thead><tbody>';
var tableStart='<table class="file-table"><thead><tr><th class="col-name">文件名称</th><th class="col-size">文件大小</th><th class="col-mtime">上传时间</th></tr></thead><tbody>';
var tableEnd="</tbody></table>";
if(!rows){
listEl.innerHTML=tableStart+'<tr><td class="empty-msg" colspan="3">目录为空</td></tr>'+tableEnd;
listEl.innerHTML=toolsHtml+tableStart+'<tr><td class="empty-msg" colspan="3">目录为空</td></tr>'+tableEnd;
}else{
listEl.innerHTML=tableStart+rows+tableEnd;
listEl.innerHTML=toolsHtml+tableStart+rows+tableEnd;
}
listEl.style.display="block";
})