<%#
-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
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
+ Licensed to the public under the Apache License 2.0.
+-%>
- http://www.apache.org/licenses/LICENSE-2.0
+<%+header%>
-$Id$
+<h2 name="content"><%:Reboot%></h2>
+<br />
--%>
-<%+header%>
-<h2><a id="content" name="content"><%:System%></a></h2>
-<h3><%:Reboot%></h3>
<p><%:Reboots the operating system of your device%></p>
-<%-
-local c = require("luci.model.uci").cursor():changes()
-if c and next(c) then
--%>
- <p class="warning"><%:Warning: There are unsaved changes that will be lost while rebooting!%></p>
-<%-
-end
-if not reboot then
--%>
-<p><a href="<%=controller%>/admin/system/reboot?reboot=1"><%:Perform reboot%></a></p>
-<%- else -%>
-<p><%:Please wait: Device rebooting...%></p>
-<script type="text/javascript">setTimeout("location='<%=controller%>/admin'", 60000)</script>
+
+<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%>
+ <p class="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p>
<%- end -%>
-<%+footer%>
\ No newline at end of file
+
+<hr />
+
+<script type="text/javascript">//<![CDATA[
+ var tries = 0;
+
+ function ok() {
+ window.location = '<%=controller%>/admin';
+ }
+
+ function check() {
+ if (tries++ < 12)
+ window.setTimeout(ping, 5000);
+ else
+ alert('<%:Device unreachable%>');
+ }
+
+ function ping() {
+ var img = document.createElement('img');
+
+ img.onload = ok;
+ img.onerror = check;
+ img.src = '<%=resource%>/icons/loading.gif?' + Math.random();
+
+ document.getElementById('reboot-message').innerHTML = '<%:Waiting for device...%>';
+ }
+
+ function reboot(button) {
+ button.style.display = 'none';
+ document.getElementById('reboot-message').parentNode.style.display = '';
+
+ (new XHR()).post('<%=controller%>/admin/system/reboot/call', { token: '<%=token%>' }, check);
+ }
+//]]></script>
+
+<input class="cbi-button cbi-button-apply" type="button" value="<%:Perform reboot%>" onclick="reboot(this)" />
+
+<p class="alert-message" style="display:none">
+ <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" />
+ <span id="reboot-message"><%:Device is rebooting...%></span>
+</p>
+
+<%+footer%>