UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 10.1 kB
{"version":3,"file":"service.mjs","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"],"names":[],"mappings":"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"}