diff --git a/dist/index.js b/dist/index.js index a6b43d5..10c7119 100644 --- a/dist/index.js +++ b/dist/index.js @@ -7,7 +7,7 @@ exports["vue-js-modal"] = factory(require("vue")); else root["vue-js-modal"] = factory(root["vue"]); -})(this, function(__WEBPACK_EXTERNAL_MODULE_16__) { +})(this, function(__WEBPACK_EXTERNAL_MODULE_17__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; @@ -273,7 +273,7 @@ if (typeof DEBUG !== 'undefined' && DEBUG) { ) } } -var listToStyles = __webpack_require__(15) +var listToStyles = __webpack_require__(16) /* type StyleObject = { @@ -480,13 +480,13 @@ function applyToTag (styleElement, obj) { /* styles */ -__webpack_require__(13) +__webpack_require__(14) var Component = __webpack_require__(3)( /* script */ __webpack_require__(6), /* template */ - __webpack_require__(11), + __webpack_require__(12), /* scopeId */ null, /* cssModules */ @@ -523,7 +523,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _vue = __webpack_require__(16); +var _vue = __webpack_require__(17); var _vue2 = _interopRequireDefault(_vue); @@ -531,12 +531,16 @@ var _index = __webpack_require__(0); var _index2 = _interopRequireDefault(_index); -var _Resizer = __webpack_require__(10); +var _Resizer = __webpack_require__(11); var _Resizer2 = _interopRequireDefault(_Resizer); var _util = __webpack_require__(1); +var _parser = __webpack_require__(8); + +var _parser2 = _interopRequireDefault(_parser); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } exports.default = { @@ -583,25 +587,16 @@ exports.default = { return value >= 0; } }, - maxAdaptiveWidth: { - type: Number, - default: 1 - }, - maxAdaptiveHeight: { - type: Number, - default: 1 - }, width: { type: [Number, String], default: 600, validator: function validator(value) { if (typeof value === 'string') { - return value.charAt(value.length - 1) === '%' && !isNaN(parseFloat(value)); + var width = (0, _parser2.default)(value); + return (width.type === '%' || width.type === 'px') && width.value > 0; } - if (typeof value === 'number') { - return value >= 0; - } + return value >= 0; } }, height: { @@ -609,12 +604,11 @@ exports.default = { default: 300, validator: function validator(value) { if (typeof value === 'string') { - return value === 'auto' || value.charAt(value.length - 1) === '%' && !isNaN(parseFloat(value)); + var height = (0, _parser2.default)(value); + return (height.type === '%' || height.type === 'px') && height.value > 0; } - if (typeof value === 'number') { - return value >= 0; - } + return value >= 0; } }, pivotX: { @@ -636,6 +630,11 @@ exports.default = { Resizer: _Resizer2.default }, data: function data() { + var width = (0, _parser2.default)(this.width); + var height = (0, _parser2.default)(this.height); + + console.log(width, height); + return { visible: false, @@ -650,16 +649,19 @@ exports.default = { }, modal: { - width: this.width, - height: this.height + widthInit: 0, + width: width.value, + widthType: width.type, + + heightInit: 0, + height: height.value, + heightType: height.type }, window: { width: 0, height: 0 - }, - - draggableElement: false + } }; }, @@ -669,7 +671,7 @@ exports.default = { if (value) { this.visibility.overlay = true; - this.adaptSize(); + setTimeout(function () { _this.visibility.modal = true; @@ -716,26 +718,44 @@ exports.default = { shift = this.shift; - var maxLeft = window.width - this.trueModalWidth(); - var maxTop = window.height - this.trueModalHeight(); + var maxLeft = window.width - this.trueModalWidth; + var maxTop = window.height - this.trueModalHeight; - var left = shift.left + this.pivotX * (window.width - this.trueModalWidth()); - var top = shift.top + this.pivotY * (window.height - this.trueModalHeight()); + var left = shift.left + this.pivotX * (window.width - this.trueModalWidth); + var top = shift.top + this.pivotY * (window.height - this.trueModalHeight); return { left: (0, _util.inRange)(0, maxLeft, left), top: (0, _util.inRange)(0, maxTop, top) }; }, + trueModalWidth: function trueModalWidth() { + var window = this.window, + modal = this.modal; + + var value = modal.widthType === '%' ? window.width / 100 * modal.width : modal.width; + + return this.adaptive ? (0, _util.inRange)(this.minWidth, this.window.width, value) : value; + }, + trueModalHeight: function trueModalHeight() { + var window = this.window, + modal = this.modal; + + var value = modal.heightType === '%' ? window.height / 100 * modal.height : modal.height; + + return this.adaptive ? (0, _util.inRange)(this.minHeight, this.window.height, value) : value; + }, modalClass: function modalClass() { return ['v--modal-box', this.classes]; }, modalStyle: function modalStyle() { + console.log(this.trueModalWidth, this.trueModalHeight); + return { top: this.position.top + 'px', left: this.position.left + 'px', - width: this.trueModalWidth() + 'px', - height: this.trueModalHeight() + 'px' + width: this.trueModalWidth + 'px', + height: this.trueModalHeight + 'px' }; } }, @@ -743,7 +763,6 @@ exports.default = { onWindowResize: function onWindowResize() { this.window.width = window.innerWidth; this.window.height = window.innerHeight; - this.adaptSize(); }, genEventObject: function genEventObject(params) { var data = { @@ -758,25 +777,8 @@ exports.default = { return _vue2.default.util.extend(data, params || {}); }, - adaptSize: function adaptSize() { - if (this.adaptive) { - this.modal.width = (0, _util.inRange)(0, this.window.width * this.maxAdaptiveWidth, this.trueModalWidth()); - this.modal.height = (0, _util.inRange)(0, this.window.height * this.maxAdaptiveHeight, this.trueModalHeight()); - } - }, - trueModalWidth: function trueModalWidth() { - var window = this.window, - modal = this.modal; - - return typeof modal.width === 'string' ? window.width * parseFloat(modal.width) / 100.0 : modal.width; - }, - trueModalHeight: function trueModalHeight() { - var window = this.window, - modal = this.modal; - - return typeof modal.height === 'string' ? window.height * parseFloat(modal.height) / 100.0 : modal.height; - }, - resize: function resize(event) { + adaptSize: function adaptSize() {}, + onModalResize: function onModalResize(event) { this.modal.width = event.size.width; this.modal.height = event.size.height; @@ -979,15 +981,57 @@ exports.default = { /* 8 */ /***/ (function(module, exports, __webpack_require__) { -exports = module.exports = __webpack_require__(2)(); -// imports +"use strict"; -// module -exports.push([module.i, "\n.v--modal-overlay {\n position: fixed;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.2);\n z-index: 999;\n opacity: 1;\n}\n.v--modal-overlay .v--modal-box {\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n}\n.v--modal {\n background-color: white;\n text-align: left;\n border-radius: 3px;\n box-shadow: 0 20px 60px -2px rgba(27, 33, 58, .4);\n padding: 0;\n}\n.v--modal.v--modal-fullscreen {\n width: 100vw;\n height: 100vh;\n margin: 0;\n left: 0;\n top: 0;\n}\n.v--modal-top-right {\n display: block;\n position: absolute;\n right: 0;\n top: 0;\n}\n.overlay-fade-enter-active, .overlay-fade-leave-active {\n transition: all 0.2s;\n}\n.overlay-fade-enter, .overlay-fade-leave-active {\n opacity: 0;\n}\n.nice-modal-fade-enter-active, .nice-modal-fade-leave-active {\n transition: all 0.4s;\n}\n.nice-modal-fade-enter, .nice-modal-fade-leave-active {\n opacity: 0;\n transform: translateY(-20px);\n}\n", "", {"version":3,"sources":["/./src/Modal.vue?505259c2"],"names":[],"mappings":";AAyYA;EACA,gBAAA;EACA,QAAA;EACA,OAAA;EACA,aAAA;EACA,cAAA;EACA,+BAAA;EACA,aAAA;EACA,WAAA;CACA;AAEA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;CACA;AAEA;EACA,wBAAA;EACA,iBAAA;EACA,mBAAA;EACA,kDAAA;EACA,WAAA;CACA;AAEA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA;CACA;AAEA;EACA,eAAA;EACA,mBAAA;EACA,SAAA;EACA,OAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;EACA,6BAAA;CACA","file":"Modal.vue","sourcesContent":["\n\n\n"],"sourceRoot":"webpack://"}]); +Object.defineProperty(exports, "__esModule", { + value: true +}); -// exports +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; +var floatRegexp = '[-+]?[0-9]*\.?[0-9]+'; + +var types = [{ + name: 'px', + regexp: new RegExp('^' + floatRegexp + 'px$') +}, { + name: '%', + regexp: new RegExp('^' + floatRegexp + '%$') +}, { + name: 'px', + regexp: new RegExp('^' + floatRegexp + '$') +}]; + +var getType = function getType(value) { + for (var i = 0; i < types.length; i++) { + var type = types[i]; + if (type.regexp.test(value)) { + return { + type: type.name, + value: parseFloat(value) + }; + } + } + + return { + type: '', + value: value + }; +}; + +var parse = function parse(value) { + switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { + case 'number': + return { type: 'px', value: value }; + case 'string': + return getType(value); + default: + return { type: '', value: value }; + } +}; + +exports.default = parse; /***/ }), /* 9 */ @@ -998,7 +1042,7 @@ exports = module.exports = __webpack_require__(2)(); // module -exports.push([module.i, "\n.vue-modal-resizer {\n display: block;\n overflow: hidden;\n position: absolute;\n width: 12px;\n height: 12px;\n right: 0;\n bottom: 0;\n z-index: 9999999;\n background: transparent;\n cursor: se-resize;\n}\n.vue-modal-resizer::after {\n display: block;\n position: absolute;\n content: '';\n background: transparent;\n left: 0;\n top: 0;\n width: 0;\n height: 0;\n border-bottom: 10px solid #ddd;\n border-left: 10px solid transparent;\n}\n.vue-modal-resizer.clicked::after {\n border-bottom: 10px solid #369BE9;\n}\n", "", {"version":3,"sources":["/./src/Resizer.vue?db4cc428"],"names":[],"mappings":";AA+EA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;EACA,YAAA;EACA,aAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,kBAAA;CACA;AAEA;EACA,eAAA;EACA,mBAAA;EACA,YAAA;EACA,wBAAA;EACA,QAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,+BAAA;EACA,oCAAA;CACA;AAEA;EACA,kCAAA;CACA","file":"Resizer.vue","sourcesContent":["\n\n\n"],"sourceRoot":"webpack://"}]); +exports.push([module.i, "\n.v--modal-overlay {\n position: fixed;\n left: 0;\n top: 0;\n width: 100vw;\n height: 100vh;\n background: rgba(0, 0, 0, 0.2);\n z-index: 999;\n opacity: 1;\n}\n.v--modal-overlay .v--modal-box {\n position: relative;\n overflow: hidden;\n box-sizing: border-box;\n}\n.v--modal {\n background-color: white;\n text-align: left;\n border-radius: 3px;\n box-shadow: 0 20px 60px -2px rgba(27, 33, 58, .4);\n padding: 0;\n}\n.v--modal.v--modal-fullscreen {\n width: 100vw;\n height: 100vh;\n margin: 0;\n left: 0;\n top: 0;\n}\n.v--modal-top-right {\n display: block;\n position: absolute;\n right: 0;\n top: 0;\n}\n.overlay-fade-enter-active, .overlay-fade-leave-active {\n transition: all 0.2s;\n}\n.overlay-fade-enter, .overlay-fade-leave-active {\n opacity: 0;\n}\n.nice-modal-fade-enter-active, .nice-modal-fade-leave-active {\n transition: all 0.4s;\n}\n.nice-modal-fade-enter, .nice-modal-fade-leave-active {\n opacity: 0;\n transform: translateY(-20px);\n}\n", "", {"version":3,"sources":["/./src/Modal.vue?265f8e00"],"names":[],"mappings":";AA+YA;EACA,gBAAA;EACA,QAAA;EACA,OAAA;EACA,aAAA;EACA,cAAA;EACA,+BAAA;EACA,aAAA;EACA,WAAA;CACA;AAEA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;CACA;AAEA;EACA,wBAAA;EACA,iBAAA;EACA,mBAAA;EACA,kDAAA;EACA,WAAA;CACA;AAEA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,OAAA;CACA;AAEA;EACA,eAAA;EACA,mBAAA;EACA,SAAA;EACA,OAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;CACA;AAEA;EACA,qBAAA;CACA;AAEA;EACA,WAAA;EACA,6BAAA;CACA","file":"Modal.vue","sourcesContent":["\n\n\n"],"sourceRoot":"webpack://"}]); // exports @@ -1007,15 +1051,29 @@ exports.push([module.i, "\n.vue-modal-resizer {\n display: block;\n overflow: /* 10 */ /***/ (function(module, exports, __webpack_require__) { +exports = module.exports = __webpack_require__(2)(); +// imports + + +// module +exports.push([module.i, "\n.vue-modal-resizer {\n display: block;\n overflow: hidden;\n position: absolute;\n width: 12px;\n height: 12px;\n right: 0;\n bottom: 0;\n z-index: 9999999;\n background: transparent;\n cursor: se-resize;\n}\n.vue-modal-resizer::after {\n display: block;\n position: absolute;\n content: '';\n background: transparent;\n left: 0;\n top: 0;\n width: 0;\n height: 0;\n border-bottom: 10px solid #ddd;\n border-left: 10px solid transparent;\n}\n.vue-modal-resizer.clicked::after {\n border-bottom: 10px solid #369BE9;\n}\n", "", {"version":3,"sources":["/./src/Resizer.vue?212896e6"],"names":[],"mappings":";AA+EA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;EACA,YAAA;EACA,aAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,kBAAA;CACA;AAEA;EACA,eAAA;EACA,mBAAA;EACA,YAAA;EACA,wBAAA;EACA,QAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,+BAAA;EACA,oCAAA;CACA;AAEA;EACA,kCAAA;CACA","file":"Resizer.vue","sourcesContent":["\n\n\n"],"sourceRoot":"webpack://"}]); + +// exports + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + /* styles */ -__webpack_require__(14) +__webpack_require__(15) var Component = __webpack_require__(3)( /* script */ __webpack_require__(7), /* template */ - __webpack_require__(12), + __webpack_require__(13), /* scopeId */ null, /* cssModules */ @@ -1042,7 +1100,7 @@ module.exports = Component.exports /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -1084,7 +1142,7 @@ module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c "min-height": _vm.minHeight }, on: { - "resize": _vm.resize + "resize": _vm.onModalResize } }) : _vm._e()], 2) : _vm._e()])], 1) : _vm._e()]) },staticRenderFns: []} @@ -1097,7 +1155,7 @@ if (false) { } /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, exports, __webpack_require__) { module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h; @@ -1114,13 +1172,13 @@ if (false) { } /***/ }), -/* 13 */ +/* 14 */ /***/ (function(module, exports, __webpack_require__) { // style-loader: Adds some css to the DOM by adding a