End Of Life - discontinue this branch!
[tomato.git] / release / src / router / www / admin-sched.asp
blob7c3990b17abe4807285cab63c9a98fa5a44c4037
1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'>
2 <!--
3 Tomato GUI
4 Copyright (C) 2006-2010 Jonathan Zarate
5 http://www.polarcloud.com/tomato/
7 For use with Tomato Firmware only.
8 No part of this file may be used without permission.
9 -->
10 <html>
11 <head>
12 <meta http-equiv='content-type' content='text/html;charset=utf-8'>
13 <meta name='robots' content='noindex,nofollow'>
14 <title>[<% ident(); %>] Scheduler</title>
15 <link rel='stylesheet' type='text/css' href='tomato.css'>
16 <link rel='stylesheet' type='text/css' href='color.css'>
17 <script type='text/javascript' src='tomato.js'></script>
19 <!-- / / / -->
21 <style type='text/css'>
22 textarea {
23 width: 98%;
24 height: 10em;
26 .empty {
27 height: 2em;
29 </style>
31 <script type='text/javascript' src='debug.js'></script>
33 <script type='text/javascript'>
35 // <% nvram("sch_rboot,sch_rcon,sch_c1,sch_c1_cmd,sch_c2,sch_c2_cmd,sch_c3,sch_c3_cmd,sch_c4,sch_c4_cmd,sch_c5,sch_c5_cmd"); %>
37 var dowNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
38 var dowLow = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
39 var scheds = []
41 tm = [];
42 tm.push([0, timeString(0)]);
43 tm.push([1, timeString(1)]);
44 for (i = 15; i < 1440; i += 15) {
45 tm.push([i, timeString(i)]);
47 tm.push([1439, timeString(1439)]);
49 tm.push(
50 [-1, 'Every minute'], [-3, 'Every 3 minutes'], [-5, 'Every 5 minutes'], [-15, 'Every 15 minutes'], [-30, 'Every 30 minutes'],
51 [-60, 'Every hour'], [-(12 * 60), 'Every 12 hours'], [-(24 * 60), 'Every 24 hours'],
52 ['e', 'Every...']);
54 /* REMOVE-BEGIN
56 sch_* = en,time,days
58 REMOVE-END */
60 function makeSched(key, custom)
62 var s, v, w, a, t, i;
63 var oe;
65 scheds.push(key);
67 s = nvram['sch_' + key] || '';
68 if ((v = s.match(/^(0|1),(-?\d+),(\d+)$/)) == null) {
69 v = custom ? ['', 0, -30, 0] : ['', 0, 0, 0];
71 w = v[3] * 1;
72 if (w <= 0) w = 0xFF;
74 key = key + '_';
76 if (custom) {
77 t = tm;
79 else {
80 t = [];
81 for (i = 0; i < tm.length; ++i) {
82 if ((tm[i][0] >= 0) || (tm[i][0] <= -60) || (tm[i][0] == 'e')) t.push(tm[i]);
86 oe = 1;
87 for (i = 0; i < t.length; ++i) {
88 if (v[2] == t[i][0]) {
89 oe = 0;
90 break;
94 a = [
95 { title: 'Enabled', name: key + 'enabled', type: 'checkbox', value: v[1] == '1' },
96 { title: 'Time', multi: [
97 { name: key + 'time', type: 'select', options: t, value: oe ? 'e' : v[2] },
98 { name: key + 'every', type: 'text', maxlen: 10, size: 10, value: (v[2] < 0) ? -v[2] : 30,
99 prefix: ' ', suffix: ' <small id="_' + key + 'mins"><i>minutes</i></small>' } ] },
100 { title: 'Days', multi: [
101 { name: key + 'sun', type: 'checkbox', suffix: ' Sun &nbsp; ', value: w & 1 },
102 { name: key + 'mon', type: 'checkbox', suffix: ' Mon &nbsp; ', value: w & 2 },
103 { name: key + 'tue', type: 'checkbox', suffix: ' Tue &nbsp; ', value: w & 4 },
104 { name: key + 'wed', type: 'checkbox', suffix: ' Wed &nbsp; ', value: w & 8 },
105 { name: key + 'thu', type: 'checkbox', suffix: ' Thu &nbsp; ', value: w & 16 },
106 { name: key + 'fri', type: 'checkbox', suffix: ' Fri &nbsp; ', value: w & 32 },
107 { name: key + 'sat', type: 'checkbox', suffix: ' Sat &nbsp; &nbsp;', value: w & 64 },
108 { name: key + 'everyday', type: 'checkbox', suffix: ' Everyday', value: (w & 0x7F) == 0x7F } ] }
111 if (custom) {
112 a.push({ title: 'Command', name: 'sch_' + key + 'cmd', type: 'textarea', value: nvram['sch_' + key + 'cmd' ] });
115 createFieldTable('', a);
118 function verifySched(focused, quiet, key)
120 var e, f, i, n, b;
121 var eTime, eEvery, eEveryday, eCmd;
123 key = '_' + key + '_';
125 eTime = E(key + 'time');
126 eEvery = E(key + 'every');
127 eEvery.style.visibility = E(key + 'mins').style.visibility = (eTime.value == 'e') ? 'visible' : 'hidden';
129 eCmd = E('_sch' + key + 'cmd');
130 eEveryday = E(key + 'everyday');
132 if (E(key + 'enabled').checked) {
133 eEveryday.disabled = 0;
134 eTime.disabled = 0;
135 eEvery.disabled = 0;
136 if (eCmd) eCmd.disabled = 0;
138 if (focused == eEveryday) {
139 for (i = 0; i < 7; ++i) {
140 f = E(key + dowLow[i]);
141 f.disabled = 0;
142 f.checked = eEveryday.checked;
145 else {
146 n = 0;
147 for (i = 0; i < 7; ++i) {
148 f = E(key + dowLow[i]);
149 f.disabled = 0;
150 if (f.checked) ++n;
152 eEveryday.checked = (n == 7);
155 if ((eTime.value == 'e') && (!v_mins(eEvery, quiet, eCmd ? 1 : 60, 60 * 24 * 60))) return 0;
157 if ((eCmd) && (!v_length(eCmd, quiet, quiet ? 0 : 1, 2048))) return 0;
159 else {
160 eEveryday.disabled = 1;
161 eTime.disabled = 1;
162 eEvery.disabled = 1;
163 for (i = 0; i < 7; ++i) {
164 E(key + dowLow[i]).disabled = 1;
166 if (eCmd) eCmd.disabled = 1;
169 if (eCmd) {
170 if ((eCmd.value.length) || (!eTime.disabled)) {
171 elem.removeClass(eCmd, 'empty');
173 else {
174 elem.addClass(eCmd, 'empty');
178 return 1;
181 function verifyFields(focused, quiet)
183 for (var i = 0; i < scheds.length; ++i) {
184 if (!verifySched(focused, quiet, scheds[i])) return 0;
186 return 1;
189 function saveSched(fom, key)
191 var s, i, n, k, en, e;
193 k = '_' + key + '_';
195 en = E(k + 'enabled').checked;
196 s = en ? '1' : '0';
197 s += ',';
199 e = E(k + 'time').value;
200 if (e == 'e') s += -(E(k + 'every').value * 1);
201 else s += e;
203 n = 0;
204 for (i = 0; i < 7; ++i) {
205 if (E(k + dowLow[i]).checked) n |= (1 << i);
207 if (n == 0) {
208 n = 0x7F;
209 e = E(k + 'everyday');
210 e.checked = 1;
211 verifySched(e, key);
214 e = fom['sch_' + key];
215 e.value = s + ',' + n;
218 function save()
220 var fom, i
222 if (!verifyFields(null, false)) return;
224 fom = E('_fom');
225 for (i = 0; i < scheds.length; ++i) {
226 saveSched(fom, scheds[i]);
229 form.submit(fom, 1);
232 function init()
234 verifyFields(null, 1);
235 E('content').style.visibility = 'visible';
237 </script>
238 </head>
239 <body onload='init()'>
240 <form name='_fom' id='_fom' method='post' action='tomato.cgi'>
241 <table id='container' cellspacing=0>
242 <tr><td colspan=2 id='header'>
243 <div class='title'>Tomato</div>
244 <div class='version'>Version <% version(); %></div>
245 </td></tr>
246 <tr id='body'><td id='navi'><script type='text/javascript'>navi()</script></td>
247 <td id='content' style='visibility:hidden'>
248 <div id='ident'><% ident(); %></div>
250 <!-- / / / -->
252 <input type='hidden' name='_nextpage' value='admin-sched.asp'>
253 <input type='hidden' name='_service' value='sched-restart'>
254 <input type='hidden' name='sch_rboot' value=''>
255 <input type='hidden' name='sch_rcon' value=''>
256 <input type='hidden' name='sch_c1' value=''>
257 <input type='hidden' name='sch_c2' value=''>
258 <input type='hidden' name='sch_c3' value=''>
259 <input type='hidden' name='sch_c4' value=''>
260 <input type='hidden' name='sch_c5' value=''>
262 <div class='section-title'>Reboot</div>
263 <div class='section'>
264 <script type='text/javascript'>
265 makeSched('rboot');
266 </script>
267 </div>
269 <div class='section-title'>Reconnect</div>
270 <div class='section'>
271 <script type='text/javascript'>
272 makeSched('rcon');
273 </script>
274 </div>
276 <div class='section-title'>Custom 1</div>
277 <div class='section'>
278 <script type='text/javascript'>
279 makeSched('c1', 1);
280 </script>
281 </div>
283 <div class='section-title'>Custom 2</div>
284 <div class='section'>
285 <script type='text/javascript'>
286 makeSched('c2', 1);
287 </script>
288 </div>
290 <div class='section-title'>Custom 3</div>
291 <div class='section'>
292 <script type='text/javascript'>
293 makeSched('c3', 1);
294 </script>
295 </div>
297 <div class='section-title'>Custom 4</div>
298 <div class='section'>
299 <script type='text/javascript'>
300 makeSched('c4', 1);
301 </script>
302 </div>
304 <div class='section-title'>Custom 5</div>
305 <div class='section'>
306 <script type='text/javascript'>
307 makeSched('c5', 1);
308 </script>
309 </div>
311 <!-- / / / -->
313 </td></tr>
314 <tr><td id='footer' colspan=2>
315 <span id='footer-msg'></span>
316 <input type='button' value='Save' id='save-button' onclick='save()'>
317 <input type='button' value='Cancel' id='cancel-button' onclick='javascript:reloadPage();'>
318 </td></tr>
319 </table>
320 <br><br>
321 </form>
322 </body>
323 </html>