String.prototype.replaceAll=function(search,replacement){var target=this;return target.replace(new RegExp(search,'g'),replacement);};(function(){var iwxhr=new XHR();var listElem=document.getElementById("list-content");listElem.onclick=handleClick;var currentPath;var pathElem=document.getElementById("current-path");pathElem.onblur=function(){update_list(this.value.trim());};pathElem.onkeyup=function(evt){if(evt.keyCode==13){this.blur();}};function removePath(filename,isdir){var c=confirm('你确定要删除 '+filename+' 吗?');if(c){iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/delete',{path:concatPath(currentPath,filename),isdir:isdir},function(x,res){if(res.ec===0){refresh_list(res.data,currentPath);}});}}
function installPath(filename,isdir){if(isdir==="1"){alert('这是一个目录,请选择 ipk 文件进行安装!');return;}
var isipk=isIPK(filename);if(isipk===0){alert('只允许安装 ipk 格式的文件!');return;}
var c=confirm('你确定要安装 '+filename+' 吗?');if(c){iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/install',{filepath:concatPath(currentPath,filename),isdir:isdir},function(x,res){if(res.ec===0){location.reload();alert('安装成功!');}else{alert('安装失败,请检查文件格式!');}});}}
function isIPK(filename){var index=filename.lastIndexOf(".");var ext=filename.substr(index+1);if(ext==='ipk'){return 1;}else{return 0;}}
function renamePath(filename){var newname=prompt('请输入新的文件名:',filename);if(newname){newname=newname.trim();if(newname!=filename){var newpath=concatPath(currentPath,newname);iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/rename',{filepath:concatPath(currentPath,filename),newpath:newpath},function(x,res){if(res.ec===0){refresh_list(res.data,currentPath);}});}}}
function chmodPath(filename,isdir){var newmod=prompt('请输入新的权限位(支持八进制权限位或者a+x格式):',isdir==="1"?"0755":"0644");if(newmod){iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/chmod',{filepath:concatPath(currentPath,filename),newmod:newmod},function(x,res){if(res.ec===0){refresh_list(res.data,currentPath);}});}}
function chownPath(filename){var newown=prompt('请输入新的用户名(支持用户名或用户名:群组格式):',"root");if(newown){iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/chown',{filepath:concatPath(currentPath,filename),newown:newown},function(x,res){if(res.ec===0){refresh_list(res.data,currentPath);}});}}
function openpath(filename,dirname){dirname=dirname||currentPath;window.open('/cgi-bin/luci/admin/system/fileassistant/open?path='
+encodeURIComponent(dirname)+'&filename='
+encodeURIComponent(filename));}
function getFileElem(elem){if(elem.className.indexOf('-icon')>-1){return elem;}
else if(elem.parentNode.className.indexOf('-icon')>-1){return elem.parentNode;}}
function concatPath(path,filename){if(path==='/'){return path+filename;}
else{return path.replace(/\/$/,'')+'/'+filename;}}
function handleClick(evt){var targetElem=evt.target;var infoElem;if(targetElem.className.indexOf('cbi-button-remove')>-1){infoElem=targetElem.parentNode.parentNode;removePath(infoElem.dataset['filename'],infoElem.dataset['isdir'])}
else if(targetElem.className.indexOf('cbi-button-install')>-1){infoElem=targetElem.parentNode.parentNode;installPath(infoElem.dataset['filename'],infoElem.dataset['isdir'])}
else if(targetElem.className.indexOf('cbi-button-edit')>-1){renamePath(targetElem.parentNode.parentNode.dataset['filename']);}
else if(targetElem.className.indexOf('cbi-button-chmod')>-1){infoElem=targetElem.parentNode.parentNode;chmodPath(infoElem.dataset['filename'],infoElem.dataset['isdir']);}
else if(targetElem.className.indexOf('cbi-button-chown')>-1){chownPath(targetElem.parentNode.parentNode.dataset['filename']);}
else if(targetElem=getFileElem(targetElem)){if(targetElem.className.indexOf('parent-icon')>-1){update_list(currentPath.replace(/\/[^/]+($|\/$)/,''));}
else if(targetElem.className.indexOf('file-icon')>-1){openpath(targetElem.parentNode.dataset['filename']);}
else if(targetElem.className.indexOf('link-icon')>-1){infoElem=targetElem.parentNode;var filepath=infoElem.dataset['linktarget'];if(filepath){if(infoElem.dataset['isdir']==="1"){update_list(filepath);}
else{var lastSlash=filepath.lastIndexOf('/');openpath(filepath.substring(lastSlash+1),filepath.substring(0,lastSlash));}}}
else if(targetElem.className.indexOf('folder-icon')>-1){update_list(concatPath(currentPath,targetElem.parentNode.dataset['filename']))}}}
function refresh_list(filenames,path){var listHtml='<table class="cbi-section-table"><thead><tr class="cbi-section-table-row cbi-rowstyle-2">'
+'<td class="cbi-value-field">文件</td>'
+'<td class="cbi-value-field">所有者</td>'
+'<td class="cbi-value-field">修改时间</td>'
+'<td class="cbi-value-field">大小</td>'
+'<td class="cbi-value-field">权限</td>'
+'<td class="cbi-section-table-cell">操作</td>'
+'</tr></thead><tbody>';if(path!=='/'){listHtml+='<tr class="cbi-section-table-row cbi-rowstyle-2"><td class="parent-icon" colspan="6"><strong>..</strong></td></tr>';}
if(filenames){for(var i=0;i<filenames.length;i++){var line=filenames[i];if(line){var f=line.match(/(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+([\S\s]+)/);var isLink=f[1][0]==='z'||f[1][0]==='l'||f[1][0]==='x';var o={displayname:f[9],filename:isLink?f[9].split(' -> ')[0]:f[9],perms:f[1],date:f[7]+' '+f[6]+' '+f[8],size:f[5],owner:f[3],icon:(f[1][0]==='d')?"folder-icon":(isLink?"link-icon":"file-icon")};var install_btn='<button class="cbi-button cbi-button-install" style="visibility: hidden;">安装</button>';var index=o.filename.lastIndexOf(".");var ext=o.filename.substr(index+1);if(ext==='ipk'){install_btn='<button class="cbi-button cbi-button-install">安装</button>';}
listHtml+='<tr class="cbi-section-table-row cbi-rowstyle-'+(1+i%2)
+'" data-filename="'+o.filename+'" data-isdir="'+Number(f[1][0]==='d'||f[1][0]==='z')+'"'
+((f[1][0]==='z'||f[1][0]==='l')?(' data-linktarget="'+f[9].split(' -> ')[1]):'')
+'">'
+'<td class="cbi-value-field '+o.icon+'">'
+'<strong>'+o.displayname+'</strong>'
+'</td>'
+'<td class="cbi-value-field cbi-value-owner">'+o.owner+'</td>'
+'<td class="cbi-value-field cbi-value-date">'+o.date+'</td>'
+'<td class="cbi-value-field cbi-value-size">'+o.size+'</td>'
+'<td class="cbi-value-field cbi-value-perm">'+o.perms+'</td>'
+'<td class="cbi-section-table-cell">\
<button class="cbi-button cbi-button-edit">重命名</button>\
<button class="cbi-button cbi-button-remove">删除</button>\
<button class="cbi-button cbi-button-apply cbi-button-chmod">改权限</button>\
<button class="cbi-button cbi-button-apply cbi-button-chown">改用户</button>'
+install_btn
+'</td>'
+'</tr>';}}}
listHtml+="</table>";listElem.innerHTML=listHtml;}
function update_list(path,opt){opt=opt||{};path=concatPath(path,'');if(currentPath!=path){iwxhr.get('/cgi-bin/luci/admin/system/fileassistant/list',{path:path},function(x,res){if(res.ec===0){refresh_list(res.data,path);}
else{refresh_list([],path);}});if(!opt.popState){history.pushState({path:path},null,'?path='+path);}
currentPath=path;pathElem.value=currentPath;}};var uploadToggle=document.getElementById('upload-toggle');var uploadContainer=document.getElementById('upload-container');var isUploadHide=true;uploadToggle.onclick=function(){if(isUploadHide){uploadContainer.style.display='inline-flex';}
else{uploadContainer.style.display='none';}
isUploadHide=!isUploadHide;};var uploadBtn=uploadContainer.getElementsByClassName('cbi-input-apply')[0];uploadBtn.onclick=function(evt){var uploadinput=document.getElementById('upload-file');var fullPath=uploadinput.value;if(!fullPath){evt.preventDefault();}
else{var formData=new FormData();var startIndex=(fullPath.indexOf('\\')>=0?fullPath.lastIndexOf('\\'):fullPath.lastIndexOf('/'));formData.append('upload-filename',fullPath.substring(startIndex+1));formData.append('upload-dir',concatPath(currentPath,''));formData.append('upload-file',uploadinput.files[0]);var xhr=new XMLHttpRequest();xhr.open("POST","/cgi-bin/luci/admin/system/fileassistant/upload",true);xhr.onload=function(){if(xhr.status==200){var res=JSON.parse(xhr.responseText);refresh_list(res.data,currentPath);uploadinput.value='';}
else{alert('上传失败,请稍后再试...');}};xhr.send(formData);}};document.getElementById('mkdir-toggle').onclick=function(){var dirname=null;if(dirname=prompt("请输入文件夹名称:")){var formData=new FormData();formData.append('path',currentPath);formData.append('dirname',dirname);var xhr=new XMLHttpRequest();xhr.open("POST","/cgi-bin/luci/admin/system/fileassistant/mkdir",true);xhr.onload=function(){if(xhr.status==200){var res=JSON.parse(xhr.responseText);refresh_list(res.data,currentPath);}
else{alert('创建失败,请稍后再试...');}};xhr.send(formData);}};document.addEventListener('DOMContentLoaded',function(evt){var initPath='/';if(/path=([/\w]+)/.test(location.search)){initPath=RegExp.$1;}
update_list(initPath,{popState:true});});window.addEventListener('popstate',function(evt){var path='/';if(evt.state&&evt.state.path){path=evt.state.path;}
update_list(path,{popState:true});});})();