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