summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-mod-system/htdocs
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-09-12 14:13:08 +0200
committerJo-Philipp Wich <jo@mein.io>2019-09-12 14:16:06 +0200
commit113e2c0217a956259ba32aee4023b76d0fa10412 (patch)
tree923ac678aa51469f6622c8b7919f6623e212a226 /modules/luci-mod-system/htdocs
parent473bd2741bd9c57ab5e6c73671138df8f99792fe (diff)
luci-mod-system: reimplent system/startup as client side view
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-mod-system/htdocs')
-rw-r--r--modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js
new file mode 100644
index 000000000..d083403cc
--- /dev/null
+++ b/modules/luci-mod-system/htdocs/luci-static/resources/view/system/startup.js
@@ -0,0 +1,92 @@
+'use strict';
+'require rpc';
+
+return L.view.extend({
+ callInitList: rpc.declare({
+ object: 'luci',
+ method: 'getInitList',
+ expect: { '': {} }
+ }),
+
+ callInitAction: rpc.declare({
+ object: 'luci',
+ method: 'setInitAction',
+ params: [ 'name', 'action' ],
+ expect: { result: false }
+ }),
+
+ load: function() {
+ return this.callInitList();
+ },
+
+ handleAction: function(name, action, ev) {
+ return this.callInitAction(name, action).then(function(success) {
+ if (success != true) {
+ L.ui.addNotification(null, E('p', _('Failed to execute "/etc/init.d/%s %s" action').format(name, action)));
+ return Promise.reject(false);
+ }
+
+ return true;
+ }).catch(function() {
+ L.ui.addNotification(null, E('p', _('Connection failure while executing "/etc/init.d/%s %s" action').format(name, action)));
+ return Promise.reject(false);
+ });
+ },
+
+ handleEnableDisable: function(name, isEnabled, ev) {
+ return this.handleAction(name, isEnabled ? 'disable' : 'enable', ev).then(L.bind(function(name, isEnabled, cell) {
+ L.dom.content(cell, this.renderEnableDisable({
+ name: name,
+ enabled: isEnabled
+ }));
+ }, this, name, !isEnabled, ev.currentTarget.parentNode));
+ },
+
+ renderEnableDisable: function(init) {
+ return E('button', {
+ class: 'btn cbi-button-%s'.format(init.enabled ? 'positive' : 'negative'),
+ click: L.ui.createHandlerFn(this, 'handleEnableDisable', init.name, init.enabled)
+ }, init.enabled ? _('Enabled') : _('Disabled'));
+ },
+
+ render: function(initList) {
+ var table = E('div', { 'class': 'table' }, [
+ E('div', { 'class': 'tr table-titles' }, [
+ E('div', { 'class': 'th' }, _('Start priority')),
+ E('div', { 'class': 'th' }, _('Initscript')),
+ E('div', { 'class': 'th' }, _('Enable/Disable')),
+ E('div', { 'class': 'th' }, _('Start')),
+ E('div', { 'class': 'th' }, _('Restart')),
+ E('div', { 'class': 'th' }, _('Stop'))
+ ])
+ ]);
+
+ var rows = [], list = [];
+
+ for (var init in initList)
+ if (initList[init].index < 100)
+ list.push(Object.assign({ name: init }, initList[init]));
+
+ list.sort(function(a, b) {
+ if (a.index != b.index)
+ return a.index - b.index
+
+ return a.name > b.name;
+ });
+
+ for (var i = 0; i < list.length; i++) {
+ rows.push([
+ '%02d'.format(list[i].index),
+ list[i].name,
+ this.renderEnableDisable(list[i]),
+ E('button', { 'class': 'btn cbi-button-action', 'click': L.ui.createHandlerFn(this, 'handleAction', list[i].name, 'start') }, _('Start')),
+ E('button', { 'class': 'btn cbi-button-action', 'click': L.ui.createHandlerFn(this, 'handleAction', list[i].name, 'restart') }, _('Restart')),
+ E('button', { 'class': 'btn cbi-button-action', 'click': L.ui.createHandlerFn(this, 'handleAction', list[i].name, 'stop') }, _('Stop'))
+ ]);
+ }
+
+ cbi_update_table(table, rows);
+
+ return table;
+ }
+});