treewide: always include cbi.js
[project/luci.git] / applications / luci-app-commands / luasrc / view / commands.htm
1 <%#
2 Copyright 2012 Jo-Philipp Wich <jow@openwrt.org>
3 Licensed to the public under the Apache License 2.0.
4 -%>
5
6 <% css = [[
7
8 .commandbox {
9 height: 12em;
10 width: 30%;
11 float: left;
12 height: 12em;
13 margin: 5px;
14 position: relative;
15 }
16
17 .commandbox h3 {
18 font-size: 1.5em !important;
19 line-height: 2em !important;
20 margin: 0 !important;
21 }
22
23 .commandbox input[type="text"] {
24 width: 50% !important;
25 }
26
27 .commandbox div {
28 position: absolute;
29 left: 0;
30 bottom: 1.5em;
31 }
32
33 ]] -%>
34
35 <%+header%>
36
37 <script type="text/javascript">//<![CDATA[
38 var stxhr = new XHR();
39
40 function command_run(id)
41 {
42 var args;
43 var field = document.getElementById(id);
44 if (field)
45 args = encodeURIComponent(field.value);
46
47 var legend = document.getElementById('command-rc-legend');
48 var output = document.getElementById('command-rc-output');
49
50 if (legend && output)
51 {
52 output.innerHTML =
53 '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
54 '<%:Waiting for command to complete...%>'
55 ;
56
57 legend.parentNode.style.display = 'block';
58 legend.style.display = 'inline';
59
60 stxhr.get('<%=url('admin/system/commands/run')%>/' + id + (args ? '/' + args : ''), null,
61 function(x, st)
62 {
63 if (st)
64 {
65 if (st.binary)
66 st.stdout = '[<%:Binary data not displayed, download instead.%>]';
67
68 legend.style.display = 'none';
69 output.innerHTML = String.format(
70 '<pre><strong># %h\n</strong>%h<span style="color:red">%h</span></pre>' +
71 '<div class="alert-message warning">%s (<%:Code:%> %d)</div>',
72 st.command, st.stdout, st.stderr,
73 (st.exitcode == 0) ? '<%:Command successful%>' : '<%:Command failed%>',
74 st.exitcode);
75 }
76 else
77 {
78 legend.style.display = 'none';
79 output.innerHTML = '<span class="error"><%:Failed to execute command!%></span>';
80 }
81
82 location.hash = '#output';
83 }
84 );
85 }
86 }
87
88 function command_download(id)
89 {
90 var args;
91 var field = document.getElementById(id);
92 if (field)
93 args = encodeURIComponent(field.value);
94
95 location.href = '<%=url('admin/system/commands/download')%>/' + id + (args ? '/' + args : '');
96 }
97
98 function command_link(id)
99 {
100 var legend = document.getElementById('command-rc-legend');
101 var output = document.getElementById('command-rc-output');
102
103 var args;
104 var field = document.getElementById(id);
105 if (field)
106 args = encodeURIComponent(field.value);
107
108 if (legend && output)
109 {
110 var prefix = location.protocol + '//' + location.host + '<%=url('command')%>/';
111 var suffix = (args ? '/' + args : '');
112
113 var link = prefix + id + suffix;
114 var link_nodownload = prefix + id + "s" + suffix;
115
116 legend.style.display = 'none';
117 output.parentNode.style.display = 'block';
118 output.innerHTML = String.format(
119 '<div class="alert-message"><p><%:Download execution result%> <a href="%s">%s</a></p><p><%:Or display result%> <a href="%s">%s</a></p></div>',
120 link, link, link_nodownload, link_nodownload
121 );
122
123 location.hash = '#output';
124 }
125 }
126
127 //]]></script>
128
129 <%
130 local uci = require "luci.model.uci".cursor()
131 local commands = { }
132
133 uci:foreach("luci", "command", function(s) commands[#commands+1] = s end)
134 %>
135
136 <form method="get" action="<%=pcdata(FULL_REQUEST_URI)%>">
137 <div class="cbi-map">
138 <h2 name="content"><%:Custom Commands%></h2>
139
140 <fieldset class="cbi-section">
141 <% local _, command; for _, command in ipairs(commands) do %>
142 <div class="commandbox">
143 <h3><%=pcdata(command.name)%></h3>
144 <p><%:Command:%> <code><%=pcdata(command.command)%></code></p>
145 <% if command.param == "1" then %>
146 <p><%:Arguments:%> <input type="text" id="<%=command['.name']%>" /></p>
147 <% end %>
148 <div>
149 <input type="button" value="<%:Run%>" class="cbi-button cbi-button-apply" onclick="command_run('<%=command['.name']%>')" />
150 <input type="button" value="<%:Download%>" class="cbi-button cbi-button-download" onclick="command_download('<%=command['.name']%>')" />
151 <% if command.public == "1" then %>
152 <input type="button" value="<%:Link%>" class="cbi-button cbi-button-link" onclick="command_link('<%=command['.name']%>')" />
153 <% end %>
154 </div>
155 </div>
156 <% end %>
157
158 <br style="clear:both" /><br />
159 <a name="output"></a>
160 </fieldset>
161 </div>
162
163 <fieldset class="cbi-section" style="display:none">
164 <legend id="command-rc-legend"><%:Collecting data...%></legend>
165 <span id="command-rc-output"></span>
166 </fieldset>
167 </form>
168
169 <%+footer%>