ivue-material-plus
Version:
A high quality UI components Library with Vue.js
110 lines (105 loc) • 4.12 kB
JavaScript
;
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