f86a60c187766941bcca7d1ff469f3f390137d42
[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(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(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.getDeviceStatus(undefined, function(devs) {
27                         var devices = [ ];
28
29                         for (var device in devs)
30                             if (device != 'lo')
31                                 devices.push(device);
32
33                         devices.sort();
34
35                         delete m.sections[0].fields._net_dev.choices;
36
37                         for (var i = 0; i < devices.length; i++)
38                             m.sections[0].fields._net_dev.value(devices[i]);
39                     })
40                 );
41             }
42         });
43
44         var s = m.section(L.cbi.TypedSection, 'led', {
45             caption:     function(sid) { return sid ? (this.fields.name.textvalue(sid) || L.tr('Unnamed LED')) : '' },
46             teasers:     [ 'sysfs', 'default', 'trigger', '_net_dev', 'mode', '_usb_dev', 'delayon', 'delayoff' ],
47             collabsible: true,
48             addremove:   true,
49             add_caption: L.tr('Add new LED defintion'),
50             remove_caption: L.tr('Remove LED definition'),
51             readonly:    !this.options.acls.leds
52         });
53
54         s.option(L.cbi.InputValue, 'name', {
55             caption:     L.tr('Name')
56         });
57
58         s.option(L.cbi.ListValue, 'sysfs', {
59             caption:     L.tr('LED Name')
60         });
61
62         s.option(L.cbi.ListValue, 'default', {
63             caption:     L.tr('Default state'),
64             initial:     '0'
65         }).value('0', L.trc('LED state', 'off')).value('1', L.trc('LED state', 'on'));
66
67         s.option(L.cbi.ListValue, 'trigger', {
68             caption:     L.tr('Trigger')
69         });
70
71
72         s.option(L.cbi.InputValue, 'delayon', {
73             caption:     L.trc('LED timer trigger', 'On-State Delay'),
74             description: L.trc('LED timer trigger', 'Time in milliseconds the LED stays on'),
75             datatype:    'uinteger'
76         }).depends('trigger', 'timer');
77
78         s.option(L.cbi.InputValue, 'delayoff', {
79             caption:     L.trc('LED timer trigger', 'Off-State Delay'),
80             description: L.trc('LED timer trigger', 'Time in milliseconds the LED stays off'),
81             datatype:    'uinteger'
82         }).depends('trigger', 'timer');
83
84
85         s.option(L.cbi.ListValue, '_net_dev', {
86             caption:     L.trc('LED netdev trigger', 'Device'),
87             uci_option:  'dev',
88             optional:    true
89         }).depends('trigger', 'netdev');
90
91         s.option(L.cbi.MultiValue, 'mode', {
92             caption:     L.trc('LED netdev trigger', 'Trigger Mode')
93         }).depends('trigger', 'netdev')
94             .value('link', L.trc('LED netdev trigger mode', 'Link On'))
95             .value('tx',   L.trc('LED netdev trigger mode', 'Transmit'))
96             .value('rx',   L.trc('LED netdev trigger mode', 'Receive'));
97
98
99         s.option(L.cbi.ListValue, '_usb_dev', {
100             caption:     L.trc('LED usbdev trigger', 'Device'),
101             uci_option:  'dev',
102             optional:    true
103         }).depends('trigger', 'usbdev');
104
105         return m.insertInto('#map');
106     }
107 });