wot-design
Version:
Mobile UI components built on vue.js
86 lines (67 loc) • 1.73 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.updateModal = updateModal;
exports.openModal = openModal;
exports.closeModal = closeModal;
var _vue = _interopRequireDefault(require("vue"));
var _context = require("./context");
var _modal = _interopRequireDefault(require("wot-design/lib/modal"));
var modal;
function onClickModal() {
var topVm = _context.context.getTop();
if (topVm) {
var vm = topVm.vm;
vm.$emit('click-modal');
if (vm.closeOnClickModal) {
vm.close();
}
}
}
var ModalInstance = _vue.default.extend(_modal.default);
function updateModal() {
if (!modal) {
modal = new ModalInstance({
el: document.createElement('div')
});
modal.$on('click-modal', onClickModal);
document.body.appendChild(modal.$el);
}
var topVm = _context.context.getTop();
if (topVm) {
var vm = topVm.vm,
config = topVm.config;
var el = vm.$el;
if (el && el.parentNode) {
el.parentNode.insertBefore(modal.$el, el);
}
Object.assign(modal, config, {
show: true
});
} else {
modal.show = false;
}
}
function openModal(vm, config) {
if (!_context.context.stack.some(function (item) {
return item === vm;
})) {
_context.context.stack.push({
vm: vm,
config: config
});
updateModal();
}
}
function closeModal(vm) {
if (_context.context.stack.length) {
if (_context.context.getTop().vm === vm) {
_context.context.stack.pop();
updateModal();
} else {
_context.context.stack = _context.context.stack.filter(function (item) {
return item.vm !== vm;
});
}
}
}