{"version":3,"sources":["blocks/o-modal.js"],"names":["define","utility","oModalFn","focusableElementsString","focusedElementBeforeModal","modalDialog","FRAMEWORK","locale","settings","oModal","closeText","tagName","loadingText","rootElement","classList","add","lWholePage","document","querySelector","init","elm","buttons","Object","keys","button","forEach","contains","setAttribute","querySelectorAll","modalLinkClick","target","notificationModal","thisModal","addEventListener","e","trapEscapeKey","closeModal","window","getAttribute","fn","destroyModal","preventDefault","open","modalLinkElm","close","trapTabKey","focusableElements","destroy","focusedItem","evt","foundElements","focusedItemIndex","obj","numberOfFocusableItems","which","find","el","isVisible","focus","length","indexOf","setInitialFocusModal","shiftKey","targetElement","i","openModal","initiatingObj","waitForClose","closest","openModalNow","newTarget","insertAdjacentHTML","setTimeout","content","stopBodyScrolling","modalContent","contentOrigin","modalTarget","firstChild","loadContent","remove","childNodes","removeEventListener","dataOrigin","trigger","oModalTarget","submitID","timings","t500ms","getContent","urlAnchorRegExp","staticContent","contentChildren","href","thisContent","dataUrl","updateContent","current","status","staticID","hash","match","contentHolder","createElement","requestLoadInto","pathname","response","search","push","grandchildEl","replace","append","split","staticSource","thisContentHolder","thisModalContent","thisModalContentHeading","childEl","insertBefore","Array","addClass","thisModalContentLabel","contentLabel","scrollTop","disableClose","pageYOffset","body","documentElement","htmlEl","removeAttribute","initInstance","bool","top","style","marginTop","convertToPx","scrollTo"],"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( elm ) {\r\n\t\t\tif ( oModalFn.rootElement.classList.contains( 'js-o-modal' ) ) {\r\n\t\t\t\tif ( elm && !elm.classList.contains( 'o-modal-link' ) && ( elm.tagName === 'A' || elm.tagName === 'BUTTON' ) ) {\r\n\t\t\t\t\telm.classList.add( 'o-modal-link' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If modal was already setup on the page then just run the button search to update the modal button list for the page\r\n\t\t\t\toModalFn.rootElement.oModal.buttons = oModalFn.rootElement.querySelectorAll( 'a.o-modal-link, button.o-modal-link, a[data-module=\"o-modal\"], button[data-module=\"o-modal\"]' );\r\n\r\n\t\t\t\tObject.keys( oModalFn.rootElement.oModal.buttons ).forEach( function loop( button ) {\r\n\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].classList.contains( 'js-o-modal__trigger' ) ) {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].classList.add( 'js-o-modal__trigger' );\r\n\t\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].tagName === 'A' ) {\r\n\t\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].setAttribute( 'role', 'button' );\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\toModalFn.rootElement.classList.add( 'js-o-modal' );\r\n\r\n\t\t\t\toModalFn.rootElement.oModal = {};\r\n\r\n\t\t\t\tif ( elm && !elm.classList.contains( 'o-modal-link' ) && ( elm.tagName === 'A' || elm.tagName === 'BUTTON' ) ) {\r\n\t\t\t\t\telm.classList.add( 'o-modal-link' );\r\n\t\t\t\t}\r\n\r\n\t\t\t\toModalFn.rootElement.oModal.buttons = oModalFn.rootElement.querySelectorAll( 'a.o-modal-link, button.o-modal-link, a[data-module=\"o-modal\"], button[data-module=\"o-modal\"]' );\r\n\r\n\t\t\t\tObject.keys( oModalFn.rootElement.oModal.buttons ).forEach( function loop( button ) {\r\n\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].classList.contains( 'js-o-modal__trigger' ) ) {\r\n\t\t\t\t\t\t// Do nothing\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].classList.add( 'js-o-modal__trigger' );\r\n\t\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].tagName === 'A' ) {\r\n\t\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].setAttribute( 'role', 'button' );\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\toModalFn.rootElement.addEventListener( 'click', function listener( e ) {\r\n\t\t\t\t\toModalFn.modalLinkClick( e.target, e );\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\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\toModalFn.modalLinkClick( modalLinkElm );\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\tmodalLinkClick : function( targetElement, evt ) {\r\n\t\t\tvar newTarget = targetElement.closest( '.o-modal-link, .o-modal__cancel, .a-button--cancel:not(.a-button--filters-cancel), [data-module=\"o-modal\"]' ),\r\n\t\t\t\tpreventDefault = false;\r\n\r\n\t\t\tif ( targetElement.classList.contains( 'o-modal-link' ) || targetElement.getAttribute( 'data-module' ) === 'o-modal' ) {\r\n\t\t\t\tpreventDefault = true;\r\n\t\t\t\toModalFn.openModal( targetElement );\r\n\t\t\t} else if ( targetElement.classList.contains( 'o-modal__cancel' ) || ( targetElement.closest( '.o-modal' ) && targetElement.classList.contains( 'a-button--cancel' ) ) ) {\r\n\t\t\t\tpreventDefault = true;\r\n\t\t\t\toModalFn.closeModal();\r\n\t\t\t} else if ( newTarget ) {\r\n\t\t\t\t// Do nothing\r\n\t\t\t\tpreventDefault = true;\r\n\t\t\t\toModalFn.modalLinkClick( newTarget, evt );\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\tif ( preventDefault && evt ) {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\topenModal : function( initiatingObj, content ) {\r\n\t\t\tlet 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\tlet 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\r\n\t\t\t\t\tutility.trigger( window, 'modal:closed' );\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\tutility.trigger( window, 'modal:closed' );\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\tutility.trigger( window, 'modal:opened' );\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\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\twindow.scrollTo( 0, 0 );\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( elm ) {\r\n\t\t\treturn oModalFn.init( elm );\r\n\t\t},\r\n\t};\r\n});\r\n"]}