luci-base: form.js: rendering fixes for grid sections
authorJo-Philipp Wich <jo@mein.io>
Wed, 12 Feb 2020 07:16:06 +0000 (08:16 +0100)
committerJo-Philipp Wich <jo@mein.io>
Wed, 12 Feb 2020 10:59:41 +0000 (11:59 +0100)
 - Ensure that last header cell is rendered for grid sections without
   sorting or addremove actions
 - Don't skip header cells for optional options

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/form.js

index 4ce5e45ebe6d1c1319074f79e5b890efdbb278bd..80b1393d5f6aad168c1d28bf773707213bea71ae 100644 (file)
@@ -1104,7 +1104,7 @@ var CBITableSection = CBITypedSection.extend({
                return sectionEl;
        },
 
-       renderHeaderRows: function(max_cols) {
+       renderHeaderRows: function(max_cols, has_action) {
                var has_titles = false,
                    has_descriptions = false,
                    max_cols = isNaN(this.max_cols) ? this.children.length : this.max_cols,
@@ -1113,7 +1113,7 @@ var CBITableSection = CBITypedSection.extend({
                    trEls = E([]);
 
                for (var i = 0, opt; i < max_cols && (opt = this.children[i]) != null; i++) {
-                       if (opt.optional || opt.modalonly)
+                       if (opt.modalonly)
                                continue;
 
                        has_titles = has_titles || !!opt.title;
@@ -1127,7 +1127,7 @@ var CBITableSection = CBITypedSection.extend({
                        });
 
                        for (var i = 0, opt; i < max_cols && (opt = this.children[i]) != null; i++) {
-                               if (opt.optional || opt.modalonly)
+                               if (opt.modalonly)
                                        continue;
 
                                trEl.appendChild(E('div', {
@@ -1149,7 +1149,7 @@ var CBITableSection = CBITypedSection.extend({
                                        L.dom.content(trEl.lastElementChild, opt.title);
                        }
 
-                       if (this.sortable || this.extedit || this.addremove || has_more)
+                       if (this.sortable || this.extedit || this.addremove || has_more || has_action)
                                trEl.appendChild(E('div', {
                                        'class': 'th cbi-section-table-cell cbi-section-actions'
                                }));
@@ -1163,7 +1163,7 @@ var CBITableSection = CBITypedSection.extend({
                        });
 
                        for (var i = 0, opt; i < max_cols && (opt = this.children[i]) != null; i++) {
-                               if (opt.optional || opt.modalonly)
+                               if (opt.modalonly)
                                        continue;
 
                                trEl.appendChild(E('div', {
@@ -1477,6 +1477,10 @@ var CBIGridSection = CBITableSection.extend({
                }, (value != null) ? value : E('em', _('none')));
        },
 
+       renderHeaderRows: function(section_id) {
+               return this.super('renderHeaderRows', [ NaN, true ]);
+       },
+
        renderRowActions: function(section_id) {
                return this.super('renderRowActions', [ section_id, _('Edit') ]);
        },