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