1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
L.ui.view.extend({
listLEDs: L.rpc.declare({
object: 'luci2.system',
method: 'led_list',
expect: { leds: [ ] }
}),
listUSBDevices: L.rpc.declare({
object: 'luci2.system',
method: 'usb_list',
expect: { devices: [ ] }
}),
execute: function() {
var self = this;
var m = new L.cbi.Map('system', {
caption: L.tr('LED Configuration'),
description: L.tr('Customizes the behaviour of the device LEDs if possible.'),
prepare: function() {
delete m.sections[0].fields._net_dev.choices;
var devs = L.network.getDevices().sort(function(a, b) {
if (a.name() < b.name())
return -1;
else if (a.name() > b.name())
return 1;
else
return 0;
});
for (var i = 0; i < devs.length; i++)
if (!devs[i].isAlias())
m.sections[0].fields._net_dev.value(devs[i].name());
return $.when(
self.listLEDs().then(function(leds) {
delete m.sections[0].fields.sysfs.choices;
delete m.sections[0].fields.trigger.choices;
for (var i = 0; i < leds.length; i++)
m.sections[0].fields.sysfs.value(leds[i].name);
for (var i = 0; i < leds[0].triggers.length; i++)
m.sections[0].fields.trigger.value(leds[0].triggers[i]);
}),
self.listUSBDevices().then(function(devs) {
delete m.sections[0].fields._usb_dev.choices;
for (var i = 0; i < devs.length; i++)
m.sections[0].fields._usb_dev.value(devs[i].name,
'%04x:%04x (%s - %s)'.format(devs[i].vendor_id, devs[i].product_id,
devs[i].vendor_name || '?', devs[i].product_name || '?'));
})
);
}
});
var s = m.section(L.cbi.TypedSection, 'led', {
caption: L.tr('LED Definitions'),
teasers: [ 'name', 'sysfs', 'default', 'trigger', '_net_dev', 'mode', '_usb_dev', 'delayon', 'delayoff' ],
collabsible: true,
addremove: true,
add_caption: L.tr('Add new LED defintion'),
remove_caption: L.tr('Remove LED definition'),
readonly: !this.options.acls.leds
});
s.option(L.cbi.InputValue, 'name', {
caption: L.tr('Name')
});
s.option(L.cbi.ListValue, 'sysfs', {
caption: L.tr('LED Name')
});
s.option(L.cbi.ListValue, 'default', {
caption: L.tr('Default state'),
initial: '0'
}).value('0', L.trc('LED state', 'off')).value('1', L.trc('LED state', 'on'));
s.option(L.cbi.ListValue, 'trigger', {
caption: L.tr('Trigger')
});
s.option(L.cbi.InputValue, 'delayon', {
caption: L.trc('LED timer trigger', 'On-State Delay'),
description: L.trc('LED timer trigger', 'Time in milliseconds the LED stays on'),
datatype: 'uinteger'
}).depends('trigger', 'timer');
s.option(L.cbi.InputValue, 'delayoff', {
caption: L.trc('LED timer trigger', 'Off-State Delay'),
description: L.trc('LED timer trigger', 'Time in milliseconds the LED stays off'),
datatype: 'uinteger'
}).depends('trigger', 'timer');
s.option(L.cbi.ListValue, '_net_dev', {
caption: L.trc('LED netdev trigger', 'Device'),
uci_option: 'dev',
optional: true
}).depends('trigger', 'netdev');
s.option(L.cbi.MultiValue, 'mode', {
caption: L.trc('LED netdev trigger', 'Trigger Mode')
}).depends('trigger', 'netdev')
.value('link', L.trc('LED netdev trigger mode', 'Link On'))
.value('tx', L.trc('LED netdev trigger mode', 'Transmit'))
.value('rx', L.trc('LED netdev trigger mode', 'Receive'));
s.option(L.cbi.ListValue, '_usb_dev', {
caption: L.trc('LED usbdev trigger', 'Device'),
uci_option: 'dev',
optional: true
}).depends('trigger', 'usbdev');
return m.insertInto('#map');
}
});
|