luci-mod-system: add led plugin infrastructure
[project/luci.git] / modules / luci-mod-system / htdocs / luci-static / resources / view / system / leds.js
1 'use strict';
2 'require uci';
3 'require rpc';
4 'require form';
5 'require fs';
6
7 var callLeds = rpc.declare({
8 object: 'luci',
9 method: 'getLEDs',
10 expect: { '': {} }
11 });
12
13 return L.view.extend({
14 load: function() {
15 return Promise.all([
16 callLeds(),
17 L.resolveDefault(fs.list('/www' + L.resource('view/system/led-trigger')), [])
18 ]).then(function(data) {
19 var plugins = data[1];
20 var tasks = [];
21
22 for (var i = 0; i < plugins.length; i++) {
23 var m = plugins[i].name.match(/^(.+)\.js$/);
24
25 if (plugins[i].type != 'file' || m == null)
26 continue;
27
28 tasks.push(L.require('view.system.led-trigger.' + m[1]).then(L.bind(function(name){
29 return L.resolveDefault(L.require('view.system.led-trigger.' + name)).then(function(form) {
30 return {
31 name: name,
32 form: form,
33 };
34 });
35 }, this, m[1])));
36 }
37
38 return Promise.all(tasks).then(function(plugins) {
39 var value = {};
40 value[0] = data[0];
41 value[1] = plugins;
42 return value;
43 });
44 });
45 },
46
47 render: function(data) {
48 var m, s, o, triggers = [];
49 var leds = data[0];
50 var plugins = data[1];
51
52 for (var k in leds)
53 for (var i = 0; i < leds[k].triggers.length; i++)
54 triggers[i] = leds[k].triggers[i];
55
56 m = new form.Map('system',
57 _('<abbr title="Light Emitting Diode">LED</abbr> Configuration'),
58 _('Customizes the behaviour of the device <abbr title="Light Emitting Diode">LED</abbr>s if possible.'));
59
60 s = m.section(form.GridSection, 'led', '');
61 s.anonymous = true;
62 s.addremove = true;
63 s.sortable = true;
64 s.addbtntitle = _('Add LED action');
65
66 s.option(form.Value, 'name', _('Name'));
67
68 o = s.option(form.ListValue, 'sysfs', _('<abbr title="Light Emitting Diode">LED</abbr> Name'));
69 Object.keys(leds).sort().forEach(function(name) {
70 o.value(name)
71 });
72
73 o = s.option(form.ListValue, 'trigger', _('Trigger'));
74 for (var i = 0; i < plugins.length; i++) {
75 var plugin = plugins[i];
76
77 if ( plugin.form.kernel == false )
78 o.value(plugin.name, plugin.form.trigger);
79 else
80 for (var k = 0; k < triggers.length; k++)
81 if ( plugin.name == triggers[k] )
82 o.value(plugin.name, plugin.form.trigger);
83 }
84
85 s.addModalOptions = function(s) {
86 for (var i = 0; i < plugins.length; i++) {
87 var plugin = plugins[i];
88 plugin.form.addFormOptions(s);
89 }
90 };
91
92 return m.render();
93 }
94 });