summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/luasrc/view/cbi/filebrowser.htm
blob: a79beebba725a1bbb0432d52117ebc5880744476 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?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("nixio.fs")
		require("nixio.util")
		require("luci.http")
		require("luci.dispatcher")

		local field   = luci.http.formvalue('field')
		local request = luci.dispatcher.context.args
		local path    = { '' }

		for i = 1, #request do
			if request[i] ~= '..' and #request[i] > 0 then
				path[#path+1] = request[i]
			end
		end

		local filepath = table.concat( path, '/' )
		local filestat = nixio.fs.stat( filepath )
		local baseurl  = luci.dispatcher.build_url('admin', 'filebrowser')

		if filestat and filestat.type == "reg" then
			table.remove( path, #path )
			filepath = table.concat( path, '/' ) .. '/'
		elseif not ( filestat and filestat.type == "dir" ) then
			path     = { '' }
			filepath = '/'
		else
			filepath = filepath .. '/'
		end

		local entries = nixio.util.consume((nixio.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 = nixio.fs.stat(filepath..e)
				if stat and stat.type == 'dir' then
			-%>
				<li class="dir">
					<img src="<%=resource%>/cbi/folder.gif" alt="<%:Directory%>" />
					<a href="<%=baseurl%>/<%=e%>?field=<%=field%>"><%=e%>/</a>
				</li>
			<% end end -%>

			<% for _, e in luci.util.vspairs(entries) do
			    local stat = nixio.fs.stat(filepath..e)
				if stat and stat.type ~= 'dir' then
			-%>
				<li class="file">
					<img src="<%=resource%>/cbi/file.gif" alt="<%:File%>" />
					<a href="#" onclick="callback('<%=filepath..e%>')"><%=e%></a>
				</li>
			<% end end -%>
		</ul>
	</div>
</body>
</html>