<script>
/**
* Global confirmation modal handler
*/
(function() {
'use strict';
// Initialize confirmation modals when DOM is ready
document.addEventListener('DOMContentLoaded', function() {
initializeConfirmationModals();
});
function initializeConfirmationModals() {
// Handle buttons with data-confirm attribute
document.querySelectorAll('[data-confirm]').forEach(function(button) {
button.addEventListener('click', function(e) {
e.preventDefault();
showConfirmationModal(
this.getAttribute('data-confirm') || 'Are you sure?',
function() {
// If it's a form submit
if (button.type === 'submit' && button.closest('form')) {
button.closest('form').submit();
}
// If it's a link
else if (button.tagName === 'A' && button.href) {
window.location.href = button.href;
}
// If it's a button with form action
else if (button.closest('form')) {
button.closest('form').submit();
}
}
);
});
});
}
function showConfirmationModal(message, onConfirm) {
// Create modal HTML
const modalHtml = `
<div class="ui small basic modal confirmation-modal">
<div class="ui icon header">
<i class="warning sign icon"></i>
{{ 'sylius.ui.confirm_your_action'|trans }}
</div>
<div class="content">
<p>${message}</p>
</div>
<div class="actions">
<div class="ui red basic cancel inverted button">
<i class="remove icon"></i>
{{ 'sylius.ui.no_label'|trans }}
</div>
<div class="ui green ok inverted button confirm-action-btn">
<i class="checkmark icon"></i>
{{ 'sylius.ui.yes_label'|trans }}
</div>
</div>
</div>
`;
// Add modal to body
document.body.insertAdjacentHTML('beforeend', modalHtml);
const modal = document.querySelector('.confirmation-modal');
// Handle confirmation
modal.querySelector('.confirm-action-btn').addEventListener('click', function() {
onConfirm();
$(modal).modal('hide');
// Remove modal from DOM after hiding
setTimeout(function() {
modal.remove();
}, 300);
});
// Show modal
$(modal).modal('show');
// Remove modal from DOM when hidden
$(modal).on('hidden.bs.modal', function() {
modal.remove();
});
}
// Make functions globally available
window.ConfirmationModals = {
show: showConfirmationModal,
init: initializeConfirmationModals
};
})();
</script>