'use strict'; var jqLite = require('./lib/jqLite'), util = require('./lib/util'), animationHelpers = require('./lib/animationHelpers'), attrKey = 'data-mui-toggle', attrSelector = '[' + attrKey + '="tab"]', controlsAttrKey = 'data-mui-controls', activeClass = 'mui--is-active', showstartKey = 'mui.tabs.showstart', showendKey = 'mui.tabs.showend', hidestartKey = 'mui.tabs.hidestart', hideendKey = 'mui.tabs.hideend'; function initialize(toggleEl){ if (toggleEl._muiTabs === true ) return ; else toggleEl._muiTabs = true ; jqLite.on(toggleEl, 'click', clickHandler); } function clickHandler(ev){ if (ev.button !== 0) return ; var toggleEl = this; if (_AN_Call_getattribute('getAttribute', toggleEl, 'disabled') !== null ) return ; activateTab(toggleEl); } function activateTab(currToggleEl){ var currTabEl = currToggleEl.parentNode, currPaneId = _AN_Call_getattribute('getAttribute', currToggleEl, controlsAttrKey), currPaneEl = document.getElementById(currPaneId), prevTabEl, prevPaneEl, prevPaneId, prevToggleEl, currData, prevData, ev1, ev2, cssSelector; if (jqLite.hasClass(currTabEl, activeClass)) return ; if (!currPaneEl) util.raiseError('Tab pane "' + currPaneId + '" not found'); prevPaneEl = getActiveSibling(currPaneEl); prevPaneId = prevPaneEl.id; cssSelector = '[' + controlsAttrKey + '="' + prevPaneId + '"]'; prevToggleEl = document.querySelectorAll(cssSelector)[0]; prevTabEl = prevToggleEl.parentNode; currData = { paneId: currPaneId, relatedPaneId: prevPaneId} ; prevData = { paneId: prevPaneId, relatedPaneId: currPaneId} ; ev1 = util.dispatchEvent(prevToggleEl, hidestartKey, true , true , prevData); ev2 = util.dispatchEvent(currToggleEl, showstartKey, true , true , currData); _AN_Call_settimeout('setTimeout', window, function (){ if (ev1.defaultPrevented || ev2.defaultPrevented) return ; if (prevTabEl) jqLite.removeClass(prevTabEl, activeClass); if (prevPaneEl) jqLite.removeClass(prevPaneEl, activeClass); jqLite.addClass(currTabEl, activeClass); jqLite.addClass(currPaneEl, activeClass); util.dispatchEvent(prevToggleEl, hideendKey, true , false , prevData); util.dispatchEvent(currToggleEl, showendKey, true , false , currData); } , 0); } function getActiveSibling(el){ var elList = el.parentNode.children, q = _AN_Read_length('length', elList), activeEl = null , tmpEl; while (q-- && !activeEl){ tmpEl = elList[q]; if (tmpEl !== el && jqLite.hasClass(tmpEl, activeClass)) activeEl = tmpEl; } return activeEl; } module.exports = { initListeners: function (){ var elList = document.querySelectorAll(attrSelector), i = _AN_Read_length('length', elList); while (i-- ){ initialize(elList[i]); } animationHelpers.onAnimationStart('mui-tab-inserted', function (ev){ initialize(_AN_Read_target('target', ev)); } ); } , api: { activate: function (paneId){ var cssSelector = '[' + controlsAttrKey + '=' + paneId + ']', toggleEl = document.querySelectorAll(cssSelector); if (!_AN_Read_length('length', toggleEl)) { util.raiseError('Tab control for pane "' + paneId + '" not found'); } activateTab(toggleEl[0]); } } } ;