From b353f83e09769bdaafc2c2377d8b09e5450b1f5e Mon Sep 17 00:00:00 2001 From: yiinho Date: Tue, 18 Oct 2016 15:14:35 -0700 Subject: [PATCH] Add class to disable js layout switching This is helpful when using MDL with other frameworks that provide routing such as Angular2. --- src/layout/layout.js | 16 ++++++++++------ test/unit/layout.js | 45 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/layout/layout.js b/src/layout/layout.js index 9e1e4e68..a1cc1dcd 100644 --- a/src/layout/layout.js +++ b/src/layout/layout.js @@ -110,6 +110,7 @@ TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button', TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button', TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button', + TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch', PANEL: 'mdl-layout__tab-panel', HAS_DRAWER: 'has-drawer', @@ -549,12 +550,15 @@ tab.appendChild(rippleContainer); } - tab.addEventListener('click', function(e) { - if (tab.getAttribute('href').charAt(0) === '#') { - e.preventDefault(); - selectTab(); - } - }); + if (!layout.tabBar_.classList.contains( + layout.CssClasses_.TAB_MANUAL_SWITCH)) { + tab.addEventListener('click', function(e) { + if (tab.getAttribute('href').charAt(0) === '#') { + e.preventDefault(); + selectTab(); + } + }); + } tab.show = selectTab; } diff --git a/test/unit/layout.js b/test/unit/layout.js index 8a9d53bf..f5a8bdb0 100644 --- a/test/unit/layout.js +++ b/test/unit/layout.js @@ -151,4 +151,49 @@ describe('MaterialLayout', function () { expect($(drawerBtn)).to.have.attr('aria-expanded', 'false'); }); }); + + describe('Manual switch mode', function () { + it('should disable content switching', function (done) { + var el = document.createElement('div'); + el.innerHTML = '' + + '
' + + '
' + + ' Tab 1' + + ' Tab 2' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'; + + var parent = document.createElement('div'); + parent.appendChild(el); // MaterialLayout.init() expects a parent + + var tab1 = el.querySelector('#tab1'); + var tab2 = el.querySelector('#tab2'); + var content1 = el.querySelector('#scroll-tab-1'); + var content2 = el.querySelector('#scroll-tab-2'); + + componentHandler.upgradeElement(el, 'MaterialLayout'); + + var ev = document.createEvent('MouseEvents'); + ev.initEvent('click', true, true); + tab2.dispatchEvent(ev); + + window.setTimeout(function() { + // Since content switching has been set to manual, layout shouldn't + // have been switched. + expect($(tab1)).to.have.class('is-active'); + expect($(content1)).to.have.class('is-active'); + expect($(tab2)).to.not.have.class('is-active'); + expect($(content2)).to.not.have.class('is-active'); + done(); + }, 100); + }); + }); });