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
\n \n
\n
\n \n \n \n
\n \n
\n \n\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\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
\n \n
\n
\n \n \n \n
\n \n
\n \n\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\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