UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 7.83 kB
{"version":3,"file":"service.mjs","names":[],"sources":["../../../../../../packages/components/loading/src/service.ts"],"sourcesContent":["// @ts-nocheck\nimport { nextTick } from 'vue'\nimport {\n addClass,\n getStyle,\n isClient,\n isString,\n removeClass,\n} from '@element-plus/utils'\nimport { createLoadingComponent } from './loading'\n\nimport type { UseNamespaceReturn, UseZIndexReturn } from '@element-plus/hooks'\nimport type { LoadingInstance } from './loading'\nimport type { LoadingOptionsResolved } from '..'\nimport type { LoadingOptions } from './types'\nimport type { AppContext, CSSProperties } from 'vue'\n\nlet fullscreenInstance: LoadingInstance | undefined = undefined\n\nconst Loading = function (\n options: LoadingOptions = {},\n context?: AppContext | null\n): LoadingInstance {\n if (!isClient) return undefined as any\n\n const resolved = resolveOptions(options)\n\n if (resolved.fullscreen && fullscreenInstance) {\n return fullscreenInstance\n }\n\n const instance = createLoadingComponent(\n {\n ...resolved,\n closed: () => {\n resolved.closed?.()\n if (resolved.fullscreen) fullscreenInstance = undefined\n },\n },\n context ?? Loading._context\n )\n\n addStyle(resolved, resolved.parent, instance)\n addClassList(resolved, resolved.parent, instance)\n\n resolved.parent.vLoadingAddClassList = () =>\n addClassList(resolved, resolved.parent, instance)\n\n /**\n * add loading-number to parent.\n * because if a fullscreen loading is triggered when somewhere\n * a v-loading.body was triggered before and it's parent is\n * document.body which with a margin , the fullscreen loading's\n * destroySelf function will remove 'el-loading-parent--relative',\n * and then the position of v-loading.body will be error.\n */\n let loadingNumber: string | null =\n resolved.parent.getAttribute('loading-number')\n if (!loadingNumber) {\n loadingNumber = '1'\n } else {\n loadingNumber = `${Number.parseInt(loadingNumber) + 1}`\n }\n resolved.parent.setAttribute('loading-number', loadingNumber)\n\n resolved.parent.appendChild(instance.$el)\n\n // after instance render, then modify visible to trigger transition\n nextTick(() => (instance.visible.value = resolved.visible))\n\n if (resolved.fullscreen) {\n fullscreenInstance = instance\n }\n return instance\n}\n\nconst resolveOptions = (options: LoadingOptions): LoadingOptionsResolved => {\n let target: HTMLElement\n if (isString(options.target)) {\n target =\n document.querySelector<HTMLElement>(options.target) ?? document.body\n } else {\n target = options.target || document.body\n }\n return {\n parent: target === document.body || options.body ? document.body : target,\n background: options.background || '',\n svg: options.svg || '',\n svgViewBox: options.svgViewBox || '',\n spinner: options.spinner || false,\n text: options.text || '',\n fullscreen: target === document.body && (options.fullscreen ?? true),\n lock: options.lock ?? false,\n customClass: options.customClass || '',\n visible: options.visible ?? true,\n beforeClose: options.beforeClose,\n closed: options.closed,\n target,\n }\n}\n\nconst addStyle = async (\n options: LoadingOptionsResolved,\n parent: HTMLElement,\n instance: LoadingInstance\n) => {\n // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n const { nextZIndex } =\n ((instance.vm as any).zIndex as UseZIndexReturn) ||\n (instance.vm as any)._.exposed.zIndex\n\n const maskStyle: CSSProperties = {}\n if (options.fullscreen) {\n instance.originalPosition.value = getStyle(document.body, 'position')\n instance.originalOverflow.value = getStyle(document.body, 'overflow')\n maskStyle.zIndex = nextZIndex()\n } else if (options.parent === document.body) {\n instance.originalPosition.value = getStyle(document.body, 'position')\n /**\n * await dom render when visible is true in init,\n * because some component's height maybe 0.\n * e.g. el-table.\n */\n await nextTick()\n for (const property of ['top', 'left']) {\n const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft'\n maskStyle[property] = `${\n (options.target as HTMLElement).getBoundingClientRect()[property] +\n document.body[scroll] +\n document.documentElement[scroll] -\n Number.parseInt(getStyle(document.body, `margin-${property}`), 10)\n }px`\n }\n for (const property of ['height', 'width']) {\n maskStyle[property] = `${\n (options.target as HTMLElement).getBoundingClientRect()[property]\n }px`\n }\n } else {\n instance.originalPosition.value = getStyle(parent, 'position')\n }\n for (const [key, value] of Object.entries(maskStyle)) {\n instance.$el.style[key] = value\n }\n}\n\nconst addClassList = (\n options: LoadingOptions,\n parent: HTMLElement,\n instance: LoadingInstance\n) => {\n // Compatible with the instance data format of vue@3.2.12 and earlier versions #12351\n const ns =\n ((instance.vm as any).ns as UseNamespaceReturn) ||\n (instance.vm as any)._.exposed.ns\n\n if (\n !['absolute', 'fixed', 'sticky'].includes(instance.originalPosition.value)\n ) {\n addClass(parent, ns.bm('parent', 'relative'))\n } else {\n removeClass(parent, ns.bm('parent', 'relative'))\n }\n if (options.fullscreen && options.lock) {\n addClass(parent, ns.bm('parent', 'hidden'))\n } else {\n removeClass(parent, ns.bm('parent', 'hidden'))\n }\n}\n\nLoading._context = null as AppContext | null\nexport default Loading\n"],"mappings":"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"}