c
This commit is contained in:
+39
-17
@@ -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";
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user