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.

121 lines
3.4 KiB

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var dom = require('../../../utils/dom.js');
function createLoadingComponent(options) {
let afterLeaveTimer;
const afterLeaveFlag = vue.ref(false);
const data = vue.reactive({
...options,
originalPosition: "",
originalOverflow: "",
visible: false
});
function setText(text) {
data.text = text;
}
function destroySelf() {
const target = data.parent;
if (!target.vLoadingAddClassList) {
let loadingNumber = target.getAttribute("loading-number");
loadingNumber = Number.parseInt(loadingNumber) - 1;
if (!loadingNumber) {
dom.removeClass(target, "el-loading-parent--relative");
target.removeAttribute("loading-number");
} else {
target.setAttribute("loading-number", loadingNumber.toString());
}
dom.removeClass(target, "el-loading-parent--hidden");
}
remvoeElLoadingChild();
}
function remvoeElLoadingChild() {
var _a, _b;
(_b = (_a = vm.$el) == null ? void 0 : _a.parentNode) == null ? void 0 : _b.removeChild(vm.$el);
}
function close() {
var _a;
if (options.beforeClose && !options.beforeClose())
return;
const target = data.parent;
target.vLoadingAddClassList = void 0;
afterLeaveFlag.value = true;
clearTimeout(afterLeaveTimer);
afterLeaveTimer = window.setTimeout(() => {
if (afterLeaveFlag.value) {
afterLeaveFlag.value = false;
destroySelf();
}
}, 400);
data.visible = false;
(_a = options.closed) == null ? void 0 : _a.call(options);
}
function handleAfterLeave() {
if (!afterLeaveFlag.value)
return;
afterLeaveFlag.value = false;
destroySelf();
}
const elLoadingComponent = {
name: "ElLoading",
setup() {
return () => {
const svg = data.spinner || data.svg;
const spinner = vue.h("svg", {
class: "circular",
viewBox: data.svgViewBox ? data.svgViewBox : "25 25 50 50",
...svg ? { innerHTML: svg } : {}
}, [
vue.h("circle", {
class: "path",
cx: "50",
cy: "50",
r: "20",
fill: "none"
})
]);
const spinnerText = data.text ? vue.h("p", { class: "el-loading-text" }, [data.text]) : void 0;
return vue.h(vue.Transition, {
name: "el-loading-fade",
onAfterLeave: handleAfterLeave
}, {
default: vue.withCtx(() => [
vue.withDirectives(vue.createVNode("div", {
style: {
backgroundColor: data.background || ""
},
class: [
"el-loading-mask",
data.customClass,
data.fullscreen ? "is-fullscreen" : ""
]
}, [
vue.h("div", {
class: "el-loading-spinner"
}, [spinner, spinnerText])
]), [[vue.vShow, data.visible]])
])
});
};
}
};
const vm = vue.createApp(elLoadingComponent).mount(document.createElement("div"));
return {
...vue.toRefs(data),
setText,
remvoeElLoadingChild,
close,
handleAfterLeave,
vm,
get $el() {
return vm.$el;
}
};
}
exports.createLoadingComponent = createLoadingComponent;
//# sourceMappingURL=loading.js.map