op-packages/luci-app-syscontrol/htdocs/luci-static/resources/view/syscontrol/reboot.js
github-actions[bot] 32600acc60 🌴 Sync 2026-03-05 23:51:42
2026-03-05 23:51:42 +08:00

131 lines
4.7 KiB
JavaScript

/*
* This is open source software, licensed under the MIT License.
*
* Copyright (C) 2024 BobbyUnknown
*
* Description:
* This software provides a RAM release scheduling application for OpenWrt.
* The application allows users to configure and automate the process of
* releasing RAM on their OpenWrt router at specified intervals, helping
* to optimize system performance and resource management through a
* user-friendly web interface.
*/
'use strict';
'require view';
'require rpc';
'require ui';
'require uci';
var callReboot = rpc.declare({
object: 'system',
method: 'reboot',
expect: { result: 0 }
});
var callForceReboot = rpc.declare({
object: 'system',
method: 'reboot',
params: [ '-f' ],
expect: { result: 0 }
});
return view.extend({
load: function() {
return uci.changes();
},
render: function(changes) {
var body = E([
E('h2', _('System 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', false)
}, _('Normal Reboot')));
body.appendChild(E('button', {
'class': 'cbi-button cbi-button-negative important',
'click': ui.createHandlerFn(this, 'handleReboot', true)
}, _('Force Reboot')));
body.appendChild(E('div', { 'style': 'text-align: center; padding: 10px; font-style: italic;' }, [
E('span', {}, [
_('© Dibuat oleh '),
E('a', {
'href': 'https://github.com/bobbyunknow',
'target': '_blank',
'style': 'text-decoration: none;'
}, 'BobbyUnknown')
])
]));
return body;
},
handleReboot: function(ev, force) {
var rebootCall = force ? callForceReboot : callReboot;
var rebootType = force ? _('Force Reboot') : _('Normal Reboot');
ui.showModal(_('Confirm Reboot'), [
E('h4', { style: 'color: #d9534f; text-align: center;' }, _('Are you absolutely sure you want to reboot the system?')),
E('p', { style: 'text-align: center;' }, _('This will restart your device. All running processes will be stopped.')),
E('div', { class: 'right' }, [
E('button', {
'class': 'btn',
'click': ui.hideModal
}, _('Cancel')),
' ',
E('button', {
'class': 'btn btn-danger',
'click': ui.createHandlerFn(this, function() {
ui.hideModal();
return rebootCall().then(function(res) {
if (res != 0) {
ui.addNotification(null, E('p', _('The reboot command failed with code %d').format(res)));
throw new Error('Reboot failed');
}
ui.showModal(_('Rebooting…'), [
E('p', { 'class': 'spinning' }, _('Waiting for device...'))
]);
var checkInterval = window.setInterval(function() {
fetch(window.location.href, { method: 'HEAD', cache: 'no-cache' })
.then(function() {
window.clearInterval(checkInterval);
window.location.reload();
})
.catch(function() {});
}, 5000);
window.setTimeout(function() {
ui.showModal(_('Rebooting…'), [
E('p', { 'class': 'spinning alert-message warning' },
_('Device unreachable! Still waiting for device...'))
]);
}, 150000);
}).catch(function(e) {
ui.addNotification(null, E('p', e.message));
});
})
}, rebootType)
])
]);
},
handleSaveApply: null,
handleSave: null,
handleReset: null
});