luci-mod-system: leds.js: display default state as On/Off
[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 tools.widgets as widgets';
6
7 var callLeds, callUSB;
8
9 callLeds = rpc.declare({
10 object: 'luci',
11 method: 'getLEDs',
12 expect: { '': {} }
13 });
14
15 callUSB = rpc.declare({
16 object: 'luci',
17 method: 'getUSBDevices',
18 expect: { '': {} }
19 });
20
21 return L.view.extend({
22 load: function() {
23 return Promise.all([
24 callLeds(),
25 callUSB()
26 ]);
27 },
28
29 render: function(results) {
30 var leds = results[0],
31 usb = results[1],
32 triggers = {},
33 m, s, o;
34
35 for (var k in leds)
36 for (var i = 0; i < leds[k].triggers.length; i++)
37 triggers[leds[k].triggers[i]] = true;
38
39 m = new form.Map('system',
40 _('<abbr title="Light Emitting Diode">LED</abbr> Configuration'),
41 _('Customizes the behaviour of the device <abbr title="Light Emitting Diode">LED</abbr>s if possible.'));
42
43 s = m.section(form.GridSection, 'led', '');
44 s.anonymous = true;
45 s.addremove = true;
46 s.sortable = true;
47 s.addbtntitle = _('Add LED action');
48
49 s.option(form.Value, 'name', _('Name'));
50
51 o = s.option(form.ListValue, 'sysfs', _('<abbr title="Light Emitting Diode">LED</abbr> Name'));
52 Object.keys(leds).sort().forEach(function(name) { o.value(name) });
53
54 o = s.option(form.Flag, 'default', _('Default state'));
55 o.rmempty = false;
56 o.textvalue = function(section_id) {
57 var cval = this.cfgvalue(section_id);
58
59 if (cval == null)
60 cval = this.default;
61
62 return (cval == this.enabled) ? _('On') : _('Off');
63 };
64
65 o = s.option(form.ListValue, 'trigger', _('Trigger'));
66 if (usb.devices && usb.devices.length)
67 triggers['usbdev'] = true;
68 if (usb.ports && usb.ports.length)
69 triggers['usbport'] = true;
70 Object.keys(triggers).sort().forEach(function(t) { o.value(t, t.replace(/-/g, '')) });
71
72 o = s.option(form.Value, 'delayon', _('On-State Delay'));
73 o.modalonly = true;
74 o.depends('trigger', 'timer');
75
76 o = s.option(form.Value, 'delayoff', _('Off-State Delay'));
77 o.modalonly = true;
78 o.depends('trigger', 'timer');
79
80 o = s.option(widgets.DeviceSelect, '_net_dev', _('Device'));
81 o.rmempty = true;
82 o.ucioption = 'dev';
83 o.modalonly = true;
84 o.noaliases = true;
85 o.depends('trigger', 'netdev');
86 o.remove = function(section_id) {
87 var topt = this.map.lookupOption('trigger', section_id),
88 tval = topt ? topt[0].formvalue(section_id) : null;
89
90 if (tval != 'netdev' && tval != 'usbdev')
91 uci.unset('system', section_id, 'dev');
92 };
93
94 o = s.option(form.MultiValue, 'mode', _('Trigger Mode'));
95 o.rmempty = true;
96 o.modalonly = true;
97 o.depends('trigger', 'netdev');
98 o.value('link', _('Link On'));
99 o.value('tx', _('Transmit'));
100 o.value('rx', _('Receive'));
101
102 if (usb.devices && usb.devices.length) {
103 o = s.option(form.ListValue, '_usb_dev', _('USB Device'));
104 o.depends('trigger', 'usbdev');
105 o.rmempty = true;
106 o.ucioption = 'dev';
107 o.modalonly = true;
108 o.remove = function(section_id) {
109 var topt = this.map.lookupOption('trigger', section_id),
110 tval = topt ? topt[0].formvalue(section_id) : null;
111
112 if (tval != 'netdev' && tval != 'usbdev')
113 uci.unset('system', section_id, 'dev');
114 }
115 o.value('');
116 usb.devices.forEach(function(usbdev) {
117 o.value(usbdev.id, '%s (%s - %s)'.format(usbdev.id, usbdev.vendor || '?', usbdev.product || '?'));
118 });
119 }
120
121 if (usb.ports && usb.ports.length) {
122 o = s.option(form.MultiValue, 'port', _('USB Ports'));
123 o.depends('trigger', 'usbport');
124 o.rmempty = true;
125 o.modalonly = true;
126 o.cfgvalue = function(section_id) {
127 var ports = [],
128 value = uci.get('system', section_id, 'port');
129
130 if (!Array.isArray(value))
131 value = String(value || '').split(/\s+/);
132
133 for (var i = 0; i < value.length; i++)
134 if (value[i].match(/^(\d+)-(\d+)$/))
135 ports.push('usb%d-port%d'.format(Regexp.$1, Regexp.$2));
136 else
137 ports.push(value[i]);
138
139 return ports;
140 };
141 usb.ports.forEach(function(usbport) {
142 var dev = (usbport.device && Array.isArray(usb.devices))
143 ? usb.devices.filter(function(d) { return d.id == usbport.device })[0] : null;
144
145 var label = _('Port %s').format(usbport.port);
146
147 if (dev)
148 label += ' (%s - %s)'.format(dev.vendor || '?', dev.product || '?');
149
150 o.value(usbport.port, label);
151 });
152 }
153
154 o = s.option(form.Value, 'port_mask', _('Switch Port Mask'));
155 o.modalonly = true;
156 o.depends('trigger', 'switch0');
157 o.depends('trigger', 'switch1');
158
159 o = s.option(form.Value, 'speed_mask', _('Switch Speed Mask'));
160 o.modalonly = true;
161 o.depends('trigger', 'switch0');
162 o.depends('trigger', 'switch1');
163
164 return m.render();
165 }
166 });