diff --git a/dist/index.js b/dist/index.js
index 7842cb0..0fbb662 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -492,7 +492,7 @@ var Component = __webpack_require__(3)(
/* cssModules */
null
)
-Component.options.__file = "/Users/yev/Projects/vue/vue-js-modal/src/Modal.vue"
+Component.options.__file = "/Users/onekiloparsec/github/vue-js-modal/src/Modal.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] Modal.vue: functional components are not supported with templates, they should use render functions.")}
@@ -593,9 +593,16 @@ exports.default = {
},
width: {
type: Number,
- default: 600,
+ default: [Number, String],
validator: function validator(value) {
- return value >= 0;
+ if (typeof value === 'string') {
+ var reg = new RegExp('^(\d+|\d+[.]\d+)%?$');
+ return reg.test(value);
+ }
+
+ if (typeof value === 'number') {
+ return value >= 0;
+ }
}
},
height: {
@@ -603,7 +610,8 @@ exports.default = {
default: 300,
validator: function validator(value) {
if (typeof value === 'string') {
- return value === 'auto';
+ var reg = new RegExp('^(\d+|\d+[.]\d+)%?$');
+ return value === 'auto' || reg.test(value);
}
if (typeof value === 'number') {
@@ -709,17 +717,30 @@ exports.default = {
modal = this.modal,
shift = this.shift;
- var maxLeft = window.width - modal.width;
- var maxTop = window.height - modal.height;
- var left = shift.left + this.pivotX * (window.width - modal.width);
- var top = shift.top + this.pivotY * (window.height - modal.height);
+ 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());
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;
+
+ 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;
+ },
modalClass: function modalClass() {
return ['v--modal-box', this.classes];
},
@@ -727,8 +748,8 @@ exports.default = {
return {
top: this.position.top + 'px',
left: this.position.left + 'px',
- width: this.modal.width + 'px',
- height: this.modal.height + 'px'
+ width: this.trueModalWidth() + 'px',
+ height: this.trueModalHeight() + 'px'
};
}
},
@@ -753,8 +774,8 @@ exports.default = {
},
adaptSize: function adaptSize() {
if (this.adaptive) {
- this.modal.width = (0, _util.inRange)(0, this.window.width * this.maxAdaptiveWidth, this.modal.width);
- this.modal.height = (0, _util.inRange)(0, this.window.height * this.maxAdaptiveHeight, this.modal.height);
+ 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());
}
},
resize: function resize(event) {
@@ -965,7 +986,7 @@ exports = module.exports = __webpack_require__(2)();
// 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?9d80ac54"],"names":[],"mappings":";AAwXA;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.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?aae73fc4"],"names":[],"mappings":";AA2YA;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
@@ -1002,7 +1023,7 @@ var Component = __webpack_require__(3)(
/* cssModules */
null
)
-Component.options.__file = "/Users/yev/Projects/vue/vue-js-modal/src/Resizer.vue"
+Component.options.__file = "/Users/onekiloparsec/github/vue-js-modal/src/Resizer.vue"
if (Component.esModule && Object.keys(Component.esModule).some(function (key) {return key !== "default" && key !== "__esModule"})) {console.error("named exports are not supported in *.vue files.")}
if (Component.options.functional) {console.error("[vue-loader] Resizer.vue: functional components are not supported with templates, they should use render functions.")}