{"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","addEventListener","listener","thisModal","notificationModal","e","modalLinkClick","getAttribute","trapEscapeKey","trapTabKey","destroyModal","window","open","modalLinkElm","closeModal","destroy","which","focusableElements","obj","evt","numberOfFocusableItems","preventDefault","foundElements","find","focusedItemIndex","isVisible","el","push","focusedItem","length","indexOf","shiftKey","focus","setInitialFocusModal","targetElement","newTarget","i","event","closest","openModal","initiatingObj","content","waitForClose","setTimeout","openModalNow","removeEventListener","contentOrigin","modalTarget","modalContent","remove","childNodes","append","firstChild","stopBodyScrolling","current","t500ms","submitID","trigger","timeoutFn","oModalTarget","dataOrigin","dataUrl","timings","loadContent","thisContent","getContent","hash","match","staticID","staticContent","href","contentHolder","contentChildren","createElement","loop","location","pathname","search","String","requestLoadInto","updateContent","replace","response","status","staticSource","split","grandchildEl","childEl","removeChild","thisModalContentLabel","thisContentHolder","thisModalContent","Array","isArray","thisModalContentHeading","textContent","disableClose","scrollTop","addClass","bool","htmlEl","top","pageYOffset","body","documentElement","style","marginTop","convertToPx","scrollTo","removeAttribute","initInstance"],"mappings":"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","file":"blocks/o-modal.js","sourcesContent":["// eslint-disable-next-line max-lines-per-function\ndefine( [ 'utility' ], function run( utility ) {\n\t'use strict';\n\n\tvar oModalFn = {\n\t\tfocusableElementsString : 'a[href], area[href], input:not([disabled]), select:not([disabled]),\t\t' +\n\t\t' textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]',\n\t\tfocusedElementBeforeModal : null,\n\t\tmodalDialog : '
' +\n\t\t'' +\n\t\t'
' +\n\t\t'
' +\n\t\t'
' +\n\t\t'' + FRAMEWORK.locale.settings.oModal.loadingText + '
',\n\t\trootElement : document.documentElement,\n\t\tlWholePage : document.querySelector( 'body > .l-whole-page' ),\n\n\t\tinit : function( elm ) {\n\t\t\tif ( oModalFn.rootElement.classList.contains( 'js-o-modal' ) ) {\n\t\t\t\tif ( elm && !elm.classList.contains( 'o-modal-link' ) && ( elm.tagName === 'A' || elm.tagName === 'BUTTON' ) ) {\n\t\t\t\t\telm.classList.add( 'o-modal-link' );\n\t\t\t\t}\n\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\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\"]' );\n\n\t\t\t\tObject.keys( oModalFn.rootElement.oModal.buttons ).forEach( function loop( button ) {\n\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].classList.contains( 'js-o-modal__trigger' ) ) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].classList.add( 'js-o-modal__trigger' );\n\t\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].tagName === 'A' ) {\n\t\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].setAttribute( 'role', 'button' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\toModalFn.rootElement.classList.add( 'js-o-modal' );\n\n\t\t\t\toModalFn.rootElement.oModal = {};\n\n\t\t\t\tif ( elm && !elm.classList.contains( 'o-modal-link' ) && ( elm.tagName === 'A' || elm.tagName === 'BUTTON' ) ) {\n\t\t\t\t\telm.classList.add( 'o-modal-link' );\n\t\t\t\t}\n\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\"]' );\n\n\t\t\t\tObject.keys( oModalFn.rootElement.oModal.buttons ).forEach( function loop( button ) {\n\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].classList.contains( 'js-o-modal__trigger' ) ) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t} else {\n\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].classList.add( 'js-o-modal__trigger' );\n\t\t\t\t\t\tif ( oModalFn.rootElement.oModal.buttons[ button ].tagName === 'A' ) {\n\t\t\t\t\t\t\toModalFn.rootElement.oModal.buttons[ button ].setAttribute( 'role', 'button' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\toModalFn.rootElement.addEventListener( 'click', function listener( e ) {\n\t\t\t\t\toModalFn.modalLinkClick( e.target, e );\n\t\t\t\t});\n\t\t\t\toModalFn.rootElement.addEventListener( 'keydown', function listener( e ) {\n\t\t\t\t\tvar thisModal,\n\t\t\t\t\t\tnotificationModal = false;\n\t\t\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-active' ) ) {\n\t\t\t\t\t\tthisModal = document.querySelector( '.o-modal' );\n\t\t\t\t\t\toModalFn.trapTabKey( thisModal, e );\n\n\t\t\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-notification' ) && oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-notification' ) !== '' ) {\n\t\t\t\t\t\t\tnotificationModal = true;\n\t\t\t\t\t\t}\n\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\n\t\t\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-disable-close' ) !== 'all' && notificationModal === false ) {\n\t\t\t\t\t\t\toModalFn.trapEscapeKey( thisModal, e );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\twindow.addEventListener( 'modal:close', function fn() {\n\t\t\t\t\toModalFn.closeModal();\n\t\t\t\t});\n\t\t\t\twindow.addEventListener( 'modal:destroy', function fn() {\n\t\t\t\t\toModalFn.destroyModal();\n\t\t\t\t});\n\n\t\t\t\toModalFn.rootElement.oModal.open = function open( modalLinkElm ) {\n\t\t\t\t\toModalFn.modalLinkClick( modalLinkElm );\n\t\t\t\t};\n\t\t\t\toModalFn.rootElement.oModal.close = function close() {\n\t\t\t\t\toModalFn.closeModal();\n\t\t\t\t};\n\t\t\t\toModalFn.rootElement.oModal.destroy = function destroy() {\n\t\t\t\t\toModalFn.destroyModal();\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn oModalFn.rootElement.oModal;\n\t\t},\n\n\t\ttrapEscapeKey : function( obj, evt ) {\n\t\t\t// If escape pressed\n\t\t\tif ( evt.which === 27 ) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\toModalFn.closeModal();\n\t\t\t}\n\t\t},\n\n\t\ttrapTabKey : function( obj, evt ) {\n\t\t\tvar foundElements,\n\t\t\t\tfocusableElements = [],\n\t\t\t\tfocusedItem,\n\t\t\t\tnumberOfFocusableItems,\n\t\t\t\tfocusedItemIndex;\n\t\t\t// If tab or shift-tab pressed\n\t\t\tif ( evt.which === 9 ) {\n\t\t\t\t// Get list of focusable items\n\t\t\t\tfoundElements = utility.find( [ obj ], oModalFn.focusableElementsString );\n\t\t\t\tfoundElements.forEach( function loop( el ) {\n\t\t\t\t\tif ( utility.isVisible( el ) ) {\n\t\t\t\t\t\tfocusableElements.push( el );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tfocusedItem = document.querySelector( ':focus' ); // Get currently focused item\n\t\t\t\tnumberOfFocusableItems = focusableElements.length; // Get the number of focusable items\n\t\t\t\t// Get the index of the currently focused item\n\t\t\t\tfocusedItemIndex = focusableElements.indexOf( focusedItem );\n\t\t\t\tif ( evt.shiftKey && focusedItemIndex === 0 ) { // Back tab\n\t\t\t\t\t// If focused on first item and user presses back-tab, go to the last focusable item\n\t\t\t\t\tfocusableElements[ numberOfFocusableItems - 1 ].focus();\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t} else if ( focusedItemIndex === -1 || ( !evt.shiftKey && focusedItemIndex === numberOfFocusableItems - 1 ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Forward tab\n\t\t\t\t\t * If the foucused item is outside of the allowed focus items then set to the first focusable item\n\t\t\t\t\t * If focused on the last item and user presses tab, go to the first focusable item\n\t\t\t\t\t */\n\t\t\t\t\tfocusableElements[ 0 ].focus();\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t} else {\n\t\t\t\t\t// Do nothing\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetInitialFocusModal : function( obj ) {\n\t\t\tvar focusableElements = utility.find( [ obj ], oModalFn.focusableElementsString ),\n\t\t\t\ti;\n\t\t\tfor ( i = 0; i < focusableElements.length; i++ ) {\n\t\t\t\tif ( utility.isVisible( focusableElements[ i ] ) ) {\n\t\t\t\t\tfocusableElements[ i ].focus();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tmodalLinkClick : function( targetElement, event ) {\n\t\t\tvar newTarget = targetElement.closest( '.o-modal-link, .o-modal__cancel, .a-button--cancel, [data-module=\"o-modal\"]' ),\n\t\t\t\tpreventDefault = false;\n\n\t\t\tif ( targetElement.classList.contains( 'o-modal-link' ) || targetElement.getAttribute( 'data-module' ) === 'o-modal' ) {\n\t\t\t\tpreventDefault = true;\n\t\t\t\toModalFn.openModal( targetElement );\n\t\t\t} else if ( targetElement.classList.contains( 'o-modal__cancel' ) || ( targetElement.closest( '.o-modal' ) && targetElement.classList.contains( 'a-button--cancel' ) ) ) {\n\t\t\t\tpreventDefault = true;\n\t\t\t\toModalFn.closeModal();\n\t\t\t} else if ( newTarget ) {\n\t\t\t\t// Do nothing\n\t\t\t\tpreventDefault = true;\n\t\t\t\toModalFn.modalLinkClick( newTarget, event );\n\t\t\t} else {\n\t\t\t\t// Do nothing\n\t\t\t}\n\n\t\t\tif ( preventDefault && event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\topenModal : function( initiatingObj, content ) {\n\t\t\tvar waitForClose = function() {\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-closing' ) ) {\n\t\t\t\t\t\twaitForClose();\n\t\t\t\t\t} else if ( document.querySelector( '.o-modal' ) ) {\n\t\t\t\t\t\toModalFn.closeModal();\n\t\t\t\t\t} else {\n\t\t\t\t\t\toModalFn.openModalNow( initiatingObj, content );\n\t\t\t\t\t}\n\t\t\t\t}, 50 ); // Wait until the modal is fully closed before trying to open the next one\n\t\t\t};\n\t\t\twaitForClose();\n\t\t},\n\n\t\topenModalNow : function( initiatingObj, content ) {\n\t\t\tvar thisModal;\n\n\t\t\toModalFn.stopBodyScrolling( true );\n\n\t\t\t// Save current focus\n\t\t\toModalFn.focusedElementBeforeModal = initiatingObj;\n\t\t\t// Mark the main page as hidden\n\t\t\toModalFn.lWholePage.setAttribute( 'aria-hidden', 'true' );\n\t\t\toModalFn.lWholePage.insertAdjacentHTML( 'afterend', oModalFn.modalDialog );\n\t\t\tthisModal = document.querySelector( '.o-modal' );\n\n\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-active' );\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\n\t\t\t\toModalFn.lWholePage.addEventListener( 'focusin', oModalFn.setInitialFocusModal( thisModal ) );\n\t\t\t\toModalFn.setInitialFocusModal( thisModal );\n\t\t\t\toModalFn.loadContent( content );\n\t\t\t}, 10 ); // Small delay from adding the content to ensure the css animations work\n\t\t},\n\n\t\tcloseModal : function() {\n\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-active' ) ) {\n\t\t\t\toModalFn.lWholePage.setAttribute( 'aria-hidden', 'false' ); // Mark the main page as visible\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-active' );\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-loaded' );\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-closing' );\n\t\t\t\t// Remove the listener which redirects tab keys in the main content area to the modal\n\t\t\t\toModalFn.lWholePage.removeEventListener( 'focusin', oModalFn.setInitialFocusModal( document.querySelector( '.o-modal' ) ) );\n\n\t\t\t\t// Set focus back to element that had it before the modal was opened\n\t\t\t\toModalFn.focusedElementBeforeModal.focus();\n\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\t// Save content state so that it restore the state when reopened\n\t\t\t\t\tvar modalContent = document.querySelector( '.o-modal__content' ),\n\t\t\t\t\t\tcontentOrigin,\n\t\t\t\t\t\tmodalTarget;\n\t\t\t\t\tif ( modalContent ) {\n\t\t\t\t\t\tcontentOrigin = document.querySelector( modalContent.getAttribute( 'data-origin' ) );\n\t\t\t\t\t\tif ( contentOrigin ) {\n\t\t\t\t\t\t\twhile ( modalContent.childNodes.length ) {\n\t\t\t\t\t\t\t\tcontentOrigin.append( modalContent.firstChild ); // Only grab the content inside\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Remove modal from the DOM\n\t\t\t\t\t\tmodalTarget = document.querySelector( '.o-modal-target' );\n\t\t\t\t\t\tif ( modalTarget ) {\n\t\t\t\t\t\t\tmodalTarget.classList.remove( 'o-modal-target--active' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdocument.querySelectorAll( '.o-modal, .o-modal-overlay' ).forEach( function loop( el ) {\n\t\t\t\t\t\t\tel.remove();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-closing' );\n\t\t\t\t\toModalFn.stopBodyScrolling();\n\n\t\t\t\t\tutility.trigger( window, 'modal:closed' );\n\t\t\t\t}, FRAMEWORK.timings.current.t500ms );\n\t\t\t}\n\t\t},\n\n\t\tdestroyModal : function() {\n\t\t\tvar submitID;\n\n\t\t\tif ( oModalFn.rootElement.classList.contains( 'o-modal-active' ) ) {\n\t\t\t\tsubmitID = oModalFn.focusedElementBeforeModal.getAttribute( 'href' );\n\t\t\t\toModalFn.lWholePage.setAttribute( 'aria-hidden', 'false' ); // Mark the main page as visible\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-active' );\n\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-loaded' );\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-closing' );\n\t\t\t\t// Remove the listener which redirects tab keys in the main content area to the modal\n\t\t\t\toModalFn.lWholePage.removeEventListener( 'focusin', oModalFn.setInitialFocusModal( document.querySelector( '.o-modal' ) ) );\n\t\t\t\t// Set focus back to element that had it before the modal was opened\n\t\t\t\toModalFn.focusedElementBeforeModal.focus();\n\n\t\t\t\tsetTimeout( function timeoutFn() {\n\t\t\t\t\t// Remove ajaxed content from within the target div and remove modal from the DOM\n\t\t\t\t\tvar oModalTarget = document.querySelector( '.o-modal-target' ),\n\t\t\t\t\t\tdataOrigin,\n\t\t\t\t\t\tdataUrl = oModalFn.focusedElementBeforeModal.getAttribute( 'data-url' );\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdataOrigin = oModalTarget.querySelector( submitID );\n\t\t\t\t\t\tif ( dataOrigin ) {\n\t\t\t\t\t\t\tdataOrigin.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t}\n\t\t\t\t\toModalTarget.classList.remove( 'o-modal-target--active' );\n\t\t\t\t\tif ( dataUrl && dataUrl !== '' ) {\n\t\t\t\t\t\toModalFn.focusedElementBeforeModal.setAttribute( 'href', dataUrl );\n\t\t\t\t\t}\n\t\t\t\t\tdocument.querySelector( '.o-modal' ).remove();\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).remove();\n\t\t\t\t\toModalFn.rootElement.classList.remove( 'o-modal-closing' );\n\t\t\t\t\toModalFn.stopBodyScrolling();\n\t\t\t\t\tutility.trigger( window, 'modal:closed' );\n\t\t\t\t}, FRAMEWORK.timings.current.t500ms );\n\t\t\t}\n\t\t},\n\n\t\tloadContent : function( content ) {\n\t\t\tvar thisContent = content,\n\t\t\t\tgetContent,\n\t\t\t\thref = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ),\n\t\t\t\thash = href.match( utility.urlAnchorRegExp ),\n\t\t\t\tstaticID,\n\t\t\t\tstaticContent,\n\t\t\t\tstaticSource;\n\n\t\t\tdocument.querySelector( '.o-modal' ).classList.remove( 'o-modal--fullscreen' );\n\t\t\toModalFn.rootElement.classList.remove( 'o-modal-loaded' );\n\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.remove( 'o-modal-overlay--loaded' );\n\n\t\t\tgetContent = function() {\n\t\t\t\tvar contentHolder = document.createElement( 'div' ),\n\t\t\t\t\tcontentChildren;\n\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-fullscreen' ) ) {\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.add( 'o-modal-overlay--fullscreen' );\n\t\t\t\t}\n\t\t\t\tif ( href.indexOf( '#' ) === 0 || ( href.indexOf( '/' ) === 0 &&\n\t\t\t\twindow.location.pathname === oModalFn.focusedElementBeforeModal.pathname && window.location.search === oModalFn.focusedElementBeforeModal.search ) ) {\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)\n\t\t\t\t\tthisContent = document.querySelector( String( hash ) );\n\t\t\t\t\tif ( typeof thisContent === 'undefined' || thisContent === null ) {\n\t\t\t\t\t\toModalFn.closeModal(); // No content found so close modal\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontentChildren = [];\n\t\t\t\t\t\tthisContent.childNodes.forEach( function loop( el ) {\n\t\t\t\t\t\t\tcontentChildren.push( el ); // Only grab the content inside\n\t\t\t\t\t\t});\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\n\t\t\t\t\t\toModalFn.updateContent( contentChildren );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thref = href.replace( '#', ' #' );\n\t\t\t\t\tutility.requestLoadInto( contentHolder, href, function fn( response, status ) {\n\t\t\t\t\t\tif ( status >= 200 && status < 400 ) {\n\t\t\t\t\t\t\toModalFn.updateContent( contentHolder );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toModalFn.closeModal(); // No content found so close modal\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif ( typeof thisContent === 'undefined' ) {\n\t\t\t\tif ( typeof href === 'undefined' ) {\n\t\t\t\t\toModalFn.closeModal(); // No content found so close modal\n\t\t\t\t} else if ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-fullscreen' ) && !oModalFn.focusedElementBeforeModal.getAttribute( 'href' ).match( '^#' ) ) {\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.add( 'o-modal-overlay--fullscreen' );\n\t\t\t\t\tstaticID = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ).split( '#' )[ 1 ];\n\t\t\t\t\tstaticSource = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ).replace( '#', ' #' );\n\n\t\t\t\t\tstaticContent = document.createElement( 'div' );\n\t\t\t\t\tstaticContent.setAttribute( 'id', staticID );\n\t\t\t\t\tstaticContent.classList.add( 'o-modal__content-container' );\n\n\t\t\t\t\t// Fullscreen modal - get content and drop in at end of page for reuse\n\t\t\t\t\tutility.requestLoadInto( staticContent, staticSource, function fn( response, status ) {\n\t\t\t\t\t\tvar oModalTarget = document.querySelector( '.o-modal-target' );\n\t\t\t\t\t\toModalFn.focusedElementBeforeModal.setAttribute( 'data-url', oModalFn.focusedElementBeforeModal.getAttribute( 'href' ) ); // Set the data-url to the external link\n\t\t\t\t\t\toModalFn.focusedElementBeforeModal.setAttribute( 'href', '#' + staticID ); // Update the href on the original anchor to the new value\n\t\t\t\t\t\tif ( status >= 200 && status < 400 ) {\n\t\t\t\t\t\t\tstaticContent.childNodes.forEach( function loop( childEl ) {\n\t\t\t\t\t\t\t\tchildEl.childNodes.forEach( function innerLoop( grandchildEl ) {\n\t\t\t\t\t\t\t\t\t// Move all children out of the element\n\t\t\t\t\t\t\t\t\twhile ( grandchildEl.firstChild ) {\n\t\t\t\t\t\t\t\t\t\tchildEl.insertBefore( grandchildEl.firstChild, grandchildEl );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t// Remove the empty element\n\t\t\t\t\t\t\t\t\tchildEl.removeChild( grandchildEl );\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\toModalTarget.classList.add( 'o-modal-target--active' );\n\t\t\t\t\t\t\toModalTarget.append( staticContent );\n\t\t\t\t\t\t\thref = oModalFn.focusedElementBeforeModal.getAttribute( 'href' ); // Update href var to that same new value\n\t\t\t\t\t\t\tgetContent();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toModalFn.destroyModal(); // No content found so close modal\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Standard modal (or fullscreen with content loaded and target div populated etc)\n\t\t\t\t\tgetContent();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// eslint-disable-next-line complexity\n\t\tupdateContent : function( content ) {\n\t\t\tvar thisContent = content,\n\t\t\t\tthisModal = document.querySelector( '.o-modal' ),\n\t\t\t\tthisContentHolder = document.querySelector( '.o-modal__content-holder' ),\n\t\t\t\tthisModalContent = document.querySelector( '.o-modal__content' ),\n\t\t\t\tthisModalContentHeading,\n\t\t\t\tthisModalContentLabel,\n\t\t\t\tdisableClose,\n\t\t\t\tnotificationModal;\n\n\t\t\tif ( thisModal ) {\n\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-fullscreen' ) ) {\n\t\t\t\t\tthisModal.classList.add( 'o-modal--fullscreen' );\n\t\t\t\t\tif ( oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-wallet' ) ) {\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal--wallet' );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthisContentHolder.classList.remove( 'has-fullscreen' );\n\t\t\t\t}\n\t\t\t\tif ( Array.isArray( thisContent ) ) {\n\t\t\t\t\tthisContent.forEach( function loop( el ) {\n\t\t\t\t\t\tthisModalContent.append( el );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tthisModalContent.append( thisContent );\n\t\t\t\t}\n\n\t\t\t\tthisModalContentHeading = thisModalContent.querySelector( 'h1, h2, h3, h4, h5, .a-heading' );\n\t\t\t\tif ( thisModalContentHeading ) {\n\t\t\t\t\tthisModalContentLabel = thisModalContentHeading.textContent;\n\t\t\t\t} else {\n\t\t\t\t\tthisModalContentLabel = FRAMEWORK.locale.settings.oModal.contentLabel;\n\t\t\t\t}\n\t\t\t\tthisModalContent.setAttribute( 'aria-label', thisModalContentLabel );\n\n\t\t\t\toModalFn.rootElement.classList.add( 'o-modal-loaded' );\n\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).classList.add( 'o-modal-overlay--loaded' );\n\n\t\t\t\tthisContentHolder.scrollTop = 0;\n\n\t\t\t\tdisableClose = oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-disable-close' );\n\t\t\t\tnotificationModal = oModalFn.focusedElementBeforeModal.getAttribute( 'data-modal-notification' );\n\t\t\t\tthisModal.classList.remove( 'o-modal--no-close' );\n\t\t\t\tif ( disableClose || notificationModal ) {\n\t\t\t\t\t// If the user clicks outside the modal set focus back to the modal\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).addEventListener( 'click', function listener( e ) {\n\t\t\t\t\t\toModalFn.trapTabKey( thisModal, e );\n\t\t\t\t\t});\n\n\t\t\t\t\tswitch ( true ) {\n\t\t\t\t\tcase disableClose === 'all':\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal--no-close' ); // Hide the close link in the header\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase notificationModal:\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal--no-close' ); // Hide the close link in the header\n\t\t\t\t\t\tthisModal.classList.add( 'o-modal-notification' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase notificationModal === 'success':\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--success' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase notificationModal === 'neutral':\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--neutral' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase notificationModal === 'information':\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--information' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase notificationModal === 'warning':\n\t\t\t\t\t\tutility.addClass( thisModal, 'o-modal--no-close o-modal-notification o-modal-notification--warning' );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: // No match, so do nothing\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdocument.querySelector( '.o-modal-overlay' ).addEventListener( 'click', function listener() {\n\t\t\t\t\t\toModalFn.closeModal();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\toModalFn.setInitialFocusModal( document.querySelector( '.o-modal' ) );\n\n\t\t\t\tutility.trigger( window, 'refresh' );\n\t\t\t\tutility.trigger( window, 'modal:opened' );\n\t\t\t}\n\t\t},\n\n\t\tstopBodyScrolling : function( bool ) {\n\t\t\tvar htmlEl = document.querySelector( 'html' ),\n\t\t\t\tscrollTop = htmlEl.getAttribute( 'data-scrolltop' ),\n\t\t\t\ttop = 0;\n\t\t\tif ( bool === true ) {\n\t\t\t\tif ( !htmlEl.getAttribute( 'data-scrolltop' ) ) {\n\t\t\t\t\t// Store the current scrollTop offset\n\t\t\t\t\ttop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n\t\t\t\t\thtmlEl.setAttribute( 'data-scrolltop', top );\n\t\t\t\t\tdocument.querySelector( '.l-whole-page' ).style.marginTop = utility.convertToPx( 0 - top );\n\t\t\t\t}\n\t\t\t} else if ( scrollTop ) {\n\t\t\t\t// Restore scroll top\n\t\t\t\tdocument.querySelector( '.l-whole-page' ).style.marginTop = 0;\n\t\t\t\twindow.scrollTo( 0, htmlEl.getAttribute( 'data-scrolltop' ) );\n\t\t\t\thtmlEl.removeAttribute( 'data-scrolltop' );\n\t\t\t} else {\n\t\t\t\t// Do nothing\n\t\t\t}\n\t\t},\n\t};\n\n\treturn {\n\t\tinitInstance : function( elm ) {\n\t\t\treturn oModalFn.init( elm );\n\t\t},\n\t};\n});\n"]}