You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
12 KiB
1 line
12 KiB
{"version":3,"file":"popup-manager.mjs","sources":["../../../../packages/utils/popup-manager.ts"],"sourcesContent":["import { getCurrentInstance } from 'vue'\nimport { isClient } from '@vueuse/core'\nimport { useGlobalConfig } from '@element-plus/hooks'\nimport { addClass, removeClass, on } from './dom'\nimport { EVENT_CODE } from './aria'\nimport type { Ref } from 'vue'\n\ninterface Instance {\n closeOnClickModal: Ref<boolean>\n closeOnPressEscape: Ref<boolean>\n close: () => void\n handleClose?: () => void\n handleAction?: (action: string) => void\n}\n\ntype StackFrame = { id: string; zIndex: number; modalClass: string }\n\ninterface PopupManager {\n getInstance: (id: string) => Instance\n zIndex: number\n globalInitialZIndex: number\n getInitialZIndex: () => number\n modalDom?: HTMLElement\n modalFade: boolean\n modalStack: StackFrame[]\n nextZIndex: () => number\n register: (id: string, instance: Instance) => void\n deregister: (id: string) => void\n doOnModalClick: () => void\n openModal: (\n id: string,\n zIndex: number,\n dom: HTMLElement,\n modalClass: string,\n modalFade: boolean\n ) => void\n closeModal: (id: string) => void\n}\n\nconst onTouchMove = (e: Event) => {\n e.preventDefault()\n e.stopPropagation()\n}\n\nconst onModalClick = () => {\n PopupManager?.doOnModalClick()\n}\n\nlet hasModal = false\n\nconst getModal = function (): HTMLElement {\n if (!isClient) return undefined as any\n let modalDom = PopupManager.modalDom\n if (modalDom) {\n hasModal = true\n } else {\n hasModal = false\n modalDom = document.createElement('div')\n PopupManager.modalDom = modalDom\n\n on(modalDom, 'touchmove', onTouchMove)\n on(modalDom, 'click', onModalClick)\n }\n\n return modalDom\n}\n\nconst instances = {}\n\nexport const PopupManager: PopupManager = {\n modalFade: true,\n modalDom: undefined,\n globalInitialZIndex: 2000,\n zIndex: 0,\n\n getInitialZIndex() {\n if (!getCurrentInstance()) return this.globalInitialZIndex\n return useGlobalConfig('zIndex').value ?? this.globalInitialZIndex\n },\n\n getInstance(id) {\n return instances[id]\n },\n\n register(id, instance) {\n if (id && instance) {\n instances[id] = instance\n }\n },\n\n deregister(id) {\n if (id) {\n instances[id] = null\n delete instances[id]\n }\n },\n\n nextZIndex() {\n return this.getInitialZIndex() + ++this.zIndex\n },\n\n modalStack: [],\n\n doOnModalClick() {\n const topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1]\n if (!topItem) return\n\n const instance = PopupManager.getInstance(topItem.id)\n if (instance && instance.closeOnClickModal.value) {\n instance.close()\n }\n },\n\n openModal(id, zIndex, dom, modalClass, modalFade) {\n if (!isClient) return\n if (!id || zIndex === undefined) return\n this.modalFade = modalFade\n\n const modalStack = this.modalStack\n\n for (let i = 0, j = modalStack.length; i < j; i++) {\n const item = modalStack[i]\n if (item.id === id) {\n return\n }\n }\n\n const modalDom = getModal()\n\n addClass(modalDom, 'v-modal')\n if (this.modalFade && !hasModal) {\n addClass(modalDom, 'v-modal-enter')\n }\n if (modalClass) {\n const classArr = modalClass.trim().split(/\\s+/)\n classArr.forEach((item) => addClass(modalDom, item))\n }\n setTimeout(() => {\n removeClass(modalDom, 'v-modal-enter')\n }, 200)\n\n if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {\n dom.parentNode.appendChild(modalDom)\n } else {\n document.body.appendChild(modalDom)\n }\n\n if (zIndex) {\n modalDom.style.zIndex = String(zIndex)\n }\n modalDom.tabIndex = 0\n modalDom.style.display = ''\n\n this.modalStack.push({ id, zIndex, modalClass })\n },\n\n closeModal(id) {\n const modalStack = this.modalStack\n const modalDom = getModal()\n\n if (modalStack.length > 0) {\n const topItem = modalStack[modalStack.length - 1]\n if (topItem.id === id) {\n if (topItem.modalClass) {\n const classArr = topItem.modalClass.trim().split(/\\s+/)\n classArr.forEach((item) => removeClass(modalDom, item))\n }\n\n modalStack.pop()\n if (modalStack.length > 0) {\n modalDom.style.zIndex = `${modalStack[modalStack.length - 1].zIndex}`\n }\n } else {\n for (let i = modalStack.length - 1; i >= 0; i--) {\n if (modalStack[i].id === id) {\n modalStack.splice(i, 1)\n break\n }\n }\n }\n }\n\n if (modalStack.length === 0) {\n if (this.modalFade) {\n addClass(modalDom, 'v-modal-leave')\n }\n setTimeout(() => {\n if (modalStack.length === 0) {\n if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom)\n modalDom.style.display = 'none'\n // off(modalDom, 'touchmove', onTouchMove)\n // off(modalDom, 'click', onModalClick)\n PopupManager.modalDom = undefined\n }\n removeClass(modalDom, 'v-modal-leave')\n }, 200)\n }\n },\n}\n\nconst getTopPopup = function () {\n if (!isClient) return\n if (PopupManager.modalStack.length > 0) {\n const topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1]\n if (!topPopup) return\n const instance = PopupManager.getInstance(topPopup.id)\n\n return instance\n }\n}\n\nif (isClient) {\n // handle `esc` key when the popup is shown\n window.addEventListener('keydown', function (event: KeyboardEvent) {\n if (event.code === EVENT_CODE.esc) {\n const topPopup = getTopPopup()\n\n if (topPopup && topPopup.closeOnPressEscape.value) {\n topPopup.handleClose\n ? topPopup.handleClose()\n : topPopup.handleAction\n ? topPopup.handleAction('cancel')\n : topPopup.close()\n }\n }\n })\n}\n"],"names":[],"mappings":"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"} |