{"version":3,"sources":["blocks/o-modal.js"],"names":["define","utility","oModalFn","focusableElementsString","focusedElementBeforeModal","FRAMEWORK","locale","settings","oModal","closeText","loadingText","rootElement","add","onResize","target","classList","contains","e","preventDefault","closeModal","newTarget","closest","getAttribute","openModal","thisModal","notificationModal","trapEscapeKey","window","addEventListener","debounce","centreModal","destroyModal","open","modalLinkElm","click","destroy","which","focusableElements","obj","evt","numberOfFocusableItems","foundElements","forEach","focusedItem","find","focusedItemIndex","isVisible","el","push","querySelector","length","indexOf","shiftKey","focus","setInitialFocusModal","i","initiatingObj","waitForClose","setTimeout","timeoutFn","openModalNow","content","stopBodyScrolling","lWholePage","setAttribute","insertAdjacentHTML","modalDialog","remove","modalContent","document","contentOrigin","removeEventListener","modalTarget","childNodes","querySelectorAll","firstChild","submitID","timings","oModalTarget","dataOrigin","dataUrl","loadContent","thisContent","getContent","current","t500ms","staticContent","staticID","staticSource","urlAnchorRegExp","contentChildren","contentHolder","createElement","href","location","pathname","search","String","hash","updateContent","requestLoadInto","replace","response","status","match","split","childEl","innerLoop","grandchildEl","insertBefore","removeChild","thisContentHolder","thisModalContent","thisModalContentHeading","thisModalContentLabel","append","disableClose","scrollTop","trapTabKey","addClass","trigger","paddingTop","paddingBottom","closeHeight","modalContentHeight","currentBreakpoint","getBreakpoint","noClose","thisContentHolderStyles","getComputedStyle","removeMeasurementSuffix","padding","smallTag","removeAttribute","style","height","convertToPx","offsetHeight","outerHeightTrue","modalHeight","margin","marginBottom","bool","top","htmlEl","marginTop","documentElement","scrollTo","initInstance"],"mappings":"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","file":"blocks/o-modal.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 oModalFn = {\r\n\t\tfocusableElementsString : 'a[href], area[href], input:not([disabled]), select:not([disabled]),\t\t' +\r\n\t\t' textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]',\r\n\t\tfocusedElementBeforeModal : null,\r\n\t\tmodalDialog : '
' +\r\n\t\t'' +\r\n\t\t'
' +\r\n\t\t'
' +\r\n\t\t'
' +\r\n\t\t'' + FRAMEWORK.locale.settings.oModal.loadingText + '
',\r\n\t\trootElement : document.documentElement,\r\n\t\tlWholePage : document.querySelector( 'body > .l-whole-page' ),\r\n\r\n\t\tinit : function() {\r\n\t\t\tvar onResize;\r\n\r\n\t\t\tif ( !oModalFn.rootElement.classList.contains( 'js-o-modal' ) ) {\r\n\t\t\t\toModalFn.rootElement.classList.add( 'js-o-modal' );\r\n\r\n\t\t\t\toModalFn.rootElement.oModal = {};\r\n\r\n\t\t\t\toModalFn.rootElement.addEventListener( 'click', function listener( e ) {\r\n\t\t\t\t\tvar newTarget = e.target.closest( '.o-modal-link, .o-modal__cancel, .a-button--cancel, [data-module=\"o-modal\"]' );\r\n\r\n\t\t\t\t\tif ( e.target.classList.contains( 'o-modal-link' ) || e.target.getAttribute( 'data-module' ) === 'o-modal' ) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\toModalFn.openModal( e.target );\r\n\t\t\t\t\t} else if ( e.target.classList.contains( 'o-modal__cancel' ) || ( e.target.closest( '.o-modal' ) && e.target.classList.contains( 'a-button--cancel' ) ) ) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\toModalFn.closeModal();\r\n\t\t\t\t\t} else if ( newTarget ) {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tnewTarget.click();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\toModalFn.rootElement.addEventListener( 'keydown', function listener( e ) {\r\n\t\t\t\t\tvar thisModal,\r\n\t\t\t\t\t\tnotificationModal = false;\r\n\t\t\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-active' ) ) {\r\n\t\t\t\t\t\tthisModal = document.querySelector( '.o-modal' );\r\n\t\t\t\t\t\toModalFn.trapTabKey( thisModal, e );\r\n\r\n\t\t\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-notification' ) && oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-notification' ) !== '' ) {\r\n\t\t\t\t\t\t\tnotificationModal = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// If the element that triggered the modal disable-close attribute does not equal 'all' and isn't a notification, then you can close the modal\r\n\t\t\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-disable-close' ) !== 'all' && notificationModal === false ) {\r\n\t\t\t\t\t\t\toModalFn.trapEscapeKey( thisModal, e );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tonResize = utility.debounce( function cb() {\r\n\t\t\t\t\toModalFn.centreModal();\r\n\t\t\t\t}, 10 );\r\n\r\n\t\t\t\twindow.addEventListener( 'resize', onResize );\r\n\t\t\t\twindow.addEventListener( 'modal:close', function fn() {\r\n\t\t\t\t\toModalFn.closeModal();\r\n\t\t\t\t});\r\n\t\t\t\twindow.addEventListener( 'modal:destroy', function fn() {\r\n\t\t\t\t\toModalFn.destroyModal();\r\n\t\t\t\t});\r\n\r\n\t\t\t\toModalFn.rootElement.oModal.open = function open( modalLinkElm ) {\r\n\t\t\t\t\tmodalLinkElm.click();\r\n\t\t\t\t};\r\n\t\t\t\toModalFn.rootElement.oModal.close = function close() {\r\n\t\t\t\t\toModalFn.closeModal();\r\n\t\t\t\t};\r\n\t\t\t\toModalFn.rootElement.oModal.destroy = function destroy() {\r\n\t\t\t\t\toModalFn.destroyModal();\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn oModalFn.rootElement.oModal;\r\n\t\t},\r\n\r\n\t\ttrapEscapeKey : function( obj, evt ) {\r\n\t\t\t// If escape pressed\r\n\t\t\tif ( evt.which === 27 ) {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t\toModalFn.closeModal();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttrapTabKey : function( obj, evt ) {\r\n\t\t\tvar foundElements,\r\n\t\t\t\tfocusableElements = [],\r\n\t\t\t\tfocusedItem,\r\n\t\t\t\tnumberOfFocusableItems,\r\n\t\t\t\tfocusedItemIndex;\r\n\t\t\t// If tab or shift-tab pressed\r\n\t\t\tif ( evt.which === 9 ) {\r\n\t\t\t\t// Get list of focusable items\r\n\t\t\t\tfoundElements = utility.find( [ obj ], oModalFn.focusableElementsString );\r\n\t\t\t\tfoundElements.forEach( function loop( el ) {\r\n\t\t\t\t\tif ( utility.isVisible( el ) ) {\r\n\t\t\t\t\t\tfocusableElements.push( el );\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tfocusedItem = document.querySelector( ':focus' ); // Get currently focused item\r\n\t\t\t\tnumberOfFocusableItems = focusableElements.length; // Get the number of focusable items\r\n\t\t\t\t// Get the index of the currently focused item\r\n\t\t\t\tfocusedItemIndex = focusableElements.indexOf( focusedItem );\r\n\t\t\t\tif ( evt.shiftKey && focusedItemIndex === 0 ) { // Back tab\r\n\t\t\t\t\t// If focused on first item and user presses back-tab, go to the last focusable item\r\n\t\t\t\t\tfocusableElements[ numberOfFocusableItems - 1 ].focus();\r\n\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t} else if ( focusedItemIndex === -1 || ( !evt.shiftKey && focusedItemIndex === numberOfFocusableItems - 1 ) ) {\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t * Forward tab\r\n\t\t\t\t\t * If the foucused item is outside of the allowed focus items then set to the first focusable item\r\n\t\t\t\t\t * If focused on the last item and user presses tab, go to the first focusable item\r\n\t\t\t\t\t */\r\n\t\t\t\t\tfocusableElements[ 0 ].focus();\r\n\t\t\t\t\tevt.preventDefault();\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\t\t},\r\n\r\n\t\tsetInitialFocusModal : function( obj ) {\r\n\t\t\tvar focusableElements = utility.find( [ obj ], oModalFn.focusableElementsString ),\r\n\t\t\t\ti;\r\n\t\t\tfor ( i = 0; i < focusableElements.length; i++ ) {\r\n\t\t\t\tif ( utility.isVisible( focusableElements[ i ] ) ) {\r\n\t\t\t\t\tfocusableElements[ i ].focus();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\topenModal : function( initiatingObj, content ) {\r\n\t\t\tvar waitForClose = function() {\r\n\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-closing' ) ) {\r\n\t\t\t\t\t\twaitForClose();\r\n\t\t\t\t\t} else if ( document.querySelector( '.o-modal' ) ) {\r\n\t\t\t\t\t\toModalFn.closeModal();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toModalFn.openModalNow( initiatingObj, content );\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 50 ); // Wait until the modal is fully closed before trying to open the next one\r\n\t\t\t};\r\n\t\t\twaitForClose();\r\n\t\t},\r\n\r\n\t\topenModalNow : function( initiatingObj, content ) {\r\n\t\t\tvar thisModal;\r\n\r\n\t\t\toModalFn.stopBodyScrolling( true );\r\n\r\n\t\t\t// Save current focus\r\n\t\t\toModalFn.focusedElementBeforeModal = initiatingObj;\r\n\t\t\t// Mark the main page as hidden\r\n\t\t\toModalFn.lWholePage.setAttribute( 'aria-hidden', 'true' );\r\n\t\t\toModalFn.lWholePage.insertAdjacentHTML( 'afterend', oModalFn.modalDialog );\r\n\t\t\tthisModal = document.querySelector( '.o-modal' );\r\n\r\n\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-active' );\r\n\t\t\t\t// Attach a listener to redirect the tab to the modal window. If the user somehow gets out of the modal window\r\n\t\t\t\toModalFn.lWholePage.addEventListener( 'focusin', oModalFn.setInitialFocusModal( thisModal ) );\r\n\t\t\t\toModalFn.setInitialFocusModal( thisModal );\r\n\t\t\t\toModalFn.loadContent( content );\r\n\t\t\t}, 10 ); // Small delay from adding the content to ensure the css animations work\r\n\t\t},\r\n\r\n\t\tcloseModal : function() {\r\n\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-active' ) ) {\r\n\t\t\t\toModalFn.lWholePage.setAttribute( 'aria-hidden', 'false' ); // Mark the main page as visible\r\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-active' );\r\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-loaded' );\r\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-closing' );\r\n\t\t\t\t// Remove the listener which redirects tab keys in the main content area to the modal\r\n\t\t\t\toModalFn.lWholePage.removeEventListener( 'focusin', oModalFn.setInitialFocusModal( document.querySelector( '.o-modal' ) ) );\r\n\r\n\t\t\t\t// Set focus back to element that had it before the modal was opened\r\n\t\t\t\toModalFn.focusedElementBeforeModal.focus();\r\n\r\n\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t// Save content state so that it restore the state when reopened\r\n\t\t\t\t\tvar modalContent = document.querySelector( '.o-modal__content' ),\r\n\t\t\t\t\t\tcontentOrigin,\r\n\t\t\t\t\t\tmodalTarget;\r\n\t\t\t\t\tif ( modalContent ) {\r\n\t\t\t\t\t\tcontentOrigin = document.querySelector( modalContent.getAttribute( 'data-origin' ) );\r\n\t\t\t\t\t\tif ( contentOrigin ) {\r\n\t\t\t\t\t\t\twhile ( modalContent.childNodes.length ) {\r\n\t\t\t\t\t\t\t\tcontentOrigin.append( modalContent.firstChild ); // Only grab the content inside\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Remove modal from the DOM\r\n\t\t\t\t\t\tmodalTarget = document.querySelector( '.o-modal-target' );\r\n\t\t\t\t\t\tif ( modalTarget ) {\r\n\t\t\t\t\t\t\tmodalTarget.classList.remove( 'o-modal-target--active' );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdocument.querySelectorAll( '.o-modal, .o-modal-overlay' ).forEach( function loop( el ) {\r\n\t\t\t\t\t\t\tel.remove();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-closing' );\r\n\t\t\t\t\toModalFn.stopBodyScrolling();\r\n\t\t\t\t}, FRAMEWORK.timings.current.t500ms );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tdestroyModal : function() {\r\n\t\t\tvar submitID;\r\n\r\n\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-active' ) ) {\r\n\t\t\t\tsubmitID = oModalFn.focusedElementBeforeModal.getAttribute( 'href' );\r\n\t\t\t\toModalFn.lWholePage.setAttribute( 'aria-hidden', 'false' ); // Mark the main page as visible\r\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-active' );\r\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-loaded' );\r\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-closing' );\r\n\t\t\t\t// Remove the listener which redirects tab keys in the main content area to the modal\r\n\t\t\t\toModalFn.lWholePage.removeEventListener( 'focusin', oModalFn.setInitialFocusModal( document.querySelector( '.o-modal' ) ) );\r\n\t\t\t\t// Set focus back to element that had it before the modal was opened\r\n\t\t\t\toModalFn.focusedElementBeforeModal.focus();\r\n\r\n\t\t\t\tsetTimeout( function timeoutFn() {\r\n\t\t\t\t\t// Remove ajaxed content from within the target div and remove modal from the DOM\r\n\t\t\t\t\tvar oModalTarget = document.querySelector( '.o-modal-target' ),\r\n\t\t\t\t\t\tdataOrigin,\r\n\t\t\t\t\t\tdataUrl = oModalFn.focusedElementBeforeModal.getAttribute( 'data-url' );\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdataOrigin = oModalTarget.querySelector( submitID );\r\n\t\t\t\t\t\tif ( dataOrigin ) {\r\n\t\t\t\t\t\t\tdataOrigin.remove();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t}\r\n\t\t\t\t\toModalTarget.classList.remove( 'o-modal-target--active' );\r\n\t\t\t\t\tif ( dataUrl && dataUrl !== '' ) {\r\n\t\t\t\t\t\toModalFn.focusedElementBeforeModal.setAttribute( 'href', dataUrl );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdocument.querySelector( '.o-modal' ).remove();\r\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).remove();\r\n\t\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-closing' );\r\n\t\t\t\t\toModalFn.stopBodyScrolling();\r\n\t\t\t\t}, FRAMEWORK.timings.current.t500ms );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tloadContent : function( content ) {\r\n\t\t\tvar thisContent = content,\r\n\t\t\t\tgetContent,\r\n\t\t\t\thref = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ),\r\n\t\t\t\thash = href.match( utility.urlAnchorRegExp ),\r\n\t\t\t\tstaticID,\r\n\t\t\t\tstaticContent,\r\n\t\t\t\tstaticSource;\r\n\r\n\t\t\tdocument.querySelector( '.o-modal' ).classList.remove( 'o-modal--fullscreen' );\r\n\t\t\toModalFn.rootElement.classList.remove( 'o-modal-loaded' );\r\n\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.remove( 'o-modal-overlay--loaded' );\r\n\r\n\t\t\tgetContent = function() {\r\n\t\t\t\tvar contentHolder = document.createElement( 'div' ),\r\n\t\t\t\t\tcontentChildren;\r\n\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-fullscreen' ) ) {\r\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.add( 'o-modal-overlay--fullscreen' );\r\n\t\t\t\t}\r\n\t\t\t\tif ( href.indexOf( '#' ) === 0 || ( href.indexOf( '/' ) === 0 &&\r\n\t\t\t\twindow.location.pathname === oModalFn.focusedElementBeforeModal.pathname && window.location.search === oModalFn.focusedElementBeforeModal.search ) ) {\r\n\t\t\t\t\t// If url is for within the same page get content (unless the params are different incase this the app is using the params to change the page content)\r\n\t\t\t\t\tthisContent = document.querySelector( String( hash ) );\r\n\t\t\t\t\tif ( typeof thisContent === 'undefined' || thisContent === null ) {\r\n\t\t\t\t\t\toModalFn.closeModal(); // No content found so close modal\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontentChildren = [];\r\n\t\t\t\t\t\tthisContent.childNodes.forEach( function loop( el ) {\r\n\t\t\t\t\t\t\tcontentChildren.push( el ); // Only grab the content inside\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdocument.querySelector( '.o-modal__content' ).setAttribute( 'data-origin', hash ); // Store where the content came from so it can be restored\r\n\t\t\t\t\t\toModalFn.updateContent( contentChildren );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\thref = href.replace( '#', ' #' );\r\n\t\t\t\t\tutility.requestLoadInto( contentHolder, href, function fn( response, status ) {\r\n\t\t\t\t\t\tif ( status >= 200 && status < 400 ) {\r\n\t\t\t\t\t\t\toModalFn.updateContent( contentHolder );\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\toModalFn.closeModal(); // No content found so close modal\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tif ( typeof thisContent === 'undefined' ) {\r\n\t\t\t\tif ( typeof href === 'undefined' ) {\r\n\t\t\t\t\toModalFn.closeModal(); // No content found so close modal\r\n\t\t\t\t} else if ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-fullscreen' ) && !oModalFn.focusedElementBeforeModal.getAttribute( 'href' ).match( '^#' ) ) {\r\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.add( 'o-modal-overlay--fullscreen' );\r\n\t\t\t\t\tstaticID = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ).split( '#' )[ 1 ];\r\n\t\t\t\t\tstaticSource = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ).replace( '#', ' #' );\r\n\r\n\t\t\t\t\tstaticContent = document.createElement( 'div' );\r\n\t\t\t\t\tstaticContent.setAttribute( 'id', staticID );\r\n\t\t\t\t\tstaticContent.classList.add( 'o-modal__content-container' );\r\n\r\n\t\t\t\t\t// Fullscreen modal - get content and drop in at end of page for reuse\r\n\t\t\t\t\tutility.requestLoadInto( staticContent, staticSource, function fn( response, status ) {\r\n\t\t\t\t\t\tvar oModalTarget = document.querySelector( '.o-modal-target' );\r\n\t\t\t\t\t\toModalFn.focusedElementBeforeModal.setAttribute( 'data-url', oModalFn.focusedElementBeforeModal.getAttribute( 'href' ) ); // Set the data-url to the external link\r\n\t\t\t\t\t\toModalFn.focusedElementBeforeModal.setAttribute( 'href', '#' + staticID ); // Update the href on the original anchor to the new value\r\n\t\t\t\t\t\tif ( status >= 200 && status < 400 ) {\r\n\t\t\t\t\t\t\tstaticContent.childNodes.forEach( function loop( childEl ) {\r\n\t\t\t\t\t\t\t\tchildEl.childNodes.forEach( function innerLoop( grandchildEl ) {\r\n\t\t\t\t\t\t\t\t\t// Move all children out of the element\r\n\t\t\t\t\t\t\t\t\twhile ( grandchildEl.firstChild ) {\r\n\t\t\t\t\t\t\t\t\t\tchildEl.insertBefore( grandchildEl.firstChild, grandchildEl );\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t// Remove the empty element\r\n\t\t\t\t\t\t\t\t\tchildEl.removeChild( grandchildEl );\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\toModalTarget.classList.add( 'o-modal-target--active' );\r\n\t\t\t\t\t\t\toModalTarget.append( staticContent );\r\n\t\t\t\t\t\t\thref = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ); // Update href var to that same new value\r\n\t\t\t\t\t\t\tgetContent();\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\toModalFn.destroyModal(); // No content found so close modal\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\t// Standard modal (or fullscreen with content loaded and target div populated etc)\r\n\t\t\t\t\tgetContent();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// eslint-disable-next-line complexity\r\n\t\tupdateContent : function( content ) {\r\n\t\t\tvar thisContent = content,\r\n\t\t\t\tthisModal = document.querySelector( '.o-modal' ),\r\n\t\t\t\tthisContentHolder = document.querySelector( '.o-modal__content-holder' ),\r\n\t\t\t\tthisModalContent = document.querySelector( '.o-modal__content' ),\r\n\t\t\t\tthisModalContentHeading,\r\n\t\t\t\tthisModalContentLabel,\r\n\t\t\t\tdisableClose,\r\n\t\t\t\tnotificationModal;\r\n\r\n\t\t\tif ( thisModal ) {\r\n\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-fullscreen' ) ) {\r\n\t\t\t\t\tthisModal.classList.add( 'o-modal--fullscreen' );\r\n\t\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-wallet' ) ) {\r\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal--wallet' );\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthisContentHolder.classList.remove( 'has-fullscreen' );\r\n\t\t\t\t}\r\n\t\t\t\tif ( Array.isArray( thisContent ) ) {\r\n\t\t\t\t\tthisContent.forEach( function loop( el ) {\r\n\t\t\t\t\t\tthisModalContent.append( el );\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthisModalContent.append( thisContent );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthisModalContentHeading = thisModalContent.querySelector( 'h1, h2, h3, h4, h5, .a-heading' );\r\n\t\t\t\tif ( thisModalContentHeading ) {\r\n\t\t\t\t\tthisModalContentLabel = thisModalContentHeading.textContent;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthisModalContentLabel = FRAMEWORK.locale.settings.oModal.contentLabel;\r\n\t\t\t\t}\r\n\t\t\t\tthisModalContent.setAttribute( 'aria-label', thisModalContentLabel );\r\n\r\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-loaded' );\r\n\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.add( 'o-modal-overlay--loaded' );\r\n\r\n\t\t\t\tthisContentHolder.scrollTop = 0;\r\n\r\n\t\t\t\tdisableClose = oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-disable-close' );\r\n\t\t\t\tnotificationModal = oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-notification' );\r\n\t\t\t\tthisModal.classList.remove( 'o-modal--no-close' );\r\n\t\t\t\tif ( disableClose || notificationModal ) {\r\n\t\t\t\t\t// If the user clicks outside the modal set focus back to the modal\r\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).addEventListener( 'click', function listener( e ) {\r\n\t\t\t\t\t\toModalFn.trapTabKey( thisModal, e );\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tswitch ( true ) {\r\n\t\t\t\t\tcase disableClose === 'all':\r\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal--no-close' ); // Hide the close link in the header\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase notificationModal:\r\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal--no-close' ); // Hide the close link in the header\r\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal-notification' );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase notificationModal === 'success':\r\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--success' );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase notificationModal === 'neutral':\r\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--neutral' );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase notificationModal === 'information':\r\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--information' );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase notificationModal === 'warning':\r\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--warning' );\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault: // No match, so do nothing\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).addEventListener( 'click', function listener() {\r\n\t\t\t\t\t\toModalFn.closeModal();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\toModalFn.setInitialFocusModal( document.querySelector( '.o-modal' ) );\r\n\r\n\t\t\t\tutility.trigger( window, 'refresh' );\r\n\t\t\t\toModalFn.centreModal();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcentreModal : function() {\r\n\t\t\tvar thisModal = document.querySelector( '.o-modal' ),\r\n\t\t\t\tthisContentHolder = document.querySelector( '.o-modal__content-holder' ),\r\n\t\t\t\tnoClose,\r\n\t\t\t\tcloseHeight = 44,\r\n\t\t\t\tthisContentHolderStyles,\r\n\t\t\t\tpadding = 0,\r\n\t\t\t\tpaddingTop,\r\n\t\t\t\tpaddingBottom,\r\n\t\t\t\tmodalContentHeight = 0,\r\n\t\t\t\tmodalHeight,\r\n\t\t\t\tmargin,\r\n\t\t\t\tcurrentBreakpoint = utility.getBreakpoint();\r\n\r\n\t\t\tif ( thisContentHolder ) {\r\n\t\t\t\tnoClose = thisModal.classList.contains( 'o-modal--no-close' );\r\n\t\t\t\tthisContentHolderStyles = window.getComputedStyle( thisContentHolder );\r\n\t\t\t\tpaddingTop = thisContentHolderStyles.paddingTop;\r\n\t\t\t\tpaddingBottom = thisContentHolderStyles.paddingBottom;\r\n\r\n\t\t\t\tif ( noClose ) {\r\n\t\t\t\t\tcloseHeight = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( paddingTop !== '' ) {\r\n\t\t\t\t\tpaddingTop = utility.removeMeasurementSuffix( paddingTop );\r\n\t\t\t\t\tpadding = parseInt( paddingTop, 10 );\r\n\t\t\t\t}\r\n\t\t\t\tif ( paddingBottom !== '' ) {\r\n\t\t\t\t\tpaddingBottom = utility.removeMeasurementSuffix( paddingBottom );\r\n\t\t\t\t\tpadding += parseInt( paddingBottom, 10 );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( thisModal.classList.contains( 'o-modal--fullscreen' ) ) {\r\n\t\t\t\t\t// For fullscreen modal, no padding\r\n\t\t\t\t\tthisModal.style.paddingBottom = 0;\r\n\t\t\t\t\tthisModal.style.paddingTop = 0;\r\n\t\t\t\t} else if ( currentBreakpoint === utility.smallTag ) {\r\n\t\t\t\t\t// Check breakpoint and react accordingly\r\n\t\t\t\t\tthisModal.removeAttribute( 'style' ); // Remove inline margin overrides\r\n\t\t\t\t\tmodalContentHeight = utility.outerHeightTrue( thisModal ) + 2; // Add 2px to stop scroll bar showing in some browsers\r\n\t\t\t\t\tthisContentHolder.style.height = utility.convertToPx( modalContentHeight );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmodalContentHeight = document.querySelector( '.o-modal__content-outer' ).offsetHeight + padding + 2;\r\n\t\t\t\t\tthisContentHolder.style.height = utility.convertToPx( modalContentHeight ); // Add 2px to stop scroll bar showing in some browsers\r\n\t\t\t\t\tmodalHeight = utility.outerHeightTrue( thisModal );\r\n\t\t\t\t\tmargin = 0;\r\n\r\n\t\t\t\t\tif ( modalHeight > modalContentHeight - closeHeight ) {\r\n\t\t\t\t\t\tmargin = ( ( modalHeight - modalContentHeight - closeHeight ) / 2 );\r\n\t\t\t\t\t\tif ( margin < 0 ) {\r\n\t\t\t\t\t\t\tmargin = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmargin = utility.convertToPx( margin );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthisModal.style.marginBottom = margin;\r\n\t\t\t\t\tthisModal.style.marginTop = margin;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstopBodyScrolling : function( bool ) {\r\n\t\t\tvar htmlEl = document.querySelector( 'html' ),\r\n\t\t\t\tscrollTop = htmlEl.getAttribute( 'data-scrolltop' ),\r\n\t\t\t\ttop = 0;\r\n\t\t\tif ( bool === true ) {\r\n\t\t\t\tif ( !htmlEl.getAttribute( 'data-scrolltop' ) ) {\r\n\t\t\t\t\t// Store the current scrollTop offset\r\n\t\t\t\t\ttop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\r\n\r\n\t\t\t\t\thtmlEl.setAttribute( 'data-scrolltop', top );\r\n\t\t\t\t\tdocument.querySelector( '.l-whole-page' ).style.marginTop = utility.convertToPx( 0 - top );\r\n\t\t\t\t}\r\n\t\t\t} else if ( scrollTop ) {\r\n\t\t\t\t// Restore scroll top\r\n\t\t\t\tdocument.querySelector( '.l-whole-page' ).style.marginTop = 0;\r\n\t\t\t\twindow.scrollTo( 0, htmlEl.getAttribute( 'data-scrolltop' ) );\r\n\t\t\t\thtmlEl.removeAttribute( 'data-scrolltop' );\r\n\t\t\t} else {\r\n\t\t\t\t// Do nothing\r\n\t\t\t}\r\n\t\t},\r\n\t};\r\n\r\n\treturn {\r\n\t\tinitInstance : function() {\r\n\t\t\treturn oModalFn.init();\r\n\t\t},\r\n\t};\r\n});\r\n"]}