{"version":3,"sources":["blocks/m-tabs.js"],"names":["define","utility","mTabsFn","defaults","loadingText","FRAMEWORK","locale","settings","mTabs","tabsPrimary","tabsLazy","tabsStatic","offset","offsetPrimaryMobile","offsetPrimaryOther","previousPage","previousText","nextPage","nextText","carouselActive","scrollLock","direction","Left","ArrowLeft","Right","ArrowRight","Home","End","init","elm","classList","contains","add","extend","getData","tabsHeadings","Array","from","querySelectorAll","filter","heading","closest","filterParents","forEach","length","remove","tabsList","querySelector","index","navList","loop","elementID","getAttribute","autoID","makeId","removeAttribute","setupControls","nextElementSibling","id","setAttribute","style","display","tabsMain","openTab","parentsList","targetId","parentLoop","moveTo","thisTabContent","offsetTop","scrollParent","scrollTo","parentEl","keyString","dataAttrs","dataClass","Object","includes","key","tempArr","join","toLowerCase","dataset","staticID","hrefID","innerHTML","parents","element","tabsNav","needle","parent","accentClassesArray","accentClasses","document","createElement","wrapInner","tabsNavList","mainHeading","tabsListItems","classes","tabsCount","toString","replace","windowHash","window","location","tabControl","htmlStringToElement","insertBefore","firstElementChild","tabsControls","parentElement","content","addEventListener","listener","hash","isInteger","preventDefault","switchTabOnArrowPress","pressed","match","setOpenTab","e","click","tabIcon","tabContent","tabIconClone","subhead","tabControlInner","span","openTabContent","scrollLeftPos","tabsContents","trigger","tabsPageLinks","contents","substr","previousElementSibling","parentNode","offsetLeft","thisHref","tabContentElm","setTimeout","indexOf","top","href","targetElm","tempElm","tabClick","tabOpen","nextElement","openedTab","hasAttribute","isArray","CSS","escape","getAnchor","target","urlAnchorRegExp","backgroundColor","stopOpaque","currentBreakpoint","getBreakpoint","pagination","prevButtonTarget","tabsCarousel","stopTransparent","onScroll","nextButtonTarget","backgroundElm","getComputedStyle","stopTemp","prevButton","firstChild","nextButton","backgroundImage","currentIndexes","getCurrentIndexes","farRight","scrollWidth","hexToRgba","rightIndex","getBoundingClientRect","left","listItemAbsoluteLeft","smallTag","leftIndexSet","leftIndex","mediumTag","largeTag","updatePagination","currentIndex","offsetWidth","scrollLeft","i","listItemWidthTotal","elmIndent","prevIndex","listItem","right","listItemAbsoluteRight","inRange","setCarouselPosition","tabAreaWidth","selected","sourceHref","scrollParentPos","scrollWindowPos","tabControlElm","nextIndex","noHistory","response","status","selectedTab","staticContent","headings","title","textContent","newTabH2","focus","preventScroll","scroll","append","newTabH3","newTabContent","removeChild","staticContent2","children","resizeRefresh","onResizeRefresh","listItemsWidth","tabSelected","keys","event","targetIndex","Number","debounce","listWidth","outerWidthTrue","initInstance"],"mappings":"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","file":"blocks/m-tabs.js","sourcesContent":["// eslint-disable-next-line max-lines-per-function\r\ndefine( [ 'utility' ], function run( utility ) {\r\n\t'use strict';\r\n\r\n\tvar mTabsFn = {\r\n\t\t// Default settings\r\n\t\tdefaults : {\r\n\t\t\tloadingText : FRAMEWORK.locale.settings.mTabs.loadingText,\r\n\t\t\ttabsPrimary : false,\r\n\t\t\ttabsLazy : false,\r\n\t\t\ttabsStatic : false,\r\n\t\t\toffset : 50, // 0px indent + 30px button + 5px space + 15px gradient\r\n\t\t\toffsetPrimaryMobile : 60, // 20px indent + 30px button - 10px so arrow aligns + 5px space + 15px gradient\r\n\t\t\toffsetPrimaryOther : 70, // 30px indent + 30px button - 10px so arrow aligns + 5px space + 15px gradient\r\n\t\t\tpreviousPage : FRAMEWORK.locale.settings.mTabs.previousText,\r\n\t\t\tnextPage : FRAMEWORK.locale.settings.mTabs.nextText,\r\n\t\t\tcarouselActive : false,\r\n\t\t\tscrollLock : false,\r\n\t\t\tdirection : {\r\n\t\t\t\tLeft : -1,\r\n\t\t\t\tArrowLeft : -1,\r\n\t\t\t\tRight : 1,\r\n\t\t\t\tArrowRight : 1,\r\n\t\t\t\tHome : 0,\r\n\t\t\t\tEnd : 0,\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\tinit : function( elm ) {\r\n\t\t\tvar tabsList;\r\n\r\n\t\t\tif ( !elm.classList.contains( 'js-m-tabs' ) ) {\r\n\t\t\t\telm.classList.add( 'js-m-tabs' );\r\n\r\n\t\t\t\telm.mTabs = {};\r\n\r\n\t\t\t\t// Set settings from defaults and any specified options\r\n\t\t\t\telm.mTabs.settings = utility.extend({}, mTabsFn.defaults, utility.getData( elm ) );\r\n\r\n\t\t\t\t// Set up markup, add a link to each control pointing to an id set on the following element and move into anchors div\r\n\t\t\t\telm.mTabs.tabsHeadings = Array.from( elm.querySelectorAll( '.m-tabs__heading' ) ).filter( function filterFn( heading ) {\r\n\t\t\t\t\treturn heading.closest( '.m-tabs' ) === elm && mTabsFn.filterParents( heading, 'm-tabs__content' ) === false;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Catch primary tabs instance and set settings accordingly\r\n\t\t\t\tif ( elm.classList.contains( 'o-tabs-primary__tabs' ) ) {\r\n\t\t\t\t\telm.mTabs.settings.tabsPrimary = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Catch subheadings and icon headings and add classes accordingly\r\n\t\t\t\telm.mTabs.tabsHeadings.forEach( function loop( heading ) {\r\n\t\t\t\t\tif ( heading.querySelectorAll( '.m-tabs__subheading' ).length > 0 ) {\r\n\t\t\t\t\t\telm.classList.add( 'm-tabs--subheadings' );\r\n\t\t\t\t\t} else if ( heading.querySelectorAll( '.m-tabs-icon' ).length > 0 ) {\r\n\t\t\t\t\t\telm.classList.add( 'm-tabs--icons' );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Catch links variants and set settings accordingly\r\n\t\t\t\tif ( elm.classList.contains( 'm-tabs--links' ) ) {\r\n\t\t\t\t\t// All links variants\r\n\t\t\t\t\ttabsList = elm.querySelector( '.m-tabs__list' );\r\n\t\t\t\t\ttabsList.remove();\r\n\t\t\t\t\telm.mTabs.tabsHeadings.forEach( function loop( heading, index ) {\r\n\t\t\t\t\t\tif ( !heading.getAttribute( 'href' ) ) {\r\n\t\t\t\t\t\t\telm.mTabs.tabsHeadings.splice( index, 1 );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Or just remove the bloody thing altogether...\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif ( elm.classList.contains( 'm-tabs--links-lazy' ) ) {\r\n\t\t\t\t\t\t// Set lazy links flag and set up accordingly\r\n\t\t\t\t\t\telm.mTabs.settings.tabsLazy = true;\r\n\t\t\t\t\t\tmTabsFn.tabsLazy( elm );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Set static tabs flag\r\n\t\t\t\t\t\telm.mTabs.settings.tabsStatic = true;\r\n\t\t\t\t\t\tmTabsFn.tabsStatic( elm );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\telm.mTabs.navList = [];\r\n\t\t\t\telm.mTabs.tabsHeadings.forEach( function loop( heading ) {\r\n\t\t\t\t\tvar elementID = heading.getAttribute( 'id' );\r\n\t\t\t\t\telm.mTabs.autoID = utility.makeId( 'm-tabs-' );\r\n\t\t\t\t\telm.mTabs.hrefID = '#' + elm.mTabs.autoID;\r\n\t\t\t\t\telm.mTabs.staticID = heading.getAttribute( 'href' );\r\n\r\n\t\t\t\t\tif ( elementID ) { // Pre-existing element ID, so use that instead\r\n\t\t\t\t\t\telm.mTabs.autoID = elementID;\r\n\t\t\t\t\t\telm.mTabs.hrefID = '#' + elm.mTabs.autoID;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theading.removeAttribute( 'id' );\r\n\t\t\t\t\theading.classList.add( 'u-hidden--visually' );\r\n\r\n\t\t\t\t\tmTabsFn.setupControls( elm, heading );\r\n\r\n\r\n\t\t\t\t\tif ( !elm.mTabs.settings.tabsStatic ) {\r\n\t\t\t\t\t\theading.nextElementSibling.id = elm.mTabs.autoID;\r\n\t\t\t\t\t\theading.nextElementSibling.setAttribute( 'aria-hidden', 'true' );\r\n\t\t\t\t\t\theading.nextElementSibling.style.display = 'none';\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Set up the heading controls\r\n\t\t\t\tmTabsFn.tabsMain( elm );\r\n\r\n\t\t\t\telm.mTabs.open = function open( targetId, scrollTo ) {\r\n\t\t\t\t\tvar parentsList,\r\n\t\t\t\t\t\tscrollParent,\r\n\t\t\t\t\t\tmoveTo,\r\n\t\t\t\t\t\tthisTabContent;\r\n\r\n\t\t\t\t\tif ( mTabsFn.openTab( elm, targetId ) ) {\r\n\t\t\t\t\t\tparentsList = utility.parents( elm, '.m-tabs__content' );\r\n\t\t\t\t\t\tparentsList.forEach( function parentLoop( parentEl ) {\r\n\t\t\t\t\t\t\tmTabsFn.openTab( parentEl.closest( '.js-m-tabs' ), '#' + parentEl.id );\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif ( scrollTo ) {\r\n\t\t\t\t\t\t\tthisTabContent = elm.querySelector( targetId );\r\n\t\t\t\t\t\t\tscrollParent = utility.scrollParent( thisTabContent );\r\n\t\t\t\t\t\t\tmoveTo = thisTabContent.offsetTop - scrollParent.offsetTop;\r\n\r\n\t\t\t\t\t\t\tscrollParent.scrollTo( 0, moveTo );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\treturn elm.mTabs;\r\n\t\t},\r\n\r\n\t\tsetupControls : function( elm, heading ) {\r\n\t\t\t// Generate a string 'dataAttrs' from the non-js links containing all data attributes for replacing in the control\r\n\t\t\tlet dataAttrs = '';\r\n\t\t\t// Data class variable depends on presence of dataset in dataAttrs\r\n\t\t\tlet dataClass = '';\r\n\t\t\t// Retain datasets for click tracking\r\n\t\t\tObject.keys( heading.dataset ).forEach( key => {\r\n\t\t\t\t// Fix hyphenated key names\r\n\t\t\t\tlet keyString = '';\r\n\t\t\t\t// Split data key into an array around uppercase with match if required\r\n\t\t\t\tlet tempArr = key.match( /[A-Za-z][a-z]+/g );\r\n\t\t\t\t// Concatenate and drop to lowercase - unless there is no split array in which case use key\r\n\t\t\t\tkeyString = tempArr === null ? keyString = key : keyString += 'data-' + tempArr.join( '-' ).toLowerCase();\r\n\t\t\t\t// Build the data attribute string for insertion\r\n\t\t\t\tdataAttrs += keyString + '=\"' + heading.dataset[ key ] + '\"';\r\n\t\t\t});\r\n\t\t\t// If dataAttrs contains dataset add data class to dataClass\r\n\t\t\tdataClass = dataAttrs.includes( 'data-dd-' ) ? dataClass = 'dd-data-link' : dataClass;\r\n\r\n\t\t\tif ( elm.mTabs.settings.tabsLazy === true && heading.classList.contains( 'js-m-tab-open' ) ) {\r\n\t\t\t\t// Lazy-load tabs open tab only - need standard link url, aria-controls and aria-selected, plus data-href for ajax load call\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\telm.mTabs.navList += '
  • ' + heading.innerHTML + '
  • ';\r\n\t\t\t} else if ( elm.mTabs.settings.tabsLazy === true ) {\r\n\t\t\t\t// Lazy-load tabs - need standard link url, aria-controls and aria-selected, plus data-href for ajax load call\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\telm.mTabs.navList += '
  • ' + heading.innerHTML + '
  • ';\r\n\t\t\t} else if ( elm.mTabs.settings.tabsStatic === true && heading.classList.contains( 'js-m-tab-open' ) ) {\r\n\t\t\t\t// Static tabs open tab only - needs skip link url but no aria-controls\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\telm.mTabs.navList += '
  • ' + heading.innerHTML + '
  • ';\r\n\t\t\t} else if ( elm.mTabs.settings.tabsStatic === true ) {\r\n\t\t\t\t// Static tabs - need external link url but no aria-controls or aria-selected\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\telm.mTabs.navList += '
  • ' + heading.innerHTML + '
  • ';\r\n\t\t\t} else if ( heading.classList.contains( 'js-m-tab-open' ) ) {\r\n\t\t\t\t// Standard tabs open tab only - need standard link url, aria-controls and aria-selected\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\telm.mTabs.navList += '
  • ' + heading.innerHTML + '
  • ';\r\n\t\t\t} else {\r\n\t\t\t\t// Standard tabs - need standard link url, aria-controls and aria-selected\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\telm.mTabs.navList += '
  • ' + heading.innerHTML + '
  • ';\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfilterParents : function( element, needle ) {\r\n\t\t\t// Check if the specified needle class is in the parents further up the DOM; if found, return true\r\n\t\t\tutility.parents( element ).forEach( function loop( parent ) {\r\n\t\t\t\treturn parent.classList.contains( needle );\r\n\t\t\t});\r\n\r\n\t\t\t// If not found, return false\r\n\t\t\treturn false;\r\n\t\t},\r\n\r\n\t\ttabsMain : function( elm ) {\r\n\t\t\t// Main part of function for all variants\r\n\t\t\tvar mainHeading,\r\n\t\t\t\taccentClassesArray,\r\n\t\t\t\taccentClasses;\r\n\r\n\t\t\telm.mTabs.tabsNav = document.createElement( 'div' );\r\n\t\t\telm.mTabs.tabsNav.classList.add( 'm-tabs__nav' );\r\n\r\n\t\t\t// Add accent colour background to match heading area for primary nav instances\r\n\t\t\tif ( elm.mTabs.settings.tabsPrimary === true ) {\r\n\t\t\t\tmainHeading = elm.parentNode.querySelectorAll( '.o-tabs-primary__heading' );\r\n\t\t\t\taccentClassesArray = Array.from( mainHeading[ 0 ].classList ).filter( function filterFn( classes ) {\r\n\t\t\t\t\treturn classes.indexOf( 't-accent' ) !== -1;\r\n\t\t\t\t});\r\n\t\t\t\tif ( accentClassesArray.length === 0 ) {\r\n\t\t\t\t\t// If no accent classes presset, set to white so the carousel elements colour correctly\r\n\t\t\t\t\taccentClassesArray = [ 't-accent-light', 't-accent-light--2' ];\r\n\t\t\t\t}\r\n\t\t\t\taccentClasses = ' ' + accentClassesArray.toString().replace( ',', ' ' );\r\n\t\t\t\tutility.addClass( elm.mTabs.tabsNav, accentClasses );\r\n\t\t\t}\r\n\r\n\t\t\t// Define and set up nav list, headings, controls and contents\r\n\t\t\tutility.wrapInner( elm.mTabs.tabsNav, utility.htmlStringToElement( '' ) );\r\n\r\n\t\t\telm.insertBefore( elm.mTabs.tabsNav, elm.firstElementChild );\r\n\t\t\telm.mTabs.tabsNavList = elm.querySelector( '.m-tabs__nav-list' ); // Returns first instance, which is what we want anyway\r\n\t\t\telm.mTabs.tabsNavList.setAttribute( 'role', 'tablist' );\r\n\t\t\telm.mTabs.tabsNavList.setAttribute( 'tabindex', -1 ); // Set tabindex to -1 to stop Firefox allowing focus when its not needed\r\n\t\t\telm.mTabs.tabsListItems = elm.mTabs.tabsNavList.querySelectorAll( 'li' );\r\n\t\t\telm.mTabs.tabsCount = elm.mTabs.tabsListItems.length;\r\n\t\t\telm.mTabs.tabsControls = Array.from( elm.mTabs.tabsNavList.querySelectorAll( '.m-tabs__control' ) );\r\n\t\t\telm.mTabs.tabsContents = Array.from( elm.querySelectorAll( '.m-tabs__content' ) ).filter( function filterFn( content ) {\r\n\t\t\t\treturn content.closest( '.m-tabs' ) === elm && mTabsFn.filterParents( content, 'm-tabs__content' ) === false;\r\n\t\t\t});\r\n\r\n\t\t\t// Set up initially selected tab control - tab already marked as open\r\n\t\t\telm.mTabs.windowHash = window.location.hash;\r\n\t\t\telm.mTabs.tabsControls.forEach( function loop( tabControl ) {\r\n\t\t\t\ttabControl.setAttribute( 'role', 'tab' );\r\n\t\t\t\ttabControl.setAttribute( 'aria-selected', 'false' );\r\n\t\t\t\ttabControl.setAttribute( 'tabindex', -1 );\r\n\r\n\t\t\t\t// If pointing to a specific anchor within a tab section, add open tab class\r\n\t\t\t\tif ( elm.mTabs.windowHash ) {\r\n\t\t\t\t\ttabControl.classList.remove( 'js-m-tab-open' ); // Remove any existing force-opened tabs...\r\n\t\t\t\t\tif ( tabControl.getAttribute( 'href' ).match( elm.mTabs.windowHash ) ) {\r\n\t\t\t\t\t\ttabControl.classList.add( 'js-m-tab-open' ); // ...and replace with the one from the url parameter\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttabControl.parentElement.setAttribute( 'role', 'presentation' );\r\n\r\n\t\t\t\ttabControl.addEventListener( 'keydown', function listener( e ) {\r\n\t\t\t\t\tvar pressed = e.key,\r\n\t\t\t\t\t\tdirection = elm.mTabs.settings.direction[ pressed ];\r\n\r\n\t\t\t\t\t// Catch Arrow, Home or End key presses before they are processed for the page\r\n\t\t\t\t\tif ( Number.isInteger( direction ) ) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tmTabsFn.switchTabOnArrowPress( elm, e );\r\n\t\t\t\t\t} else if ( pressed === ' ' || pressed === 'Spacebar' ) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\ttabControl.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tmTabsFn.setOpenTab( elm );\r\n\r\n\t\t\telm.mTabs.tabsContents.forEach( function loop( tabContent ) {\r\n\t\t\t\ttabContent.setAttribute( 'role', 'tabpanel' );\r\n\t\t\t\ttabContent.setAttribute( 'aria-labelledby', tabContent.id + '-tab' );\r\n\t\t\t});\r\n\r\n\t\t\t// Set up click event listeners\r\n\t\t\tif ( elm.mTabs.settings.tabsStatic === true ) {\r\n\t\t\t\t// Static tab - do nothing, as link needs to function normally\r\n\t\t\t} else {\r\n\t\t\t\t// Everything else\r\n\t\t\t\telm.mTabs.tabsControls.forEach( function loop( tabControl ) {\r\n\t\t\t\t\ttabControl.addEventListener( 'click', function listener( e ) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tmTabsFn.tabClick( elm, tabControl );\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Icon tabs\r\n\t\t\tif ( elm.classList.contains( 'm-tabs--icons' ) ) {\r\n\t\t\t\telm.mTabs.tabsControls.forEach( function loop( tabControlInner ) {\r\n\t\t\t\t\tvar span = tabControlInner.querySelector( 'span' ),\r\n\t\t\t\t\t\ttabIcon,\r\n\t\t\t\t\t\ttabIconClone,\r\n\t\t\t\t\t\tsubhead;\r\n\r\n\t\t\t\t\tif ( span ) {\r\n\t\t\t\t\t\ttabIcon = span.querySelector( 'img' );\r\n\t\t\t\t\t\tsubhead = span.querySelector( '.m-tabs__subheading' );\r\n\r\n\t\t\t\t\t\t// Remove any subheadings added by UX-rule-defying muppets\r\n\t\t\t\t\t\tif ( subhead ) {\r\n\t\t\t\t\t\t\tspan.removeChild( subhead );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Duplicate images to allow crossfading\r\n\t\t\t\t\t\ttabIcon.classList.add( 'm-tabs-icon__image--default' );\r\n\t\t\t\t\t\ttabIconClone = tabIcon.cloneNode( true );\r\n\t\t\t\t\t\tspan.append( tabIconClone );\r\n\t\t\t\t\t\ttabIconClone.classList.remove( 'm-tabs-icon__image--default' );\r\n\t\t\t\t\t\ttabIconClone.classList.add( 'm-tabs-icon__image--selected' );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Process all the page links\r\n\t\t\tmTabsFn.tabsPageLinks( elm );\r\n\t\t},\r\n\r\n\t\tsetOpenTab : function( elm ) {\r\n\t\t\tvar openTab = elm.querySelector( '.m-tabs__control.js-m-tab-open' ),\r\n\t\t\t\topenTabContent,\r\n\t\t\t\tscrollLeftPos;\r\n\r\n\t\t\t// Set up initially selected tab control - none marked as open, so use first tab\r\n\t\t\tif ( typeof openTab === 'object' && openTab !== null ) {\r\n\t\t\t\topenTab.classList.add( 'm-tabs__control--selected' );\r\n\t\t\t\topenTab.setAttribute( 'aria-selected', 'true' );\r\n\t\t\t\topenTab.removeAttribute( 'tabindex' );\r\n\r\n\t\t\t\tif ( elm.mTabs.settings.tabsStatic === true || elm.mTabs.settings.tabsLazy === true ) {\r\n\t\t\t\t\t// Pre-opened static tab\r\n\t\t\t\t\topenTabContent = elm.mTabs.tabsContents[ 0 ];\r\n\t\t\t\t\tutility.trigger( window, 'refresh' );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Pre-opened standard tab\r\n\t\t\t\t\topenTab.classList.remove( 'js-m-tab-open' );\r\n\t\t\t\t\topenTabContent = elm.mTabs.tabsContents.filter( function filterFn( contents ) {\r\n\t\t\t\t\t\treturn ( contents.id === openTab.getAttribute( 'href' ).substr( 1 ) );\r\n\t\t\t\t\t})[ 0 ];\r\n\r\n\t\t\t\t\tif ( elm.mTabs.settings.scrollLock ) {\r\n\t\t\t\t\t\t// Prevent scolling when already scrolling\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tscrollLeftPos = openTab.parentNode.offsetLeft - elm.mTabs.settings.offset;\r\n\t\t\t\t\t\telm.mTabs.tabsNavList.scrollTo( scrollLeftPos, 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// If pointing to a specific anchor within a tab section, scroll to that tab\r\n\t\t\t\tif ( elm.mTabs.windowHash ) {\r\n\t\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t\twindow.scrollTo( 0, utility.offset( openTab ).top );\r\n\t\t\t\t\t}, 100 );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\topenTab = elm.mTabs.tabsControls[ 0 ];\r\n\t\t\t\topenTab.classList.add( 'm-tabs__control--selected' );\r\n\t\t\t\topenTab.setAttribute( 'aria-selected', 'true' );\r\n\t\t\t\topenTab.removeAttribute( 'tabindex' );\r\n\t\t\t\topenTabContent = elm.mTabs.tabsContents[ 0 ];\r\n\t\t\t\tutility.trigger( window, 'refresh' );\r\n\t\t\t}\r\n\r\n\t\t\t// Open content matching initially selected tab control\r\n\t\t\topenTabContent.classList.add( 'm-tabs__content--selected' );\r\n\t\t\topenTabContent.setAttribute( 'aria-hidden', 'false' );\r\n\t\t\topenTabContent.style.display = 'block';\r\n\t\t\tif ( openTabContent.previousElementSibling.classList.contains( '.m-tabs__heading' ) ) {\r\n\t\t\t\topenTabContent.previousElementSibling.removeAttribute( 'style' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\topenTab : function( elm, thisHref ) {\r\n\t\t\tvar href = thisHref,\r\n\t\t\t\ttargetElm,\r\n\t\t\t\ttempElm,\r\n\t\t\t\ttabContentElm,\r\n\t\t\t\topenedTab = false;\r\n\r\n\t\t\tif ( thisHref.indexOf( '#' ) === 0 ) {\r\n\t\t\t\thref = '#' + CSS.escape( thisHref.substr( 1 ) );\r\n\t\t\t}\r\n\r\n\t\t\ttargetElm = elm.querySelector( href );\r\n\r\n\t\t\t// If target element exists within tab component then carry on processing\r\n\t\t\tif ( targetElm && elm.contains( targetElm ) ) {\r\n\t\t\t\t// Loop through until you find the outer most tab content area\r\n\t\t\t\ttempElm = targetElm.closest( '.m-tabs__content' );\r\n\t\t\t\twhile ( tempElm && elm.contains( tempElm ) ) {\r\n\t\t\t\t\ttabContentElm = tempElm;\r\n\t\t\t\t\ttempElm = tabContentElm.parentNode.closest( '.m-tabs__content' );\r\n\t\t\t\t}\r\n\t\t\t\tmTabsFn.tabClick( elm, elm.mTabs.tabsNavList.querySelector( 'a[href=\"#' + CSS.escape( tabContentElm.id ) + '\"]' ), true );\r\n\r\n\t\t\t\topenedTab = true;\r\n\t\t\t}\r\n\t\t\treturn openedTab;\r\n\t\t},\r\n\r\n\t\ttabsPageLinks : function( elm ) {\r\n\t\t\tvar href = utility.getAnchor(),\r\n\t\t\t\topenedTab = false,\r\n\t\t\t\ttabOpen,\r\n\t\t\t\tnextElement,\r\n\t\t\t\ttempElm;\r\n\r\n\t\t\tdocument.addEventListener( 'click', function listener( e ) {\r\n\t\t\t\tvar element = e.target,\r\n\t\t\t\t\tthisHref;\r\n\r\n\t\t\t\t// Get the href of the clicked element if there is one\r\n\t\t\t\tif ( element.hasAttribute( 'href' ) ) {\r\n\t\t\t\t\tthisHref = element.getAttribute( 'href' ).match( utility.urlAnchorRegExp );\r\n\t\t\t\t} else {\r\n\t\t\t\t\telement = element.closest( 'a[href], button[href]' );\r\n\t\t\t\t\tif ( element ) {\r\n\t\t\t\t\t\tthisHref = element.getAttribute( 'href' ).match( utility.urlAnchorRegExp );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Only try and process if the link is not blank\r\n\t\t\t\tif ( Array.isArray( thisHref ) && thisHref[ 0 ] !== '' && !element.classList.contains( 'm-tabs__control' ) && !element.classList.contains( 'm-tabs-nextprev' ) ) {\r\n\t\t\t\t\tmTabsFn.openTab( elm, thisHref[ 0 ] );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Open the associated element when the incoming link points to an id on a control\r\n\t\t\tif ( Array.isArray( href ) && href[ 0 ] !== '' ) {\r\n\t\t\t\topenedTab = mTabsFn.openTab( elm, href[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t\t// No incoming link, so check for pre-opened flag instead\r\n\t\t\tif ( !openedTab ) {\r\n\t\t\t\ttabOpen = elm.querySelector( '.js-m-tab-open' );\r\n\t\t\t\tif ( tabOpen ) {\r\n\t\t\t\t\t// If one exists, click the appropriate heading anchor\r\n\t\t\t\t\tif ( elm.mTabs.settings.tabsLazy ) {\r\n\t\t\t\t\t\ttempElm = tabOpen.closest( '.m-tabs__content' );\r\n\t\t\t\t\t\tif ( tempElm && elm.contains( tempElm ) ) {\r\n\t\t\t\t\t\t\t// Not this set of tabs, so need to find which tab we are within\r\n\t\t\t\t\t\t\tmTabsFn.openTab( elm, '#' + tempElm.id );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tmTabsFn.tabClick( elm, tabOpen, true );\r\n\t\t\t\t\t\t\twindow.scrollTo( 0, utility.offset( tabOpen ).top );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnextElement = tabOpen.nextElementSibling;\r\n\t\t\t\t\t\tif ( nextElement ) {\r\n\t\t\t\t\t\t\tmTabsFn.openTab( elm, '#' + nextElement.id );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Run resize/refresh function and setup carousel if necessary\r\n\t\t\tmTabsFn.resizeRefresh( elm );\r\n\t\t},\r\n\r\n\t\ttabsCarousel : function( elm ) {\r\n\t\t\tvar backgroundElm,\r\n\t\t\t\tbackgroundColor,\r\n\t\t\t\tstopOpaque,\r\n\t\t\t\tstopTransparent,\r\n\t\t\t\tstopTemp,\r\n\t\t\t\tonScroll = utility.debounce( function listener() {\r\n\t\t\t\t\tmTabsFn.updatePagination( elm );\r\n\t\t\t\t}, 10 );\r\n\r\n\t\t\telm.mTabs.settings.carouselActive = true;\r\n\t\t\telm.mTabs.tabsNav.classList.add( 'm-tabs__nav--carousel' );\r\n\r\n\t\t\t// Get breakpoint and set offsets\r\n\t\t\telm.mTabs.currentBreakpoint = utility.getBreakpoint();\r\n\t\t\tif ( !elm.mTabs.settings.tabsPrimary ) {\r\n\t\t\t\t// Standard - use default\r\n\t\t\t} else if ( elm.mTabs.currentBreakpoint === utility.smallTag ) {\r\n\t\t\t\telm.mTabs.settings.offset = elm.mTabs.settings.offsetPrimaryMobile; // Primary mobile\r\n\t\t\t} else {\r\n\t\t\t\telm.mTabs.settings.offset = elm.mTabs.settings.offsetPrimaryOther; // Primary tablet and desktop\r\n\t\t\t}\r\n\r\n\t\t\t// Setup pagination\r\n\t\t\telm.mTabs.pagination = utility.htmlStringToElement( '' );\r\n\r\n\t\t\t// Setup previous and next buttons\r\n\t\t\telm.mTabs.prevButton = elm.mTabs.pagination.querySelector( '.m-tabs__nav-pagination-prev' );\r\n\t\t\telm.mTabs.prevButtonTarget = elm.mTabs.prevButton.firstChild;\r\n\t\t\telm.mTabs.nextButton = elm.mTabs.pagination.querySelector( '.m-tabs__nav-pagination-next' );\r\n\t\t\telm.mTabs.nextButtonTarget = elm.mTabs.nextButton.firstChild;\r\n\r\n\t\t\telm.mTabs.prevButtonTarget.addEventListener( 'click', function listener() {\r\n\t\t\t\telm.mTabs.direction = 'prev';\r\n\t\t\t\tmTabsFn.setCarouselPosition( elm );\r\n\t\t\t});\r\n\t\t\telm.mTabs.nextButtonTarget.addEventListener( 'click', function listener() {\r\n\t\t\t\telm.mTabs.direction = 'next';\r\n\t\t\t\tmTabsFn.setCarouselPosition( elm );\r\n\t\t\t});\r\n\r\n\t\t\telm.mTabs.nextButtonTarget.classList.add( 'm-tabs-nextprev--active' );\r\n\t\t\telm.mTabs.nextButtonTarget.removeAttribute( 'disabled' );\r\n\r\n\t\t\telm.mTabs.tabsNavList.addEventListener( 'scroll', onScroll );\r\n\r\n\t\t\t// Append the pagination\r\n\t\t\telm.mTabs.tabsNav.append( elm.mTabs.pagination );\r\n\r\n\t\t\t// Get background colour and use it to apply transparency gradients behind prev / next arrows\r\n\t\t\tbackgroundElm = elm.mTabs.pagination.closest( '.t-card-accent-light .m-card, .t-card-accent-dark .m-card, .t-accent-light, .t-accent-dark' );\r\n\t\t\tif ( elm.mTabs.settings.tabsPrimary ) {\r\n\t\t\t\t// Primary tabs - just get tabsNav background colour\r\n\t\t\t\tbackgroundColor = getComputedStyle( elm.mTabs.tabsNav ).backgroundColor;\r\n\t\t\t} else if ( backgroundElm && typeof getComputedStyle( backgroundElm ).backgroundColor !== 'undefined' ) {\r\n\t\t\t\t// Standard tabs - work back up the DOM to find closest element with a background colour\r\n\t\t\t\tbackgroundColor = getComputedStyle( backgroundElm ).backgroundColor;\r\n\t\t\t} else {\r\n\t\t\t\tbackgroundColor = '#fff';\r\n\t\t\t}\r\n\r\n\t\t\t// Convert background colour to rgba\r\n\t\t\tif ( backgroundColor.indexOf( '#' ) === 0 ) {\r\n\t\t\t\t// ...from hex\r\n\t\t\t\tstopOpaque = utility.hexToRgba( backgroundColor );\r\n\t\t\t\tstopTransparent = stopOpaque.replace( '1)', '0)' );\r\n\t\t\t} else {\r\n\t\t\t\t// ...from rgb\r\n\t\t\t\tstopTemp = backgroundColor.replace( 'rgb(', 'rgba(' );\r\n\t\t\t\tstopOpaque = stopTemp.replace( ')', ', 1)' );\r\n\t\t\t\tstopTransparent = stopOpaque.replace( '1)', '0)' );\r\n\t\t\t}\r\n\r\n\t\t\tif ( elm.mTabs.currentBreakpoint === utility.smallTag ) {\r\n\t\t\t\t// Primary mobile\r\n\t\t\t\telm.mTabs.prevButtonTarget.style.backgroundImage = 'linear-gradient(to right, ' + stopOpaque + ' 75%, ' + stopTransparent + ')';\r\n\t\t\t\telm.mTabs.nextButtonTarget.style.backgroundImage = 'linear-gradient(to right, ' + stopTransparent + ', ' + stopOpaque + ' 25%)';\r\n\t\t\t} else if ( elm.mTabs.currentBreakpoint === utility.mediumTag || elm.mTabs.currentBreakpoint === utility.largeTag ) {\r\n\t\t\t\t// Primary tablet and desktop\r\n\t\t\t\telm.mTabs.prevButtonTarget.style.backgroundImage = 'linear-gradient(to right, ' + stopOpaque + ' 78.5%, ' + stopTransparent + ')';\r\n\t\t\t\telm.mTabs.nextButtonTarget.style.backgroundImage = 'linear-gradient(to right, ' + stopTransparent + ', ' + stopOpaque + ' 21.5%)';\r\n\t\t\t} else {\r\n\t\t\t\t// Standard\r\n\t\t\t\telm.mTabs.prevButtonTarget.style.backgroundImage = 'linear-gradient(to right, ' + stopOpaque + ' 70%, ' + stopTransparent + ')';\r\n\t\t\t\telm.mTabs.nextButtonTarget.style.backgroundImage = 'linear-gradient(to right, ' + stopTransparent + ', ' + stopOpaque + ' 30%)';\r\n\t\t\t}\r\n\r\n\t\t\telm.mTabs.currentIndexes = mTabsFn.getCurrentIndexes( elm );\r\n\t\t},\r\n\r\n\t\tupdatePagination : function( elm ) {\r\n\t\t\tvar farRight = elm.mTabs.tabsNavList.scrollWidth - elm.mTabs.tabsNavList.offsetWidth;\r\n\r\n\t\t\tif ( elm.mTabs.tabsNavList.scrollLeft <= 0 ) {\r\n\t\t\t\telm.mTabs.prevButtonTarget.classList.remove( 'm-tabs-nextprev--active' );\r\n\t\t\t\telm.mTabs.prevButtonTarget.setAttribute( 'disabled', true );\r\n\t\t\t} else {\r\n\t\t\t\telm.mTabs.prevButtonTarget.classList.add( 'm-tabs-nextprev--active' );\r\n\t\t\t\telm.mTabs.prevButtonTarget.removeAttribute( 'disabled' );\r\n\t\t\t}\r\n\t\t\tif ( elm.mTabs.tabsNavList.scrollLeft >= farRight - 2 ) { // Minus 2 to allow for a tiny bit of tollerance\r\n\t\t\t\telm.mTabs.nextButtonTarget.classList.remove( 'm-tabs-nextprev--active' );\r\n\t\t\t\telm.mTabs.nextButtonTarget.setAttribute( 'disabled', true );\r\n\t\t\t} else {\r\n\t\t\t\telm.mTabs.nextButtonTarget.classList.add( 'm-tabs-nextprev--active' );\r\n\t\t\t\telm.mTabs.nextButtonTarget.removeAttribute( 'disabled' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetCurrentIndexes : function( elm ) {\r\n\t\t\tvar elmIndent = elm.getBoundingClientRect().left + 50,\r\n\t\t\t\tleftIndex = 0,\r\n\t\t\t\tleftIndexSet = false,\r\n\t\t\t\trightIndex = 0;\r\n\r\n\t\t\telm.mTabs.tabsControls.forEach( function loop( listItem, index ) {\r\n\t\t\t\tvar listItemAbsoluteLeft = listItem.getBoundingClientRect().left - elmIndent,\r\n\t\t\t\t\tfarRight = elm.getBoundingClientRect().right - 50,\r\n\t\t\t\t\tlistItemAbsoluteRight = listItem.getBoundingClientRect().right;\r\n\r\n\t\t\t\tif ( utility.inRange( listItemAbsoluteLeft, 0, 5 ) ) {\r\n\t\t\t\t\tleftIndex = index;\r\n\t\t\t\t\tleftIndexSet = true;\r\n\t\t\t\t} else if ( listItemAbsoluteLeft > 0 && !leftIndexSet ) {\r\n\t\t\t\t\tleftIndex = index;\r\n\t\t\t\t\tleftIndexSet = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Do nothing\r\n\t\t\t\t}\r\n\t\t\t\tif ( listItemAbsoluteRight < farRight ) {\r\n\t\t\t\t\trightIndex = index;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn [ leftIndex, rightIndex ];\r\n\t\t},\r\n\r\n\t\t/* eslint-disable-next-line complexity */\r\n\t\tsetCarouselPosition : function( elm ) {\r\n\t\t\tvar currentIndex,\r\n\t\t\t\tnextIndex,\r\n\t\t\t\tprevIndex,\r\n\t\t\t\tscrollLeftPos,\r\n\t\t\t\ti = 0,\r\n\t\t\t\tfarRight = elm.mTabs.tabsNavList.scrollWidth - elm.mTabs.tabsNavList.offsetWidth,\r\n\t\t\t\ttabAreaWidth = elm.mTabs.tabsNavList.offsetWidth - 100 + 30,\r\n\t\t\t\tlistItemWidthTotal = 0;\r\n\r\n\t\t\tif ( elm.mTabs.settings.scrollLock ) {\r\n\t\t\t\t// Prevent scolling when already scrolling\r\n\t\t\t} else {\r\n\t\t\t\telm.mTabs.settings.scrollLock = true;\r\n\t\t\t\telm.mTabs.currentIndexes = mTabsFn.getCurrentIndexes( elm );\r\n\r\n\t\t\t\tif ( elm.mTabs.direction === 'prev' ) {\r\n\t\t\t\t\tcurrentIndex = elm.mTabs.currentIndexes[ 0 ];\r\n\t\t\t\t\tif ( currentIndex > 0 ) {\r\n\t\t\t\t\t\tprevIndex = currentIndex - 1;\r\n\r\n\t\t\t\t\t\tfor ( i = prevIndex; i >= 0; i-- ) {\r\n\t\t\t\t\t\t\tlistItemWidthTotal += elm.mTabs.tabsListItems[ i ].offsetWidth;\r\n\t\t\t\t\t\t\tif ( listItemWidthTotal <= tabAreaWidth ) {\r\n\t\t\t\t\t\t\t\tprevIndex = i;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ti = -1;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( prevIndex < 0 ) {\r\n\t\t\t\t\t\tprevIndex = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tscrollLeftPos = elm.mTabs.tabsListItems[ prevIndex ].offsetLeft - elm.mTabs.settings.offset;\r\n\t\t\t\t\telm.mTabs.tabsNavList.scrollTo( scrollLeftPos, 0 );\r\n\t\t\t\t\telm.mTabs.currentIndexes = mTabsFn.getCurrentIndexes( elm );\r\n\t\t\t\t\telm.mTabs.settings.scrollLock = false;\r\n\t\t\t\t} else if ( elm.mTabs.direction === 'next' ) {\r\n\t\t\t\t\tcurrentIndex = elm.mTabs.currentIndexes[ 1 ];\r\n\t\t\t\t\tif ( currentIndex >= elm.mTabs.tabsCount - 1 ) {\r\n\t\t\t\t\t\tnextIndex = elm.mTabs.tabsCount - 1;\r\n\t\t\t\t\t} else if ( elm.mTabs.tabsNavList.scrollLeft === farRight ) {\r\n\t\t\t\t\t\t// Don't change, as already at far right\r\n\t\t\t\t\t\tnextIndex = currentIndex;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnextIndex = currentIndex + 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( nextIndex >= elm.mTabs.tabsListItems.length ) {\r\n\t\t\t\t\t\tnextIndex = elm.mTabs.tabsListItems.length - 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tscrollLeftPos = elm.mTabs.tabsListItems[ nextIndex ].offsetLeft - elm.mTabs.settings.offset;\r\n\t\t\t\t\telm.mTabs.tabsNavList.scrollTo( scrollLeftPos, 0 );\r\n\t\t\t\t\telm.mTabs.currentIndexes = mTabsFn.getCurrentIndexes( elm );\r\n\t\t\t\t\telm.mTabs.settings.scrollLock = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Do nothing, as something's wrong\r\n\t\t\t\t\telm.mTabs.settings.scrollLock = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttabClick : function( elm, tabControl, noHistory ) {\r\n\t\t\t// Fade to selected tab and alter elm height if necessary - standard tabs\r\n\t\t\tvar href = tabControl.getAttribute( 'href' ),\r\n\t\t\t\tselected = elm.querySelector( href ),\r\n\t\t\t\tsourceHref,\r\n\t\t\t\tscrollParent,\r\n\t\t\t\tscrollParentPos,\r\n\t\t\t\tscrollLeftPos,\r\n\t\t\t\tscrollWindowPos;\r\n\r\n\t\t\t// Load in content for lazy-load tabs variant\r\n\t\t\tif ( elm.mTabs.settings.tabsLazy === true ) {\r\n\t\t\t\tif ( tabControl.getAttribute( 'data-href' ).match( '^#' ) || selected.classList.contains( 'js-loaded' ) ) {\r\n\t\t\t\t\t// Do nothing - this one's the original static content to leave in place, or additional content which has already been loaded\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Go get the content and ajax it in\r\n\t\t\t\t\tselected.querySelector( '.a-loading-indicator' ).style.display = 'block';\r\n\t\t\t\t\tsourceHref = tabControl.getAttribute( 'data-href' ).replace( '#', ' #' );\r\n\t\t\t\t\tutility.requestLoadInto( selected, sourceHref, function ajaxRequest( response, status ) {\r\n\t\t\t\t\t\tif ( status >= 200 && status < 400 ) {\r\n\t\t\t\t\t\t\tselected.classList.add( 'js-loaded' );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Not found, so do nothing\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( noHistory ) {\r\n\t\t\t\t// Dont record the opening of the tab\r\n\t\t\t} else {\r\n\t\t\t\tutility.updateHistory( href );\r\n\t\t\t}\r\n\r\n\t\t\tscrollParent = utility.scrollParent( selected );\r\n\t\t\tscrollParentPos = scrollParent.scrollTop;\r\n\t\t\tscrollWindowPos = window.scrollY;\r\n\r\n\t\t\telm.mTabs.tabsControls.forEach( function loop( tabControlElm ) {\r\n\t\t\t\tif ( tabControlElm.classList.contains( 'm-tabs__control--selected' ) ) {\r\n\t\t\t\t\ttabControlElm.classList.remove( 'm-tabs__control--selected' );\r\n\t\t\t\t\ttabControlElm.setAttribute( 'aria-selected', 'false' );\r\n\t\t\t\t\ttabControlElm.setAttribute( 'tabindex', -1 );\r\n\t\t\t\t}\r\n\t\t\t\tif ( tabControlElm.getAttribute( 'href' ) === href ) {\r\n\t\t\t\t\ttabControlElm.classList.add( 'm-tabs__control--selected' );\r\n\t\t\t\t\ttabControlElm.setAttribute( 'aria-selected', 'true' );\r\n\t\t\t\t\ttabControlElm.removeAttribute( 'tabindex' );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telm.mTabs.tabsHeadings.forEach( function loop( heading ) {\r\n\t\t\t\theading.style.display = 'none';\r\n\t\t\t});\r\n\r\n\t\t\telm.mTabs.tabsContents.forEach( function loop( content ) {\r\n\t\t\t\tif ( content.classList.contains( 'm-tabs__content--selected' ) ) {\r\n\t\t\t\t\tcontent.classList.remove( 'm-tabs__content--selected' );\r\n\t\t\t\t\tcontent.setAttribute( 'aria-hidden', 'true' );\r\n\t\t\t\t\tcontent.style.display = 'none';\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tselected.classList.add( 'm-tabs__content--selected' );\r\n\t\t\tselected.setAttribute( 'aria-hidden', 'false' );\r\n\t\t\tselected.setAttribute( 'tabindex', -1 );\r\n\t\t\tselected.style.display = 'block';\r\n\t\t\tselected.focus({ preventScroll : true });\r\n\r\n\t\t\tselected.previousElementSibling.removeAttribute( 'style' );\r\n\t\t\tscrollParent.scrollTop = scrollParentPos; // Reset to original position\r\n\t\t\twindow.scroll( window.scrollX, scrollWindowPos ); // Reset to original position\r\n\r\n\t\t\tutility.trigger( window, 'refresh' );\r\n\r\n\t\t\t// Slide selected trigger to far left\r\n\t\t\tif ( elm.mTabs.settings.scrollLock ) {\r\n\t\t\t\t// Prevent scolling when already scrolling\r\n\t\t\t} else {\r\n\t\t\t\tscrollLeftPos = tabControl.parentNode.offsetLeft - elm.mTabs.settings.offset;\r\n\t\t\t\telm.mTabs.tabsNavList.scrollTo( scrollLeftPos, 0 );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttabsStatic : function( elm ) {\r\n\t\t\tvar staticHeading = elm.querySelector( '.m-tabs__heading' ); // Returns first instance, which is what we want anyway\r\n\t\t\tstaticHeading.classList.add( 'u-hidden--visually' );\r\n\t\t},\r\n\r\n\t\ttabsLazy : function( elm ) {\r\n\t\t\t// Get hard-coded static content for first tab, then remove the redundant div\r\n\t\t\tvar staticContent = elm.querySelector( '.m-tabs__content' ), // Returns first instance, which is what we want anyway\r\n\t\t\t\tstaticContent2 = staticContent.children[ 0 ],\r\n\t\t\t\tstaticID = staticContent.id,\r\n\t\t\t\tselectedTab,\r\n\t\t\t\theadings;\r\n\r\n\t\t\t// Remove headings, then remove content\r\n\t\t\theadings = Array.from( staticContent.querySelectorAll( '.m-tabs__heading' ) ).filter( function filterFn( heading ) {\r\n\t\t\t\treturn heading.closest( '.m-tabs' ) === elm;\r\n\t\t\t});\r\n\t\t\theadings.forEach( function loop( heading ) {\r\n\t\t\t\theading.remove();\r\n\t\t\t});\r\n\t\t\theadings = staticContent.previousElementSibling;\r\n\t\t\tif ( headings && headings.classList.contains( 'm-tabs__heading' ) ) {\r\n\t\t\t\theadings.remove();\r\n\t\t\t}\r\n\r\n\t\t\tstaticContent.remove();\r\n\r\n\t\t\t// Turn list into standard h3 + m-tabs__content markup\r\n\t\t\telm.mTabs.tabsHeadings.forEach( function loop( heading ) {\r\n\t\t\t\tvar href = heading.getAttribute( 'href' ),\r\n\t\t\t\t\tclasses = heading.classList,\r\n\t\t\t\t\ttitle = heading.textContent,\r\n\t\t\t\t\tnewTabH2,\r\n\t\t\t\t\tnewTabH3,\r\n\t\t\t\t\tnewTabContent;\r\n\t\t\t\t// Generate a string 'dataAttrs' from the non-js links containing all data attributes for replacing in the control\r\n\t\t\t\tlet dataAttrs = '';\r\n\t\t\t\t// Retain datasets for click tracking\r\n\t\t\t\tObject.keys( heading.dataset ).forEach( key => {\r\n\t\t\t\t\t// Fix hyphenated key names\r\n\t\t\t\t\tlet keyString = '';\r\n\t\t\t\t\t// Split data key into an array around uppercase with match if required\r\n\t\t\t\t\tlet tempArr = key.match( /[A-Za-z][a-z]+/g );\r\n\t\t\t\t\t// Concatenate and drop to lowercase - unless there is no split array in which case use key\r\n\t\t\t\t\tkeyString = tempArr === null ? keyString = key : keyString += 'data-' + tempArr.join( '-' ).toLowerCase();\r\n\t\t\t\t\t// Build the data attribute string for insertion\r\n\t\t\t\t\tdataAttrs += keyString + '=\"' + heading.dataset[ key ] + '\"';\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Remove data class from classes\r\n\t\t\t\tclasses.remove( 'dd-data-link' );\r\n\r\n\t\t\t\tif ( elm.mTabs.settings.tabsPrimary === true ) {\r\n\t\t\t\t\tnewTabH2 = utility.htmlStringToElement( '

    ' + title + '

    ' );\r\n\t\t\t\t\telm.append( newTabH2 );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnewTabH3 = utility.htmlStringToElement( '

    ' + title + '

    ' );\r\n\t\t\t\t\telm.append( newTabH3 );\r\n\t\t\t\t}\r\n\t\t\t\t// eslint-disable-next-line max-len\r\n\t\t\t\tnewTabContent = utility.htmlStringToElement( '
    ' + elm.mTabs.settings.loadingText + '
    ' );\r\n\t\t\t\telm.append( newTabContent );\r\n\t\t\t});\r\n\r\n\t\t\t// Rediscover headings\r\n\t\t\telm.mTabs.tabsHeadings = Array.from( elm.querySelectorAll( '.m-tabs__heading' ) ).filter( function filterFn( heading ) {\r\n\t\t\t\treturn heading.closest( '.m-tabs' ) === elm && mTabsFn.filterParents( heading, 'm-tabs__content' ) === false;\r\n\t\t\t});\r\n\r\n\t\t\t// Find the selected tab and insert static content\r\n\t\t\tselectedTab = elm.querySelector( '.m-tabs__heading[data-href=\"#' + staticID + '\"]' ).nextElementSibling;\r\n\t\t\twhile ( selectedTab.firstChild ) {\r\n\t\t\t\tselectedTab.removeChild( selectedTab.firstChild );\r\n\t\t\t}\r\n\t\t\tif ( elm.mTabs.settings.tabsPrimary === true ) {\r\n\t\t\t\tselectedTab.append( staticContent2 );\r\n\t\t\t} else {\r\n\t\t\t\tselectedTab.append( staticContent );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tresizeRefresh : function( elm ) {\r\n\t\t\t// Resize function\r\n\t\t\t// eslint-disable-next-line complexity\r\n\t\t\tvar onResizeRefresh = utility.debounce( function listener() {\r\n\t\t\t\tvar listWidth = elm.mTabs.tabsNav.offsetWidth,\r\n\t\t\t\t\tlistItemsWidth = 0,\r\n\t\t\t\t\tscrollLeftPos,\r\n\t\t\t\t\ttabSelected = elm.querySelector( '.m-tabs__control--selected' );\r\n\r\n\t\t\t\telm.mTabs.tabsNav.classList.remove( 'm-tabs__nav--carousel' ); // Remove class to test widths properly\r\n\r\n\t\t\t\telm.mTabs.tabsListItems.forEach( function loop( listItem ) {\r\n\t\t\t\t\tlistItemsWidth += utility.outerWidthTrue( listItem );\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif ( elm.mTabs.settings.tabsPrimary && listItemsWidth + elm.mTabs.settings.offset > listWidth && elm.mTabs.settings.carouselActive ) {\r\n\t\t\t\t\t// Primary - doesn't fit, but active carousel - update pagination controlls\r\n\t\t\t\t\telm.mTabs.tabsNav.classList.add( 'm-tabs__nav--carousel' ); // Add class back\r\n\t\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t\tmTabsFn.updatePagination( elm );\r\n\t\t\t\t\t}, 5 );\r\n\t\t\t\t} else if ( listItemsWidth > listWidth && elm.mTabs.settings.carouselActive ) {\r\n\t\t\t\t\t// Standard - doesn't fit, but active carousel - update pagination controlls\r\n\t\t\t\t\telm.mTabs.tabsNav.classList.add( 'm-tabs__nav--carousel' ); // Add class back\r\n\t\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t\tmTabsFn.updatePagination( elm );\r\n\t\t\t\t\t}, 5 );\r\n\t\t\t\t} else if ( elm.mTabs.settings.tabsPrimary && listItemsWidth + elm.mTabs.settings.offset > listWidth ) {\r\n\t\t\t\t\t// Primary - doesn't fit, no active carousel - set up carousel\r\n\t\t\t\t\tmTabsFn.tabsCarousel( elm );\r\n\t\t\t\t} else if ( listItemsWidth > listWidth ) {\r\n\t\t\t\t\t// Standard - doesn't fit, no active carousel - set up carousel\r\n\t\t\t\t\tmTabsFn.tabsCarousel( elm );\r\n\t\t\t\t} else if ( elm.mTabs.settings.carouselActive ) {\r\n\t\t\t\t\t// All fits, active carousel - destroy carousel\r\n\t\t\t\t\telm.mTabs.tabsNav.classList.remove( 'm-tabs__nav--carousel' );\r\n\t\t\t\t\telm.mTabs.settings.carouselActive = false;\r\n\t\t\t\t\telm.mTabs.tabsNav.removeChild( elm.mTabs.pagination );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// All fits, no active carousel - do nothing\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Slide selected trigger to far left\r\n\t\t\t\tif ( elm.mTabs.settings.scrollLock ) {\r\n\t\t\t\t\t// Prevent scolling when already scrolling\r\n\t\t\t\t} else {\r\n\t\t\t\t\tscrollLeftPos = tabSelected.parentNode.offsetLeft - elm.mTabs.settings.offset;\r\n\t\t\t\t\telm.mTabs.tabsNavList.scrollTo( scrollLeftPos, 0 );\r\n\t\t\t\t}\r\n\t\t\t}, 10 );\r\n\r\n\t\t\t// Create eventListeners\r\n\t\t\twindow.addEventListener( 'resize', onResizeRefresh );\r\n\t\t\twindow.addEventListener( 'refresh', onResizeRefresh, false );\r\n\t\t\tonResizeRefresh();\r\n\t\t},\r\n\r\n\t\tswitchTabOnArrowPress : function( elm, event ) {\r\n\t\t\tvar pressed = event.key,\r\n\t\t\t\ttarget = event.target,\r\n\t\t\t\ttargetIndex = elm.mTabs.tabsControls.indexOf( target ),\r\n\t\t\t\tdirection = elm.mTabs.settings.direction[ pressed ];\r\n\r\n\t\t\tif ( Number.isInteger( direction ) ) {\r\n\t\t\t\tif ( targetIndex >= 0 ) {\r\n\t\t\t\t\tif ( pressed === 'Home' ) {\r\n\t\t\t\t\t\telm.mTabs.tabsControls[ 0 ].focus(); // Move to first tab\r\n\t\t\t\t\t} else if ( pressed === 'End' ) {\r\n\t\t\t\t\t\telm.mTabs.tabsControls[ elm.mTabs.tabsControls.length - 1 ].focus(); // Move to last tab\r\n\t\t\t\t\t} else if ( elm.mTabs.tabsControls[ targetIndex + direction ] ) {\r\n\t\t\t\t\t\telm.mTabs.tabsControls[ targetIndex + direction ].focus(); // Move by one tab left or right\r\n\t\t\t\t\t} else if ( direction === -1 ) {\r\n\t\t\t\t\t\telm.mTabs.tabsControls[ elm.mTabs.tabsControls.length - 1 ].focus(); // Loop around to last tab\r\n\t\t\t\t\t} else if ( direction === 1 ) {\r\n\t\t\t\t\t\telm.mTabs.tabsControls[ 0 ].focus(); // Loop around to first tab\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\treturn {\r\n\t\tinitInstance : function( elm ) {\r\n\t\t\treturn mTabsFn.init( elm );\r\n\t\t},\r\n\t};\r\n});\r\n"]}