diff --git a/luci-app-fileassistant/Makefile b/luci-app-fileassistant/Makefile index 6260c37..aa30184 100644 --- a/luci-app-fileassistant/Makefile +++ b/luci-app-fileassistant/Makefile @@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI support for Fileassistant LUCI_PKGARCH:=all +PKG_VERSION:=1.0-5 +PKG_RELEASE:= include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.css b/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.css index 75a30f4..f9504b6 100644 --- a/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.css +++ b/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.css @@ -14,12 +14,15 @@ border-bottom: none; } .fb-container .panel-container { - display: flex; - align-items: center; - justify-content: space-between; - padding-bottom: 1rem; +display: flex; + padding-bottom: 1rem; + align-items: center; + justify-content: space-evenly; border-bottom: 1px solid #aaa; } +.fb-container .cbi-section-table-row { +text-align: left; +} .fb-container .upload-container { display: none; margin: 1rem 0; @@ -32,6 +35,10 @@ } .fb-container .parent-icon strong { margin-left: 1rem; + font-size: 1rem; +} +.fb-container .cbi-section-table tr .cbi-value-field { +text-align: left; } .fb-container td[class$="-icon"] { cursor: pointer; diff --git a/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.js b/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.js index eb97f09..28d6573 100644 --- a/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.js +++ b/luci-app-fileassistant/htdocs/luci-static/resources/fileassistant/fb.js @@ -91,6 +91,39 @@ String.prototype.replaceAll = function(search, replacement) { } } + 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=' @@ -130,6 +163,13 @@ String.prototype.replaceAll = function(search, replacement) { 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(/\/[^/]+($|\/$)/, '')); @@ -156,7 +196,14 @@ String.prototype.replaceAll = function(search, replacement) { } } function refresh_list(filenames, path) { - var listHtml = ''; + var listHtml = '
' + +'' + +'' + +'' + +'' + +'' + +'' + +''; if (path !== '/') { listHtml += ''; } @@ -190,13 +237,15 @@ String.prototype.replaceAll = function(search, replacement) { + '' - + + '' + '' + '' + '' + '' + ''; @@ -270,6 +319,26 @@ String.prototype.replaceAll = function(search, replacement) { } }; + 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)) { diff --git a/luci-app-fileassistant/luasrc/controller/fileassistant.lua b/luci-app-fileassistant/luasrc/controller/fileassistant.lua index c28b8ae..4568fcd 100644 --- a/luci-app-fileassistant/luasrc/controller/fileassistant.lua +++ b/luci-app-fileassistant/luasrc/controller/fileassistant.lua @@ -26,6 +26,14 @@ function index() page = entry({"admin", "system", "fileassistant", "install"}, call("fileassistant_install"), nil) page.leaf = true + page = entry({"admin", "system", "fileassistant", "mkdir"}, call("fileassistant_mkdir"), nil) + page.leaf = true + + page = entry({"admin", "system", "fileassistant", "chmod"}, call("fileassistant_chmod"), nil) + page.leaf = true + + page = entry({"admin", "system", "fileassistant", "chown"}, call("fileassistant_chown"), nil) + page.leaf = true end function list_response(path, success) @@ -109,15 +117,17 @@ function installIPK(filepath) end function fileassistant_upload() - local filecontent = luci.http.formvalue("upload-file") - local filename = luci.http.formvalue("upload-filename") - local uploaddir = luci.http.formvalue("upload-dir") - local filepath = uploaddir..filename local fp luci.http.setfilehandler( function(meta, chunk, eof) if not fp and meta and meta.name == "upload-file" then + local filename = luci.http.formvalue("upload-filename") + local uploaddir = luci.http.formvalue("upload-dir") + if not uploaddir or not filename then + error("uploaddir or filename is nil") + end + local filepath = uploaddir..filename fp = io.open(filepath, "w") end if fp and chunk then @@ -129,7 +139,25 @@ function fileassistant_upload() end ) - list_response(uploaddir, true) + list_response(luci.http.formvalue("upload-dir"), true) +end +function fileassistant_mkdir() + local path = luci.http.formvalue("path") + local dirname = luci.http.formvalue("dirname") + local success = os.execute('sh -c \'cd "'..path..'" && mkdir -p "'..dirname..'"\'') + list_response(path, success) +end +function fileassistant_chmod() + local path = luci.http.formvalue("filepath") + local newmod = luci.http.formvalue("newmod") + local success = os.execute('chmod '..newmod..' "'..path..'"') + list_response(nixio.fs.dirname(path), success) +end +function fileassistant_chown() + local path = luci.http.formvalue("filepath") + local newown = luci.http.formvalue("newown") + local success = os.execute('chown '..newown..' "'..path..'"') + list_response(nixio.fs.dirname(path), success) end function scandir(directory) diff --git a/luci-app-fileassistant/luasrc/view/fileassistant.htm b/luci-app-fileassistant/luasrc/view/fileassistant.htm index 0943041..5b0bd51 100644 --- a/luci-app-fileassistant/luasrc/view/fileassistant.htm +++ b/luci-app-fileassistant/luasrc/view/fileassistant.htm @@ -7,14 +7,15 @@
文件列表
+
- +
- + <%+footer%>
文件所有者修改时间大小权限操作
..返回上级目录
' + '' + o.displayname + '' + ''+o.owner+''+o.date+''+o.size+''+o.perms+'\ \ - ' + \ + \ + ' + install_btn + '