first commit
This commit is contained in:
117
wp-content/plugins/elementor-addon/assets/js/main.js
Normal file
117
wp-content/plugins/elementor-addon/assets/js/main.js
Normal file
@@ -0,0 +1,117 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var activeModal = null;
|
||||
var activeButton = null;
|
||||
|
||||
function getFocusableElements(container) {
|
||||
return Array.prototype.slice.call(
|
||||
container.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')
|
||||
);
|
||||
}
|
||||
|
||||
function openPopup(button) {
|
||||
var widget = button.closest('.ea-popup-widget');
|
||||
var modal = widget ? widget.querySelector('[data-ea-popup-modal]') : null;
|
||||
|
||||
if (!modal) {
|
||||
return;
|
||||
}
|
||||
|
||||
activeModal = modal;
|
||||
activeButton = button;
|
||||
|
||||
if (typeof modal.showModal === 'function' && !modal.open) {
|
||||
modal.showModal();
|
||||
} else if (!modal.open) {
|
||||
modal.setAttribute('open', '');
|
||||
}
|
||||
|
||||
modal.classList.add('is-open');
|
||||
modal.setAttribute('aria-hidden', 'false');
|
||||
button.setAttribute('aria-expanded', 'true');
|
||||
document.body.classList.add('ea-popup-lock');
|
||||
|
||||
var focusable = getFocusableElements(modal);
|
||||
if (focusable.length) {
|
||||
focusable[0].focus();
|
||||
}
|
||||
}
|
||||
|
||||
function closePopup(modal) {
|
||||
if (!modal) {
|
||||
return;
|
||||
}
|
||||
|
||||
modal.classList.remove('is-open');
|
||||
modal.setAttribute('aria-hidden', 'true');
|
||||
|
||||
if (typeof modal.close === 'function' && modal.open) {
|
||||
modal.close();
|
||||
} else {
|
||||
modal.removeAttribute('open');
|
||||
}
|
||||
|
||||
if (activeButton) {
|
||||
activeButton.setAttribute('aria-expanded', 'false');
|
||||
activeButton.focus();
|
||||
}
|
||||
|
||||
document.body.classList.remove('ea-popup-lock');
|
||||
activeModal = null;
|
||||
activeButton = null;
|
||||
}
|
||||
|
||||
function trapFocus(event) {
|
||||
if (!activeModal || event.key !== 'Tab') {
|
||||
return;
|
||||
}
|
||||
|
||||
var focusable = getFocusableElements(activeModal);
|
||||
if (!focusable.length) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
var first = focusable[0];
|
||||
var last = focusable[focusable.length - 1];
|
||||
|
||||
if (event.shiftKey && document.activeElement === first) {
|
||||
event.preventDefault();
|
||||
last.focus();
|
||||
} else if (!event.shiftKey && document.activeElement === last) {
|
||||
event.preventDefault();
|
||||
first.focus();
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('click', function (event) {
|
||||
var openButton = event.target.closest('.ea-popup-button');
|
||||
var closeButton = event.target.closest('[data-ea-popup-close]');
|
||||
|
||||
if (openButton) {
|
||||
event.preventDefault();
|
||||
openPopup(openButton);
|
||||
return;
|
||||
}
|
||||
|
||||
if (closeButton) {
|
||||
event.preventDefault();
|
||||
closePopup(closeButton.closest('[data-ea-popup-modal]'));
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.target.matches('[data-ea-popup-modal]')) {
|
||||
closePopup(event.target);
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', function (event) {
|
||||
if (event.key === 'Escape' && activeModal) {
|
||||
closePopup(activeModal);
|
||||
return;
|
||||
}
|
||||
|
||||
trapFocus(event);
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user