123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- import { colorLuminance } from './utils';
- import { getModal } from './handle-swal-dom';
- import { hasClass, isDescendant } from './handle-dom';
- /*
- * User clicked on "Confirm"/"OK" or "Cancel"
- */
- var handleButton = function(event, params, modal) {
- var e = event || window.event;
- var target = e.target || e.srcElement;
- var targetedConfirm = target.className.indexOf('confirm') !== -1;
- var targetedOverlay = target.className.indexOf('sweet-overlay') !== -1;
- var modalIsVisible = hasClass(modal, 'visible');
- var doneFunctionExists = (params.doneFunction && modal.getAttribute('data-has-done-function') === 'true');
- // Since the user can change the background-color of the confirm button programmatically,
- // we must calculate what the color should be on hover/active
- var normalColor, hoverColor, activeColor;
- if (targetedConfirm && params.confirmButtonColor) {
- normalColor = params.confirmButtonColor;
- hoverColor = colorLuminance(normalColor, -0.04);
- activeColor = colorLuminance(normalColor, -0.14);
- }
- function shouldSetConfirmButtonColor(color) {
- if (targetedConfirm && params.confirmButtonColor) {
- target.style.backgroundColor = color;
- }
- }
- switch (e.type) {
- case 'mouseover':
- shouldSetConfirmButtonColor(hoverColor);
- break;
- case 'mouseout':
- shouldSetConfirmButtonColor(normalColor);
- break;
- case 'mousedown':
- shouldSetConfirmButtonColor(activeColor);
- break;
- case 'mouseup':
- shouldSetConfirmButtonColor(hoverColor);
- break;
- case 'focus':
- let $confirmButton = modal.querySelector('button.confirm');
- let $cancelButton = modal.querySelector('button.cancel');
- if (targetedConfirm) {
- $cancelButton.style.boxShadow = 'none';
- } else {
- $confirmButton.style.boxShadow = 'none';
- }
- break;
- case 'click':
- let clickedOnModal = (modal === target);
- let clickedOnModalChild = isDescendant(modal, target);
- // Ignore click outside if allowOutsideClick is false
- if (!clickedOnModal && !clickedOnModalChild && modalIsVisible && !params.allowOutsideClick) {
- break;
- }
- if (targetedConfirm && doneFunctionExists && modalIsVisible) {
- handleConfirm(modal, params);
- } else if (doneFunctionExists && modalIsVisible || targetedOverlay) {
- handleCancel(modal, params);
- } else if (isDescendant(modal, target) && target.tagName === 'BUTTON') {
- sweetAlert.close();
- }
- break;
- }
- };
- /*
- * User clicked on "Confirm"/"OK"
- */
- var handleConfirm = function(modal, params) {
- var callbackValue = true;
- if (hasClass(modal, 'show-input')) {
- callbackValue = modal.querySelector('input').value;
- if (!callbackValue) {
- callbackValue = '';
- }
- }
- params.doneFunction(callbackValue);
- if (params.closeOnConfirm) {
- sweetAlert.close();
- }
- // Disable cancel and confirm button if the parameter is true
- if (params.showLoaderOnConfirm) {
- sweetAlert.disableButtons();
- }
- };
- /*
- * User clicked on "Cancel"
- */
- var handleCancel = function(modal, params) {
- // Check if callback function expects a parameter (to track cancel actions)
- var functionAsStr = String(params.doneFunction).replace(/\s/g, '');
- var functionHandlesCancel = functionAsStr.substring(0, 9) === 'function(' && functionAsStr.substring(9, 10) !== ')';
- if (functionHandlesCancel) {
- params.doneFunction(false);
- }
- if (params.closeOnCancel) {
- sweetAlert.close();
- }
- };
- export default {
- handleButton,
- handleConfirm,
- handleCancel
- };
|