UNPKG

@obatfr/sweetalert2

Version:

A beautiful, responsive, customizable and accessible (WAI-ARIA) replacement for JavaScript's popup boxes, supported fork of sweetalert

87 lines (73 loc) 2.55 kB
import * as dom from './dom/index.js' import { swalClasses } from './classes.js' import { fixScrollbar } from './scrollbarFix.js' import { iOSfix } from './iosFix.js' import { IEfix } from './ieFix.js' import { setAriaHidden } from './aria.js' import globalState from '../globalState.js' /** * Open popup, add necessary classes and styles, fix scrollbar * * @param {Array} params */ export const openPopup = (params) => { const container = dom.getContainer() const popup = dom.getPopup() if (typeof params.onBeforeOpen === 'function') { params.onBeforeOpen(popup) } const bodyStyles = window.getComputedStyle(document.body) const initialBodyOverflow = bodyStyles.overflowY addClasses(container, popup, params) // scrolling is 'hidden' until animation is done, after that 'auto' setScrollingVisibility(container, popup) if (dom.isModal()) { fixScrollContainer(container, params.scrollbarPadding, initialBodyOverflow) setAriaHidden() } if (!dom.isToast() && !globalState.previousActiveElement) { globalState.previousActiveElement = document.activeElement } if (typeof params.onOpen === 'function') { setTimeout(() => params.onOpen(popup)) } dom.removeClass(container, swalClasses['no-transition']) } function swalOpenAnimationFinished (event) { const popup = dom.getPopup() if (event.target !== popup) { return } const container = dom.getContainer() popup.removeEventListener(dom.animationEndEvent, swalOpenAnimationFinished) container.style.overflowY = 'auto' } const setScrollingVisibility = (container, popup) => { if (dom.animationEndEvent && dom.hasCssAnimation(popup)) { container.style.overflowY = 'hidden' popup.addEventListener(dom.animationEndEvent, swalOpenAnimationFinished) } else { container.style.overflowY = 'auto' } } const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { iOSfix() IEfix() if (scrollbarPadding && initialBodyOverflow !== 'hidden') { fixScrollbar() } // sweetalert2/issues/1247 setTimeout(() => { container.scrollTop = 0 }) } const addClasses = (container, popup, params) => { dom.addClass(container, params.showClass.backdrop) dom.show(popup) // Animate popup right after showing it dom.addClass(popup, params.showClass.popup) dom.addClass([document.documentElement, document.body], swalClasses.shown) if (params.heightAuto && params.backdrop && !params.toast) { dom.addClass([document.documentElement, document.body], swalClasses['height-auto']) } }