File "modal.js"
Full path: C:/Inetpub/vhosts/drshti.com/httpdocs/wp-content/plugins/spectra-pro/assets/js/modal.js
File
size: 8.54 B (8.54 KB bytes)
MIME-type: text/plain
Charset: utf-8
Download Open Edit Advanced Editor &nnbsp; Back
document.addEventListener( 'UAGModalEditor', function ( e ) {
UAGBModal.init( '.uagb-block-' + e.detail.block_id, true, { ...e.detail } );
} );
document.addEventListener( 'AstraQuickViewForModal', function ( e ) {
UAGBModal.init( e.detail.class_name, false, { ...e.detail } );
} );
window.UAGBModal = {
_getVariables( mainSelector ) {
const document = UAGBModal._getDocumentElement();
return {
document_element: document,
modalWrapper: document.querySelector( mainSelector ),
modalPopup: document.querySelector( `${ mainSelector }.uagb-modal-popup` ),
closeModal: document.querySelector( `${ mainSelector } .uagb-modal-popup-close` ),
bodyWrap: document.querySelector( 'body' ),
pageTemplate: document.getElementsByClassName( 'block-editor-iframe__body' ),
};
},
_addTriggers( mainSelector, args = {} ) {
const { document_element } = UAGBModal._getVariables( mainSelector );
const modalWrapper = document_element.querySelectorAll( mainSelector );
if ( modalWrapper && modalWrapper.length !== 0 ) {
for ( const modalWrapperEl of modalWrapper ) {
const innerModal = modalWrapperEl?.querySelector( '.uagb-modal-popup' );
if ( ! innerModal ) {
continue;
}
document.addEventListener( 'keyup', function ( e ) {
const closeOnEsc = modalWrapperEl.dataset.escpress;
if ( 27 === e.keyCode && 'enable' === closeOnEsc ) {
UAGBModal._hide( mainSelector, innerModal );
}
} );
const closeModal = innerModal.querySelector( `${ mainSelector } .uagb-modal-popup-close` );
closeModal.addEventListener( 'click', function () {
if ( 'automatic' === args?.modalTrigger && args?.enableCookies && 'close-action' === args?.setCookiesOn ) {
UAGBModal._setPopupCookie( mainSelector, args.hideForDays );
}
UAGBModal._hide( mainSelector, innerModal );
} );
}
}
},
_exitIntent( mainSelector, innerModal, exitIntent, args ) {
document.addEventListener( 'mouseleave', function ( e ) {
if ( e.clientY > 20 ) {
return;
}
if ( UAGBModal._canShow( mainSelector, args ) && exitIntent ) {
UAGBModal._show( mainSelector, innerModal );
}
} );
},
_canShow( mainSelector, args = {} ) {
const current_cookie = UAGBModal._getCookie( 'uagb-block-popup-' + mainSelector );
if ( args?.enableCookies ) {
if ( 'undefined' !== typeof current_cookie && 'automatic' === args?.modalTrigger ) {
return false;
}
} else {
// Remove cookie.
document.cookie = `uagb-block-popup-${ mainSelector };max-age=-1`;
}
const { modalPopup } = UAGBModal._getVariables( mainSelector );
if ( modalPopup && modalPopup.classList.contains( 'active' ) ) {
return false;
}
return true;
},
_show( mainSelector, innerModal ) {
const { bodyWrap, pageTemplate } = UAGBModal._getVariables( mainSelector );
const siteEditTheme = document.getElementsByClassName( 'edit-site' );
if ( innerModal && ! innerModal.classList.contains( 'active' ) ) {
innerModal.classList.add( 'active' );
if (
bodyWrap &&
! bodyWrap.classList.contains( 'hide-scroll' ) &&
! siteEditTheme?.length &&
! pageTemplate?.length &&
! bodyWrap.classList.contains( 'wp-admin' )
) {
bodyWrap.classList.add( 'hide-scroll' );
}
}
},
_hide( mainSelector, innerModal ) {
const { modalPopup, bodyWrap } = UAGBModal._getVariables( mainSelector );
if ( innerModal && innerModal.classList.contains( 'active' ) ) {
innerModal.classList.remove( 'active' );
}
if ( modalPopup && modalPopup.classList.contains( 'active' ) ) {
modalPopup.classList.remove( 'active' );
}
if ( bodyWrap && bodyWrap.classList.contains( 'hide-scroll' ) ) {
UAGBModal.closeModalScrollCheck( bodyWrap );
}
},
_getDocumentElement() {
let document_element = document;
const getEditorIframe = document.querySelectorAll( 'iframe[name="editor-canvas"]' );
if( getEditorIframe?.length ){
const iframeDocument = getEditorIframe?.[0]?.contentWindow?.document || getEditorIframe?.[0]?.contentDocument;
if ( iframeDocument ) {
document_element = iframeDocument;
}
}
return document_element;
},
_afterOpen( mainSelector, args ) {
if ( args?.enableCookies && 'page-refresh' === args?.setCookiesOn ) {
UAGBModal._setPopupCookie( mainSelector, args?.hideForDays );
}
},
_getCookie( name ) {
const value = '; ' + document.cookie;
const parts = value.split( '; ' + name + '=' );
if ( parts.length === 2 ) return parts.pop().split( ';' ).shift();
},
_setPopupCookie( mainSelector, cookies_days ) {
const current_cookie = UAGBModal._getCookie( 'uagb-block-popup-' + mainSelector );
if ( 'undefined' === typeof current_cookie && 'undefined' !== typeof cookies_days ) {
document.cookie =
`uagb-block-popup-${ mainSelector }=true; expires=` +
new Date( Date.now() + cookies_days * 24 * 60 * 60 * 1000 ).toUTCString();
}
},
triggerAction( mainSelector, modalTrigger, isAdmin, isTriggerCustom = false ) {
const { document_element, bodyWrap } = UAGBModal._getVariables( mainSelector );
const modalWrapper = document_element.querySelectorAll( mainSelector );
if ( modalWrapper?.length ) {
for ( const modalWrapperEl of modalWrapper ) {
if ( ! modalTrigger || ! isTriggerCustom ) {
modalTrigger = modalWrapperEl.querySelector( '.uagb-modal-trigger' );
}
if ( modalTrigger ) {
const innerModal = modalWrapperEl?.querySelector( '.uagb-modal-popup' );
const closeOverlayClick = modalWrapperEl.dataset.overlayclick;
modalTrigger.style.pointerEvents = 'auto';
if ( ! innerModal ) {
continue;
}
if ( ! isAdmin ) {
document.body?.appendChild( innerModal );
}
modalTrigger.addEventListener( 'click', function ( e ) {
e.preventDefault();
UAGBModal._show( mainSelector, innerModal );
} );
if( 'disable' !== closeOverlayClick ){
innerModal.addEventListener( 'click', function ( e ) {
if (
'enable' === closeOverlayClick &&
innerModal.classList.contains( 'active' ) &&
! innerModal.querySelector( '.uagb-modal-popup-wrap' ).contains( e.target )
) {
innerModal.classList.remove( 'active' );
}
if ( bodyWrap && bodyWrap.classList.contains( 'hide-scroll' ) ) {
UAGBModal.closeModalScrollCheck( bodyWrap );
}
} );
}
}
}
}
},
init( mainSelector, isAdmin, args ) {
const { document_element, modalWrapper } = UAGBModal._getVariables( mainSelector );
if ( 'string' === typeof args ) {
args = JSON.parse( args );
}
const { modalTrigger, cssClass, cssID, exitIntent, showAfterSeconds, noOfSecondsToShow } = args;
if ( modalWrapper ) {
const defaultTrigger = modalWrapper.querySelector( '.uagb-modal-trigger' );
UAGBModal._addTriggers( mainSelector, args );
const innerModal = modalWrapper.querySelector( '.uagb-modal-popup' );
switch ( modalTrigger ) {
case 'custom-class':
// If the Class is not set, don't search for that tag classes.
if ( ! cssClass ) {
break;
}
const modalTriggerAll = document_element.querySelectorAll( `.${ cssClass }` );
if ( modalTriggerAll.length > 0 ) {
modalTriggerAll.forEach( function ( trigger ) {
UAGBModal.triggerAction( mainSelector, trigger, isAdmin, true );
} );
}
break;
case 'custom-id':
// If in the editor, trigger the modal to be visible.
if ( isAdmin ) {
UAGBModal._show( mainSelector, innerModal );
}
// If the ID is not set, don't search for that tag ID.
if ( ! cssID ) {
break;
}
const modalTriggerID = document_element.querySelector( `#${ cssID }` );
if ( modalTriggerID ) {
UAGBModal.triggerAction( mainSelector, modalTriggerID, isAdmin, true );
}
break;
case 'automatic':
// Handle automatic trigger.
const delay = showAfterSeconds ? parseInt( noOfSecondsToShow ) * 1000 : 1;
// If this modal is an exit intent automatic modal, don't render it on load.
if ( UAGBModal._canShow( mainSelector, args ) && ! exitIntent ) {
setTimeout( function () {
UAGBModal._show( mainSelector, innerModal );
UAGBModal._afterOpen( mainSelector, args );
}, delay );
}
UAGBModal._exitIntent( mainSelector, innerModal, exitIntent, args );
break;
default:
UAGBModal.triggerAction( mainSelector, defaultTrigger, isAdmin, false );
}
}
},
// Close the Modal and check if the Scrollbar needs to be reactivated.
closeModalScrollCheck( bodyWrapper ) {
const allActiveModals = document.querySelectorAll( '.uagb-modal-popup.active' );
if ( 0 === allActiveModals.length ) {
bodyWrapper.classList.remove( 'hide-scroll' );
}
},
};