prvi
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
import { DismissReason } from './utils/DismissReason.js'
|
||||
import { callIfFunction } from './utils/utils.js'
|
||||
|
||||
/**
|
||||
* @param {SweetAlertOptions} innerParams
|
||||
* @param {DomCache} domCache
|
||||
* @param {Function} dismissWith
|
||||
*/
|
||||
export const handlePopupClick = (innerParams, domCache, dismissWith) => {
|
||||
if (innerParams.toast) {
|
||||
handleToastClick(innerParams, domCache, dismissWith)
|
||||
} else {
|
||||
// Ignore click events that had mousedown on the popup but mouseup on the container
|
||||
// This can happen when the user drags a slider
|
||||
handleModalMousedown(domCache)
|
||||
|
||||
// Ignore click events that had mousedown on the container but mouseup on the popup
|
||||
handleContainerMousedown(domCache)
|
||||
|
||||
handleModalClick(innerParams, domCache, dismissWith)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {SweetAlertOptions} innerParams
|
||||
* @param {DomCache} domCache
|
||||
* @param {Function} dismissWith
|
||||
*/
|
||||
const handleToastClick = (innerParams, domCache, dismissWith) => {
|
||||
// Closing toast by internal click
|
||||
domCache.popup.onclick = () => {
|
||||
if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {
|
||||
return
|
||||
}
|
||||
dismissWith(DismissReason.close)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {SweetAlertOptions} innerParams
|
||||
* @returns {boolean}
|
||||
*/
|
||||
const isAnyButtonShown = (innerParams) => {
|
||||
return !!(
|
||||
innerParams.showConfirmButton ||
|
||||
innerParams.showDenyButton ||
|
||||
innerParams.showCancelButton ||
|
||||
innerParams.showCloseButton
|
||||
)
|
||||
}
|
||||
|
||||
let ignoreOutsideClick = false
|
||||
|
||||
/**
|
||||
* @param {DomCache} domCache
|
||||
*/
|
||||
const handleModalMousedown = (domCache) => {
|
||||
domCache.popup.onmousedown = () => {
|
||||
domCache.container.onmouseup = function (e) {
|
||||
domCache.container.onmouseup = () => {}
|
||||
// We only check if the mouseup target is the container because usually it doesn't
|
||||
// have any other direct children aside of the popup
|
||||
if (e.target === domCache.container) {
|
||||
ignoreOutsideClick = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {DomCache} domCache
|
||||
*/
|
||||
const handleContainerMousedown = (domCache) => {
|
||||
domCache.container.onmousedown = () => {
|
||||
domCache.popup.onmouseup = function (e) {
|
||||
domCache.popup.onmouseup = () => {}
|
||||
// We also need to check if the mouseup target is a child of the popup
|
||||
if (e.target === domCache.popup || (e.target instanceof HTMLElement && domCache.popup.contains(e.target))) {
|
||||
ignoreOutsideClick = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {SweetAlertOptions} innerParams
|
||||
* @param {DomCache} domCache
|
||||
* @param {Function} dismissWith
|
||||
*/
|
||||
const handleModalClick = (innerParams, domCache, dismissWith) => {
|
||||
domCache.container.onclick = (e) => {
|
||||
if (ignoreOutsideClick) {
|
||||
ignoreOutsideClick = false
|
||||
return
|
||||
}
|
||||
if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {
|
||||
dismissWith(DismissReason.backdrop)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user