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