UNPKG

wot-design

Version:

Mobile UI components built on vue.js

86 lines (67 loc) 1.73 kB
"use strict"; 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; }); } } }