{"version":3,"sources":["utility.js"],"names":["define","smallTag","mediumTag","largeTag","mediumBP","largeBP","baseFont","urlRegExp","RegExp","urlAnchorRegExp","deepMerge","target","source","this","result","instance","Object","prototype","toString","call","forEach","child","index","loop","nodeType","cloneNode","Date","key","clone","item","Number","String","Boolean","types","type","keys","trigger","element","eventName","document","createEvent","event","initEvent","dispatchEvent","addClass","classes","classNames","split","classList","className","add","addMeasurements","measurement","measurementArray","i","removeMeasurementSuffix","convertToPx","newNumber","number","noAuto","debounce","func","wait","immediate","timeout","context","args","callNow","clearTimeout","later","apply","escapeHtml","str","createElement","div","appendChild","extend","length","arguments","fade","duration","fadeOptions","variant","displayNone","minFade","maxFade","callback","isNode","contains","style","transition","webkitTransition","opacity","display","fadeIn","timing","setTimeout","timeoutFn","remove","removeProperty","setAttribute","fadeOut","innerTimeoutFn","find","search","results","elements","selector","concat","Array","slice","getAnchor","currentUrl","window","location","href","fullHash","match","partHash","localeCompare","getBreakpoint","tag","body","mediumBreakpoint","FRAMEWORK","fontSize","getComputedStyle","largeBreakpoint","standalone","matches","getData","attribName","data","attrib","attributes","specified","test","name","replace","l","toUpperCase","parse","value","error","hexToRgba","hex","c","substring","join","htmlStringToElement","template","html","trim","innerHTML","firstChild","htmlStringToElements","childNodes","inRange","range","inclusive","min","max","comparator","originalNumber","exists","Node","ELEMENT_NODE","isOverflown","axis","scrollHeight","hasOverflown","clientHeight","scrollWidth","clientWidth","isVisible","offsetWidth","offsetHeight","makeId","testHidden","newID","poss","possLength","charAt","Math","floor","random","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","offset","rect","getBoundingClientRect","top","pageYOffset","left","pageXOffset","outerHeightTrue","height","parseInt","marginTop","marginBottom","outerWidthTrue","width","marginLeft","marginRight","parents","customSelector","currentEl","parentNode","push","processInPageLinks","linkFunction","querySelectorAll","pathname","host","removeClass","newValue","parseFloat","isNaN","resetStyles","styleList","convertedKey","toLowerCase","requestLoadInto","bodyRegex","request","id","tempUrl","requestUrl","XMLHttpRequest","indexOf","origin","onload","elContent","tempEl","responseText","querySelector","outerHTML","responseCallback","status","scrollParent","parent","excludeStaticParent","includeHidden","overflowRegex","position","parentElement","overflow","overflowY","overflowX","setAttributes","attrs","siblings","isSibling","filter","children","slideToggle","options","startHeight","elStyles","startPaddingBottom","startPaddingTop","initialHeight","overlapMargin","toggleOptions","customStartHeight","customEndHeight","overlap","paddingBottom","paddingTop","savedStyles","maxHeight","nextStyles","baseHeight","subtractMeasurements","slideDown","slideUp","endHeight","hide","smoothScroll","xCoord","yCoord","animationTime","scrollArea","scrollTop","scrollLeft","scrollCompleteFunction","smoothScrollSupported","documentElement","scrollBehavior","newAnimationTime","scrollableArea","timings","current","t350ms","animation","ceil","scrollTimeout","removeEventListener","scrollTo","behavior","distanceTop","distanceLeft","unwrap","TEXT_NODE","insertAdjacentElement","removeChild","updateHistory","replaceState","anchor","wrap","wrappingElement","wrapper","wrapInner","contentWrapper","insertBefore"],"mappings":"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","file":"utility.js","sourcesContent":["// eslint-disable-next-line max-lines-per-function\ndefine( function run() {\n\t'use strict';\n\n\t/*\n\t * ION UTILITY FUNCTIONS\n\t * ===========================\n\t *\n\t * All functions up to date and tested as of v4.13 release\n\t * Please quote version number when adding additional functions or updating existing ones\n\t *\n\t * Functions list:\n\t * ---------------\n\t * trigger - Trigger event natively\n\t * addClass - add specified class to an element\n\t * addMeasurements - get sum of measurements in an array\n\t * convertToPx - add px suffix to a number\n\t * debounce - prevent other functions from being called again too rapidly (eg on page resize)\n\t * escapeHTML - safely escape any strings using built-in browser functionality\n\t * extend - deep merge multiple objects together\n\t * fade - vanilla JS replacement for jQuery's fadeIn / fadeOut functions\n\t * find - find elements with a particular selector from within a given set of elements\n\t * getAnchor - get anchor href\n\t * getBreakpoint - gets viewport's current breakpoint based on standard ION widths\n\t * getData - return an object containing a list of data attributes\n\t * hexToRgba - Convert hex value to rgba\n\t * htmlStringToElement - Convert an HTML string to a proper DOM element\n\t * htmlStringToElements - Convert an HTML string to a node list of elements\n\t * inRange - Test if two numbers are within a given range of each other\n\t * isNode - Check if the the element passed in is an Element Node\n\t * isOverflown - check if the content of an element has overflown its bounding box\n\t * isVisible - check if an element is visible\n\t * makeId - create a random ID\n\t * matches - Find elements with a matching selector\n\t * offset - find an element's position\n\t * outerHeightTrue - get an element's total outer height (including margins etc)\n\t * outerWidthTrue - get an element's total outer width (including margins etc)\n\t * parents - return an array of an element's parents\n\t * processInPageLinks - find all links with a specific selector and run specified function on them\n\t * removeClass - remove specified class to an element\n\t * removeMeasurementSuffix - remove measurement suffixes (px/em etc)\n\t * resetStyles - Reset styles on an element\n\t * requestLoadInto - load content from specified url/anchor into an element\n\t * scrollParent - find an element's parent for scrolling purposes\n\t * setAttributes - allow daisy chaining to set multiple attributes in one go\n\t * siblings - find all sibling elements / sibling elements (with a particular selector if specified)\n\t * slideToggle - vanilla JS replacement for jQuery's slideUp / slideDown / slideToggle functions\n\t * smoothScroll - smooth scroll to position\n\t * subtractMeasurements - get remainder from subtracted measurements in an array\n\t * unwrap - unwrap an element from its parent (removes parent)\n\t * updateHistory - update browser history\n\t * wrap - wrap element with a new one\n\t * wrapInner - wrap the children of an element within a single new child element\n\t */\n\n\t// Other functions\n\treturn {\n\t\tsmallTag : 'small',\n\t\tmediumTag : 'medium',\n\t\tlargeTag : 'large',\n\t\tmediumBP : 35,\n\t\tlargeBP : 60,\n\t\tbaseFont : 16,\n\t\turlRegExp : new RegExp( '#[a-zA-Z0-9-._~%!$&\\'()*+,;=:@/?#]+' ),\n\t\turlAnchorRegExp : new RegExp( '#[a-zA-Z]+[a-zA-Z0-9-._]*' ), // Only accept character valid in html4 for compatibility\n\n\t\t// eslint-disable-next-line complexity\n\t\tdeepMerge : function( target, source ) {\n\t\t\tvar instance = this,\n\t\t\t\tresult = target;\n\n\t\t\tif ( !source && typeof source !== 'boolean' ) {\n\t\t\t\treturn target; // Null, undefined values check\n\t\t\t}\n\n\t\t\tif ( Object.prototype.toString.call( source ) === '[object Array]' ) {\n\t\t\t\tif ( Object.prototype.toString.call( result ) !== '[object Array]' ) {\n\t\t\t\t\tresult = [];\n\t\t\t\t}\n\t\t\t\tsource.forEach( function loop( child, index ) {\n\t\t\t\t\tif ( result[ index ] ) {\n\t\t\t\t\t\tresult[ index ] = instance.deepMerge( result[ index ], source[ index ] );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult[ index ] = instance.clone( source[ index ] );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if ( typeof source === 'object' ) {\n\t\t\t\t// Testing that this is DOM\n\t\t\t\tif ( source.nodeType && typeof source.cloneNode === 'function' ) {\n\t\t\t\t\tresult = source.cloneNode( true );\n\t\t\t\t} else if ( source instanceof RegExp ) {\n\t\t\t\t\tresult = new RegExp( source );\n\t\t\t\t} else if ( target.prototype ) {\n\t\t\t\t\tresult = source;\n\t\t\t\t} else if ( source instanceof Date ) {\n\t\t\t\t\t// Check that this is a literal\n\t\t\t\t\tresult = new Date( source );\n\t\t\t\t} else {\n\t\t\t\t\t// It is an object literal\n\t\t\t\t\tif ( typeof result !== 'object' ) {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tObject.keys( source ).forEach( function loop( key ) {\n\t\t\t\t\t\tif ( result[ key ] ) {\n\t\t\t\t\t\t\tresult[ key ] = instance.deepMerge( result[ key ], source[ key ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult[ key ] = instance.clone( source[ key ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult = source;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// eslint-disable-next-line complexity\n\t\tclone : function( item ) {\n\t\t\tvar instance = this,\n\t\t\t\ttypes = [ Number, String, Boolean ],\n\t\t\t\tresult;\n\n\t\t\tif ( !item && typeof item !== 'boolean' ) {\n\t\t\t\treturn item; // Null, undefined values check\n\t\t\t}\n\n\t\t\t// Normalizing primitives if someone did new String('aaa'), or new Number('444');\n\t\t\ttypes.forEach( function loop( type ) {\n\t\t\t\tif ( item instanceof type ) {\n\t\t\t\t\tresult = type( item );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif ( typeof result === 'undefined' ) {\n\t\t\t\tif ( Object.prototype.toString.call( item ) === '[object Array]' ) {\n\t\t\t\t\tresult = [];\n\t\t\t\t\titem.forEach( function loop( child, index ) {\n\t\t\t\t\t\tresult[ index ] = instance.clone( child );\n\t\t\t\t\t});\n\t\t\t\t} else if ( typeof item === 'object' ) {\n\t\t\t\t\t// Testing that this is DOM\n\t\t\t\t\tif ( item.nodeType && typeof item.cloneNode === 'function' ) {\n\t\t\t\t\t\tresult = item.cloneNode( true );\n\t\t\t\t\t} else if ( item instanceof RegExp ) {\n\t\t\t\t\t\tresult = new RegExp( item );\n\t\t\t\t\t} else if ( item.prototype ) {\n\t\t\t\t\t\tresult = item;\n\t\t\t\t\t} else if ( item instanceof Date ) {\n\t\t\t\t\t\t// Check that this is a literal\n\t\t\t\t\t\tresult = new Date( item );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// It is an object literal\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t\tObject.keys( item ).forEach( function loop( key ) {\n\t\t\t\t\t\t\tresult[ key ] = instance.clone( item[ key ] );\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresult = item;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t// Function to help dispatch custom events\n\t\ttrigger : function( element, eventName ) {\n\t\t\tvar event = document.createEvent( 'Event' );\n\n\t\t\tevent.initEvent( eventName, true, true );\n\t\t\telement.dispatchEvent( event );\n\t\t},\n\n\t\t// Add specified class to an element (v4.13 - Sep 19)\n\t\taddClass : function( element, classNames ) {\n\t\t\tvar classes = classNames.split( ' ' );\n\n\t\t\tif ( element && element.classList ) {\n\t\t\t\tclasses.forEach( function loop( className ) {\n\t\t\t\t\tif ( className ) {\n\t\t\t\t\t\telement.classList.add( className );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t// Get sum of measurements in an array (v4.13 - Sep 19)\n\t\taddMeasurements : function( measurementArray ) {\n\t\t\tvar instance = this,\n\t\t\t\tmeasurement = 0,\n\t\t\t\ti;\n\n\t\t\tfor ( i = 0; i < measurementArray.length; i++ ) {\n\t\t\t\tif ( typeof measurementArray[ i ] !== 'number' ) {\n\t\t\t\t\tmeasurementArray[ i ] = instance.removeMeasurementSuffix( measurementArray[ i ] ); // Value is NaN, so attempt to convert beore continuing\n\t\t\t\t}\n\t\t\t\tif ( typeof measurementArray[ i ] === 'number' ) {\n\t\t\t\t\tmeasurement += measurementArray[ i ]; // Value is a number, so add it on to current total\n\t\t\t\t} else {\n\t\t\t\t\tmeasurement = 'auto'; // Value is set to auto (so don't change it), or something else entirely (so set to auto rather than failing completely)...\n\t\t\t\t\ti = measurementArray.length; // ... then set count to be complete so no more additions are run\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn measurement;\n\t\t},\n\n\t\t// Add px suffix to a number (v4.13 - Sep 19)\n\t\tconvertToPx : function( number, noAuto ) {\n\t\t\tvar newNumber;\n\n\t\t\tif ( number === 0 || number === '0' || ( number === 'auto' && noAuto ) ) { // Starting value is 0, or number being forced instead of auto\n\t\t\t\tnewNumber = 0;\n\t\t\t} else if ( number === 'auto' || typeof number !== 'number' || Number.isNaN( number ) ) { // Starting value is auto or not a number\n\t\t\t\tnewNumber = 'auto';\n\t\t\t} else { // Standard functionality\n\t\t\t\tnewNumber = number + 'px';\n\t\t\t}\n\t\t\treturn newNumber;\n\t\t},\n\n\t\t// Help to prevent other functions from being called again too rapidly (eg on page resize) (v4.13 - Sep 19)\n\t\tdebounce : function( func, wait, immediate ) {\n\t\t\tvar timeout;\n\n\t\t\treturn function debounceFn() {\n\t\t\t\tvar context = this,\n\t\t\t\t\targs = arguments,\n\t\t\t\t\tlater = function() {\n\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\tif ( !immediate ) {\n\t\t\t\t\t\t\tfunc.apply( context, args );\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tcallNow = immediate && !timeout;\n\n\t\t\t\tclearTimeout( timeout );\n\n\t\t\t\ttimeout = setTimeout( later, wait );\n\t\t\t\tif ( callNow ) {\n\t\t\t\t\tfunc.apply( context, args );\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\n\t\t// Safely escape any strings using built-in browser functionality (v4.13 - Sep 19)\n\t\tescapeHtml : function( str ) {\n\t\t\tvar div = document.createElement( 'div' );\n\n\t\t\tdiv.appendChild( document.createTextNode( str ) );\n\t\t\treturn div.innerHTML;\n\t\t},\n\n\t\t// Deep merge objects together (v5.0.0 - Jan 20)\n\t\textend : function() {\n\t\t\tvar instance = this,\n\t\t\t\tresult,\n\t\t\t\ti;\n\n\t\t\tif ( arguments.length > 0 ) {\n\t\t\t\tresult = {};\n\t\t\t\tfor ( i = 0; i < arguments.length; i++ ) {\n\t\t\t\t\tif ( arguments[ i ] ) {\n\t\t\t\t\t\tresult = instance.deepMerge( result, arguments[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/*\n\t\t * Vanilla JS replacement for jQuery's fadeIn / fadeOut functions (v4.13 - Sep 19)\n\t\t * eg: element.fade( target element, animation duration (in ms), { options } );\n\t\t */\n\t\tfade : function( element, duration, options ) {\n\t\t\tvar instance = this,\n\t\t\t\tfadeOptions = {\n\t\t\t\t\tvariant : 'toggle', // ...in/out/toggle - default toggle\n\t\t\t\t\tdisplayNone : true, // ...boolean - default true\n\t\t\t\t\tminFade : 0, // ...number - default 0\n\t\t\t\t\tmaxFade : 1, // ...number - default 1\n\t\t\t\t\tcallback : function() {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t// Only run if not currently animating\n\t\t\tif ( instance.isNode( element ) && !element.classList.contains( 'is-animating' ) ) {\n\t\t\t\t// If options have been set update the default ones\n\t\t\t\tfadeOptions = instance.extend({}, fadeOptions, options );\n\n\t\t\t\tfadeOptions.transition = element.style.transition; // Save any current inline styles\n\t\t\t\tfadeOptions.webkitTransition = element.style.webkitTransition; // Save any current inline styles\n\n\t\t\t\telement.classList.add( 'is-animating' );\n\n\t\t\t\tif ( fadeOptions.variant === 'in' ) {\n\t\t\t\t\tinstance.fadeIn( element, duration, fadeOptions );\n\t\t\t\t} else if ( fadeOptions.variant === 'out' ) {\n\t\t\t\t\tinstance.fadeOut( element, duration, fadeOptions );\n\t\t\t\t} else if ( fadeOptions.variant === 'toggle' && ( element.style.opacity === 0 || element.style.display === 'none' ) ) {\n\t\t\t\t\tinstance.fadeIn( element, duration, fadeOptions );\n\t\t\t\t} else {\n\t\t\t\t\tinstance.fadeOut( element, duration, fadeOptions );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Fade in - fade variant only\n\t\tfadeIn : function( element, duration, fadeOptions ) {\n\t\t\tvar instance = this,\n\t\t\t\ttiming = ( duration / 1000 ) + 's';\n\n\t\t\tif ( instance.isNode( element ) ) {\n\t\t\t\telement.style.transition = 'opacity ' + timing;\n\t\t\t\telement.style.webkitTransition = 'opacity ' + timing;\n\t\t\t\telement.style.opacity = fadeOptions.minFade;\n\n\t\t\t\tif ( fadeOptions.displayNone ) {\n\t\t\t\t\telement.style.display = 'block';\n\t\t\t\t}\n\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\telement.style.opacity = fadeOptions.maxFade;\n\n\t\t\t\t\tsetTimeout( function innerTimeoutFn() {\n\t\t\t\t\t\telement.classList.remove( 'is-animating' );\n\t\t\t\t\t\tif ( element.style.transition === null ) {\n\t\t\t\t\t\t\telement.style.removeProperty( 'transition' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.style.transition = fadeOptions.transition;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( element.style.webkitTransition === null ) {\n\t\t\t\t\t\t\telement.style.removeProperty( 'webkitTransition' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.style.webkitTransition = fadeOptions.webkitTransition;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.style.webkitTransition = fadeOptions.webkitTransition;\n\t\t\t\t\t\tif ( fadeOptions.displayNone ) {\n\t\t\t\t\t\t\telement.style.display = 'block';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.style.opacity = fadeOptions.maxFade;\n\t\t\t\t\t\telement.setAttribute( 'aria-hidden', 'false' );\n\t\t\t\t\t\tfadeOptions.callback();\n\t\t\t\t\t}, duration );\n\t\t\t\t}, 20 );\n\t\t\t}\n\t\t},\n\n\t\t// Fade out - fade variant only\n\t\tfadeOut : function( element, duration, fadeOptions ) {\n\t\t\tvar instance = this,\n\t\t\t\ttiming = ( duration / 1000 ) + 's';\n\n\t\t\tif ( instance.isNode( element ) ) {\n\t\t\t\telement.style.transition = 'opacity ' + timing;\n\t\t\t\telement.style.webkitTransition = 'opacity ' + timing;\n\t\t\t\telement.style.opacity = fadeOptions.maxFade;\n\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\telement.style.opacity = fadeOptions.minFade;\n\t\t\t\t\tsetTimeout( function innerTimeoutFn() {\n\t\t\t\t\t\telement.classList.remove( 'is-animating' );\n\t\t\t\t\t\tif ( element.style.transition === null ) {\n\t\t\t\t\t\t\telement.style.removeProperty( 'transition' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.style.transition = fadeOptions.transition;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( element.style.webkitTransition === null ) {\n\t\t\t\t\t\t\telement.style.removeProperty( 'webkitTransition' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telement.style.webkitTransition = fadeOptions.webkitTransition;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.style.display = 'block';\n\t\t\t\t\t\telement.style.opacity = fadeOptions.minFade;\n\n\t\t\t\t\t\tif ( fadeOptions.displayNone && fadeOptions.minFade === 0 ) {\n\t\t\t\t\t\t\t// MinFade = 0 required as otherwise minFade of greater than 0 will get blatted to hidden anyway\n\t\t\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\t\t\telement.style.removeProperty( 'opacity' );\n\t\t\t\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfadeOptions.callback();\n\t\t\t\t\t}, duration );\n\t\t\t\t}, 20 );\n\t\t\t}\n\t\t},\n\n\t\t// Find elements with a particular selector from within a given set of elements (v4.13 - Sep 19)\n\t\tfind : function( elements, selector ) {\n\t\t\tvar results = [],\n\t\t\t\ti,\n\t\t\t\tsearch;\n\n\t\t\tfor ( i = 0; i < elements.length; i++ ) {\n\t\t\t\tsearch = elements[ i ].querySelectorAll( selector );\n\t\t\t\tif ( search !== null ) {\n\t\t\t\t\tresults = results.concat( Array.prototype.slice.call( search ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( results.length === 0 ) {\n\t\t\t\tresults = null;\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\n\t\t// Get anchor href (v4.13 - Sep 19)\n\t\tgetAnchor : function() {\n\t\t\tvar instance = this,\n\t\t\t\tcurrentUrl = window.location.href,\n\t\t\t\tfullHash = currentUrl.match( instance.urlRegExp ),\n\t\t\t\tpartHash = currentUrl.match( instance.urlAnchorRegExp ),\n\t\t\t\thref = '';\n\n\t\t\tif ( !fullHash ) {\n\t\t\t\t// Do nothing\n\t\t\t} else if ( partHash !== null && fullHash.toString().localeCompare( partHash.toString() ) === 0 ) {\n\t\t\t\thref = partHash;\n\t\t\t} else {\n\t\t\t\thref = null;\n\t\t\t}\n\n\t\t\treturn href;\n\t\t},\n\n\t\t// Get the current main breakpoint of the page so that we can adjust a component's behaviour (v4.13 - Sep 19)\n\t\tgetBreakpoint : function( element ) {\n\t\t\tvar instance = this,\n\t\t\t\tthisElement = window.document.body,\n\t\t\t\ttag = instance.smallTag,\n\t\t\t\tfontSize = instance.baseFont,\n\t\t\t\tlargeBreakpoint = instance.largeBP + 'em',\n\t\t\t\tmediumBreakpoint = instance.mediumBP + 'em';\n\n\t\t\tif ( FRAMEWORK.standalone && typeof element !== 'undefined' ) {\n\t\t\t\t// Get the font size for the element that was passed in. Used for Standalone global nav\n\t\t\t\tthisElement = element;\n\t\t\t\tfontSize = instance.removeMeasurementSuffix( window.getComputedStyle( thisElement ).fontSize );\n\t\t\t\tlargeBreakpoint = ( instance.largeBP * fontSize ) + 'px';\n\t\t\t\tmediumBreakpoint = ( instance.mediumBP * fontSize ) + 'px';\n\t\t\t}\n\n\t\t\tif ( window.matchMedia( '(min-width: ' + largeBreakpoint + ')' ).matches ) {\n\t\t\t\ttag = instance.largeTag;\n\t\t\t} else if ( window.matchMedia( '(min-width: ' + mediumBreakpoint + ')' ).matches ) {\n\t\t\t\ttag = instance.mediumTag;\n\t\t\t} else {\n\t\t\t\t// Do nothing\n\t\t\t}\n\n\t\t\treturn tag;\n\t\t},\n\n\t\t// Return an object containing a list of data attributes (v4.13 - Sep 19)\n\t\tgetData : function( element ) {\n\t\t\tvar data = {},\n\t\t\t\ti,\n\t\t\t\tattrib,\n\t\t\t\tattribName;\n\n\t\t\tfor ( i = 0; i < element.attributes.length; i++ ) {\n\t\t\t\tattrib = element.attributes[ i ];\n\t\t\t\tif ( attrib.specified && ( /^data-/ ).test( attrib.name ) ) {\n\t\t\t\t\tattribName = String( attrib.name );\n\t\t\t\t\tattribName = attribName.replace( /^data-/, '' );\n\t\t\t\t\tattribName = attribName.replace( /-\\b\\w/g, function fn( l ) {\n\t\t\t\t\t\treturn l.toUpperCase();\n\t\t\t\t\t});\n\t\t\t\t\tattribName = attribName.replace( /-/g, '' );\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdata[ attribName ] = JSON.parse( attrib.value );\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\tdata[ attribName ] = attrib.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data;\n\t\t},\n\n\t\t// Convert hex value to rgba (v5.0 - May 20)\n\t\thexToRgba : function( hex ) {\n\t\t\tvar c;\n\t\t\tif ( ( /^#([A-Fa-f0-9]{3}){1,2}$/ ).test( hex ) ) {\n\t\t\t\tc = hex.substring( 1 ).split( '' );\n\t\t\t\tif ( c.length === 3 ) {\n\t\t\t\t\t// 6 digit shortcode\n\t\t\t\t\tc = [ c[ 0 ], c[ 0 ], c[ 1 ], c[ 1 ], c[ 2 ], c[ 2 ] ];\n\t\t\t\t}\n\t\t\t\tc = '0x' + c.join( '' );\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\treturn 'rgba( ' + [ ( c >> 16 ) & 255, ( c >> 8 ) & 255, c & 255 ].join( ', ' ) + ', 1)';\n\t\t\t}\n\t\t\t// If process fails, return original value\n\t\t\treturn hex;\n\t\t},\n\n\t\t// Convert an HTML string to a proper DOM element (v4.13 - Sep 19)\n\t\thtmlStringToElement : function( str ) {\n\t\t\tvar template = document.createElement( 'div' ),\n\t\t\t\thtml = str.trim(); // Never return a text node of whitespace as the result\n\n\t\t\ttemplate.innerHTML = html;\n\t\t\treturn template.firstChild;\n\t\t},\n\n\t\t// Convert an HTML string to a node list of elements (v4.13 - Sep 19)\n\t\thtmlStringToElements : function( str ) {\n\t\t\t// Returns a node list rather than an array; may want to consider changing final line return to Array.from( template.childNodes );\n\t\t\tvar template = document.createElement( 'div' ),\n\t\t\t\thtml = str.trim(); // Never return a text node of whitespace as the result\n\n\t\t\ttemplate.innerHTML = html;\n\t\t\treturn template.childNodes; // Returns node list\n\t\t},\n\n\t\tinRange : function( originalNumber, comparator, range, inclusive ) {\n\t\t\tvar min = comparator - range,\n\t\t\t\tmax = comparator + range;\n\n\t\t\treturn inclusive ? originalNumber >= min && originalNumber <= max : originalNumber > min && originalNumber < max;\n\t\t},\n\n\t\t// Check if the the element passed in is an Element Node (v4.15 - Nov 19)\n\t\tisNode : function( element ) {\n\t\t\tvar exists = false;\n\n\t\t\tif ( element && element !== null && element.nodeType === Node.ELEMENT_NODE ) {\n\t\t\t\texists = true;\n\t\t\t}\n\t\t\treturn exists;\n\t\t},\n\n\t\t// Check if the content of an element has overflown its bounding box (v4.13 - Sep 19)\n\t\tisOverflown : function( element, axis ) {\n\t\t\tvar hasOverflown = false;\n\n\t\t\tif ( axis === 'y' ) {\n\t\t\t\thasOverflown = element.scrollHeight > element.clientHeight + 1;\n\t\t\t} else if ( axis === 'x' ) {\n\t\t\t\thasOverflown = element.scrollWidth > element.clientWidth + 1;\n\t\t\t} else {\n\t\t\t\thasOverflown = element.scrollHeight > element.clientHeight + 1 || element.scrollWidth > element.clientWidth + 1;\n\t\t\t}\n\t\t\treturn hasOverflown;\n\t\t},\n\n\t\t// Check if an element is visible (v4.13 - Sep 19)\n\t\tisVisible : function( element ) {\n\t\t\tvar testHidden = ( element.offsetWidth === 0 && element.offsetHeight === 0 ) || window.getComputedStyle( element ).display === 'none';\n\t\t\treturn !testHidden;\n\t\t},\n\n\t\t// Create a random ID (copied from utility.js) (v4.13 - Sep 19)\n\t\tmakeId : function( prefix ) {\n\t\t\tvar newID = '',\n\t\t\t\tposs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',\n\t\t\t\tpossLength = poss.length,\n\t\t\t\ti;\n\n\t\t\tfor ( i = 0; i < 5; i++ ) {\n\t\t\t\tnewID += poss.charAt( Math.floor( Math.random() * possLength ) );\n\t\t\t}\n\n\t\t\treturn ( prefix ? prefix : '' ) + newID;\n\t\t},\n\n\t\t// Find elements with a matching selector (v4.13 - Sep 19)\n\t\tmatches : function( element, selector ) {\n\t\t\tvar instance = this,\n\t\t\t\tresult = false;\n\n\t\t\tif ( instance.isNode( element ) ) {\n\t\t\t\t// eslint-disable-next-line max-len\n\t\t\t\tresult = ( element.matches || element.matchesSelector || element.msMatchesSelector || element.mozMatchesSelector || element.webkitMatchesSelector || element.oMatchesSelector ).call( element, selector );\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\t// Find an element's position (v4.13 - Sep 19)\n\t\toffset : function( element ) {\n\t\t\tvar rect = element.getBoundingClientRect();\n\n\t\t\treturn {\n\t\t\t\ttop : rect.top + window.pageYOffset,\n\t\t\t\tleft : rect.left + window.pageXOffset,\n\t\t\t};\n\t\t},\n\n\t\t// Get an element's total outer height (including margins etc) (v4.13 - Sep 19)\n\t\touterHeightTrue : function( element ) {\n\t\t\tvar height = element.offsetHeight,\n\t\t\t\tstyle = getComputedStyle( element );\n\n\t\t\theight += Number.parseInt( style.marginTop, 10 ) + Number.parseInt( style.marginBottom, 10 );\n\t\t\treturn height;\n\t\t},\n\n\t\t// Get an element's total outer width (including margins etc) (v4.13 - Sep 19)\n\t\touterWidthTrue : function( element ) {\n\t\t\tvar width = element.offsetWidth,\n\t\t\t\tstyle = getComputedStyle( element );\n\n\t\t\twidth += Number.parseInt( style.marginLeft, 10 ) + Number.parseInt( style.marginRight, 10 );\n\t\t\treturn width;\n\t\t},\n\n\t\t// Return an array of an element's parents (v4.13 - Sep 19)\n\t\tparents : function( element, customSelector ) {\n\t\t\tvar elements = [],\n\t\t\t\tselector = customSelector || '*',\n\t\t\t\tcurrentEl = element.parentNode;\n\n\t\t\twhile ( currentEl.parentNode ) {\n\t\t\t\tif ( currentEl.matches( selector ) ) {\n\t\t\t\t\telements.push( currentEl );\n\t\t\t\t}\n\t\t\t\tcurrentEl = currentEl.parentNode;\n\t\t\t}\n\t\t\treturn elements;\n\t\t},\n\n\t\t// Find all links with a specific selector and run specified function on them (v4.13 - Sep 19)\n\t\tprocessInPageLinks : function( selector, linkFunction ) {\n\t\t\tdocument.querySelectorAll( '[href*=\"#\"]' + selector ).forEach( function loop( element ) {\n\t\t\t\tif ( window.location.pathname === element.pathname && window.location.host === element.host ) {\n\t\t\t\t\tlinkFunction( element );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// Remove specified class to an element (v4.13 - Sep 19)\n\t\tremoveClass : function( element, classNames ) {\n\t\t\tvar classes;\n\n\t\t\tif ( element && element.classList ) {\n\t\t\t\tclasses = classNames.split( ' ' );\n\t\t\t\tclasses.forEach( function loop( className ) {\n\t\t\t\t\tif ( className ) {\n\t\t\t\t\t\telement.classList.remove( className );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t// Remove measurement suffixes (v4.13 - Sep 19)\n\t\tremoveMeasurementSuffix : function( value, noAuto ) {\n\t\t\tvar newValue = value;\n\n\t\t\tif ( typeof newValue === 'string' ) {\n\t\t\t\tif ( value === 'auto' && !noAuto ) {\n\t\t\t\t\tnewValue = 'auto'; // Starting value is auto, number not being forced\n\t\t\t\t} else {\n\t\t\t\t\tnewValue = newValue.replace( /q|mm|cm|in|pt|pc|px|em|ex|ch|rem|vw|vh|deg|%/g, '' ); // Remove valid css measurements such as px, em etc\n\t\t\t\t\tnewValue = Number.parseFloat( newValue, 10 );\n\t\t\t\t\tif ( Number.isNaN( newValue ) ) { // New value is NaN despite suffix removal\n\t\t\t\t\t\tnewValue = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if ( typeof newValue === 'number' ) {\n\t\t\t\tnewValue = value; // Do nothing - starting value is already a number\n\t\t\t} else {\n\t\t\t\tnewValue = 0; // Any other random case\n\t\t\t}\n\t\t\treturn newValue;\n\t\t},\n\n\t\t// Reset styles on an element (v4.15 - Oct 19)\n\t\tresetStyles : function( element, styleList ) {\n\t\t\tvar convertedKey;\n\t\t\tObject.keys( styleList ).forEach( function loop( key ) {\n\t\t\t\tif ( styleList[ key ] === null || styleList[ key ] === '' ) {\n\t\t\t\t\tconvertedKey = key.replace( /[A-Z]/g, function regexFn( match ) {\n\t\t\t\t\t\treturn '-' + match.toLowerCase();\n\t\t\t\t\t});\n\t\t\t\t\telement.style.removeProperty( convertedKey );\n\t\t\t\t} else {\n\t\t\t\t\telement.style[ key ] = styleList[ key ];\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// Load content from specified url/anchor into an element (v4.13 - Sep 19)\n\t\trequestLoadInto : function( element, href, responseCallback ) {\n\t\t\tvar instance = this,\n\t\t\t\tbodyRegex = /([\\s\\S]*)<\\/body>/,\n\t\t\t\tid = href.match( instance.urlAnchorRegExp ),\n\t\t\t\trequestUrl = href,\n\t\t\t\trequest = new XMLHttpRequest(),\n\t\t\t\ttempUrl;\n\n\t\t\tif ( id && id[ 0 ] ) {\n\t\t\t\tid = id[ 0 ];\n\t\t\t\trequestUrl = href.replace( id, '' );\n\t\t\t\trequestUrl = href.replace( ' ', '' );\n\t\t\t}\n\t\t\t// If there is a space in the url then split and use the later part as the selector\n\t\t\tif ( requestUrl.indexOf( ' ' ) !== -1 ) {\n\t\t\t\ttempUrl = requestUrl.split( ' ' );\n\t\t\t\trequestUrl = tempUrl[ 0 ];\n\t\t\t\tid = tempUrl[ 1 ];\n\t\t\t}\n\n\t\t\t// If the url supplied does not start with // or the protocol then add the current path origin\n\t\t\tif ( !requestUrl.match( /^((\\/\\/)|(http))/ ) ) {\n\t\t\t\trequestUrl = window.location.origin + requestUrl;\n\t\t\t}\n\n\t\t\trequest.open( 'GET', requestUrl, true );\n\t\t\trequest.onload = function onload() {\n\t\t\t\tvar tempEl,\n\t\t\t\t\telContent;\n\n\t\t\t\tif ( request.status >= 200 && request.status < 400 ) {\n\t\t\t\t\ttempEl = document.createElement( 'div' );\n\t\t\t\t\ttempEl.innerHTML = request.responseText;\n\n\t\t\t\t\tif ( id ) {\n\t\t\t\t\t\telContent = tempEl.querySelector( id );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( elContent ) {\n\t\t\t\t\t\telement.innerHTML = elContent.outerHTML;\n\t\t\t\t\t} else if ( request.responseText.indexOf( '' ) && request.responseText.indexOf( '' ) > 0 ) {\n\t\t\t\t\t\t// If there was not valid ID given then make sure only the body of any page passed in is injected into the page\n\t\t\t\t\t\telement.innerHTML = bodyRegex.exec( request.responseText )[ 1 ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.innerHTML = request.responseText;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( responseCallback ) {\n\t\t\t\t\tresponseCallback( request.responseText, request.status );\n\t\t\t\t}\n\t\t\t};\n\t\t\trequest.send();\n\t\t},\n\n\t\t// Find an element's parent for scrolling purposes (v4.13 - Sep 19)\n\t\tscrollParent : function( element, includeHidden ) {\n\t\t\tvar style = getComputedStyle( element ),\n\t\t\t\texcludeStaticParent = style.position === 'absolute',\n\t\t\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\t\t\tparent;\n\n\t\t\tif ( style.position === 'fixed' ) {\n\t\t\t\treturn document.body;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-cond-assign\n\t\t\tfor ( parent = element; ( parent = parent.parentElement ); ) {\n\t\t\t\tstyle = getComputedStyle( parent );\n\t\t\t\tif ( excludeStaticParent && style.position === 'static' ) {\n\t\t\t\t\t// Do nothing\n\t\t\t\t} else if ( overflowRegex.test( style.overflow + style.overflowY + style.overflowX ) ) {\n\t\t\t\t\treturn parent;\n\t\t\t\t} else {\n\t\t\t\t\t// Do nothing\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn document.body;\n\t\t},\n\n\t\t// Allow daisy-chaining to set multiple attributes in one go, eg setAttributes( el, { href : '#', class : 'whatever' } ); (v4.13 - Sep 19)\n\t\tsetAttributes : function( element, attrs ) {\n\t\t\tObject.keys( attrs ).forEach( function loop( key ) {\n\t\t\t\telement.setAttribute( key, attrs[ key ] );\n\t\t\t});\n\t\t},\n\n\t\t// Find all sibling elements / sibling elements (with a particular selector if specified) (v4.13 - Sep 19)\n\t\tsiblings : function( element, selector ) {\n\t\t\tvar siblingsArr = [],\n\t\t\t\tinstance = this;\n\n\t\t\tsiblingsArr = Array.prototype.filter.call( element.parentNode.children, function loop( child ) {\n\t\t\t\tvar isSibling = false;\n\t\t\t\tif ( child === element ) {\n\t\t\t\t\t// Do nothing\n\t\t\t\t} else if ( typeof selector === 'undefined' || instance.matches( child, selector ) ) {\n\t\t\t\t\tisSibling = true;\n\t\t\t\t} else {\n\t\t\t\t\t// Do nothing\n\t\t\t\t}\n\t\t\t\treturn isSibling;\n\t\t\t});\n\n\t\t\treturn siblingsArr;\n\t\t},\n\n\t\t/*\n\t\t * Vanilla JS replacement for jQuery's slideUp / slideDown / slideToggle functions (v4.13 - Sep 19)\n\t\t * eg: element.slideToggle( target element, animation duration (in ms), { options } );\n\t\t */\n\t\tslideToggle : function( element, duration, options ) { // eslint-disable-line complexity\n\t\t\tvar instance = this,\n\t\t\t\ttiming = ( duration / 1000 ) + 's',\n\t\t\t\ttoggleOptions = {\n\t\t\t\t\tvariant : 'toggle', // ...down/up/toggle - default toggle\n\t\t\t\t\toverlapMargin : false, // ...boolean - default false\n\t\t\t\t\tcustomStartHeight : null, // ...number - default null\n\t\t\t\t\tcustomEndHeight : null, // ...number - default null\n\t\t\t\t\tdisplay : 'block', // ...block/grid/flex - default block\n\t\t\t\t\tminFade : 0, // ...number - default 0\n\t\t\t\t\tmaxFade : 1, // ...number - default 1\n\t\t\t\t\tfade : false, // ...boolean - default false\n\t\t\t\t\tcallback : function() {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\toverlap = 0, // Default if no overlap;\n\t\t\t\tnextStyles,\n\t\t\t\tstartHeight,\n\t\t\t\telStyles,\n\t\t\t\tstartPaddingBottom,\n\t\t\t\tstartPaddingTop,\n\t\t\t\tbaseHeight,\n\t\t\t\tinitialHeight;\n\n\t\t\t// Only run if animation is not progress\n\t\t\tif ( instance.isNode( element ) && !element.classList.contains( 'is-animating' ) ) {\n\t\t\t\telStyles = window.getComputedStyle( element );\n\t\t\t\tstartPaddingBottom = instance.removeMeasurementSuffix( elStyles.paddingBottom, true );\n\t\t\t\tstartPaddingTop = instance.removeMeasurementSuffix( elStyles.paddingTop, true );\n\n\t\t\t\t// If options have been set update the default ones\n\t\t\t\ttoggleOptions = instance.extend({}, toggleOptions, options );\n\n\t\t\t\ttoggleOptions.savedStyles = {\n\t\t\t\t\theight : element.style.height,\n\t\t\t\t\tmarginBottom : element.style.marginBottom,\n\t\t\t\t\tmarginTop : element.style.marginTop,\n\t\t\t\t\tmaxHeight : element.style.maxHeight,\n\t\t\t\t\topacity : element.style.opacity,\n\t\t\t\t\toverflow : element.style.overflow,\n\t\t\t\t\toverflowX : element.style.overflowX,\n\t\t\t\t\toverflowY : element.style.overflowY,\n\t\t\t\t\tpaddingBottom : element.style.paddingBottom,\n\t\t\t\t\tpaddingTop : element.style.paddingTop,\n\t\t\t\t\ttransition : element.style.transition,\n\t\t\t\t};\n\n\t\t\t\t/*\n\t\t\t\t * To avoid jumping at start/end of transitions caused by overflow-y: hidden, get next sibling's top\n\t\t\t\t * margin ready take that into consideration when calculating initial height\n\t\t\t\t * Set parameter to 'overlapMargin' to true to use (false with 'overlap = 0' by default)\n\t\t\t\t */\n\t\t\t\tif ( toggleOptions.overlapMargin && element.nextElementSibling ) {\n\t\t\t\t\tnextStyles = window.getComputedStyle( element.nextElementSibling );\n\t\t\t\t\toverlap = instance.removeMeasurementSuffix( nextStyles.marginTop, true );\n\t\t\t\t}\n\n\t\t\t\t// Get computed height of element plus any overlapping top margins from next sibling\n\t\t\t\tif ( toggleOptions.customStartHeight === null ) {\n\t\t\t\t\tstartHeight = instance.addMeasurements( [ instance.removeMeasurementSuffix( element.offsetHeight ), overlap ] );\n\t\t\t\t} else {\n\t\t\t\t\tstartHeight = toggleOptions.customStartHeight;\n\t\t\t\t}\n\n\t\t\t\t// If previously hidden, show element again before doing any animations\n\t\t\t\tif ( elStyles.display === 'none' ) {\n\t\t\t\t\telement.style.display = toggleOptions.display;\n\t\t\t\t\telement.style.paddingBottom = 0;\n\t\t\t\t\telement.style.paddingTop = 0;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Initial height without margins - needs setting specifically for setTimeout function as el.offsetHeight\n\t\t\t\t * is modified in the 10ms before it runs and can return value including overlapping margins\n\t\t\t\t * Set height to auto and get computed height of element less any overlapping top margins from next sibling\n\t\t\t\t */\n\t\t\t\telement.style.height = 'auto';\n\t\t\t\tbaseHeight = instance.removeMeasurementSuffix( elStyles.height );\n\t\t\t\tinitialHeight = instance.subtractMeasurements( [ baseHeight, overlap ] );\n\n\t\t\t\tif ( toggleOptions.fade && ( toggleOptions.variant === 'down' || ( toggleOptions.variant === 'toggle' && startHeight === 0 ) ) ) {\n\t\t\t\t\telement.style.opacity = toggleOptions.minFade;\n\t\t\t\t} else {\n\t\t\t\t\telement.style.opacity = toggleOptions.maxFade;\n\t\t\t\t}\n\n\t\t\t\t// After calculations, set element height to start height, hide overflow for duration of transition, and add transition css\n\t\t\t\telement.style.height = instance.convertToPx( startHeight );\n\t\t\t\telement.style.maxHeight = instance.convertToPx( startHeight );\n\t\t\t\telement.style.overflow = 'hidden';\n\t\t\t\telement.style.overflowX = 'hidden';\n\t\t\t\telement.style.overflowY = 'hidden';\n\t\t\t\telement.style.transition = 'all ' + timing + ' ease-in-out';\n\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\tif ( toggleOptions.variant === 'down' ) {\n\t\t\t\t\t\telement.classList.add( 'is-animating' );\n\t\t\t\t\t\tinstance.slideDown( element, duration, toggleOptions, {\n\t\t\t\t\t\t\tinitialHeight : initialHeight,\n\t\t\t\t\t\t\tstartPaddingBottom : startPaddingBottom,\n\t\t\t\t\t\t\tstartPaddingTop : startPaddingTop,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if ( toggleOptions.variant === 'up' ) {\n\t\t\t\t\t\telement.classList.add( 'is-animating' );\n\t\t\t\t\t\tinstance.slideUp( element, duration, toggleOptions );\n\t\t\t\t\t} else if ( toggleOptions.variant === 'toggle' ) {\n\t\t\t\t\t\telement.classList.add( 'is-animating' );\n\t\t\t\t\t\tif ( startHeight === 0 ) {\n\t\t\t\t\t\t\tinstance.slideDown( element, duration, toggleOptions, {\n\t\t\t\t\t\t\t\tinitialHeight : initialHeight,\n\t\t\t\t\t\t\t\tstartPaddingBottom : startPaddingBottom,\n\t\t\t\t\t\t\t\tstartPaddingTop : startPaddingTop,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinstance.slideUp( element, duration, toggleOptions );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Error, as one of the above should apply, reset any styles\n\t\t\t\t\t\tinstance.resetStyles( element, toggleOptions.savedStyles );\n\t\t\t\t\t}\n\t\t\t\t}, 20 );\n\t\t\t}\n\t\t},\n\n\t\t// Slide up function - slideToggle variant only (v4.13 - Sep 19)\n\t\tslideUp : function( element, duration, toggleOptions ) {\n\t\t\tvar instance = this,\n\t\t\t\tendHeight = toggleOptions.customEndHeight || 0;\n\n\t\t\tif ( instance.isNode( element ) ) {\n\t\t\t\telement.style.maxHeight = instance.convertToPx( endHeight );\n\t\t\t\telement.style.height = instance.convertToPx( endHeight );\n\t\t\t\telement.style.marginBottom = 0;\n\t\t\t\telement.style.marginTop = 0;\n\t\t\t\telement.style.paddingBottom = 0;\n\t\t\t\telement.style.paddingTop = 0;\n\t\t\t\tif ( toggleOptions.fade ) {\n\t\t\t\t\telement.style.opacity = toggleOptions.minFade;\n\t\t\t\t\ttoggleOptions.savedStyles.opacity = toggleOptions.minFade;\n\t\t\t\t}\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\tvar hide = false;\n\t\t\t\t\tif ( element.style.height === '0px' || element.style.height === 0 ) {\n\t\t\t\t\t\thide = true;\n\t\t\t\t\t}\n\t\t\t\t\telement.classList.remove( 'is-animating' );\n\t\t\t\t\tif ( toggleOptions.savedStyles ) {\n\t\t\t\t\t\tinstance.resetStyles( element, toggleOptions.savedStyles );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hide ) {\n\t\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t\t}\n\t\t\t\t\ttoggleOptions.callback();\n\t\t\t\t}, duration );\n\t\t\t}\n\t\t},\n\n\t\t// Slide down function - slideToggle variant only (v4.13 - Sep 19)\n\t\tslideDown : function( element, duration, toggleOptions, options ) {\n\t\t\tvar instance = this,\n\t\t\t\tendHeight = instance.addMeasurements( [ options.initialHeight, options.startPaddingTop, options.startPaddingBottom ] );\n\n\t\t\tif ( instance.isNode( element ) ) {\n\t\t\t\tif ( toggleOptions.customEndHeight !== null ) {\n\t\t\t\t\tendHeight = toggleOptions.customEndHeight;\n\t\t\t\t}\n\t\t\t\tif ( endHeight === 'auto' ) {\n\t\t\t\t\telement.style.maxHeight = '4000px';\n\t\t\t\t} else {\n\t\t\t\t\telement.style.maxHeight = instance.convertToPx( endHeight );\n\t\t\t\t}\n\t\t\t\telement.style.height = instance.convertToPx( endHeight );\n\t\t\t\telement.style.paddingBottom = instance.convertToPx( options.startPaddingBottom );\n\t\t\t\telement.style.paddingTop = instance.convertToPx( options.startPaddingTop );\n\t\t\t\tif ( toggleOptions.fade ) {\n\t\t\t\t\telement.style.opacity = toggleOptions.maxFade;\n\t\t\t\t\ttoggleOptions.savedStyles.opacity = toggleOptions.maxFade;\n\t\t\t\t}\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\telement.classList.remove( 'is-animating' );\n\t\t\t\t\tif ( toggleOptions.savedStyles ) {\n\t\t\t\t\t\tinstance.resetStyles( element, toggleOptions.savedStyles );\n\t\t\t\t\t}\n\t\t\t\t\telement.style.display = toggleOptions.display;\n\t\t\t\t\telement.setAttribute( 'aria-hidden', 'false' );\n\t\t\t\t\ttoggleOptions.callback();\n\t\t\t\t}, duration );\n\t\t\t}\n\t\t},\n\n\t\t// Smooth scroll to position (v4.13 - Sep 19)\n\t\t// eslint-disable-next-line complexity\n\t\tsmoothScroll : function( xCoord, yCoord, animationTime, scrollArea, callback ) {\n\t\t\tvar smoothScrollSupported = 'scrollBehavior' in document.documentElement.style && document.documentElement.style.scrollBehavior !== 'auto',\n\t\t\t\tnewAnimationTime = animationTime,\n\t\t\t\tscrollTop,\n\t\t\t\tscrollLeft,\n\t\t\t\tdistanceTop,\n\t\t\t\tdistanceLeft,\n\t\t\t\tinstance = this,\n\t\t\t\tscrollableArea = scrollArea,\n\t\t\t\tscrollCompleteFunction,\n\t\t\t\tscrollTimeout;\n\n\t\t\t// If no scrollable area is provide scroll the window\n\t\t\tif ( !scrollableArea || typeof scrollableArea === 'undefined' ) {\n\t\t\t\tscrollableArea = window;\n\t\t\t}\n\n\t\t\t// If not animation time was set, set to 350ms\n\t\t\tif ( typeof newAnimationTime !== 'number' ) {\n\t\t\t\tnewAnimationTime = FRAMEWORK.timings.current.t350ms;\n\t\t\t}\n\n\t\t\tif ( FRAMEWORK.animation && smoothScrollSupported && newAnimationTime > 0 ) {\n\t\t\t\t// Only setup the listener if there is a callback function\n\t\t\t\tif ( callback && typeof callback === 'function' ) {\n\t\t\t\t\tscrollCompleteFunction = function() {\n\t\t\t\t\t\tif ( scrollableArea === window ) {\n\t\t\t\t\t\t\t// If native smooth scrolling is not supported then implement a basic version\n\t\t\t\t\t\t\tscrollTop = Math.ceil( ( window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop ) / 10 ) * 10;\n\t\t\t\t\t\t\tscrollLeft = Math.ceil( ( window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft ) / 10 ) * 10;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tscrollTop = Math.ceil( scrollableArea.scrollTop / 10 ) * 10;\n\t\t\t\t\t\t\tscrollLeft = Math.ceil( scrollableArea.scrollLeft / 10 ) * 10;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( instance.inRange( scrollLeft, xCoord, 10, true ) && instance.inRange( scrollTop, yCoord, 10, true ) ) {\n\t\t\t\t\t\t\tscrollableArea.removeEventListener( 'scroll', scrollCompleteFunction );\n\t\t\t\t\t\t\tclearTimeout( scrollTimeout );\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tscrollableArea.addEventListener( 'scroll', scrollCompleteFunction );\n\t\t\t\t\tscrollCompleteFunction();\n\n\t\t\t\t\t// Set a scroll timeout in case you can't scroll to the requested position so it never gets within range\n\t\t\t\t\tscrollTimeout = setTimeout( function timeoutFn() {\n\t\t\t\t\t\tscrollableArea.removeEventListener( 'scroll', scrollCompleteFunction );\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}, 1000 ); // Set to 1 second to allow for the browser native scroll speed\n\t\t\t\t}\n\n\t\t\t\t// If native smooth scrolling is supported use that\n\t\t\t\tscrollableArea.scrollTo({\n\t\t\t\t\tbehavior : 'smooth',\n\t\t\t\t\tleft : xCoord,\n\t\t\t\t\ttop : yCoord,\n\t\t\t\t});\n\t\t\t} else if ( FRAMEWORK.animation && newAnimationTime > 0 ) {\n\t\t\t\tif ( scrollableArea === window ) {\n\t\t\t\t\t// If native smooth scrolling is not supported then implement a basic version\n\t\t\t\t\tscrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\t\t\t\t\tscrollLeft = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;\n\t\t\t\t} else {\n\t\t\t\t\tscrollTop = scrollableArea.scrollTop;\n\t\t\t\t\tscrollLeft = scrollableArea.scrollLeft;\n\t\t\t\t}\n\n\t\t\t\tdistanceTop = ( yCoord - scrollTop ) / ( newAnimationTime / 10 );\n\t\t\t\tdistanceLeft = ( xCoord - scrollLeft ) / ( newAnimationTime / 10 );\n\n\t\t\t\tscrollTop += distanceTop;\n\t\t\t\tscrollLeft += distanceLeft;\n\t\t\t\tnewAnimationTime -= 10;\n\n\t\t\t\tscrollableArea.scrollTo( scrollLeft, scrollTop ); // Scrolling to 1/35 of desired left/top location; reruns until animation time hits 0.\n\t\t\t\tif ( newAnimationTime <= 0 || ( distanceTop === 0 && distanceLeft === 0 ) ) {\n\t\t\t\t\tif ( callback && typeof callback === 'function' ) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\t\tinstance.smoothScroll( xCoord, yCoord, newAnimationTime, scrollableArea, callback );\n\t\t\t\t\t}, 10 );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If no animation allowed just move to coords\n\t\t\t\tscrollableArea.scrollTo( xCoord, yCoord );\n\t\t\t\tif ( callback && typeof callback === 'function' ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Get remainder from subtracted measurements in an array (v4.13 - Sep 19)\n\t\tsubtractMeasurements : function( measurementArray ) {\n\t\t\tvar instance = this,\n\t\t\t\tmeasurement = 0,\n\t\t\t\ti;\n\n\t\t\tfor ( i = 0; i < measurementArray.length; i++ ) {\n\t\t\t\tif ( typeof measurementArray[ i ] !== 'number' ) {\n\t\t\t\t\tmeasurementArray[ i ] = instance.removeMeasurementSuffix( measurementArray[ i ] ); // Value is NaN, so attempt to convert before continuing\n\t\t\t\t}\n\t\t\t\tif ( i === 0 && typeof measurementArray[ i ] === 'number' ) {\n\t\t\t\t\tmeasurement = measurementArray[ i ];\n\t\t\t\t} else if ( typeof measurementArray[ i ] === 'number' ) {\n\t\t\t\t\tmeasurement -= measurementArray[ i ]; // Value is a number, so subtract it from current total\n\t\t\t\t} else {\n\t\t\t\t\tmeasurement = 'auto'; // Value is set to auto (so don't change it), or something else entirely (so set to auto rather than failing completely)...\n\t\t\t\t\ti = measurementArray.length; // ... then set count to be complete so no more subtractions are run\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn measurement;\n\t\t},\n\n\t\t// Unwrap child nodes from element and remove original element (v5.7 - Apr 21 - updated to remove text nodes)\n\t\tunwrap : function( element ) {\n\t\t\tvar parent = element.parentNode;\n\n\t\t\twhile ( element.firstChild ) {\n\t\t\t\tif ( element.firstChild.nodeType === Node.TEXT_NODE ) {\n\t\t\t\t\telement.firstChild.remove();\n\t\t\t\t} else {\n\t\t\t\t\telement.insertAdjacentElement( 'beforebegin', element.firstChild );\n\t\t\t\t}\n\t\t\t}\n\t\t\tparent.removeChild( element );\n\t\t},\n\n\t\t// Update browser history (v4.13 - Sep 19)\n\t\tupdateHistory : function( anchor ) {\n\t\t\tvar instance = this,\n\t\t\t\tcurrentUrl;\n\n\t\t\tif ( window.history.replaceState ) {\n\t\t\t\t/*\n\t\t\t\t * Check that either there is no anchor on the url and that the anchor has no special characters before replacing\n\t\t\t\t * This stops issues between some systems which use these for state management\n\t\t\t\t */\n\t\t\t\tcurrentUrl = instance.getAnchor();\n\t\t\t\tif ( currentUrl !== null ) {\n\t\t\t\t\twindow.history.replaceState( null, null, anchor );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Wrap element with a new one (v4.13 - Sep 19)\n\t\twrap : function( element, wrappingElement ) {\n\t\t\tvar wrapper = wrappingElement || document.createElement( 'div' );\n\n\t\t\telement.parentNode.insertBefore( wrapper, element );\n\t\t\treturn wrapper.appendChild( element );\n\t\t},\n\n\t\t// Wrap the children of an element within a single new child element (v4.13 - Sep 19)\n\t\twrapInner : function( parent, wrapper, className ) {\n\t\t\tvar instance = this,\n\t\t\t\tcontentWrapper = wrapper;\n\n\t\t\tif ( typeof contentWrapper === 'string' ) {\n\t\t\t\tcontentWrapper = document.createElement( wrapper );\n\t\t\t}\n\n\t\t\tif ( className ) {\n\t\t\t\tinstance.addClass( contentWrapper, className );\n\t\t\t}\n\n\t\t\tparent.appendChild( contentWrapper );\n\t\t\twhile ( parent.firstChild !== contentWrapper ) {\n\t\t\t\tcontentWrapper.appendChild( parent.firstChild );\n\t\t\t}\n\t\t},\n\t};\n});\n"]}