luci-mod-system: rework leds.js and system.js views

- Drop manual RPC batch usage
- Use LuCI.Poll for status updates

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-04-05 08:17:10 +02:00
parent b21a2813b4
commit 5264a943b9
2 changed files with 121 additions and 117 deletions

View file

@ -3,42 +3,44 @@
'require rpc'; 'require rpc';
'require form'; 'require form';
var callInitAction, callLeds, callUSB, callNetdevs;
callInitAction = rpc.declare({
object: 'luci',
method: 'initCall',
params: [ 'name', 'action' ],
expect: { result: false }
});
callLeds = rpc.declare({
object: 'luci',
method: 'leds'
});
callUSB = rpc.declare({
object: 'luci',
method: 'usb'
});
callNetdevs = rpc.declare({
object: 'luci',
method: 'ifaddrs',
expect: { result: [] },
filter: function(res) {
var devs = {};
for (var i = 0; i < res.length; i++)
devs[res[i].name] = true;
return Object.keys(devs).sort();
}
});
return L.view.extend({ return L.view.extend({
callInitAction: rpc.declare({
object: 'luci',
method: 'initCall',
params: [ 'name', 'action' ],
expect: { result: false }
}),
callLeds: rpc.declare({
object: 'luci',
method: 'leds'
}),
callUSB: rpc.declare({
object: 'luci',
method: 'usb'
}),
callNetdevs: rpc.declare({
object: 'luci',
method: 'ifaddrs',
expect: { result: [] },
filter: function(res) {
var devs = {};
for (var i = 0; i < res.length; i++)
devs[res[i].name] = true;
return Object.keys(devs).sort();
}
}),
load: function() { load: function() {
rpc.batch(); return Promise.all([
this.callLeds(); callLeds(),
this.callUSB(); callUSB(),
this.callNetdevs(); callNetdevs()
return rpc.flush(); ]);
}, },
render: function(results) { render: function(results) {

View file

@ -3,82 +3,84 @@
'require rpc'; 'require rpc';
'require form'; 'require form';
var callInitList, callInitAction, callLocaltime, callTimezone, CBILocalTime;
callInitList = rpc.declare({
object: 'luci',
method: 'initList',
params: [ 'name' ],
expect: { result: {} },
filter: function(res) {
for (var k in res)
return +res[k].enabled;
return null;
}
});
callInitAction = rpc.declare({
object: 'luci',
method: 'initCall',
params: [ 'name', 'action' ],
expect: { result: false }
});
callLocaltime = rpc.declare({
object: 'luci',
method: 'localtime',
expect: { localtime: 0 }
});
callTimezone = rpc.declare({
object: 'luci',
method: 'timezone',
expect: { result: {} }
});
CBILocalTime = form.DummyValue.extend({
renderWidget: function(section_id, option_id, cfgvalue) {
return E([], [
E('span', { 'id': 'localtime' },
new Date(cfgvalue * 1000).toLocaleString()),
' ',
E('button', {
'class': 'cbi-button cbi-button-apply',
'click': function() {
this.blur();
this.classList.add('spinning');
this.disabled = true;
callLocaltime(Math.floor(Date.now() / 1000)).then(L.bind(function() {
this.classList.remove('spinning');
this.disabled = false;
}, this));
}
}, _('Sync with browser')),
' ',
this.ntpd_support ? E('button', {
'class': 'cbi-button cbi-button-apply',
'click': function() {
this.blur();
this.classList.add('spinning');
this.disabled = true;
callInitAction('sysntpd', 'restart').then(L.bind(function() {
this.classList.remove('spinning');
this.disabled = false;
}, this));
}
}, _('Sync with NTP-Server')) : ''
]);
},
});
return L.view.extend({ return L.view.extend({
callInitList: rpc.declare({
object: 'luci',
method: 'initList',
params: [ 'name' ],
expect: { result: {} },
filter: function(res) {
for (var k in res)
return +res[k].enabled;
return null;
}
}),
callInitAction: rpc.declare({
object: 'luci',
method: 'initCall',
params: [ 'name', 'action' ],
expect: { result: false }
}),
callLocaltime: rpc.declare({
object: 'luci',
method: 'localtime',
expect: { localtime: 0 }
}),
callTimezone: rpc.declare({
object: 'luci',
method: 'timezone',
expect: { result: {} }
}),
CBILocalTime: form.DummyValue.extend({
renderWidget: function(section_id, option_id, cfgvalue) {
return E([], [
E('span', { 'id': 'localtime' },
new Date(cfgvalue * 1000).toLocaleString()),
' ',
E('button', {
'class': 'cbi-button cbi-button-apply',
'click': L.bind(function(ev) {
ev.target.blur();
ev.target.classList.add('spinning');
ev.target.disabled = true;
this.callLocaltime(Math.floor(Date.now() / 1000)).then(function() {
ev.target.classList.remove('spinning');
ev.target.disabled = false;
});
}, this)
}, _('Sync with browser')),
' ',
this.ntpd_support ? E('button', {
'class': 'cbi-button cbi-button-apply',
'click': L.bind(function(ev) {
ev.target.blur();
ev.target.classList.add('spinning');
ev.target.disabled = true;
this.callLocaltime(Math.floor(Date.now() / 1000)).then(function() {
ev.target.classList.remove('spinning');
ev.target.disabled = false;
});
}, this)
}, _('Sync with NTP-Server')) : ''
]);
},
}),
load: function() { load: function() {
rpc.batch(); return Promise.all([
this.callInitList('sysntpd'); callInitList('sysntpd'),
this.callInitList('zram'); callInitList('zram'),
this.callTimezone(); callTimezone(),
this.callLocaltime(); callLocaltime(),
uci.load('luci'); uci.load('luci'),
uci.load('system'); uci.load('system')
return rpc.flush(); ]);
}, },
render: function(rpc_replies) { render: function(rpc_replies) {
@ -86,7 +88,6 @@ return L.view.extend({
zram_support = rpc_replies[1], zram_support = rpc_replies[1],
timezones = rpc_replies[2], timezones = rpc_replies[2],
localtime = rpc_replies[3], localtime = rpc_replies[3],
view = this,
ntp_setup, ntp_enabled, m, s, o; ntp_setup, ntp_enabled, m, s, o;
m = new form.Map('system', m = new form.Map('system',
@ -109,7 +110,7 @@ return L.view.extend({
* System Properties * System Properties
*/ */
o = s.taboption('general', this.CBILocalTime, '_systime', _('Local Time')); o = s.taboption('general', CBILocalTime, '_systime', _('Local Time'));
o.cfgvalue = function() { return localtime }; o.cfgvalue = function() { return localtime };
o.ntpd_support = ntpd_support; o.ntpd_support = ntpd_support;
@ -249,7 +250,7 @@ return L.view.extend({
else else
uci.unset('system', 'ntp', 'enabled'); uci.unset('system', 'ntp', 'enabled');
return view.callInitAction('sysntpd', 'enable'); return callInitAction('sysntpd', 'enable');
}; };
o.load = function(section_id) { o.load = function(section_id) {
return (ntpd_support == 1 && return (ntpd_support == 1 &&
@ -273,13 +274,14 @@ return L.view.extend({
}; };
} }
window.setInterval(L.bind(function() { return m.render().then(function(mapEl) {
this.callLocaltime().then(function(t) { L.Poll.add(function() {
var lt = document.getElementById('localtime'); return callLocaltime().then(function(t) {
if (lt) lt.innerHTML = new Date(t * 1000).toLocaleString(); mapEl.querySelector('#localtime').innerHTML = new Date(t * 1000).toLocaleString();
});
}); });
}, this), 5000);
return m.render(); return mapEl;
});
} }
}); });