UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

110 lines (105 loc) 4.12 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var shared = require('@vue/shared'); var assist = require('../../utils/assist.js'); var createLoadingComponent = require('./createLoadingComponent.js'); var helpers = require('../../utils/helpers.js'); var isServer = require('../../utils/isServer.js'); let fullscreenInstance = void 0; const addStyle = async (options, parent, instance) => { const { nextZIndex } = helpers.useZIndex(); const maskStyle = {}; if (options.fullscreen) { instance.originalPosition.value = assist.getStyle(document.body, "position"); instance.originalOverflow.value = assist.getStyle(document.body, "overflow"); maskStyle.zIndex = nextZIndex(); } else if (options.parent === document.body) { instance.originalPosition.value = assist.getStyle(document.body, "position"); await vue.nextTick(); for (const property of ["top", "left"]) { const scroll = property === "top" ? "scrollTop" : "scrollLeft"; const position = options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(assist.getStyle(document.body, `margin-${property}`), 10); maskStyle[property] = `${position}px`; } for (const property of ["height", "width"]) { maskStyle[property] = `${options.target.getBoundingClientRect()[property]}px`; } } else { instance.originalPosition.value = assist.getStyle(parent, "position"); } for (const [key, value] of Object.entries(maskStyle)) { instance.$el.style[key] = value; } }; const addClassList = (options, parent, instance) => { if (instance.originalPosition.value !== "absolute" && instance.originalPosition.value !== "fixed") { assist.addClass(parent, "ivue-loading-parent--relative"); } else { assist.removeClass(parent, "ivue-loading-parent--relative"); } if (options.fullscreen && options.lock) { assist.addClass(parent, "ivue-loading-parent--hidden"); } else { assist.removeClass(parent, "ivue-loading-parent--hidden"); } }; const resolveOptions = (options) => { var _a, _b, _c, _d; let target; if (shared.isString(options.target)) { target = (_a = document.querySelector(options.target)) != null ? _a : document.body; } else { target = options.target || document.body; } return { parent: target === document.body || options.body ? document.body : target, background: options.background || "", text: options.text || "", fullscreen: target === document.body && ((_b = options.fullscreen) != null ? _b : true), lock: (_c = options.lock) != null ? _c : false, customClass: options.customClass || "", visible: (_d = options.visible) != null ? _d : true, iconClass: options.iconClass, iconText: options.iconText, target, loadingSpinner: options.loadingSpinner }; }; const Loading = function(options = {}) { if (isServer["default"]) { return void 0; } const resolved = resolveOptions(options); if (resolved.fullscreen && fullscreenInstance) { return fullscreenInstance; } const instance = createLoadingComponent.createLoadingComponent({ ...resolved, close: () => { var _a; (_a = resolved.close) == null ? void 0 : _a.call(resolved); if (resolved.fullscreen) { fullscreenInstance = void 0; } } }); addStyle(resolved, resolved.parent, instance); addClassList(resolved, resolved.parent, instance); resolved.parent.LoadingAddClassList = () => addClassList(resolved, resolved.parent, instance); let loadingNumber = resolved.parent.getAttribute("loading-number"); if (!loadingNumber) { loadingNumber = "1"; } else { loadingNumber = `${Number.parseInt(loadingNumber) + 1}`; } resolved.parent.setAttribute("loading-number", loadingNumber); resolved.parent.appendChild(instance.$el); vue.nextTick(() => instance.visible.value = resolved.visible); if (resolved.fullscreen) { fullscreenInstance = instance; } return instance; }; exports["default"] = Loading; //# sourceMappingURL=loading.js.map