luci-mod-system: port reboot view to client side js
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
1d68853cce
commit
b637cf6750
3 changed files with 60 additions and 68 deletions
|
@ -0,0 +1,59 @@
|
||||||
|
'use strict';
|
||||||
|
'require fs';
|
||||||
|
'require ui';
|
||||||
|
'require uci';
|
||||||
|
'require rpc';
|
||||||
|
|
||||||
|
var callReboot = rpc.declare({
|
||||||
|
object: 'luci',
|
||||||
|
method: 'setReboot',
|
||||||
|
expect: { result: false }
|
||||||
|
});
|
||||||
|
|
||||||
|
return L.view.extend({
|
||||||
|
load: function() {
|
||||||
|
return uci.changes();
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function(changes) {
|
||||||
|
var body = E([
|
||||||
|
E('h2', _('Reboot')),
|
||||||
|
E('p', {}, _('Reboots the operating system of your device'))
|
||||||
|
]);
|
||||||
|
|
||||||
|
for (var config in (changes || {})) {
|
||||||
|
body.appendChild(E('p', { 'class': 'alert-message warning' },
|
||||||
|
_('Warning: There are unsaved changes that will get lost on reboot!')));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.appendChild(E('hr'));
|
||||||
|
body.appendChild(E('button', {
|
||||||
|
'class': 'cbi-button cbi-button-action important',
|
||||||
|
'click': ui.createHandlerFn(this, 'handleReboot')
|
||||||
|
}, _('Perform reboot')));
|
||||||
|
|
||||||
|
return body;
|
||||||
|
},
|
||||||
|
|
||||||
|
handleReboot: function(ev) {
|
||||||
|
return callReboot().then(function() {
|
||||||
|
L.ui.showModal(_('Rebooting…'), [
|
||||||
|
E('p', { 'class': 'spinning' }, _('Waiting for device...'))
|
||||||
|
]);
|
||||||
|
|
||||||
|
window.setTimeout(function() {
|
||||||
|
L.ui.showModal(_('Rebooting…'), [
|
||||||
|
E('p', { 'class': 'spinning alert-message warning' },
|
||||||
|
_('Device unreachable! Still waiting for device...'))
|
||||||
|
]);
|
||||||
|
}, 150000);
|
||||||
|
|
||||||
|
L.ui.awaitReconnect();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
handleSaveApply: null,
|
||||||
|
handleSave: null,
|
||||||
|
handleReset: null
|
||||||
|
});
|
|
@ -31,10 +31,5 @@ function index()
|
||||||
|
|
||||||
entry({"admin", "system", "flash"}, view("system/flash"), _("Backup / Flash Firmware"), 70)
|
entry({"admin", "system", "flash"}, view("system/flash"), _("Backup / Flash Firmware"), 70)
|
||||||
|
|
||||||
entry({"admin", "system", "reboot"}, template("admin_system/reboot"), _("Reboot"), 90)
|
entry({"admin", "system", "reboot"}, view("system/reboot"), _("Reboot"), 90)
|
||||||
entry({"admin", "system", "reboot", "call"}, post("action_reboot"))
|
|
||||||
end
|
|
||||||
|
|
||||||
function action_reboot()
|
|
||||||
luci.sys.reboot()
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
<%#
|
|
||||||
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.
|
|
||||||
-%>
|
|
||||||
|
|
||||||
<%+header%>
|
|
||||||
|
|
||||||
<h2 name="content"><%:Reboot%></h2>
|
|
||||||
|
|
||||||
<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="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p>
|
|
||||||
<%- end -%>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<input class="cbi-button cbi-button-action important" type="button" value="<%:Perform reboot%>" onclick="reboot(this)" />
|
|
||||||
|
|
||||||
<p class="alert-message notice reboot-message" style="display:none">
|
|
||||||
<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" />
|
|
||||||
<span><%:Device is rebooting...%></span>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<script type="text/javascript">//<![CDATA[
|
|
||||||
var tries = 0,
|
|
||||||
message = document.querySelector('p.reboot-message'),
|
|
||||||
label = message.querySelector('span');
|
|
||||||
|
|
||||||
function ok() {
|
|
||||||
window.location = '<%=url("admin")%>';
|
|
||||||
}
|
|
||||||
|
|
||||||
function check() {
|
|
||||||
window.setTimeout(ping, 5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
function ping() {
|
|
||||||
var img = document.createElement('img');
|
|
||||||
|
|
||||||
img.onload = ok;
|
|
||||||
img.onerror = check;
|
|
||||||
img.src = '<%=resource%>/icons/loading.gif?' + Math.random();
|
|
||||||
|
|
||||||
if (tries++ >= 30) {
|
|
||||||
message.classList.remove('notice');
|
|
||||||
message.classList.add('warning');
|
|
||||||
label.innerHTML = '<%:Device unreachable! Still waiting for device...%>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function reboot(button) {
|
|
||||||
button.style.display = 'none';
|
|
||||||
message.style.display = '';
|
|
||||||
label.innerHTML = '<%:Waiting for device...%>';
|
|
||||||
|
|
||||||
(new XHR()).post('<%=url("admin/system/reboot/call")%>', { token: '<%=token%>' }, check);
|
|
||||||
}
|
|
||||||
//]]></script>
|
|
||||||
|
|
||||||
<%+footer%>
|
|
Loading…
Reference in a new issue