* luci/libs/cbi: implement file browse fields
* luci/modules/admin-full: add file browse controller
This commit is contained in:
parent
720295d973
commit
b618361bf1
5 changed files with 189 additions and 0 deletions
|
@ -167,3 +167,13 @@ function cbi_combobox_init(id, values, def, man) {
|
|||
});
|
||||
cbi_combobox(id, values, def, man);
|
||||
}
|
||||
|
||||
function cbi_filebrowser(id, url, defpath) {
|
||||
var field = document.getElementById(id);
|
||||
var browser = window.open(
|
||||
url + ( field.value || defpath || '' ) + '?field=' + id,
|
||||
"luci_filebrowser", "width=300,height=400,left=100,top=200,scrollbars=yes"
|
||||
);
|
||||
|
||||
browser.focus();
|
||||
}
|
||||
|
|
|
@ -1395,6 +1395,12 @@ function FileUpload.__init__(self, ...)
|
|||
end
|
||||
end
|
||||
|
||||
function FileUpload.formcreated(self, section)
|
||||
return AbstractValue.formcreated(self, section) or
|
||||
luci.http.formvalue("cbi.rlf."..section.."."..self.option) or
|
||||
luci.http.formvalue("cbi.rlf."..section.."."..self.option..".x")
|
||||
end
|
||||
|
||||
function FileUpload.cfgvalue(self, section)
|
||||
local val = AbstractValue.cfgvalue(self, section)
|
||||
if val and luci.fs.access(val) then
|
||||
|
@ -1422,3 +1428,11 @@ function FileUpload.remove(self, section)
|
|||
if val and luci.fs.access(val) then luci.fs.unlink(val) end
|
||||
return AbstractValue.remove(self, section)
|
||||
end
|
||||
|
||||
|
||||
FileBrowser = class(AbstractValue)
|
||||
|
||||
function FileBrowser.__init__(self, ...)
|
||||
AbstractValue.__init__(self, ...)
|
||||
self.template = "cbi/browser"
|
||||
end
|
||||
|
|
23
libs/cbi/luasrc/view/cbi/browser.htm
Normal file
23
libs/cbi/luasrc/view/cbi/browser.htm
Normal file
|
@ -0,0 +1,23 @@
|
|||
<%#
|
||||
LuCI - Lua Configuration Interface
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
|
||||
-%>
|
||||
|
||||
<%
|
||||
local t = require("luci.tools.webadmin")
|
||||
local v = self:cfgvalue(section)
|
||||
-%>
|
||||
<%+cbi/valueheader%>
|
||||
<input class="cbi-input-text" type="text"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> />
|
||||
<input class="cbi-input-image" type="image" value="<%:cbi_browser%>" onclick="cbi_filebrowser('<%=cbid%>','<%=luci.dispatcher.build_url("admin", "filebrowser")%>'<%=self.default_path and ", '"..self.default_path.."'"%>);return false" alt="<%:cbi_browser%>" title="<%:cbi_browser%>" src="<%=resource%>/cbi/folder.png" style="vertical-align:bottom" />
|
||||
<%+cbi/valuefooter%>
|
122
libs/cbi/luasrc/view/cbi/filebrowser.htm
Normal file
122
libs/cbi/luasrc/view/cbi/filebrowser.htm
Normal file
|
@ -0,0 +1,122 @@
|
|||
<%#
|
||||
LuCI - Lua Configuration Interface
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
|
||||
-%>
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<title>Filebrowser - LuCI</title>
|
||||
<style type="text/css">
|
||||
#path, #listing {
|
||||
font-size: 85%;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
li img {
|
||||
vertical-align: bottom;
|
||||
margin-right: 0.2em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
function callback(path) {
|
||||
if( window.opener ) {
|
||||
var input = window.opener.document.getElementById('<%=luci.http.formvalue('field')%>');
|
||||
if( input ) {
|
||||
input.value = path;
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<%
|
||||
require("luci.fs")
|
||||
require("luci.http")
|
||||
require("luci.dispatcher")
|
||||
|
||||
local field = luci.http.formvalue('field')
|
||||
local request = luci.dispatcher.context.path
|
||||
local path = { '' }
|
||||
|
||||
for i = 3, #request do
|
||||
if request[i] ~= '..' and #request[i] > 0 then
|
||||
path[#path+1] = request[i]
|
||||
end
|
||||
end
|
||||
|
||||
local filepath = table.concat( path, '/' )
|
||||
local filestat = luci.fs.stat( filepath )
|
||||
local baseurl = luci.dispatcher.build_url('admin', 'filebrowser')
|
||||
|
||||
if filestat and filestat.type == "regular" then
|
||||
table.remove( path, #path )
|
||||
filepath = table.concat( path, '/' ) .. '/'
|
||||
elseif not ( filestat and filestat.type == "directory" ) then
|
||||
path = { '' }
|
||||
filepath = '/'
|
||||
else
|
||||
filepath = filepath .. '/'
|
||||
end
|
||||
|
||||
local entries = luci.fs.dir(filepath)
|
||||
-%>
|
||||
<div id="path">
|
||||
Location:
|
||||
<% for i, dir in ipairs(path) do %>
|
||||
<% if i == 1 then %>
|
||||
<a href="<%=baseurl%>?field=<%=field%>">(root)</a>
|
||||
<% elseif next(path, i) then %>
|
||||
<% baseurl = baseurl .. '/' .. dir %>
|
||||
/ <a href="<%=baseurl%>?field=<%=field%>"><%=dir%></a>
|
||||
<% else %>
|
||||
<% baseurl = baseurl .. '/' .. dir %>
|
||||
/ <%=dir%>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<div id="listing">
|
||||
<ul>
|
||||
<% for _, e in luci.util.vspairs(entries) do
|
||||
local stat = luci.fs.stat(filepath..e)
|
||||
if e ~= '.' and e ~= '..' and stat and stat.type == 'directory' then
|
||||
-%>
|
||||
<li class="dir">
|
||||
<img src="/luci-static/resources/cbi/folder.png" alt="Directory" />
|
||||
<a href="<%=baseurl%>/<%=e%>?field=<%=field%>"><%=e%>/</a>
|
||||
</li>
|
||||
<% end end -%>
|
||||
|
||||
<% for _, e in luci.util.vspairs(entries) do
|
||||
local stat = luci.fs.stat(filepath..e)
|
||||
if stat and stat.type ~= 'directory' then
|
||||
-%>
|
||||
<li class="file">
|
||||
<img src="/luci-static/resources/cbi/file.png" alt="File" />
|
||||
<a href="#" onclick="callback('<%=filepath..e%>')"><%=e%></a>
|
||||
</li>
|
||||
<% end end -%>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
20
modules/admin-full/luasrc/controller/admin/filebrowser.lua
Normal file
20
modules/admin-full/luasrc/controller/admin/filebrowser.lua
Normal file
|
@ -0,0 +1,20 @@
|
|||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
$Id$
|
||||
]]--
|
||||
|
||||
module("luci.controller.admin.filebrowser", package.seeall)
|
||||
|
||||
function index()
|
||||
entry( {"admin", "filebrowser"}, template("cbi/filebrowser") ).leaf = true
|
||||
end
|
Loading…
Reference in a new issue