In this case the cbi description div will not be generated and when switching to another trigger later, attempts to change the description div contents will fail. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
140 lines
3.5 KiB
JavaScript
140 lines
3.5 KiB
JavaScript
'use strict';
|
|
'require view';
|
|
'require uci';
|
|
'require rpc';
|
|
'require form';
|
|
'require fs';
|
|
|
|
var callLeds = rpc.declare({
|
|
object: 'luci',
|
|
method: 'getLEDs',
|
|
expect: { '': {} }
|
|
});
|
|
|
|
return view.extend({
|
|
load: function() {
|
|
return Promise.all([
|
|
callLeds(),
|
|
L.resolveDefault(fs.list('/www' + L.resource('view/system/led-trigger')), [])
|
|
]).then(function(data) {
|
|
var plugins = data[1];
|
|
var tasks = [];
|
|
|
|
for (var i = 0; i < plugins.length; i++) {
|
|
var m = plugins[i].name.match(/^(.+)\.js$/);
|
|
|
|
if (plugins[i].type != 'file' || m == null)
|
|
continue;
|
|
|
|
tasks.push(L.require('view.system.led-trigger.' + m[1]).then(L.bind(function(name){
|
|
return L.resolveDefault(L.require('view.system.led-trigger.' + name)).then(function(form) {
|
|
return {
|
|
name: name,
|
|
form: form,
|
|
};
|
|
});
|
|
}, this, m[1])));
|
|
}
|
|
|
|
return Promise.all(tasks).then(function(plugins) {
|
|
var value = {};
|
|
value[0] = data[0];
|
|
value[1] = plugins;
|
|
return value;
|
|
});
|
|
});
|
|
},
|
|
|
|
render: function(data) {
|
|
var m, s, o, triggers = [];
|
|
var leds = data[0];
|
|
var plugins = data[1];
|
|
|
|
for (var k in leds)
|
|
for (var i = 0; i < leds[k].triggers.length; i++)
|
|
triggers[i] = leds[k].triggers[i];
|
|
|
|
m = new form.Map('system',
|
|
_('<abbr title="Light Emitting Diode">LED</abbr> Configuration'),
|
|
_('Customizes the behaviour of the device <abbr title="Light Emitting Diode">LED</abbr>s if possible.'));
|
|
|
|
s = m.section(form.GridSection, 'led', '');
|
|
s.anonymous = true;
|
|
s.addremove = true;
|
|
s.sortable = true;
|
|
s.addbtntitle = _('Add LED action');
|
|
s.nodescriptions = true;
|
|
|
|
s.option(form.Value, 'name', _('Name'));
|
|
|
|
o = s.option(form.ListValue, 'sysfs', _('<abbr title="Light Emitting Diode">LED</abbr> Name'));
|
|
Object.keys(leds).sort().forEach(function(name) {
|
|
o.value(name)
|
|
});
|
|
|
|
o = s.option(form.ListValue, 'trigger', _('Trigger'));
|
|
for (var i = 0; i < plugins.length; i++) {
|
|
var plugin = plugins[i];
|
|
|
|
if ( plugin.form.kernel == false ) {
|
|
o.value(plugin.name, plugin.form.trigger);
|
|
}
|
|
else {
|
|
if (triggers.indexOf(plugin.name) >= 0)
|
|
o.value(plugin.name, plugin.form.trigger);
|
|
}
|
|
}
|
|
o.onchange = function(ev, section, value) {
|
|
for (var i = 0; i < plugins.length; i++) {
|
|
var plugin = plugins[i];
|
|
if ( plugin.name === value )
|
|
this.map.findElement('id', 'cbid.system.%s.trigger'.format(section))
|
|
.nextElementSibling.innerHTML = plugin.form.description || '';
|
|
}
|
|
}
|
|
o.load = function(section_id) {
|
|
var trigger = uci.get('system', section_id, 'trigger');
|
|
for (var i = 0; i < plugins.length; i++) {
|
|
var plugin = plugins[i];
|
|
if ( plugin.name === trigger)
|
|
this.description = plugin.form.description || ' ';
|
|
}
|
|
return trigger;
|
|
};
|
|
|
|
s.addModalOptions = function(s) {
|
|
for (var i = 0; i < plugins.length; i++) {
|
|
var plugin = plugins[i];
|
|
plugin.form.addFormOptions(s);
|
|
}
|
|
|
|
var opts = s.getOption();
|
|
|
|
var removeIfNoneActive = function(original_remove_fn, section_id) {
|
|
var isAnyActive = false;
|
|
|
|
for (var optname in opts) {
|
|
if (opts[optname].ucioption != this.ucioption)
|
|
continue;
|
|
|
|
if (!opts[optname].isActive(section_id))
|
|
continue;
|
|
|
|
isAnyActive = true;
|
|
break;
|
|
}
|
|
|
|
if (!isAnyActive)
|
|
original_remove_fn.call(this, section_id);
|
|
};
|
|
|
|
for (var optname in opts) {
|
|
if (!opts[optname].ucioption || optname == opts[optname].ucioption)
|
|
continue;
|
|
opts[optname].remove = removeIfNoneActive.bind(opts[optname], opts[optname].remove);
|
|
}
|
|
};
|
|
|
|
return m.render();
|
|
}
|
|
});
|