Translated using Weblate (Japanese)
[oweals/luci.git] / modules / luci-mod-system / htdocs / luci-static / resources / view / system / leds.js
1 'use strict';
2 'require view';
3 'require uci';
4 'require rpc';
5 'require form';
6 'require fs';
7
8 var callLeds = rpc.declare({
9         object: 'luci',
10         method: 'getLEDs',
11         expect: { '': {} }
12 });
13
14 return view.extend({
15         load: function() {
16                 return Promise.all([
17                         callLeds(),
18                         L.resolveDefault(fs.list('/www' + L.resource('view/system/led-trigger')), [])
19                 ]).then(function(data) {
20                         var plugins = data[1];
21                         var tasks = [];
22
23                         for (var i = 0; i < plugins.length; i++) {
24                                 var m = plugins[i].name.match(/^(.+)\.js$/);
25
26                                 if (plugins[i].type != 'file' || m == null)
27                                         continue;
28
29                                 tasks.push(L.require('view.system.led-trigger.' + m[1]).then(L.bind(function(name){
30                                         return L.resolveDefault(L.require('view.system.led-trigger.' + name)).then(function(form) {
31                                                 return {
32                                                         name: name,
33                                                         form: form,
34                                                 };
35                                         });
36                                 }, this, m[1])));
37                         }
38
39                         return Promise.all(tasks).then(function(plugins) {
40                                 var value = {};
41                                 value[0] = data[0];
42                                 value[1] = plugins;
43                                 return value;
44                         });
45                 });
46         },
47
48         render: function(data) {
49                 var m, s, o, triggers = [];
50                 var leds = data[0];
51                 var plugins = data[1];
52
53                 for (var k in leds)
54                         for (var i = 0; i < leds[k].triggers.length; i++)
55                                 triggers[i] = leds[k].triggers[i];
56
57                 m = new form.Map('system',
58                         _('<abbr title="Light Emitting Diode">LED</abbr> Configuration'),
59                         _('Customizes the behaviour of the device <abbr title="Light Emitting Diode">LED</abbr>s if possible.'));
60
61                 s = m.section(form.GridSection, 'led', '');
62                 s.anonymous = true;
63                 s.addremove = true;
64                 s.sortable = true;
65                 s.addbtntitle = _('Add LED action');
66
67                 s.option(form.Value, 'name', _('Name'));
68
69                 o = s.option(form.ListValue, 'sysfs', _('<abbr title="Light Emitting Diode">LED</abbr> Name'));
70                 Object.keys(leds).sort().forEach(function(name) {
71                         o.value(name)
72                 });
73
74                 o = s.option(form.ListValue, 'trigger', _('Trigger'));
75                 for (var i = 0; i < plugins.length; i++) {
76                         var plugin = plugins[i];
77
78                         if ( plugin.form.kernel == false )
79                                 o.value(plugin.name, plugin.form.trigger);
80                         else
81                                 for (var k = 0; k < triggers.length; k++)
82                                         if ( plugin.name == triggers[k] )
83                                                 o.value(plugin.name, plugin.form.trigger);
84                 }
85
86                 s.addModalOptions = function(s) {
87                         for (var i = 0; i < plugins.length; i++) {
88                                 var plugin = plugins[i];
89                                 plugin.form.addFormOptions(s);
90                         }
91                 };
92
93                 return m.render();
94         }
95 });