1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML
4.0//EN'
>
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.
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>
21 <style type='text/css'
>
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'];
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)]);
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'],
60 function makeSched(key
, custom
)
67 s
= nvram
['sch_' + key
] || '';
68 if ((v
= s
.match(/^(0|1),(-?\d+),(\d+)$/)) == null) {
69 v
= custom
? ['', 0, -30, 0] : ['', 0, 0, 0];
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
]);
87 for (i
= 0; i
< t
.length
; ++i
) {
88 if (v
[2] == t
[i
][0]) {
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 ', value
: w
& 1 },
102 { name
: key
+ 'mon', type
: 'checkbox', suffix
: ' Mon ', value
: w
& 2 },
103 { name
: key
+ 'tue', type
: 'checkbox', suffix
: ' Tue ', value
: w
& 4 },
104 { name
: key
+ 'wed', type
: 'checkbox', suffix
: ' Wed ', value
: w
& 8 },
105 { name
: key
+ 'thu', type
: 'checkbox', suffix
: ' Thu ', value
: w
& 16 },
106 { name
: key
+ 'fri', type
: 'checkbox', suffix
: ' Fri ', value
: w
& 32 },
107 { name
: key
+ 'sat', type
: 'checkbox', suffix
: ' Sat ', value
: w
& 64 },
108 { name
: key
+ 'everyday', type
: 'checkbox', suffix
: ' Everyday', value
: (w
& 0x7F) == 0x7F } ] }
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
)
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;
136 if (eCmd
) eCmd
.disabled
= 0;
138 if (focused
== eEveryday
) {
139 for (i
= 0; i
< 7; ++i
) {
140 f
= E(key
+ dowLow
[i
]);
142 f
.checked
= eEveryday
.checked
;
147 for (i
= 0; i
< 7; ++i
) {
148 f
= E(key
+ dowLow
[i
]);
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;
160 eEveryday
.disabled
= 1;
163 for (i
= 0; i
< 7; ++i
) {
164 E(key
+ dowLow
[i
]).disabled
= 1;
166 if (eCmd
) eCmd
.disabled
= 1;
170 if ((eCmd
.value
.length
) || (!eTime
.disabled
)) {
171 elem
.removeClass(eCmd
, 'empty');
174 elem
.addClass(eCmd
, 'empty');
181 function verifyFields(focused
, quiet
)
183 for (var i
= 0; i
< scheds
.length
; ++i
) {
184 if (!verifySched(focused
, quiet
, scheds
[i
])) return 0;
189 function saveSched(fom
, key
)
191 var s
, i
, n
, k
, en
, e
;
195 en
= E(k
+ 'enabled').checked
;
199 e
= E(k
+ 'time').value
;
200 if (e
== 'e') s
+= -(E(k
+ 'every').value
* 1);
204 for (i
= 0; i
< 7; ++i
) {
205 if (E(k
+ dowLow
[i
]).checked
) n
|= (1 << i
);
209 e
= E(k
+ 'everyday');
214 e
= fom
['sch_' + key
];
215 e
.value
= s
+ ',' + n
;
222 if (!verifyFields(null, false)) return;
225 for (i
= 0; i
< scheds
.length
; ++i
) {
226 saveSched(fom
, scheds
[i
]);
234 verifyFields(null, 1);
235 E('content').style
.visibility
= 'visible';
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>
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>
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'
>
269 <div class='section-title'
>Reconnect
</div>
270 <div class='section'
>
271 <script type='text/javascript'
>
276 <div class='section-title'
>Custom
1</div>
277 <div class='section'
>
278 <script type='text/javascript'
>
283 <div class='section-title'
>Custom
2</div>
284 <div class='section'
>
285 <script type='text/javascript'
>
290 <div class='section-title'
>Custom
3</div>
291 <div class='section'
>
292 <script type='text/javascript'
>
297 <div class='section-title'
>Custom
4</div>
298 <div class='section'
>
299 <script type='text/javascript'
>
304 <div class='section-title'
>Custom
5</div>
305 <div class='section'
>
306 <script type='text/javascript'
>
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();'
>