luci-base: ui.js: tabs: fix empty pane checking, allow alternative query root
authorJo-Philipp Wich <jo@mein.io>
Wed, 31 Jul 2019 05:57:15 +0000 (07:57 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 1 Aug 2019 14:47:19 +0000 (16:47 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/ui.js

index fd413042f9aa13a12079abdf023f9c0a2939a061..29233dec02472f3ff5a3c7de28c5bf0b8c5bc182 100644 (file)
@@ -1589,8 +1589,14 @@ return L.Class.extend({
                        if (selected === null) {
                                selected = this.getActiveTabId(groupId);
 
-                               if (selected < 0 || selected >= panes.length)
-                                       selected = 0;
+                               if (selected < 0 || selected >= panes.length || L.dom.isEmpty(panes[selected])) {
+                                       for (var i = 0; i < panes.length; i++) {
+                                               if (!L.dom.isEmpty(panes[i])) {
+                                                       selected = i;
+                                                       break;
+                                               }
+                                       }
+                               }
 
                                menu.childNodes[selected].classList.add('cbi-tab');
                                menu.childNodes[selected].classList.remove('cbi-tab-disabled');
@@ -1630,13 +1636,13 @@ return L.Class.extend({
                        return true;
                },
 
-               updateTabs: function(ev) {
-                       document.querySelectorAll('[data-tab-title]').forEach(function(pane) {
+               updateTabs: function(ev, root) {
+                       (root || document).querySelectorAll('[data-tab-title]').forEach(function(pane) {
                                var menu = pane.parentNode.previousElementSibling,
                                    tab = menu.querySelector('[data-tab="%s"]'.format(pane.getAttribute('data-tab'))),
                                    n_errors = pane.querySelectorAll('.cbi-input-invalid').length;
 
-                               if (!pane.firstElementChild) {
+                               if (L.dom.isEmpty(pane)) {
                                        tab.style.display = 'none';
                                        tab.classList.remove('flash');
                                }