luci-app-statistics: config ui tweaks
authorJo-Philipp Wich <jo@mein.io>
Fri, 14 Feb 2020 10:39:28 +0000 (11:39 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 14 Feb 2020 10:39:28 +0000 (11:39 +0100)
  - Synchronize enabled checkboxes in overview and modals
  - Auto-open modal if enabling plugin with extended config

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
applications/luci-app-statistics/htdocs/luci-static/resources/view/statistics/collectd.js

index 6ba571e8b810f622e3f9cac2f5c89a7926ba8011..b66055f7e2a7eba58ff061d47de5610d357b8563 100644 (file)
@@ -32,7 +32,7 @@ return L.view.extend({
        },
 
        render: function(plugins) {
-               var m, s, o;
+               var m, s, o, enabled;
 
                for (var i = 0; i < plugins.length; i++)
                        plugins[plugins[i].name] = plugins[i];
@@ -104,9 +104,19 @@ return L.view.extend({
                                return plugin ? plugin.spec.title : name
                        };
 
-                       o = s.option(form.Flag, 'enable', _('Enabled'));
-                       o.editable = true;
-                       o.modalonly = false;
+                       enabled = s.option(form.Flag, 'enable', _('Enabled'));
+                       enabled.editable = true;
+                       enabled.modalonly = false;
+                       enabled.renderWidget = function(section_id, option_index, cfgvalue) {
+                               var widget = form.Flag.prototype.renderWidget.apply(this, [section_id, option_index, cfgvalue]);
+
+                               widget.querySelector('input[type="checkbox"]').addEventListener('click', L.bind(function(section_id, plugin, ev) {
+                                       if (ev.target.checked && plugin && plugin.form.addFormOptions)
+                                               this.section.renderMoreOptionsModal(section_id);
+                               }, this, section_id, plugins[section_id.replace(/^collectd_/, '')]));
+
+                               return widget;
+                       };
 
                        o = s.option(form.DummyValue, '_dummy', _('Status'));
                        o.width = '50%';
@@ -140,6 +150,15 @@ return L.view.extend({
                                s.description = plugin.form.description;
 
                                plugin.form.addFormOptions(s);
+
+                               var opt = s.children.filter(function(o) { return o.option == 'enable' })[0];
+                               if (opt)
+                                       opt.cfgvalue = function(section_id, set_value) {
+                                               if (arguments.length == 2)
+                                                       return form.Flag.prototype.cfgvalue.apply(this, [section_id, enabled.formvalue(section_id)]);
+                                               else
+                                                       return form.Flag.prototype.cfgvalue.apply(this, [section_id]);
+                                       };
                        };
 
                        s.renderRowActions = function(section_id) {