{"version":3,"sources":["blocks/m-show-more.js"],"names":["define","utility","mShowMoreFn","defaults","limitsMin","limits","limitsHardstop","limitsForm","limitsFormHardstop","expand","settings","mShowMore","contract","FRAMEWORK","locale","about","description","inline","alreadyRun","fullVisible","breakpointArray","smallTag","mediumTag","largeTag","buttonClassesDefault","truncateNodeContent","newLimit","limit","node","Node","textContent","substring","innerHTML","classList","add","childNodes","forEach","loop","child","truncateNode","querySelectorAll","childNode","remove","init","breakpoint","breakpointNew","onResizeRefresh","elm","trigger","element","defaultLimitsHardstop","parentNode","defaultLimits","slice","getLimits","getAttribute","contains","buttonClasses","truncate","split","inner","setAttribute","hrefId","id","wrapInner","querySelector","first","marginTop","lastElementChild","full","createIntro","firstElementChild","style","marginBottom","text","replace","debounce","listener","size","i","truncateFn","introLength","intro","trim","length","introTrimmed","indexOf","cut","setTimeout","timeoutFn","updateIntro","window","addEventListener","Math","offsetHeight","height","ceil","open","button","close","display","setSettings","newSettings","rawLimit","Number","parseInt","isNaN","document","createElement","firstChildElement","tagName","cloneNode","append","baseHtmlElm","createButton","parCount","class","buttonText","clickButtonExpand","type","aria-controls","setAttributes","e","preventDefault","aria-expanded","aria-label","isAnimating","noFocus","ellipsesElm","clickButtonContract","scrollParent","opacity","fullHolder","removeProperty","buttonTopNow","current","scrollTop","timings","prepend","initInstance","getBoundingClientRect","top","t350ms","focus","el"],"mappings":"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","file":"blocks/m-show-more.js","sourcesContent":["// eslint-disable-next-line max-lines-per-function\r\ndefine( [ 'utility' ], function run( utility ) {\r\n\t'use strict';\r\n\r\n\tvar mShowMoreFn = {\r\n\r\n\t\t// Default settings\r\n\t\tdefaults : {\r\n\t\t\tlimitsMin : '10',\r\n\t\t\tlimits : [ 50, 150, 200 ],\r\n\t\t\tlimitsHardstop : [ 75, 175, 225 ],\r\n\t\t\tlimitsForm : [ 30, 100, 120 ],\r\n\t\t\tlimitsFormHardstop : [ 55, 125, 145 ],\r\n\t\t\texpand : FRAMEWORK.locale.settings.mShowMore.expand,\r\n\t\t\tcontract : FRAMEWORK.locale.settings.mShowMore.contract,\r\n\t\t\tabout : FRAMEWORK.locale.settings.mShowMore.about,\r\n\t\t\tdescription : FRAMEWORK.locale.settings.mShowMore.description,\r\n\t\t\tinline : false,\r\n\t\t\talreadyRun : false,\r\n\t\t\tfullVisible : true,\r\n\t\t\tbreakpointArray : [ utility.smallTag, utility.mediumTag, utility.largeTag ],\r\n\t\t\tbuttonClassesDefault : [ [ 'a-button--tertiary', 'a-button-icon--up', 'a-button-icon--down' ], [ 'a-button', 'a-button-icon--remove', 'a-button-icon--add' ] ],\r\n\t\t},\r\n\r\n\t\ttruncateNodeContent : function( node, limit ) {\r\n\t\t\tvar newLimit = limit;\r\n\t\t\tif ( node.nodeType === Node.TEXT_NODE ) {\r\n\t\t\t\tif ( limit < 1 ) {\r\n\t\t\t\t\tnode.textContent = '';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tnode.textContent = node.textContent.substring( 0, newLimit );\r\n\t\t\t\t\tnewLimit -= node.textContent.length;\r\n\t\t\t\t}\r\n\t\t\t} else if ( newLimit < 1 ) {\r\n\t\t\t\tnode.innerHTML = '';\r\n\t\t\t\tnode.classList.add( 'js-m-show-more-remove-node' );\r\n\t\t\t} else {\r\n\t\t\t\tnode.childNodes.forEach( function loop( child ) {\r\n\t\t\t\t\tnewLimit = mShowMoreFn.truncateNodeContent( child, newLimit );\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn newLimit;\r\n\t\t},\r\n\r\n\t\ttruncateNode : function( node, limit ) {\r\n\t\t\tmShowMoreFn.truncateNodeContent( node, limit );\r\n\t\t\tnode.querySelectorAll( '.js-m-show-more-remove-node' ).forEach( function loop( childNode ) {\r\n\t\t\t\tchildNode.remove();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tinit : function( elm ) {\r\n\t\t\tvar\tbreakpoint,\r\n\t\t\t\tbreakpointNew,\r\n\t\t\t\tonResizeRefresh;\r\n\r\n\t\t\tif ( !elm.classList.contains( 'js-m-show-more' ) ) {\r\n\t\t\t\telm.classList.add( 'js-m-show-more' );\r\n\r\n\t\t\t\telm.mShowMore = {};\r\n\r\n\t\t\t\t// Pre load the JS for all components within show-more\r\n\t\t\t\telm.querySelectorAll( '.has-module-observer' ).forEach( function loop( element ) {\r\n\t\t\t\t\tutility.trigger( element, 'loadModule' );\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Get defaults and add / update any specified data-attribute options in html\r\n\t\t\t\telm.mShowMore.settings = utility.extend({}, mShowMoreFn.defaults, utility.getData( elm ) );\r\n\r\n\t\t\t\t// If used in form, make the form limits the defaults\r\n\t\t\t\tif ( elm.parentNode.classList.contains( 'm-form-row__content' ) ) {\r\n\t\t\t\t\t// May need something more specific than just parentNode in case of dodgy usage / AEM parsys divs / etc\r\n\t\t\t\t\telm.mShowMore.settings.defaultLimits = mShowMoreFn.defaults.limitsForm.slice();\r\n\t\t\t\t\telm.mShowMore.settings.defaultLimitsHardstop = mShowMoreFn.defaults.limitsFormHardstop.slice();\r\n\t\t\t\t} else {\r\n\t\t\t\t\telm.mShowMore.settings.defaultLimits = mShowMoreFn.defaults.limits.slice();\r\n\t\t\t\t\telm.mShowMore.settings.defaultLimitsHardstop = mShowMoreFn.defaults.limitsHardstop.slice();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If custom data limits have been set, check their validity and reset to default if necessary\r\n\t\t\t\tif ( elm.getAttribute( 'data-limits' ) ) {\r\n\t\t\t\t\tmShowMoreFn.getLimits( elm );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If has inline variant class, update settings\r\n\t\t\t\tif ( elm.classList.contains( 'm-show-more--inline' ) && elm.mShowMore.settings.variant !== 'secondary' ) {\r\n\t\t\t\t\telm.mShowMore.settings.inline = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( elm.mShowMore.settings.variant === 'secondary' ) {\r\n\t\t\t\t\telm.mShowMore.settings.buttonClasses = elm.mShowMore.settings.buttonClassesDefault[ 1 ];\r\n\t\t\t\t} else {\r\n\t\t\t\t\telm.mShowMore.settings.buttonClasses = elm.mShowMore.settings.buttonClassesDefault[ 0 ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Check for no truncation options and split into array if present\r\n\t\t\t\tif ( elm.mShowMore.settings.truncate ) {\r\n\t\t\t\t\telm.mShowMore.settings.truncate = elm.mShowMore.settings.truncate.split( ',' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add an ID (if not already present) to link elements together\r\n\t\t\t\tif ( !elm.id ) {\r\n\t\t\t\t\telm.id = utility.makeId( 'm-show-more--' );\r\n\t\t\t\t\telm.hrefId = '#' + elm.id;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Create inner\r\n\t\t\t\tutility.wrapInner( elm, 'div', 'm-show-more-inner' );\r\n\t\t\t\telm.mShowMore.inner = elm.querySelector( '.m-show-more-inner' );\r\n\t\t\t\telm.mShowMore.inner.setAttribute( 'aria-live', 'polite' );\r\n\r\n\t\t\t\t// Create full content holder\r\n\t\t\t\telm.mShowMore.fullHolder = utility.htmlStringToElement( '
' );\r\n\t\t\t\telm.append( elm.mShowMore.fullHolder );\r\n\r\n\t\t\t\t// Wrap full content\r\n\t\t\t\tutility.wrapInner( elm.mShowMore.inner, 'div', 'm-show-more-inner__full' );\r\n\t\t\t\telm.mShowMore.full = elm.mShowMore.inner.querySelector( '.m-show-more-inner__full' );\r\n\t\t\t\telm.mShowMore.full.first = elm.mShowMore.full.firstElementChild;\r\n\t\t\t\telm.mShowMore.full.first.style.marginTop = '0';\r\n\t\t\t\telm.mShowMore.full.lastElementChild.style.marginBottom = '0';\r\n\t\t\t\telm.mShowMore.full.text = elm.mShowMore.full.textContent.replace( /[\\s\\t\\n\\r]+/g, ' ' );\r\n\t\t\t\telm.mShowMore.full.setAttribute( 'aria-hidden', 'true' );\r\n\r\n\t\t\t\t// Create intro\r\n\t\t\t\tmShowMoreFn.createIntro( elm );\r\n\r\n\t\t\t\t// Resize function; also runs on setup to adjust amount of copy visible in the intro\r\n\t\t\t\tbreakpoint = '';\r\n\t\t\t\tonResizeRefresh = utility.debounce( function listener() {\r\n\t\t\t\t\tbreakpointNew = utility.getBreakpoint();\r\n\r\n\t\t\t\t\t// If the view has changed, adjust the amount of copy shown as per the settings\r\n\t\t\t\t\tif ( breakpointNew !== breakpoint ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.breakpointArray.forEach( function loop( size, i ) {\r\n\t\t\t\t\t\t\tvar truncateFn = function truncateFn() {\r\n\t\t\t\t\t\t\t\t\tif ( elm.mShowMore.settings.truncate ) {\r\n\t\t\t\t\t\t\t\t\t\tif ( elm.mShowMore.settings.truncate[ 0 ] === 'none' ) {\r\n\t\t\t\t\t\t\t\t\t\t\t// Truncate set to none - do not cut at any breakpoint\r\n\t\t\t\t\t\t\t\t\t\t\telm.mShowMore.settings.cut = false;\r\n\t\t\t\t\t\t\t\t\t\t} else if ( elm.mShowMore.settings.truncate[ i ] === 'true' ) {\r\n\t\t\t\t\t\t\t\t\t\t\t// Truncate set to true for this variant\r\n\t\t\t\t\t\t\t\t\t\t\telm.mShowMore.settings.cut = true;\r\n\t\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t\t// Truncate set false for this variant\r\n\t\t\t\t\t\t\t\t\t\t\telm.mShowMore.settings.cut = false;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tintroLength = elm.mShowMore.intro.text.trim().length,\r\n\t\t\t\t\t\t\t\tintroTrimmed = elm.mShowMore.intro.text.length - introLength;\r\n\r\n\t\t\t\t\t\t\tif ( breakpointNew === size ) {\r\n\t\t\t\t\t\t\t\tif ( introLength > elm.mShowMore.settings.limits[ i ] && introLength < elm.mShowMore.settings.limitsHardstop[ i ] ) {\r\n\t\t\t\t\t\t\t\t\t// Intro text length is greater than the limit, but less than the hardstop\r\n\t\t\t\t\t\t\t\t\telm.mShowMore.full.cut = elm.mShowMore.full.text.trim().indexOf( ' ', elm.mShowMore.settings.limitsHardstop[ i ] ) + introTrimmed;\r\n\t\t\t\t\t\t\t\t\telm.mShowMore.intro.cut = elm.mShowMore.intro.text.trim().indexOf( ' ', elm.mShowMore.settings.limitsHardstop[ i ] ) + introTrimmed;\r\n\t\t\t\t\t\t\t\t\ttruncateFn();\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t// Standard\r\n\t\t\t\t\t\t\t\t\telm.mShowMore.full.cut = elm.mShowMore.full.text.trim().indexOf( ' ', elm.mShowMore.settings.limits[ i ] ) + introTrimmed;\r\n\t\t\t\t\t\t\t\t\telm.mShowMore.intro.cut = elm.mShowMore.intro.text.trim().indexOf( ' ', elm.mShowMore.settings.limits[ i ] ) + introTrimmed;\r\n\t\t\t\t\t\t\t\t\ttruncateFn();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tmShowMoreFn.updateIntro( elm );\r\n\t\t\t\t\t\tbreakpoint = breakpointNew;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t\tif ( elm.mShowMore.settings.fullVisible ) {\r\n\t\t\t\t\t\t\t// If full content is visible, match inner height to full so as not to hide it...\r\n\t\t\t\t\t\t\telm.mShowMore.settings.height = Math.ceil( elm.mShowMore.full.offsetHeight ) + 'px';\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// ...otherwise match inner height to intro\r\n\t\t\t\t\t\t\telm.mShowMore.settings.height = Math.ceil( elm.mShowMore.intro.offsetHeight ) + 'px';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, 10 );\r\n\t\t\t\t}, 25 );\r\n\r\n\t\t\t\t// Create resize and refresh eventListeners and trigger initial resize\r\n\t\t\t\twindow.addEventListener( 'resize', onResizeRefresh );\r\n\t\t\t\twindow.addEventListener( 'refresh', onResizeRefresh, false );\r\n\t\t\t\tonResizeRefresh();\r\n\r\n\t\t\t\t// Complete setup\r\n\t\t\t\telm.mShowMore.inner.prepend( elm.mShowMore.intro );\r\n\t\t\t\telm.mShowMore.fullHolder.append( elm.mShowMore.full );\r\n\t\t\t\telm.mShowMore.full.style.display = 'none';\r\n\t\t\t\telm.mShowMore.settings.fullVisible = false;\r\n\r\n\r\n\t\t\t\telm.mShowMore.open = function open() {\r\n\t\t\t\t\tif ( elm.mShowMore.button && elm.mShowMore.button.classList.contains( elm.mShowMore.settings.buttonClasses[ 2 ] ) ) {\r\n\t\t\t\t\t\tmShowMoreFn.clickButtonExpand( elm, true );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\telm.mShowMore.close = function close() {\r\n\t\t\t\t\tif ( elm.mShowMore.button && elm.mShowMore.button.classList.contains( elm.mShowMore.settings.buttonClasses[ 2 ] ) ) {\r\n\t\t\t\t\t\t// Do nothing as collapsed\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tmShowMoreFn.clickButtonContract( elm, true );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\telm.mShowMore.setSettings = function setSettings( newSettings ) {\r\n\t\t\t\t\tif ( newSettings.expand ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.expand = newSettings.expand;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( newSettings.contract ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.contract = newSettings.contract;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( newSettings.about ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.about = newSettings.about;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( newSettings.description ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.description = newSettings.description;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( newSettings.limits ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.limits = newSettings.limits;\r\n\t\t\t\t\t\tmShowMoreFn.getLimits( elm );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( newSettings.truncate ) {\r\n\t\t\t\t\t\telm.mShowMore.settings.truncate = newSettings.truncate;\r\n\t\t\t\t\t\telm.mShowMore.settings.truncate = elm.mShowMore.settings.truncate.split( ',' );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Set the breakpoint to blank to force an update of the show more\r\n\t\t\t\t\tbreakpoint = '';\r\n\t\t\t\t\tonResizeRefresh(); // Update the show more\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn elm.mShowMore;\r\n\t\t},\r\n\r\n\t\tgetLimits : function( elm ) {\r\n\t\t\t// Custom limits will have been set as string and settings.limits will reflect that, so convert to array\r\n\t\t\telm.mShowMore.settings.limits = elm.mShowMore.settings.limits.split( ',' );\r\n\r\n\t\t\telm.mShowMore.settings.limits.forEach( function loop( rawLimit, i ) {\r\n\t\t\t\tvar limit = Number.parseInt( rawLimit.trim(), 10 ); // Trim and parse to integer\r\n\t\t\t\tif ( Number.isNaN( limit ) ) {\r\n\t\t\t\t\t// Override is either auto or an error - revert to default\r\n\t\t\t\t\telm.mShowMore.settings.limits[ i ] = elm.mShowMore.settings.defaultLimits[ i ];\r\n\t\t\t\t} else if ( limit > elm.mShowMore.settings.defaultLimitsHardstop[ i ] ) {\r\n\t\t\t\t\t// Override exceeds hardstop - pull back to default hardstop\r\n\t\t\t\t\telm.mShowMore.settings.limits[ i ] = elm.mShowMore.settings.defaultLimitsHardstop[ i ];\r\n\t\t\t\t} else if ( limit < elm.mShowMore.settings.limitsMin ) {\r\n\t\t\t\t\t// Override is less than minimum - pull up to default minimum\r\n\t\t\t\t\telm.mShowMore.settings.limits[ i ] = elm.mShowMore.settings.limitsMin;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Override accepted - pass through trimmed / parsed value\r\n\t\t\t\t\telm.mShowMore.settings.limits[ i ] = limit;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tcreateIntro : function( elm ) {\r\n\t\t\tvar firstChildElement = elm.mShowMore.full.firstElementChild;\r\n\t\t\telm.mShowMore.intro = document.createElement( 'div' );\r\n\t\t\telm.mShowMore.intro.classList.add( 'm-show-more-inner__intro' );\r\n\t\t\telm.mShowMore.intro.setAttribute( 'aria-hidden', 'false' );\r\n\r\n\t\t\t// Check to see if first child element is a paragraph...\r\n\t\t\tif ( firstChildElement && firstChildElement.tagName === 'P' ) {\r\n\t\t\t\t// ...if it is, clone it and use it as the basis for the intro, then grab its text content\r\n\t\t\t\telm.mShowMore.intro.append( firstChildElement.cloneNode( true ) );\r\n\t\t\t\telm.mShowMore.intro.baseHtmlElm = firstChildElement.cloneNode( true );\r\n\t\t\t\telm.mShowMore.intro.text = elm.mShowMore.intro.textContent.replace( /[\\s\\t\\n\\r]+/g, ' ' );\r\n\t\t\t} else if ( firstChildElement.firstElementChild && firstChildElement.firstElementChild.tagName === 'P' ) {\r\n\t\t\t\t// ...if it isn't, sniff one layer down in case of wrapper (retain wrapper in case of AEM parsys div, but remove any top margin from firstElementChild to ensure correct spacing)\r\n\t\t\t\tfirstChildElement.firstElementChild.style.marginTop = '0';\r\n\t\t\t\telm.mShowMore.intro.append( firstChildElement.firstElementChild.cloneNode( true ) );\r\n\t\t\t\telm.mShowMore.intro.baseHtmlElm = firstChildElement.firstElementChild.cloneNode( true );\r\n\t\t\t\telm.mShowMore.intro.text = elm.mShowMore.intro.textContent.replace( /[\\s\\t\\n\\r]+/g, ' ' );\r\n\t\t\t} else {\r\n\t\t\t\t// ...otherwise just create an empty text object to it's available to other functions\r\n\t\t\t\telm.mShowMore.intro.text = '';\r\n\t\t\t\telm.mShowMore.intro.baseHtmlElm = '';\r\n\t\t\t}\r\n\r\n\t\t\t// Set top / bottom margins to retain spacing\r\n\t\t\tif ( elm.mShowMore.intro.firstElementChild ) {\r\n\t\t\t\telm.mShowMore.intro.firstElementChild.style.marginTop = '0';\r\n\t\t\t\telm.mShowMore.intro.lastElementChild.style.marginBottom = '0';\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// eslint-disable-next-line complexity\r\n\t\tupdateIntro : function( elm ) {\r\n\t\t\t// Count paragraphs\r\n\t\t\tvar parCount = elm.mShowMore.full.querySelectorAll( 'p' ).length;\r\n\r\n\t\t\t// Remove any pre-existing button\r\n\t\t\tif ( elm.mShowMore.button ) {\r\n\t\t\t\telm.mShowMore.button.remove();\r\n\t\t\t}\r\n\r\n\t\t\t// Create intro text (or not, as the case may be)\r\n\t\t\tif ( elm.mShowMore.intro.text === '' && elm.mShowMore.intro.baseHtmlElm === '' ) {\r\n\t\t\t\t// First element isn't a paragraph - add button and tighten spacing\r\n\t\t\t\tmShowMoreFn.createButton( elm );\r\n\t\t\t\telm.mShowMore.button.classList.add( 'a-button--show-more-tighten' );\r\n\t\t\t} else if ( elm.mShowMore.full.text.length !== 0 && elm.mShowMore.full.cut === -1 && elm.mShowMore.intro.cut === -1 && parCount < 2 ) {\r\n\t\t\t\t// Single short par - show everything\r\n\t\t\t\telm.mShowMore.intro.innerHTML = '';\r\n\t\t\t\tif ( elm.mShowMore.intro.baseHtmlElm !== '' ) {\r\n\t\t\t\t\telm.mShowMore.intro.append( elm.mShowMore.intro.baseHtmlElm.cloneNode( true ) );\r\n\t\t\t\t}\r\n\t\t\t} else if ( ( elm.mShowMore.intro.text !== '' && elm.mShowMore.intro.cut === -1 ) || elm.mShowMore.settings.cut === false ) {\r\n\t\t\t\t// Short first par, but more content, or no truncation variant - show first par and add button\r\n\t\t\t\telm.mShowMore.intro.innerHTML = '';\r\n\t\t\t\tif ( elm.mShowMore.intro.baseHtmlElm !== '' ) {\r\n\t\t\t\t\telm.mShowMore.intro.append( elm.mShowMore.intro.baseHtmlElm.cloneNode( true ) );\r\n\t\t\t\t}\r\n\t\t\t\tmShowMoreFn.createButton( elm );\r\n\t\t\t} else if ( elm.mShowMore.intro.cut === -1 ) {\r\n\t\t\t\t// First element isn't a paragraph - add button and tighten spacing\r\n\t\t\t\tmShowMoreFn.createButton( elm );\r\n\t\t\t\telm.mShowMore.button.classList.add( 'a-button--show-more-tighten' );\r\n\t\t\t} else {\r\n\t\t\t\t// First par is abbreviated, add ellipses and read more regardless of further content\r\n\t\t\t\telm.mShowMore.intro.innerHTML = '';\r\n\t\t\t\tif ( elm.mShowMore.intro.baseHtmlElm !== '' ) {\r\n\t\t\t\t\telm.mShowMore.intro.append( elm.mShowMore.intro.baseHtmlElm.cloneNode( true ) ); // Clone original intro paragraph\r\n\t\t\t\t}\r\n\t\t\t\tmShowMoreFn.truncateNode( elm.mShowMore.intro, elm.mShowMore.intro.cut ); // Truncate intro paragraph\r\n\t\t\t\telm.mShowMore.intro.firstChild.append( utility.htmlStringToElement( '\\u2026' ) ); // Append ellipses to end of paragraph\r\n\t\t\t\tmShowMoreFn.createButton( elm );\r\n\t\t\t}\r\n\r\n\t\t\telm.mShowMore.settings.height = Math.ceil( elm.mShowMore.intro.offsetHeight ) + 'px';\r\n\t\t},\r\n\r\n\t\tcreateButton : function( elm ) {\r\n\t\t\telm.mShowMore.button = document.createElement( 'button' );\r\n\t\t\tutility.setAttributes( elm.mShowMore.button, {\r\n\t\t\t\ttype : 'button',\r\n\t\t\t\tclass : 'a-button m-show-more-button a-button-icon ' + elm.mShowMore.settings.buttonClasses[ 0 ],\r\n\t\t\t\t'aria-controls' : elm.id,\r\n\t\t\t});\r\n\r\n\t\t\tif ( elm.mShowMore.settings.inline ) {\r\n\t\t\t\telm.mShowMore.button.classList.add( 'a-button--show-more-inline' );\r\n\t\t\t}\r\n\r\n\t\t\telm.mShowMore.buttonText = document.createElement( 'span' );\r\n\t\t\telm.mShowMore.buttonText.classList.add( 'a-button__inner' );\r\n\t\t\telm.mShowMore.button.append( elm.mShowMore.buttonText );\r\n\r\n\t\t\telm.mShowMore.button.addEventListener( 'click', function listener( e ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tif ( elm.mShowMore.button && elm.mShowMore.button.classList.contains( elm.mShowMore.settings.buttonClasses[ 2 ] ) ) {\r\n\t\t\t\t\tmShowMoreFn.clickButtonExpand( elm );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmShowMoreFn.clickButtonContract( elm );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif ( elm.mShowMore.settings.fullVisible ) {\r\n\t\t\t\t// Full content visible - retain contract button\r\n\t\t\t\tutility.setAttributes( elm.mShowMore.button, {\r\n\t\t\t\t\tclass : 'a-button m-show-more-button a-button-icon ' + elm.mShowMore.settings.buttonClasses[ 0 ] + ' ' + elm.mShowMore.settings.buttonClasses[ 1 ],\r\n\t\t\t\t\t'aria-expanded' : 'true',\r\n\t\t\t\t\t'aria-label' : elm.mShowMore.settings.contract + elm.mShowMore.settings.about + elm.mShowMore.settings.description,\r\n\t\t\t\t});\r\n\t\t\t\telm.mShowMore.button.classList.add( elm.mShowMore.settings.buttonClasses[ 1 ] );\r\n\t\t\t\telm.mShowMore.buttonText.textContent = elm.mShowMore.settings.contract;\r\n\t\t\t\telm.append( elm.mShowMore.button );\r\n\t\t\t} else {\r\n\t\t\t\t// Intro only - add expand button\r\n\t\t\t\tutility.setAttributes( elm.mShowMore.button, {\r\n\t\t\t\t\t'aria-expanded' : 'false',\r\n\t\t\t\t\t'aria-label' : elm.mShowMore.settings.expand + elm.mShowMore.settings.about + elm.mShowMore.settings.description,\r\n\t\t\t\t});\r\n\t\t\t\telm.mShowMore.button.classList.add( elm.mShowMore.settings.buttonClasses[ 2 ] );\r\n\t\t\t\telm.mShowMore.buttonText.textContent = elm.mShowMore.settings.expand;\r\n\r\n\t\t\t\tif ( elm.mShowMore.settings.inline ) {\r\n\t\t\t\t\telm.mShowMore.intro.firstElementChild.append( elm.mShowMore.button );\r\n\t\t\t\t} else {\r\n\t\t\t\t\telm.append( elm.mShowMore.button );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclickButtonExpand : function( elm, noFocus ) {\r\n\t\t\t// Button down - expand\r\n\t\t\tvar ellipsesElm = elm.mShowMore.intro.querySelector( '.m-show-more__ellipses' );\r\n\r\n\t\t\tif ( elm.mShowMore.settings.isAnimating || !elm.mShowMore.button ) {\r\n\t\t\t\t// Do nothing as already animating or there is no button\r\n\t\t\t} else {\r\n\t\t\t\telm.mShowMore.settings.isAnimating = true;\r\n\r\n\t\t\t\telm.mShowMore.inner.style.height = Math.ceil( elm.mShowMore.inner.offsetHeight ) + 'px';\r\n\t\t\t\telm.mShowMore.inner.classList.add( 'is-animating' );\r\n\t\t\t\telm.mShowMore.intro.style.opacity = '0';\r\n\t\t\t\telm.mShowMore.intro.setAttribute( 'aria-hidden', 'true' );\r\n\t\t\t\telm.mShowMore.inner.prepend( elm.mShowMore.full );\r\n\t\t\t\telm.mShowMore.full.style.display = 'block';\r\n\t\t\t\telm.mShowMore.full.style.opacity = '1';\r\n\t\t\t\telm.mShowMore.full.setAttribute( 'aria-hidden', 'false' );\r\n\t\t\t\telm.mShowMore.settings.fullVisible = true;\r\n\t\t\t\telm.mShowMore.inner.style.height = Math.ceil( elm.mShowMore.full.offsetHeight ) + 'px';\r\n\r\n\t\t\t\t// Drop any elipses to avoid clunkiness during animation\r\n\t\t\t\tif ( ellipsesElm ) {\r\n\t\t\t\t\tellipsesElm.classList.add( 'u-hidden' ); // Hide elipses\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Move inline variant button to avoid clunkiness during animation\r\n\t\t\t\tif ( elm.mShowMore.settings.inline ) {\r\n\t\t\t\t\t// If inline variant, append button to correct location...\r\n\t\t\t\t\telm.append( elm.mShowMore.button );\r\n\t\t\t\t\tif ( noFocus ) {\r\n\t\t\t\t\t\t// Do not adjust page\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// ...then stall long enough for aria-live to take precedence before returning focus\r\n\t\t\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t\t\telm.mShowMore.button.focus();\r\n\t\t\t\t\t\t}, 10 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\telm.mShowMore.button.classList.remove( elm.mShowMore.settings.buttonClasses[ 2 ] );\r\n\t\t\t\telm.mShowMore.button.classList.add( elm.mShowMore.settings.buttonClasses[ 1 ] );\r\n\t\t\t\telm.mShowMore.buttonText.textContent = elm.mShowMore.settings.contract;\r\n\t\t\t\telm.mShowMore.button.setAttribute( 'aria-expanded', 'true' );\r\n\t\t\t\telm.mShowMore.button.setAttribute( 'aria-label', elm.mShowMore.settings.contract + elm.mShowMore.settings.about + elm.mShowMore.settings.description );\r\n\r\n\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\tif ( ellipsesElm ) {\r\n\t\t\t\t\t\tellipsesElm.classList.remove( 'u-hidden' ); // Display ellipses again if necessary\r\n\t\t\t\t\t}\r\n\t\t\t\t\telm.mShowMore.intro.remove(); // Remove intro once animation has completed\r\n\t\t\t\t\telm.mShowMore.inner.style.removeProperty( 'height' );\r\n\t\t\t\t\telm.mShowMore.settings.isAnimating = false;\r\n\t\t\t\t\telm.mShowMore.inner.classList.remove( 'is-animating' );\r\n\t\t\t\t}, FRAMEWORK.timings.current.t350ms );\r\n\r\n\t\t\t\tutility.trigger( window, 'refresh' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclickButtonContract : function( elm, noFocus ) {\r\n\t\t\tvar scrollParent = utility.scrollParent( elm ),\r\n\t\t\t\tbuttonTopNow;\r\n\r\n\t\t\tif ( elm.mShowMore.settings.isAnimating || !elm.mShowMore.button ) {\r\n\t\t\t\t// Do nothing as already animating or there is no button\r\n\t\t\t} else {\r\n\t\t\t\telm.mShowMore.settings.isAnimating = true;\r\n\r\n\t\t\t\t// Button up - contract\r\n\t\t\t\telm.mShowMore.inner.style.height = Math.ceil( elm.mShowMore.inner.offsetHeight ) + 'px';\r\n\t\t\t\telm.mShowMore.inner.classList.add( 'is-animating' );\r\n\t\t\t\telm.mShowMore.full.setAttribute( 'aria-hidden', 'true' );\r\n\t\t\t\telm.mShowMore.inner.prepend( elm.mShowMore.intro );\r\n\t\t\t\telm.mShowMore.intro.setAttribute( 'aria-hidden', 'false' );\r\n\r\n\t\t\t\telm.mShowMore.settings.fullVisible = false;\r\n\t\t\t\telm.mShowMore.intro.style.opacity = '1';\r\n\t\t\t\telm.mShowMore.full.style.opacity = '0';\r\n\t\t\t\telm.mShowMore.inner.style.height = Math.ceil( elm.mShowMore.intro.offsetHeight ) + 'px';\r\n\r\n\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\telm.mShowMore.fullHolder.append( elm.mShowMore.full );\r\n\t\t\t\t\telm.mShowMore.full.style.display = 'none';\r\n\t\t\t\t\telm.mShowMore.inner.style.removeProperty( 'height' );\r\n\r\n\t\t\t\t\tif ( noFocus ) {\r\n\t\t\t\t\t\t// Do not adjust page\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tbuttonTopNow = scrollParent.scrollTop + elm.mShowMore.button.getBoundingClientRect().top;\r\n\r\n\t\t\t\t\t\tif ( scrollParent.scrollTop > buttonTopNow ) {\r\n\t\t\t\t\t\t\tscrollParent.scrollTop = buttonTopNow;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telm.mShowMore.settings.isAnimating = false;\r\n\t\t\t\t\telm.mShowMore.inner.classList.remove( 'is-animating' );\r\n\t\t\t\t}, FRAMEWORK.timings.current.t350ms );\r\n\r\n\t\t\t\telm.mShowMore.button.classList.remove( elm.mShowMore.settings.buttonClasses[ 1 ] );\r\n\t\t\t\telm.mShowMore.button.classList.add( elm.mShowMore.settings.buttonClasses[ 2 ] );\r\n\t\t\t\telm.mShowMore.buttonText.textContent = elm.mShowMore.settings.expand;\r\n\t\t\t\telm.mShowMore.button.setAttribute( 'aria-expanded', 'false' );\r\n\t\t\t\telm.mShowMore.button.setAttribute( 'aria-label', elm.mShowMore.settings.expand + elm.mShowMore.settings.about + elm.mShowMore.settings.description );\r\n\r\n\t\t\t\tif ( elm.mShowMore.settings.inline ) {\r\n\t\t\t\t\t// If inline variant, append button to correct location...\r\n\t\t\t\t\telm.mShowMore.intro.firstElementChild.append( elm.mShowMore.button );\r\n\t\t\t\t\tif ( noFocus ) {\r\n\t\t\t\t\t\t// Do not adjust page\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// ...then stall long enough for aria-live to take precedence before returning focus\r\n\t\t\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t\t\telm.mShowMore.button.focus();\r\n\t\t\t\t\t\t}, 10 );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tutility.trigger( window, 'refresh' );\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\treturn {\r\n\t\tinitInstance : function( el ) {\r\n\t\t\treturn mShowMoreFn.init( el );\r\n\t\t},\r\n\t};\r\n});\r\n"]}