UNPKG

doc-fui-ds

Version:

Doc

105 lines (96 loc) 2.79 kB
/* istanbul ignore file */ import * as dom from './dom/index.js' import { swalClasses } from '../utils/classes.js' // Fix iOS scrolling http://stackoverflow.com/q/39626302 export const iOSfix = () => { const iOS = // @ts-ignore (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) if (iOS && !dom.hasClass(document.body, swalClasses.iosfix)) { const offset = document.body.scrollTop document.body.style.top = `${offset * -1}px` dom.addClass(document.body, swalClasses.iosfix) lockBodyScroll() addBottomPaddingForTallPopups() } } /** * https://github.com/sweetalert2/sweetalert2/issues/1948 */ const addBottomPaddingForTallPopups = () => { const ua = navigator.userAgent const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i) const webkit = !!ua.match(/WebKit/i) const iOSSafari = iOS && webkit && !ua.match(/CriOS/i) if (iOSSafari) { const bottomPanelHeight = 44 if (dom.getPopup().scrollHeight > window.innerHeight - bottomPanelHeight) { dom.getContainer().style.paddingBottom = `${bottomPanelHeight}px` } } } /** * https://github.com/sweetalert2/sweetalert2/issues/1246 */ const lockBodyScroll = () => { const container = dom.getContainer() let preventTouchMove container.ontouchstart = (e) => { preventTouchMove = shouldPreventTouchMove(e) } container.ontouchmove = (e) => { if (preventTouchMove) { e.preventDefault() e.stopPropagation() } } } const shouldPreventTouchMove = (event) => { const target = event.target const container = dom.getContainer() if (isStylus(event) || isZoom(event)) { return false } if (target === container) { return true } if ( !dom.isScrollable(container) && target.tagName !== 'INPUT' && // #1603 target.tagName !== 'TEXTAREA' && // #2266 !( dom.isScrollable(dom.getHtmlContainer()) && // #1944 dom.getHtmlContainer().contains(target) ) ) { return true } return false } /** * https://github.com/sweetalert2/sweetalert2/issues/1786 * * @param {*} event * @returns {boolean} */ const isStylus = (event) => { return event.touches && event.touches.length && event.touches[0].touchType === 'stylus' } /** * https://github.com/sweetalert2/sweetalert2/issues/1891 * * @param {TouchEvent} event * @returns {boolean} */ const isZoom = (event) => { return event.touches && event.touches.length > 1 } export const undoIOSfix = () => { if (dom.hasClass(document.body, swalClasses.iosfix)) { const offset = parseInt(document.body.style.top, 10) dom.removeClass(document.body, swalClasses.iosfix) document.body.style.top = '' document.body.scrollTop = offset * -1 } }