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'));
56 o
.textvalue = function(section_id
) {
57 var cval
= this.cfgvalue(section_id
);
62 return (cval
== this.enabled
) ? _('On') : _('Off');
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
, '')) });
72 o
= s
.option(form
.Value
, 'delayon', _('On-State Delay'));
74 o
.depends('trigger', 'timer');
76 o
= s
.option(form
.Value
, 'delayoff', _('Off-State Delay'));
78 o
.depends('trigger', 'timer');
80 o
= s
.option(widgets
.DeviceSelect
, '_net_dev', _('Device'));
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;
90 if (tval
!= 'netdev' && tval
!= 'usbdev')
91 uci
.unset('system', section_id
, 'dev');
94 o
= s
.option(form
.MultiValue
, 'mode', _('Trigger Mode'));
97 o
.depends('trigger', 'netdev');
98 o
.value('link', _('Link On'));
99 o
.value('tx', _('Transmit'));
100 o
.value('rx', _('Receive'));
102 if (usb
.devices
&& usb
.devices
.length
) {
103 o
= s
.option(form
.ListValue
, '_usb_dev', _('USB Device'));
104 o
.depends('trigger', 'usbdev');
108 o
.remove = function(section_id
) {
109 var topt
= this.map
.lookupOption('trigger', section_id
),
110 tval
= topt
? topt
[0].formvalue(section_id
) : null;
112 if (tval
!= 'netdev' && tval
!= 'usbdev')
113 uci
.unset('system', section_id
, 'dev');
116 usb
.devices
.forEach(function(usbdev
) {
117 o
.value(usbdev
.id
, '%s (%s - %s)'.format(usbdev
.id
, usbdev
.vendor
|| '?', usbdev
.product
|| '?'));
121 if (usb
.ports
&& usb
.ports
.length
) {
122 o
= s
.option(form
.MultiValue
, 'port', _('USB Ports'));
123 o
.depends('trigger', 'usbport');
126 o
.cfgvalue = function(section_id
) {
128 value
= uci
.get('system', section_id
, 'port');
130 if (!Array
.isArray(value
))
131 value
= String(value
|| '').split(/\s+/);
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));
137 ports
.push(value
[i
]);
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;
145 var label
= _('Port %s').format(usbport
.port
);
148 label
+= ' (%s - %s)'.format(dev
.vendor
|| '?', dev
.product
|| '?');
150 o
.value(usbport
.port
, label
);
154 o
= s
.option(form
.Value
, 'port_mask', _('Switch Port Mask'));
156 o
.depends('trigger', 'switch0');
157 o
.depends('trigger', 'switch1');
159 o
= s
.option(form
.Value
, 'speed_mask', _('Switch Speed Mask'));
161 o
.depends('trigger', 'switch0');
162 o
.depends('trigger', 'switch1');