diff --git a/dist/index.js b/dist/index.js index 612e527..e63fb25 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/test/vue-js-modal/src/Modal.vue" +Component.options.__file = "/Users/yev/Projects/vue/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.")} @@ -566,6 +566,10 @@ exports.default = { type: [Boolean, String], default: false }, + reset: { + type: Boolean, + default: false + }, transition: { type: String }, @@ -630,9 +634,6 @@ exports.default = { Resizer: _Resizer2.default }, data: function data() { - var width = (0, _parser2.default)(this.width); - var height = (0, _parser2.default)(this.height); - return { visible: false, @@ -647,13 +648,10 @@ exports.default = { }, modal: { - widthInit: 0, - width: width.value, - widthType: width.type, - - heightInit: 0, - height: height.value, - heightType: height.type + width: 0, + widthType: 'px', + height: 0, + heightType: 'px' }, window: { @@ -689,6 +687,9 @@ exports.default = { } } }, + created: function created() { + this.setInitialSize(); + }, beforeMount: function beforeMount() { var _this2 = this; @@ -756,6 +757,17 @@ exports.default = { } }, methods: { + setInitialSize: function setInitialSize() { + var modal = this.modal; + + var width = (0, _parser2.default)(this.width); + var height = (0, _parser2.default)(this.height); + + modal.width = width.value; + modal.widthType = width.type; + modal.height = height.value; + modal.heightType = height.type; + }, onWindowResize: function onWindowResize() { this.window.width = window.innerWidth; this.window.height = window.innerHeight; @@ -784,13 +796,22 @@ exports.default = { var resizeEvent = this.genEventObject({ size: size }); - console.log(resizeEvent); - this.$emit('resize', resizeEvent); }, toggle: function toggle(state, params) { - var beforeEventName = this.visible ? 'before-close' : 'before-open'; - var afterEventName = this.visible ? 'closed' : 'opened'; + var reset = this.reset, + visible = this.visible; + + + var beforeEventName = visible ? 'before-close' : 'before-open'; + + var afterEventName = visible ? 'closed' : 'opened'; + + if (beforeEventName === 'before-open' && reset) { + this.setInitialSize(); + this.shift.left = 0; + this.shift.top = 0; + } var stopEventExecution = false; @@ -1042,7 +1063,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?693baac5"],"names":[],"mappings":";AA8YA;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.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?bfc71c9c"],"names":[],"mappings":";AA8ZA;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 @@ -1079,7 +1100,7 @@ var Component = __webpack_require__(3)( /* cssModules */ null ) -Component.options.__file = "/Users/yev/Projects/test/vue-js-modal/src/Resizer.vue" +Component.options.__file = "/Users/yev/Projects/vue/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.")} diff --git a/dist/ssr.index.js b/dist/ssr.index.js index 7ce33d1..f569a11 100644 --- a/dist/ssr.index.js +++ b/dist/ssr.index.js @@ -356,7 +356,7 @@ var Component = __webpack_require__(3)( /* cssModules */ null ) -Component.options.__file = "/Users/yev/Projects/test/vue-js-modal/src/Modal.vue" +Component.options.__file = "/Users/yev/Projects/vue/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.")} @@ -417,6 +417,10 @@ exports.default = { type: [Boolean, String], default: false }, + reset: { + type: Boolean, + default: false + }, transition: { type: String }, @@ -481,9 +485,6 @@ exports.default = { Resizer: _Resizer2.default }, data: function data() { - var width = (0, _parser2.default)(this.width); - var height = (0, _parser2.default)(this.height); - return { visible: false, @@ -498,13 +499,10 @@ exports.default = { }, modal: { - widthInit: 0, - width: width.value, - widthType: width.type, - - heightInit: 0, - height: height.value, - heightType: height.type + width: 0, + widthType: 'px', + height: 0, + heightType: 'px' }, window: { @@ -540,6 +538,9 @@ exports.default = { } } }, + created: function created() { + this.setInitialSize(); + }, beforeMount: function beforeMount() { var _this2 = this; @@ -607,6 +608,17 @@ exports.default = { } }, methods: { + setInitialSize: function setInitialSize() { + var modal = this.modal; + + var width = (0, _parser2.default)(this.width); + var height = (0, _parser2.default)(this.height); + + modal.width = width.value; + modal.widthType = width.type; + modal.height = height.value; + modal.heightType = height.type; + }, onWindowResize: function onWindowResize() { this.window.width = window.innerWidth; this.window.height = window.innerHeight; @@ -635,13 +647,22 @@ exports.default = { var resizeEvent = this.genEventObject({ size: size }); - console.log(resizeEvent); - this.$emit('resize', resizeEvent); }, toggle: function toggle(state, params) { - var beforeEventName = this.visible ? 'before-close' : 'before-open'; - var afterEventName = this.visible ? 'closed' : 'opened'; + var reset = this.reset, + visible = this.visible; + + + var beforeEventName = visible ? 'before-close' : 'before-open'; + + var afterEventName = visible ? 'closed' : 'opened'; + + if (beforeEventName === 'before-open' && reset) { + this.setInitialSize(); + this.shift.left = 0; + this.shift.top = 0; + } var stopEventExecution = false; @@ -893,7 +914,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?693baac5"],"names":[],"mappings":";AA8YA;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.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?bfc71c9c"],"names":[],"mappings":";AA8ZA;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 @@ -930,7 +951,7 @@ var Component = __webpack_require__(3)( /* cssModules */ null ) -Component.options.__file = "/Users/yev/Projects/test/vue-js-modal/src/Resizer.vue" +Component.options.__file = "/Users/yev/Projects/vue/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.")} diff --git a/src/Modal.vue b/src/Modal.vue index 4bd20e7..efdebb0 100644 --- a/src/Modal.vue +++ b/src/Modal.vue @@ -55,6 +55,10 @@ type: [Boolean, String], default: false }, + reset: { + type: Boolean, + default: false + }, transition: { type: String }, @@ -121,9 +125,6 @@ Resizer }, data () { - let width = parseNumber(this.width) - let height = parseNumber(this.height) - return { visible: false, @@ -138,13 +139,10 @@ }, modal: { - widthInit: 0, - width: width.value, - widthType: width.type, - - heightInit: 0, - height: height.value, - heightType: height.type + width: 0, + widthType: 'px', + height: 0, + heightType: 'px' }, window: { @@ -177,6 +175,9 @@ } } }, + created () { + this.setInitialSize() + }, beforeMount () { Modal.event.$on('toggle', (name, state, params) => { if (name === this.name) { @@ -248,6 +249,17 @@ } }, methods: { + setInitialSize () { + let { modal } = this + let width = parseNumber(this.width) + let height = parseNumber(this.height) + + modal.width = width.value + modal.widthType = width.type + modal.height = height.value + modal.heightType = height.type + }, + onWindowResize () { this.window.width = window.innerWidth this.window.height = window.innerHeight @@ -267,16 +279,7 @@ return Vue.util.extend(data, params || {}); }, - /* - adaptSize () { - if (this.adaptive) { - this.modal.width = inRange(this.minWidth, this.window.width, - this.trueModalWidth) - this.modal.height = inRange(this.minHeight, this.window.height, - this.trueModalHeight) - } - }, - */ + onModalResize (event) { this.modal.widthType = 'px' this.modal.width = event.size.width @@ -287,18 +290,31 @@ const { size } = this.modal const resizeEvent = this.genEventObject({ size }); - console.log(resizeEvent) - this.$emit('resize', resizeEvent) }, toggle (state, params) { - const beforeEventName = this.visible ? 'before-close' : 'before-open' - const afterEventName = this.visible ? 'closed' : 'opened' + const { reset, visible } = this + + const beforeEventName = visible + ? 'before-close' + : 'before-open' + + const afterEventName = visible + ? 'closed' + : 'opened' + + if (beforeEventName === 'before-open' && reset) { + this.setInitialSize() + this.shift.left = 0 + this.shift.top = 0 + } let stopEventExecution = false - const stop = () => { stopEventExecution = true } + const stop = () => { + stopEventExecution = true + } const beforeEvent = this.genEventObject({ stop, state, params }) this.$emit(beforeEventName, beforeEvent)