luci-app-lldpd: rebase i18n
[project/luci.git] / modules / luci-mod-system / htdocs / luci-static / resources / view / system / leds.js
1 'use strict';
2 'require view';
3 'require uci';
4 'require rpc';
5 'require form';
6 'require fs';
7
8 var callLeds = rpc.declare({
9 object: 'luci',
10 method: 'getLEDs',
11 expect: { '': {} }
12 });
13
14 return view.extend({
15 load: function() {
16 return Promise.all([
17 callLeds(),
18 L.resolveDefault(fs.list('/www' + L.resource('view/system/led-trigger')), [])
19 ]).then(function(data) {
20 var plugins = data[1];
21 var tasks = [];
22
23 for (var i = 0; i < plugins.length; i++) {
24 var m = plugins[i].name.match(/^(.+)\.js$/);
25
26 if (plugins[i].type != 'file' || m == null)
27 continue;
28
29 tasks.push(L.require('view.system.led-trigger.' + m[1]).then(L.bind(function(name){
30 return L.resolveDefault(L.require('view.system.led-trigger.' + name)).then(function(form) {
31 return {
32 name: name,
33 form: form,
34 };
35 });
36 }, this, m[1])));
37 }
38
39 return Promise.all(tasks).then(function(plugins) {
40 var value = {};
41 value[0] = data[0];
42 value[1] = plugins;
43 return value;
44 });
45 });
46 },
47
48 render: function(data) {
49 var m, s, o, triggers = [];
50 var leds = data[0];
51 var plugins = data[1];
52
53 for (var k in leds)
54 for (var i = 0; i < leds[k].triggers.length; i++)
55 triggers[i] = leds[k].triggers[i];
56
57 m = new form.Map('system',
58 _('<abbr title="Light Emitting Diode">LED</abbr> Configuration'),
59 _('Customizes the behaviour of the device <abbr title="Light Emitting Diode">LED</abbr>s if possible.'));
60
61 s = m.section(form.GridSection, 'led', '');
62 s.anonymous = true;
63 s.addremove = true;
64 s.sortable = true;
65 s.addbtntitle = _('Add LED action');
66 s.nodescriptions = true;
67
68 s.option(form.Value, 'name', _('Name'));
69
70 o = s.option(form.ListValue, 'sysfs', _('<abbr title="Light Emitting Diode">LED</abbr> Name'));
71 Object.keys(leds).sort().forEach(function(name) {
72 o.value(name)
73 });
74
75 o = s.option(form.ListValue, 'trigger', _('Trigger'));
76 for (var i = 0; i < plugins.length; i++) {
77 var plugin = plugins[i];
78
79 if ( plugin.form.kernel == false ) {
80 o.value(plugin.name, plugin.form.trigger);
81 }
82 else {
83 if (triggers.indexOf(plugin.name) >= 0)
84 o.value(plugin.name, plugin.form.trigger);
85 }
86 }
87 o.onchange = function(ev, section, value) {
88 for (var i = 0; i < plugins.length; i++) {
89 var plugin = plugins[i];
90 if ( plugin.name === value )
91 this.map.findElement('id', 'cbid.system.%s.trigger'.format(section))
92 .nextElementSibling.innerHTML = plugin.form.description || '';
93 }
94 }
95 o.load = function(section_id) {
96 var trigger = uci.get('system', section_id, 'trigger');
97 for (var i = 0; i < plugins.length; i++) {
98 var plugin = plugins[i];
99 if ( plugin.name === trigger)
100 this.description = plugin.form.description || ' ';
101 }
102 return trigger;
103 };
104
105 s.addModalOptions = function(s) {
106 for (var i = 0; i < plugins.length; i++) {
107 var plugin = plugins[i];
108 plugin.form.addFormOptions(s);
109 }
110
111 var opts = s.getOption();
112
113 var removeIfNoneActive = function(original_remove_fn, section_id) {
114 var isAnyActive = false;
115
116 for (var optname in opts) {
117 if (opts[optname].ucioption != this.ucioption)
118 continue;
119
120 if (!opts[optname].isActive(section_id))
121 continue;
122
123 isAnyActive = true;
124 break;
125 }
126
127 if (!isAnyActive)
128 original_remove_fn.call(this, section_id);
129 };
130
131 for (var optname in opts) {
132 if (!opts[optname].ucioption || optname == opts[optname].ucioption)
133 continue;
134 opts[optname].remove = removeIfNoneActive.bind(opts[optname], opts[optname].remove);
135 }
136 };
137
138 return m.render();
139 }
140 });