From 20b941bb3078fd72e96d5338c2c06c5d913d11e9 Mon Sep 17 00:00:00 2001 From: Erik Koopmans Date: Wed, 12 Apr 2017 15:32:59 -0400 Subject: [PATCH] Add public method setTab to set the active tab programmatically --- src/tabs/tabs.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/tabs/tabs.js b/src/tabs/tabs.js index 3674c325..0bb5b0aa 100644 --- a/src/tabs/tabs.js +++ b/src/tabs/tabs.js @@ -110,6 +110,24 @@ } }; + /** + * Set the active tab. + * + * @public + * @param {Element|number} tab The tab element or index to set active. + */ + MaterialTabs.prototype.setTab = function(tab) { + tab = (typeof tab === 'number') ? this.tabs_[tab] : tab; + if (tab && tab.getAttribute('href').charAt(0) === '#') { + var href = tab.href.split('#')[1]; + var panel = this.element_.querySelector('#' + href); + this.resetTabState_(); + this.resetPanelState_(); + tab.classList.add(this.CssClasses_.ACTIVE_CLASS); + panel.classList.add(this.CssClasses_.ACTIVE_CLASS); + } + }; + /** * Initialize element. */ @@ -141,12 +159,7 @@ tab.addEventListener('click', function(e) { if (tab.getAttribute('href').charAt(0) === '#') { e.preventDefault(); - var href = tab.href.split('#')[1]; - var panel = ctx.element_.querySelector('#' + href); - ctx.resetTabState_(); - ctx.resetPanelState_(); - tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS); - panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS); + ctx.setTab(tab); } });