sweetalert2
Version:
A beautiful, responsive, customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes, supported fork of sweetalert
158 lines (133 loc) • 4.66 kB
JavaScript
import { swalClasses } from './classes.js'
import { warn } from './utils.js'
import * as dom from './dom/index'
import sweetAlert from '../sweetalert2'
import defaultInputValidators from './defaultInputValidators'
/**
* Set type, text and actions on popup
*
* @param params
* @returns {boolean}
*/
export default function setParameters (params) {
// Use default `inputValidator` for supported input types if not provided
if (!params.inputValidator) {
Object.keys(defaultInputValidators).forEach((key) => {
if (params.input === key) {
params.inputValidator = params.expectRejections ? defaultInputValidators[key] : sweetAlert.adaptInputValidator(defaultInputValidators[key])
}
})
}
// Determine if the custom target element is valid
if (
!params.target ||
(typeof params.target === 'string' && !document.querySelector(params.target)) ||
(typeof params.target !== 'string' && !params.target.appendChild)
) {
warn('Target parameter is not valid, defaulting to "body"')
params.target = 'body'
}
let popup
const oldPopup = dom.getPopup()
let targetElement = typeof params.target === 'string' ? document.querySelector(params.target) : params.target
// If the model target has changed, refresh the popup
if (oldPopup && targetElement && oldPopup.parentNode !== targetElement.parentNode) {
popup = dom.init(params)
} else {
popup = oldPopup || dom.init(params)
}
// Set popup width
if (params.width) {
popup.style.width = (typeof params.width === 'number') ? params.width + 'px' : params.width
}
// Set popup padding
if (params.padding) {
popup.style.padding = (typeof params.padding === 'number') ? params.padding + 'px' : params.padding
}
// Set popup background
if (params.background) {
popup.style.background = params.background
}
const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color')
const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix')
for (let i = 0; i < successIconParts.length; i++) {
successIconParts[i].style.backgroundColor = popupBackgroundColor
}
const container = dom.getContainer()
const closeButton = dom.getCloseButton()
const footer = dom.getFooter()
// Title
dom.renderTitle(params)
// Content
dom.renderContent(params)
// Backdrop
if (typeof params.backdrop === 'string') {
dom.getContainer().style.background = params.backdrop
} else if (!params.backdrop) {
dom.addClass([document.documentElement, document.body], swalClasses['no-backdrop'])
}
if (!params.backdrop && params.allowOutsideClick) {
warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`')
}
// Position
if (params.position in swalClasses) {
dom.addClass(container, swalClasses[params.position])
} else {
warn('The "position" parameter is not valid, defaulting to "center"')
dom.addClass(container, swalClasses.center)
}
// Grow
if (params.grow && typeof params.grow === 'string') {
let growClass = 'grow-' + params.grow
if (growClass in swalClasses) {
dom.addClass(container, swalClasses[growClass])
}
}
// Animation
if (typeof params.animation === 'function') {
params.animation = params.animation.call()
}
// Close button
if (params.showCloseButton) {
closeButton.setAttribute('aria-label', params.closeButtonAriaLabel)
dom.show(closeButton)
} else {
dom.hide(closeButton)
}
// Default Class
popup.className = swalClasses.popup
if (params.toast) {
dom.addClass([document.documentElement, document.body], swalClasses['toast-shown'])
dom.addClass(popup, swalClasses.toast)
} else {
dom.addClass(popup, swalClasses.modal)
}
// Custom Class
if (params.customClass) {
dom.addClass(popup, params.customClass)
}
// Progress steps
dom.renderProgressSteps(params)
// Icon
dom.renderIcon(params)
// Image
dom.renderImage(params)
// Actions (buttons)
dom.renderActions(params)
// Footer
dom.parseHtmlToContainer(params.footer, footer)
// CSS animation
if (params.animation === true) {
dom.removeClass(popup, swalClasses.noanimation)
} else {
dom.addClass(popup, swalClasses.noanimation)
}
// showLoaderOnConfirm && preConfirm
if (params.showLoaderOnConfirm && !params.preConfirm) {
warn(
'showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' +
'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' +
'https://sweetalert2.github.io/#ajax-request'
)
}
}