UNPKG

@mdsfe/mds-ui

Version:

A set of enterprise-class Vue UI components.

1,406 lines (1,212 loc) 40.5 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("vue"), require("./icon"), require("./transition"), require("./button"), require("./_mixin/emitter")); else if(typeof define === 'function' && define.amd) define(["vue", "./icon", "./transition", "./button", "./_mixin/emitter"], factory); else { var a = typeof exports === 'object' ? factory(require("vue"), require("./icon"), require("./transition"), require("./button"), require("./_mixin/emitter")) : factory(root["Vue"], root["./icon"], root["./transition"], root["./button"], root["./_mixin/emitter"]); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(window, function(__WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__7__, __WEBPACK_EXTERNAL_MODULE__12__, __WEBPACK_EXTERNAL_MODULE__13__, __WEBPACK_EXTERNAL_MODULE__14__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/dist/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 132); /******/ }) /************************************************************************/ /******/ ({ /***/ 0: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; }); /* globals __VUE_SSR_CONTEXT__ */ // IMPORTANT: Do NOT use ES2015 features in this file (except for modules). // This module is a runtime utility for cleaner component module output and will // be included in the final webpack user bundle. function normalizeComponent ( scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier, /* server only */ shadowMode /* vue-cli only */ ) { // Vue.extend constructor export interop var options = typeof scriptExports === 'function' ? scriptExports.options : scriptExports // render functions if (render) { options.render = render options.staticRenderFns = staticRenderFns options._compiled = true } // functional template if (functionalTemplate) { options.functional = true } // scopedId if (scopeId) { options._scopeId = 'data-v-' + scopeId } var hook if (moduleIdentifier) { // server build hook = function (context) { // 2.3 injection context = context || // cached call (this.$vnode && this.$vnode.ssrContext) || // stateful (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional // 2.2 with runInNewContext: true if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { context = __VUE_SSR_CONTEXT__ } // inject component styles if (injectStyles) { injectStyles.call(this, context) } // register component module identifier for async chunk inferrence if (context && context._registeredComponents) { context._registeredComponents.add(moduleIdentifier) } } // used by ssr in case component is cached and beforeCreate // never gets called options._ssrRegister = hook } else if (injectStyles) { hook = shadowMode ? function () { injectStyles.call( this, (options.functional ? this.parent : this).$root.$options.shadowRoot ) } : injectStyles } if (hook) { if (options.functional) { // for template-only hot-reload because in that case the render fn doesn't // go through the normalizer options._injectStyles = hook // register for functional component in vue file var originalRender = options.render options.render = function renderWithStyleInjection (h, context) { hook.call(context) return originalRender(h, context) } } else { // inject component registration as beforeCreate hook var existing = options.beforeCreate options.beforeCreate = existing ? [].concat(existing, hook) : [hook] } } return { exports: scriptExports, options: options } } /***/ }), /***/ 1: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return on; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return off; }); /* unused harmony export once */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return hasClass; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addClass; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return removeClass; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getStyle; }); /* unused harmony export setStyle */ /* unused harmony export isScroll */ /* unused harmony export getScrollContainer */ /* unused harmony export isInContainer */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return merge; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getScrollBarWidth; }); /* harmony import */ var babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10); /* harmony import */ var babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__); /* eslint-disable */ var isServer = vue__WEBPACK_IMPORTED_MODULE_1___default.a.prototype.$isServer; var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; var MOZ_HACK_REGEXP = /^moz([A-Z])/; var ieVersion = isServer ? 0 : Number(document.documentMode); /* istanbul ignore next */ var trim = function trim(string) { return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ''); }; /* istanbul ignore next */ var camelCase = function camelCase(name) { return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { return offset ? letter.toUpperCase() : letter; }).replace(MOZ_HACK_REGEXP, 'Moz$1'); }; /* istanbul ignore next */ var on = function () { if (!isServer && document.addEventListener) { return function (element, event, handler) { if (element && event && handler) { element.addEventListener(event, handler, false); } }; } else { return function (element, event, handler) { if (element && event && handler) { element.attachEvent('on' + event, handler); } }; } }(); /* istanbul ignore next */ var off = function () { if (!isServer && document.removeEventListener) { return function (element, event, handler) { if (element && event) { element.removeEventListener(event, handler, false); } }; } else { return function (element, event, handler) { if (element && event) { element.detachEvent('on' + event, handler); } }; } }(); /* istanbul ignore next */ var once = function once(el, event, fn) { var listener = function listener() { if (fn) { fn.apply(this, arguments); } off(el, event, listener); }; on(el, event, listener); }; /* istanbul ignore next */ function hasClass(el, cls) { if (!el || !cls) return false; if (cls.indexOf(' ') !== -1) { throw new Error('className should not contain space.'); } if (el.classList) { return el.classList.contains(cls); } else { return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1; } } /* istanbul ignore next */ function addClass(el, cls) { if (!el) return; var curClass = el.className; var classes = (cls || '').split(' '); for (var i = 0, j = classes.length; i < j; i++) { var clsName = classes[i]; if (!clsName) continue; if (el.classList) { el.classList.add(clsName); } else if (!hasClass(el, clsName)) { curClass += ' ' + clsName; } } if (!el.classList) { el.setAttribute('class', curClass); } } /* istanbul ignore next */ function removeClass(el, cls) { if (!el || !cls) return; var classes = cls.split(' '); var curClass = ' ' + el.className + ' '; for (var i = 0, j = classes.length; i < j; i++) { var clsName = classes[i]; if (!clsName) continue; if (el.classList) { el.classList.remove(clsName); } else if (hasClass(el, clsName)) { curClass = curClass.replace(' ' + clsName + ' ', ' '); } } if (!el.classList) { el.setAttribute('class', trim(curClass)); } } /* istanbul ignore next */ var getStyle = ieVersion < 9 ? function (element, styleName) { if (isServer) return; if (!element || !styleName) return null; styleName = camelCase(styleName); if (styleName === 'float') { styleName = 'styleFloat'; } try { switch (styleName) { case 'opacity': try { return element.filters.item('alpha').opacity / 100; } catch (e) { return 1.0; } default: return element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null; } } catch (e) { return element.style[styleName]; } } : function (element, styleName) { if (isServer) return; if (!element || !styleName) return null; styleName = camelCase(styleName); if (styleName === 'float') { styleName = 'cssFloat'; } try { var computed = document.defaultView.getComputedStyle(element, ''); return element.style[styleName] || computed ? computed[styleName] : null; } catch (e) { return element.style[styleName]; } }; /* istanbul ignore next */ function setStyle(element, styleName, value) { if (!element || !styleName) return; if ((typeof styleName === 'undefined' ? 'undefined' : babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(styleName)) === 'object') { for (var prop in styleName) { if (styleName.hasOwnProperty(prop)) { setStyle(element, prop, styleName[prop]); } } } else { styleName = camelCase(styleName); if (styleName === 'opacity' && ieVersion < 9) { element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')'; } else { element.style[styleName] = value; } } } var isScroll = function isScroll(el, vertical) { if (isServer) return; var determinedDirection = vertical !== null && vertical !== undefined; var overflow = determinedDirection ? vertical ? getStyle(el, 'overflow-y') : getStyle(el, 'overflow-x') : getStyle(el, 'overflow'); return overflow.match(/(scroll|auto|overlay)/); }; var getScrollContainer = function getScrollContainer(el, vertical) { if (isServer) return; var parent = el; while (parent) { if ([window, document, document.documentElement].includes(parent)) { return window; } if (isScroll(parent, vertical)) { return parent; } parent = parent.parentNode; } return parent; }; var isInContainer = function isInContainer(el, container) { if (isServer || !el || !container) return false; var elRect = el.getBoundingClientRect(); var containerRect = void 0; if ([window, document, document.documentElement, null, undefined].includes(container)) { containerRect = { top: 0, right: window.innerWidth, bottom: window.innerHeight, left: 0 }; } else { containerRect = container.getBoundingClientRect(); } return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right; }; function merge(target) { for (var i = 1, j = arguments.length; i < j; i++) { var source = arguments[i] || {}; for (var prop in source) { if (source.hasOwnProperty(prop)) { var value = source[prop]; if (value !== undefined) { target[prop] = value; } } } } return target; } var scrollBarWidth = void 0; function getScrollBarWidth() { if (vue__WEBPACK_IMPORTED_MODULE_1___default.a.prototype.$isServer) return 0; if (scrollBarWidth !== undefined) return scrollBarWidth; var outer = document.createElement('div'); outer.className = 'el-scrollbar__wrap'; outer.style.visibility = 'hidden'; outer.style.width = '100px'; outer.style.position = 'absolute'; outer.style.top = '-9999px'; document.body.appendChild(outer); var widthNoScroll = outer.offsetWidth; outer.style.overflow = 'scroll'; var inner = document.createElement('div'); inner.style.width = '100%'; outer.appendChild(inner); var widthWithScroll = inner.offsetWidth; outer.parentNode.removeChild(outer); scrollBarWidth = widthNoScroll - widthWithScroll; return scrollBarWidth; } /***/ }), /***/ 10: /***/ (function(module, exports) { module.exports = require("babel-runtime/helpers/typeof"); /***/ }), /***/ 12: /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__12__; /***/ }), /***/ 13: /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__13__; /***/ }), /***/ 132: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./components/style/index.less var style = __webpack_require__(142); // EXTERNAL MODULE: ./components/drawer/style/index.less var drawer_style = __webpack_require__(257); // EXTERNAL MODULE: ./components/_util/loaders/loaders.less var loaders = __webpack_require__(259); // CONCATENATED MODULE: ./components/drawer/style/index.js // CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/drawer/drawer.vue?vue&type=template&id=1bd19f24& var render = function () { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c( "div", { directives: [ { name: "show", rawName: "v-show", value: _vm.visibility, expression: "visibility", }, ], ref: "root", class: _vm.contentClasses, }, [ _c("div", { directives: [ { name: "show", rawName: "v-show", value: _vm.mask, expression: "mask", }, ], class: _vm.prefixClsMask, on: { click: function (e) { return _vm.onMaskClick(e) }, }, }), _c( "div", { class: _vm.prefixClsWrap, attrs: { role: "document" }, on: { click: function (e) { return _vm.onMaskClick(e) }, }, }, [ _c( "div", { class: [_vm.prefixCls, _vm.prefixCls + "-" + _vm.position], style: _vm.isHorizontal ? "width: " + _vm.size : "height: " + _vm.size, }, [ _vm.loading ? _c( "div", { class: _vm.prefixCls + "-loading", on: { click: function ($event) { $event.stopPropagation() }, }, }, [_c("div", { staticClass: "ball-spin-fade-loader" })] ) : _vm._e(), _c( "div", { class: _vm.prefixClsHeader }, [ _c( "div", { class: _vm.prefixClsTitle }, [_vm._t("title", [_vm._v(_vm._s(_vm.title))])], 2 ), _c("mds-icon", { directives: [ { name: "show", rawName: "v-show", value: _vm.showClose, expression: "showClose", }, ], class: _vm.prefixClsClose, attrs: { type: "line-close" }, nativeOn: { click: function ($event) { return _vm.handleClose($event) }, }, }), ], 1 ), _c("div", { class: _vm.prefixClsBody }, [_vm._t("default")], 2), _vm.$slots.footer ? _c( "div", { staticClass: "mds-drawer-footer" }, [_vm._t("footer")], 2 ) : _vm._e(), ] ), ] ), ] ) } var staticRenderFns = [] render._withStripped = true // CONCATENATED MODULE: ./components/drawer/drawer.vue?vue&type=template&id=1bd19f24& // EXTERNAL MODULE: external "./icon" var external_icon_ = __webpack_require__(7); var external_icon_default = /*#__PURE__*/__webpack_require__.n(external_icon_); // EXTERNAL MODULE: external "./button" var external_button_ = __webpack_require__(13); var external_button_default = /*#__PURE__*/__webpack_require__.n(external_button_); // EXTERNAL MODULE: external "./transition" var external_transition_ = __webpack_require__(12); var external_transition_default = /*#__PURE__*/__webpack_require__.n(external_transition_); // EXTERNAL MODULE: ./components/_util/_popper/popup/popup-main.js var popup_main = __webpack_require__(15); // EXTERNAL MODULE: external "./_mixin/emitter" var emitter_ = __webpack_require__(14); var emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_); // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./components/drawer/drawer.vue?vue&type=script&lang=js& // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // var PREFIXCLS = 'mds-drawer'; /* harmony default export */ var drawervue_type_script_lang_js_ = ({ name: 'MdsDrawer', mixins: [popup_main["b" /* default */], emitter_default.a], components: { MdsIcon: external_icon_default.a, MdsButton: external_button_default.a, MdsTransition: external_transition_default.a }, props: { visibility: { type: Boolean, default: false }, mask: { type: Boolean, default: true }, maskClosable: { type: Boolean, default: false }, size: { type: String, default: '30%' }, position: { type: String, default: 'right', validator: function validator(val) { return ['top', 'right', 'bottom', 'left'].indexOf(val) !== -1; } }, showClose: { type: Boolean, default: true }, title: { type: String }, appendToBody: { type: Boolean, default: false }, beforeClose: { type: Function }, loading: { type: Boolean, default: function _default() { return false; } }, customClass: String, preFocus: { type: Boolean, default: true } }, data: function data() { return { prefixCls: PREFIXCLS, prefixClsContainer: PREFIXCLS + '-container', prefixClsMask: PREFIXCLS + '-mask', prefixClsWrap: PREFIXCLS + '-wrap', prefixClsContent: PREFIXCLS + '-content', prefixClsClose: PREFIXCLS + '-close', prefixClsHeader: PREFIXCLS + '-header', prefixClsIcon: PREFIXCLS + '-icon', prefixClsTitle: PREFIXCLS + '-title', prefixClsBody: PREFIXCLS + '-body' }; }, watch: { loading: { handler: function handler() { this.$nextTick(function () { window.loadersFn && window.loadersFn('ball-spin-fade-loader'); }); }, immediate: true }, visibility: function visibility(val) { var _this = this; if (val && this.closed === true) { this.closed = false; this.$emit('open'); if (this.appendToBody) { document.body.appendChild(this.$el); } this.open(); this.stop(); if (this.preFocus) { this.prevActiveElement = document.activeElement; } } else if (!val) { if (!this.closed) { this.handleClose(); } this.move(); if (this.prevActiveElement) { this.$nextTick(function () { _this.prevActiveElement.focus(); }); } } } }, computed: { contentClasses: function contentClasses() { return [this.prefixClsContainer].concat(this.customClass); }, isHorizontal: function isHorizontal() { return this.position === 'right' || this.position === 'left'; } }, methods: { hide: function hide(cancel) { if (cancel !== false) { this.visibility && this.$emit('update:visibility', false); this.$emit('close'); this.closed = true; } else { this.$emit('update:visibility', true); } }, handleClose: function handleClose() { if (typeof this.beforeClose === 'function') { this.beforeClose(this.hide); } else { this.hide(); } }, onMaskClick: function onMaskClick(e) { if (e.target === e.currentTarget && this.maskClosable) { this.handleClose(); } }, // 滑动限制 stop: function stop() { var mo = function mo(e) { e.preventDefault(); }; document.body.style.overflow = 'hidden'; document.addEventListener('scroll', mo, false); // 禁止页面滑动 }, // 取消滑动限制 move: function move() { var mo = function mo(e) { e.preventDefault(); }; document.body.style.overflow = ''; // 出现滚动条 document.removeEventListener('scroll', mo, false); } }, beforeDestroy: function beforeDestroy() { if (this.appendToBody && this.$el && this.$el.parentNode) { this.$el.parentNode.removeChild(this.$el); } }, mounted: function mounted() { if (this.visibility) { if (this.appendToBody) { document.body.appendChild(this.$el); } this.open(); } } }); // CONCATENATED MODULE: ./components/drawer/drawer.vue?vue&type=script&lang=js& /* harmony default export */ var drawer_drawervue_type_script_lang_js_ = (drawervue_type_script_lang_js_); // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js var componentNormalizer = __webpack_require__(0); // CONCATENATED MODULE: ./components/drawer/drawer.vue /* normalize component */ var component = Object(componentNormalizer["a" /* default */])( drawer_drawervue_type_script_lang_js_, render, staticRenderFns, false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "components/drawer/drawer.vue" /* harmony default export */ var drawer = (component.exports); // CONCATENATED MODULE: ./components/drawer/index.js /* istanbul ignore next */ drawer.install = function (Vue) { Vue.component(drawer.name, drawer); }; /* harmony default export */ var components_drawer = __webpack_exports__["default"] = (drawer); /***/ }), /***/ 14: /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__14__; /***/ }), /***/ 142: /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /***/ 15: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _dom_helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); /* harmony import */ var _popup_manager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _popup_manager__WEBPACK_IMPORTED_MODULE_2__["a"]; }); var idSeed = 1; var scrollBarWidth = void 0; /* harmony default export */ __webpack_exports__["b"] = ({ props: { visibility: { type: Boolean, default: false }, openDelay: {}, closeDelay: {}, zIndex: {}, modal: { type: Boolean, default: false }, modalFade: { type: Boolean, default: true }, modalClass: {}, modalAppendToBody: { type: Boolean, default: false }, lockScroll: { type: Boolean, default: true }, closeOnPressEscape: { type: Boolean, default: false }, closeOnClickModal: { type: Boolean, default: false } }, beforeMount: function beforeMount() { this._popupId = 'popup-' + idSeed++; _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].register(this._popupId, this); }, beforeDestroy: function beforeDestroy() { _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].deregister(this._popupId); _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].closeModal(this._popupId); this.restoreBodyStyle(); }, data: function data() { return { opened: false, bodyPaddingRight: null, computedBodyPaddingRight: 0, withoutHiddenClass: true, rendered: false }; }, watch: { visibility: function visibility(val) { var _this = this; if (val) { if (this._opening) return; if (!this.rendered) { this.rendered = true; vue__WEBPACK_IMPORTED_MODULE_0___default.a.nextTick(function () { _this.open(); }); } else { this.open(); } } else { this.close(); } } }, methods: { open: function open(options) { var _this2 = this; if (!this.rendered) { this.rendered = true; } var props = Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* merge */ "e"])({}, this.$props || this, options); if (this._closeTimer) { clearTimeout(this._closeTimer); this._closeTimer = null; } clearTimeout(this._openTimer); var openDelay = Number(props.openDelay); if (openDelay > 0) { this._openTimer = setTimeout(function () { _this2._openTimer = null; _this2.doOpen(props); }, openDelay); } else { this.doOpen(props); } }, doOpen: function doOpen(props) { if (this.$isServer) return; if (this.willOpen && !this.willOpen()) return; if (this.opened) return; this._opening = true; var dom = this.$el; var modal = props.modal; var zIndex = props.zIndex; if (zIndex) { _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].zIndex = zIndex; } if (modal) { if (this._closing) { _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].closeModal(this._popupId); this._closing = false; } _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].openModal(this._popupId, _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade); if (props.lockScroll) { this.withoutHiddenClass = !Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* hasClass */ "d"])(document.body, 'mds-popup-parent--hidden'); if (this.withoutHiddenClass) { this.bodyPaddingRight = document.body.style.paddingRight; this.computedBodyPaddingRight = parseInt(Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* getStyle */ "c"])(document.body, 'paddingRight'), 10); } scrollBarWidth = Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* getScrollBarWidth */ "b"])(); var bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight; var bodyOverflowY = Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* getStyle */ "c"])(document.body, 'overflowY'); if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) { document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px'; } Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* addClass */ "a"])(document.body, 'mds-popup-parent--hidden'); } } if (getComputedStyle(dom).position === 'static') { dom.style.position = 'absolute'; } dom.style.zIndex = _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].nextZIndex(); this.opened = true; this.onOpen && this.onOpen(); this.doAfterOpen(); }, doAfterOpen: function doAfterOpen() { this._opening = false; }, close: function close() { var _this3 = this; if (this.willClose && !this.willClose()) return; if (this._openTimer !== null) { clearTimeout(this._openTimer); this._openTimer = null; } clearTimeout(this._closeTimer); var closeDelay = Number(this.closeDelay); if (closeDelay > 0) { this._closeTimer = setTimeout(function () { _this3._closeTimer = null; _this3.doClose(); }, closeDelay); } else { this.doClose(); } }, doClose: function doClose() { this._closing = true; this.onClose && this.onClose(); if (this.lockScroll) { setTimeout(this.restoreBodyStyle, 200); } this.opened = false; this.doAfterClose(); }, doAfterClose: function doAfterClose() { _popup_manager__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].closeModal(this._popupId); this._closing = false; }, restoreBodyStyle: function restoreBodyStyle() { if (this.modal && this.withoutHiddenClass) { document.body.style.paddingRight = this.bodyPaddingRight; Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* removeClass */ "h"])(document.body, 'mds-popup-parent--hidden'); } this.withoutHiddenClass = true; } } }); /***/ }), /***/ 2: /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__2__; /***/ }), /***/ 257: /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /***/ 259: /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /***/ 5: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _dom_helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1); var hasModal = false; var hasInitZIndex = false; var zIndex = void 0; var getModal = function getModal() { if (vue__WEBPACK_IMPORTED_MODULE_0___default.a.prototype.$isServer) return; var modalDom = PopupManager.modalDom; if (modalDom) { hasModal = true; } else { hasModal = false; modalDom = document.createElement('div'); PopupManager.modalDom = modalDom; modalDom.addEventListener('touchmove', function (event) { event.preventDefault(); event.stopPropagation(); }); modalDom.addEventListener('click', function () { PopupManager.doOnModalClick && PopupManager.doOnModalClick(); }); } return modalDom; }; var instances = {}; var PopupManager = { modalFade: true, getInstance: function getInstance(id) { return instances[id]; }, register: function register(id, instance) { if (id && instance) { instances[id] = instance; } }, deregister: function deregister(id) { if (id) { instances[id] = null; delete instances[id]; } }, nextZIndex: function nextZIndex() { return PopupManager.zIndex++; }, modalStack: [], doOnModalClick: function doOnModalClick() { var topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1]; if (!topItem) return; var instance = PopupManager.getInstance(topItem.id); if (instance && instance.closeOnClickModal) { instance.close(); } }, openModal: function openModal(id, zIndex, dom, modalClass, modalFade) { if (vue__WEBPACK_IMPORTED_MODULE_0___default.a.prototype.$isServer) return; if (!id || zIndex === undefined) return; this.modalFade = modalFade; var modalStack = this.modalStack; for (var i = 0, j = modalStack.length; i < j; i++) { var item = modalStack[i]; if (item.id === id) { return; } } var modalDom = getModal(); Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* addClass */ "a"])(modalDom, 'v-modal'); if (this.modalFade && !hasModal) { Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* addClass */ "a"])(modalDom, 'v-modal-enter'); } if (modalClass) { var classArr = modalClass.trim().split(/\s+/); classArr.forEach(function (item) { return Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* addClass */ "a"])(modalDom, item); }); } setTimeout(function () { Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* removeClass */ "h"])(modalDom, 'v-modal-enter'); }, 200); if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) { dom.parentNode.appendChild(modalDom); } else { document.body.appendChild(modalDom); } if (zIndex) { modalDom.style.zIndex = zIndex; } modalDom.tabIndex = 0; modalDom.style.display = ''; this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass }); }, closeModal: function closeModal(id) { var modalStack = this.modalStack; var modalDom = getModal(); if (modalStack.length > 0) { var topItem = modalStack[modalStack.length - 1]; if (topItem.id === id) { if (topItem.modalClass) { var classArr = topItem.modalClass.trim().split(/\s+/); classArr.forEach(function (item) { return Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* removeClass */ "h"])(modalDom, item); }); } modalStack.pop(); if (modalStack.length > 0) { modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex; } } else { for (var i = modalStack.length - 1; i >= 0; i--) { if (modalStack[i].id === id) { modalStack.splice(i, 1); break; } } } } if (modalStack.length === 0) { if (this.modalFade) { Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* addClass */ "a"])(modalDom, 'v-modal-leave'); } setTimeout(function () { if (modalStack.length === 0) { if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom); modalDom.style.display = 'none'; PopupManager.modalDom = undefined; } Object(_dom_helper__WEBPACK_IMPORTED_MODULE_1__[/* removeClass */ "h"])(modalDom, 'v-modal-leave'); }, 200); } } }; Object.defineProperty(PopupManager, 'zIndex', { configurable: true, get: function get() { if (!hasInitZIndex) { zIndex = zIndex || (vue__WEBPACK_IMPORTED_MODULE_0___default.a.prototype.$ELEMENT || {}).zIndex || 2000; hasInitZIndex = true; } return zIndex; }, set: function set(value) { zIndex = value; } }); var getTopPopup = function getTopPopup() { if (vue__WEBPACK_IMPORTED_MODULE_0___default.a.prototype.$isServer) return; if (PopupManager.modalStack.length > 0) { var topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1]; if (!topPopup) return; var instance = PopupManager.getInstance(topPopup.id); return instance; } }; if (!vue__WEBPACK_IMPORTED_MODULE_0___default.a.prototype.$isServer) { // handle `esc` key when the popup is shown window.addEventListener('keydown', function (event) { if (event.keyCode === 27) { var topPopup = getTopPopup(); if (topPopup && topPopup.closeOnPressEscape) { topPopup.handleClose ? topPopup.handleClose() : topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close(); } } }); } /* harmony default export */ __webpack_exports__["a"] = (PopupManager); /***/ }), /***/ 7: /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE__7__; /***/ }) /******/ }); });