diff --git a/js/layouts/tab-container/regular-tabs.js b/js/layouts/tab-container/regular-tabs.js index fc2b509bc..fc5cc5f7c 100644 --- a/js/layouts/tab-container/regular-tabs.js +++ b/js/layouts/tab-container/regular-tabs.js @@ -124,5 +124,15 @@ $.widget( "itop.regulartabs", $.ui.tabs, { this._off( prevPanels.not( this.panels ) ); } }, - -}); \ No newline at end of file + // JQuery UI overload + disable: function(index){ + let panel = this._getPanelForTab( index ); + panel.css({display: 'none'}); + this._super( index ); + }, + enable: function(index) { + let panel = this._getPanelForTab( index ); + panel.css({display: 'block'}); + this._super( index ); + }, +}); diff --git a/js/layouts/tab-container/scrollable-tabs.js b/js/layouts/tab-container/scrollable-tabs.js index 3b9c1d2e1..c529897e2 100644 --- a/js/layouts/tab-container/scrollable-tabs.js +++ b/js/layouts/tab-container/scrollable-tabs.js @@ -377,4 +377,15 @@ $.widget( "itop.scrollabletabs", $.ui.tabs, { setTab : function(tab){ this.active = tab; }, -}); \ No newline at end of file + // JQuery UI overload + disable: function(index){ + let panel = this._getPanelForTab( this.tabs[index] ); + panel.css({display: 'none'}); + this._super( index ); + }, + enable: function(index) { + let panel = this._getPanelForTab( this.tabs[index] ); + panel.css({display: 'block'}); + this._super( index ); + }, +}); diff --git a/js/layouts/tab-container/tab-container.js b/js/layouts/tab-container/tab-container.js index 7040529ac..451881d81 100644 --- a/js/layouts/tab-container/tab-container.js +++ b/js/layouts/tab-container/tab-container.js @@ -297,6 +297,10 @@ $(function() const sTabId = oTabHeaderElem.attr('data-tab-id'); const oMatchingExtraTabElem = this.element.find(this.js_selectors.extra_tab_toggler+'[href="#'+sTabId+'"]'); + // Disabled tabs are never added to the ExtraTabs list + if (oTabHeaderElem.attr('aria-disabled') == 'true') { + bIsVisible = true; + } // Manually check if the tab header is visible if the info isn't passed if (bIsVisible === null) { bIsVisible = CombodoGlobalToolbox.IsElementVisibleToTheUser(oTabHeaderElem[0], true, 2); @@ -326,7 +330,7 @@ $(function() * @return {string} The [data-tab-id] of the iIdx-th tab (zero based). Can return undefined if it has not [data-tab-id] attribute * @private */ - _getTabIdFromTabIndex(iIdx) { + _getTabIdFromTabIndex: function(iIdx) { return this.element.children(this.js_selectors.tabs_list).children(this.js_selectors.tab_header).eq(iIdx).attr('data-tab-id'); }, /** @@ -334,10 +338,25 @@ $(function() * @return {number} The index (zero based) of the tab. If no matching tab, 0 will be returned. * @private */ - _getTabIndexFromTabId(sId) { + _getTabIndexFromTabId: function(sId) { const oTabElem = this.element.children(this.js_selectors.tabs_list).children(this.js_selectors.tab_header+'[data-tab-id="'+sId+'"]'); return oTabElem.length === 0 ? 0 : oTabElem.prevAll().length; - } + }, + _getTabElementFromTabIndex: function(iIdx) { + return this.element.children(this.js_selectors.tabs_list).children(this.js_selectors.tab_header).eq(iIdx); + }, + disableTab: function(iIdx){ + let tabsWidget = this.GetTabsWidget(); + tabsWidget.disable(iIdx); + let tabElement = this._getTabElementFromTabIndex(iIdx); + this._updateTabHeaderDisplay(tabElement); + }, + enableTab: function(iIdx){ + let tabsWidget = this.GetTabsWidget(); + tabsWidget.enable(iIdx); + let tabElement = this._getTabElementFromTabIndex(iIdx); + this._updateTabHeaderDisplay(tabElement); + } }); });