5 'require tools.widgets as widgets';
9 callLeds = rpc.declare({
15 callUSB = rpc.declare({
17 method: 'getUSBDevices',
21 return L.view.extend({
29 render: function(results) {
30 var leds = results[0],
36 for (var i = 0; i < leds[k].triggers.length; i++)
37 triggers[leds[k].triggers[i]] = true;
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.'));
43 s = m.section(form.GridSection, 'led', '');
47 s.addbtntitle = _('Add LED action');
49 s.option(form.Value, 'name', _('Name'));
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) });
54 o = s.option(form.Flag, 'default', _('Default state'));
57 trigger = s.option(form.ListValue, 'trigger', _('Trigger'));
58 if (usb.devices && usb.devices.length)
59 triggers['usbdev'] = true;
60 if (usb.ports && usb.ports.length)
61 triggers['usbport'] = true;
62 Object.keys(triggers).sort().forEach(function(t) { trigger.value(t, t.replace(/-/g, '')) });
64 o = s.option(form.Value, 'delayon', _('On-State Delay'));
66 o.depends('trigger', 'timer');
68 o = s.option(form.Value, 'delayoff', _('Off-State Delay'));
70 o.depends('trigger', 'timer');
72 o = s.option(widgets.DeviceSelect, '_net_dev', _('Device'));
77 o.depends('trigger', 'netdev');
78 o.remove = function(section_id) {
79 var t = trigger.formvalue(section_id);
80 if (t != 'netdev' && t != 'usbdev')
81 uci.unset('system', section_id, 'dev');
84 o = s.option(form.MultiValue, 'mode', _('Trigger Mode'));
87 o.depends('trigger', 'netdev');
88 o.value('link', _('Link On'));
89 o.value('tx', _('Transmit'));
90 o.value('rx', _('Receive'));
92 if (usb.devices && usb.devices.length) {
93 o = s.option(form.ListValue, '_usb_dev', _('USB Device'));
94 o.depends('trigger', 'usbdev');
98 o.remove = function(section_id) {
99 var t = trigger.formvalue(section_id);
100 if (t != 'netdev' && t != 'usbdev')
101 uci.unset('system', section_id, 'dev');
104 usb.devices.forEach(function(usbdev) {
105 o.value(usbdev.id, '%s (%s - %s)'.format(usbdev.id, usbdev.vendor || '?', usbdev.product || '?'));
109 if (usb.ports && usb.ports.length) {
110 o = s.option(form.MultiValue, 'port', _('USB Ports'));
111 o.depends('trigger', 'usbport');
114 o.cfgvalue = function(section_id) {
116 value = uci.get('system', section_id, 'port');
118 if (!Array.isArray(value))
119 value = String(value || '').split(/\s+/);
121 for (var i = 0; i < value.length; i++)
122 if (value[i].match(/^(\d+)-(\d+)$/))
123 ports.push('usb%d-port%d'.format(Regexp.$1, Regexp.$2));
125 ports.push(value[i]);
129 usb.ports.forEach(function(usbport) {
130 var dev = (usbport.device && Array.isArray(usb.devices))
131 ? usb.devices.filter(function(d) { return d.id == usbport.device })[0] : null;
133 var label = _('Port %s').format(usbport.port);
136 label += ' (%s - %s)'.format(dev.vendor || '?', dev.product || '?');
138 o.value(usbport.port, label);
142 o = s.option(form.Value, 'port_mask', _('Switch Port Mask'));
144 o.depends('trigger', 'switch0');
145 o.depends('trigger', 'switch1');