From 1ee3870be7d13b598ad400f53d94bb913962048e Mon Sep 17 00:00:00 2001 From: Thorsten Date: Sat, 13 May 2017 18:54:46 +0200 Subject: [PATCH 01/11] remove unnecessary UMD code. (fix #77) --- src/index.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index f46fc53..50a848a 100644 --- a/src/index.js +++ b/src/index.js @@ -33,12 +33,9 @@ vueTouch.component = Component // Utilities // ******** - -if (typeof exports == "object") { - module.exports = vueTouch -} else if (typeof define == "function" && define.amd) { - define([], function(){ return vueTouch }) -} else if (window.Vue) { + if ( window !== undefined && window.Vue) { window.VueTouch = vueTouch Vue.use(vueTouch) } + +export default vueTouch From df18cfc896529c32596151949b66de55c72f40b4 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Mon, 16 Jan 2017 19:47:20 +0100 Subject: [PATCH 02/11] update README for 'options' prop. --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f0e243f..7ea9138 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ vue-touch supports all Hammer Events ot of the box, just bind a listener to the You can use the matching `*-options` props to pass Hammer options such as `direction` and `threshold`: +**Example** ``` html v-bind:enabled="true" @@ -113,6 +115,21 @@ You can enable and disable all or some of the event recognizers via the `enabled > ``` +#### The 'options' prop + +Hammer accepts a few general options that are normally passed when creating a Hammer instance with `new Hammer()` or `new Hammer.Manager()`. + +In vue-touch, you can pass those options via the `options` prop: + +|Prop|allowed Values| +|----|--------------| +|options| https://hammerjs.github.io/api/#hammer.defaults | + +**Example** +```html + +``` + ### Public Component Methods From 11edff15e965dc1fea0db591922ac7fbd60aef23 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Mon, 16 Jan 2017 19:49:39 +0100 Subject: [PATCH 03/11] forgot new version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3eba32a..99f063e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-touch", - "version": "2.0.0-beta.2", + "version": "2.0.0-beta.3", "main": "dist/vue-touch.js", "files": [ "dist/vue-touch.js", From cad8a944088348030f9a966b11515ccbcc5e1011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20L=C3=BCnborg?= Date: Wed, 18 Jan 2017 16:53:44 +0100 Subject: [PATCH 04/11] Fix table formatting --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7ea9138..d175fdf 100644 --- a/README.md +++ b/README.md @@ -48,11 +48,11 @@ vue-touch supports all Hammer Events ot of the box, just bind a listener to the |Recognizer|Events|Example| |---|----|----|----| -|**Pan**|`pan`, `panstart`, `panmove`, `panend`, `pancancel`, `panleft`, `panright`, `panup`, `pandown` |`v-on:panstart="callback"`| -|**Pinch**|`pinch`, `pinchstart`, `pinchmove`,`pinchend`, `pinchcancel`, `pinchin`, `pinchout`| `v-on:pinchout="callback"`| +|**Pan**|`pan`, `panstart`, `panmove`, `panend`, `pancancel`,
`panleft`, `panright`, `panup`, `pandown` |`v-on:panstart="callback"`| +|**Pinch**|`pinch`, `pinchstart`, `pinchmove`,`pinchend`,
`pinchcancel`, `pinchin`, `pinchout`| `v-on:pinchout="callback"`| |**Press**|`press`, `pressup`|`v-on:pressup="callback"`| -|**Rotate**|`rotate`, `rotatestart`, `rotatemove`, `rotateend`, `rotatecancel`, |`v-on:rotateend="callback"`| -|**Swipe**|`swipe`, `swipeleft`, `swiperight`, `swipeup`, `swipedown`|`v-on:swipeleft="callback"`| +|**Rotate**|`rotate`, `rotatestart`, `rotatemove`,
`rotateend`, `rotatecancel`, |`v-on:rotateend="callback"`| +|**Swipe**|`swipe`, `swipeleft`, `swiperight`,
`swipeup`, `swipedown`|`v-on:swipeleft="callback"`| |**Tap**|`tap`|`v-on:tap="callback"`| ### Component Props From 10f55103c15eccf749ee67e37a19695b544b04c7 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Tue, 24 Jan 2017 18:36:25 +0100 Subject: [PATCH 05/11] clarify usage of hammer-ssr.js is for server-side ONLY --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d175fdf..badef2d 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ See `/example` for a multi-event demo. To build it, run `npm install && npm run As of the moment of this writing, requiring HammerJS in a non-browser-environment (like during the build process of your SSR bundle) throws an error ([hammerjs/hammerjs#1060](https://github.com/hammerjs/hammer.js/issues/1060)). -The easiest fix to that is to use a webpack alias to replace the hammerjs package with a module that just exports a stub, i.e. an empty object. vue-touch comes with such a module, called `hammer-ssr.js` +The easiest fix to that is to use a webpack alias (in your **server-side(!)** webpack copnfiguration) to replace the hammerjs package with a module that just exports a stub, i.e. an empty object. vue-touch comes with such a module, called `hammer-ssr.js` ```JavaScript alias: { 'hammerjs$': 'vue-touch/dist/hammer-ssr.js' From 7ffa1d60cc2e06926baddc217d3500a50876a252 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Tue, 24 Jan 2017 18:37:25 +0100 Subject: [PATCH 06/11] fix hammer-ssr.js by turning it into ES5 --- src/hammer-ssr.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/hammer-ssr.js b/src/hammer-ssr.js index 3f95ad1..32b8f0e 100644 --- a/src/hammer-ssr.js +++ b/src/hammer-ssr.js @@ -1,7 +1,5 @@ -export default class Hammer { - contructor() { - console.log(`[vue-touch] Your should never see this message. - When you do, your code tried to call 'new Hammer(), but your app has included a stub for HammerJS, provided by vue-touch, instead of the actual HammerJS library. - `) - } +module.exports = function Hammer { + console.log(`[vue-touch] Your should never see this message. + When you do, your code tried to call 'new Hammer(), but your app has included a stub for HammerJS, provided by vue-touch, instead of the actual HammerJS library. + `) } From b9d0a025da67eaffed923263c6015065945ca3a3 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Tue, 24 Jan 2017 18:37:48 +0100 Subject: [PATCH 07/11] update distilled files --- dist/hammer-ssr.js | 10 ++++------ dist/vue-touch.js | 5 +++-- dist/vue-touch.js.map | 2 +- dist/vue-touch.min.js | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/dist/hammer-ssr.js b/dist/hammer-ssr.js index 3f95ad1..32b8f0e 100644 --- a/dist/hammer-ssr.js +++ b/dist/hammer-ssr.js @@ -1,7 +1,5 @@ -export default class Hammer { - contructor() { - console.log(`[vue-touch] Your should never see this message. - When you do, your code tried to call 'new Hammer(), but your app has included a stub for HammerJS, provided by vue-touch, instead of the actual HammerJS library. - `) - } +module.exports = function Hammer { + console.log(`[vue-touch] Your should never see this message. + When you do, your code tried to call 'new Hammer(), but your app has included a stub for HammerJS, provided by vue-touch, instead of the actual HammerJS library. + `) } diff --git a/dist/vue-touch.js b/dist/vue-touch.js index 455d345..6c9eaec 100644 --- a/dist/vue-touch.js +++ b/dist/vue-touch.js @@ -87,6 +87,7 @@ var gestureMap = { var Component = { props: { + options: createProp(), tapOptions: createProp(), panOptions: createProp(), pinchOptions: createProp(), @@ -101,7 +102,7 @@ var Component = { }, mounted: function mounted() { if (!this.$isServer) { - this.hammer = new Hammer.Manager(this.$el); + this.hammer = new Hammer.Manager(this.$el, this.options); this.recognizers = {}; this.setupBuiltinRecognizers(); this.setupCustomRecognizers(); @@ -255,7 +256,7 @@ if (typeof exports == "object") { module.exports = vueTouch; } else if (typeof define == "function" && define.amd) { define([], function(){ return vueTouch }); -} else if (window.Vue) { +} else if (typeof window !== 'undefined' && window.Vue) { window.VueTouch = vueTouch; Vue.use(vueTouch); } diff --git a/dist/vue-touch.js.map b/dist/vue-touch.js.map index 425430f..3e9a02e 100644 --- a/dist/vue-touch.js.map +++ b/dist/vue-touch.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../src/utils.js","../src/component.js","../src/index.js"],"sourcesContent":["import Hammer from 'hammerjs' // used by guardDirections\n\n/**\n * Tiny Object.assign replacement\n * @param {Object} target Any type of object\n * @param {Object} sources Any type of object\n * @return {Object} Merged Object\n */\nexport function assign(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i]\n const keys = Object.keys(source)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n target[key] = source[key]\n }\n }\n return target\n}\n\n/**\n * Small helper method to generate prop options for all the\n * *-options props.\n * @return {[type]} [description]\n */\nexport function createProp() {\n return {\n type: Object,\n default: function() { return {} }\n }\n}\n\nexport function capitalize (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n/**\n * Directions that VueTouch understands.\n * Will be tanslated to Hammer-style directions by guardDirections()\n * @type {Array}\n */\nexport const directions = ['up', 'down', 'left', 'right', 'horizontal', 'vertical', 'all']\n\n/**\n * Translates VueTouch direction names into Hammer Direction numbers.\n * @param {Objects} options Hammer Options\n * @return {Object} [Hammer Options]\n */\nexport function guardDirections (options) {\n var dir = options.direction\n if (typeof dir === 'string') {\n var hammerDirection = 'DIRECTION_' + dir.toUpperCase()\n if (directions.indexOf(dir) > -1 && Hammer.hasOwnProperty(hammerDirection)) {\n options.direction = Hammer[hammerDirection]\n } else {\n console.warn('[vue-touch] invalid direction: ' + dir)\n }\n }\n return options\n}\n\n/**\n * This pobject will contain global options for recognizers\n * see index.js -> vueTouch.config\n * @type {Object}\n */\nexport const config = {\n\n}\n\n/**\n * This object will contain recognizer options for custom events.\n * see index.js -> registerCustomEvent\n * @type {Object}\n */\nexport const customEvents = {\n\n}\n\n/**\n * Names of all the builtin gestures of Hammer\n * @type {Array}\n */\nexport const gestures = [\n 'pan','panstart','panmove','panend','pancancel','panleft','panright','panup','pandown',\n 'pinch','pinchstart','pinchmove','pinchend','pinchcancel','pinchin','pinchout',\n 'press','pressup',\n 'rotate','rotatestart','rotatemove','rotateend','rotatecancel',\n 'swipe','swipeleft','swiperight','swipeup','swipedown',\n 'tap'\n]\n\n/**\n * Maps the gestures to their \"main gesture\" (the name of the recognizer)\n * @type {Object}\n */\nexport const gestureMap = {\n pan: 'pan',\n panstart: 'pan',\n panmove: 'pan',\n panend: 'pan',\n pancancel: 'pan',\n panleft: 'pan',\n panright: 'pan',\n panup: 'pan',\n pandown: 'pan',\n pinch: 'pinch',\n pinchstart: 'pinch',\n pinchmove: 'pinch',\n pinchend: 'pinch',\n pinchcancel: 'pinch',\n pinchin: 'pinch',\n pinchout: 'pinch',\n press: 'press',\n pressup: 'press',\n rotate: 'rotate',\n rotatestart: 'rotate',\n rotatemove: 'rotate',\n rotateend: 'rotate',\n rotatecancel: 'rotate',\n swipe: 'swipe',\n swipeleft: 'swipe',\n swiperight: 'swipe',\n swipeup: 'swipe',\n swipedown: 'swipe',\n tap: 'tap'\n}\n","import Hammer from 'hammerjs'\n\nimport {\n createProp,\n capitalize,\n guardDirections,\n gestures,\n gestureMap,\n directions,\n assign,\n config,\n customEvents\n} from './utils'\n\nexport default {\n props: {\n tapOptions: createProp(),\n panOptions: createProp(),\n pinchOptions: createProp(),\n pressOptions: createProp(),\n rotateOptions: createProp(),\n swipeOptions: createProp(),\n tag: { type: String, default: 'div' },\n enabled: {\n default: true,\n type: [Boolean, Object],\n\n }\n },\n\n mounted() {\n if (!this.$isServer) {\n this.hammer = new Hammer.Manager(this.$el)\n this.recognizers = {} // not reactive\n this.setupBuiltinRecognizers()\n this.setupCustomRecognizers()\n this.updateEnabled(this.enabled)\n }\n },\n destroyed() {\n if (!this.$isServer) {\n this.hammer.destroy()\n }\n },\n\n watch: {\n enabled: {\n deep: true,\n handler(...args) {\n this.updateEnabled(...args)\n }\n }\n },\n\n methods: {\n\n setupBuiltinRecognizers() {\n // Built-in Hammer events\n // We check weither any event callbacks are registered\n // for the gesture, and if so, add a Recognizer\n for (let i = 0; i < gestures.length; i++) {\n const gesture = gestures[i]\n if (this._events[gesture]) {\n // get the main gesture (e.g. 'panstart' -> 'pan')\n const mainGesture = gestureMap[gesture]\n //merge global and local options\n const options = assign({}, (config[mainGesture] || {}), this[`${mainGesture}Options`])\n // add recognizer for this main gesture\n this.addRecognizer(mainGesture, options)\n // register Event Emit for the specific gesture\n this.addEvent(gesture)\n }\n }\n },\n\n setupCustomRecognizers() {\n // Custom events\n // We get the customGestures and options from the\n // customEvents object, then basically do the same check\n // as we did for the built-in events.\n const gestures = Object.keys(customEvents)\n\n for (let i = 0; i < gestures.length; i++) {\n\n const gesture = gestures[i]\n\n if (this._events[gesture]) {\n const opts = customEvents[gesture]\n const localCustomOpts = this[`${gesture}Options`] || {}\n const options = assign({}, opts, localCustomOpts)\n this.addRecognizer(gesture, options, {mainGesture: options.type})\n this.addEvent(gesture)\n }\n }\n },\n\n /**\n * Registers a new Recognizer with the manager and saves it on the component\n * instance\n * @param {String} gesture See utils.js -> gestures\n * @param {Object} options Hammer options\n * @param {String} mainGesture if gesture is a custom event name, mapping to utils.js -> gestures\n */\n addRecognizer: function addRecognizer(gesture, options, { mainGesture } = {}) {\n // create recognizer, e.g. new Hammer['Swipe'](options)\n if (!this.recognizers[gesture]) {\n const recognizer = new Hammer[capitalize(mainGesture || gesture)](guardDirections(options))\n this.recognizers[gesture] = recognizer\n this.hammer.add(recognizer)\n recognizer.recognizeWith(this.hammer.recognizers)\n }\n },\n\n addEvent(gesture) {\n this.hammer.on(gesture, (e) => this.$emit(gesture, e))\n },\n\n // Enabling / Disabling certain recognizers.\n\n /**\n * Called when the `enabled` prop changes, and during mounted()\n * It enables/disables values according to the value of the `emabled` prop\n * @param {Boolean|Object} newVal If an object: { recognizer: true|false }\n * @param {Boolean|Object} oldVal The previous value\n * @return {undefined}\n */\n updateEnabled: function updateEnabled(newVal, oldVal) {\n if (newVal === true) {\n this.enableAll()\n\n } else if (newVal === false) {\n this.disableAll()\n\n } else if (typeof newVal === 'object') {\n const keys = Object.keys(newVal)\n\n for (let i = 0; i < keys.length; i++) {\n const event = keys[i]\n\n if (this.recognizers[event]) {\n newVal[event]\n ? this.enable(event)\n : this.disable(event)\n }\n }\n }\n },\n\n enable(r) {\n const recognizer = this.recognizers[r]\n if (!recognizer.options.enable) {\n recognizer.set({ enable: true })\n }\n },\n disable(r) {\n const recognizer = this.recognizers[r]\n if (recognizer.options.enable) {\n recognizer.set({ enable: false })\n }\n },\n toggle(r) {\n const recognizer = this.recognizers[r]\n if (recognizer) {\n recognizer.options.enable\n ? this.disable(r)\n : this.enable(r)\n }\n },\n\n enableAll(r) {\n this.toggleAll({ enable: true })\n },\n disableAll(r) {\n this.toggleAll({ enable: false })\n },\n toggleAll({ enable }) {\n const keys = Object.keys(this.recognizers)\n for (let i = 0; i < keys.length; i++) {\n const r = this.recognizers[keys[i]]\n if (r.options.enable !== enable) {\n r.set({ enable: enable })\n }\n }\n },\n\n isEnabled(r) {\n return this.recognizers[r] && this.recognizers[r].options.enable\n }\n },\n\n render(h) {\n return h(this.tag, {}, this.$slots.default)\n }\n}\n","import Component from './component'\nimport { assign, config, customEvents } from './utils'\n\nlet installed = false\n\nconst vueTouch = { config, customEvents }\n\n// Plugin API\n// *********\nvueTouch.install = function install(Vue, opts = {}) {\n const name = opts.name || 'v-touch'\n Vue.component(name, assign(Component, { name }))\n installed = true\n}.bind(vueTouch)\n\nvueTouch.registerCustomEvent = function registerCustomEvent(event, options = {}) {\n if (installed) {\n console.warn(`\n [vue-touch]: Custom Event '${event}' couldn't be added to vue-touch.\n Custom Events have to be registered before installing the plugin.\n `)\n return\n }\n options.event = event\n customEvents[event] = options\n Component.props[`${event}Options`] = {\n type: Object,\n default() { return {} }\n }\n}.bind(vueTouch)\n\nvueTouch.component = Component\n\n// Utilities\n// ********\n\nif (typeof exports == \"object\") {\n module.exports = vueTouch\n} else if (typeof define == \"function\" && define.amd) {\n define([], function(){ return vueTouch })\n} else if (window.Vue) {\n window.VueTouch = vueTouch\n Vue.use(vueTouch)\n}\n"],"names":["let","const","i","this","gestures"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../src/utils.js","../src/component.js","../src/index.js"],"sourcesContent":["import Hammer from 'hammerjs' // used by guardDirections\n\n/**\n * Tiny Object.assign replacement\n * @param {Object} target Any type of object\n * @param {Object} sources Any type of object\n * @return {Object} Merged Object\n */\nexport function assign(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n const source = sources[i]\n const keys = Object.keys(source)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n target[key] = source[key]\n }\n }\n return target\n}\n\n/**\n * Small helper method to generate prop options for all the\n * *-options props.\n * @return {[type]} [description]\n */\nexport function createProp() {\n return {\n type: Object,\n default: function() { return {} }\n }\n}\n\nexport function capitalize (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n/**\n * Directions that VueTouch understands.\n * Will be tanslated to Hammer-style directions by guardDirections()\n * @type {Array}\n */\nexport const directions = ['up', 'down', 'left', 'right', 'horizontal', 'vertical', 'all']\n\n/**\n * Translates VueTouch direction names into Hammer Direction numbers.\n * @param {Objects} options Hammer Options\n * @return {Object} [Hammer Options]\n */\nexport function guardDirections (options) {\n var dir = options.direction\n if (typeof dir === 'string') {\n var hammerDirection = 'DIRECTION_' + dir.toUpperCase()\n if (directions.indexOf(dir) > -1 && Hammer.hasOwnProperty(hammerDirection)) {\n options.direction = Hammer[hammerDirection]\n } else {\n console.warn('[vue-touch] invalid direction: ' + dir)\n }\n }\n return options\n}\n\n/**\n * This pobject will contain global options for recognizers\n * see index.js -> vueTouch.config\n * @type {Object}\n */\nexport const config = {\n\n}\n\n/**\n * This object will contain recognizer options for custom events.\n * see index.js -> registerCustomEvent\n * @type {Object}\n */\nexport const customEvents = {\n\n}\n\n/**\n * Names of all the builtin gestures of Hammer\n * @type {Array}\n */\nexport const gestures = [\n 'pan','panstart','panmove','panend','pancancel','panleft','panright','panup','pandown',\n 'pinch','pinchstart','pinchmove','pinchend','pinchcancel','pinchin','pinchout',\n 'press','pressup',\n 'rotate','rotatestart','rotatemove','rotateend','rotatecancel',\n 'swipe','swipeleft','swiperight','swipeup','swipedown',\n 'tap'\n]\n\n/**\n * Maps the gestures to their \"main gesture\" (the name of the recognizer)\n * @type {Object}\n */\nexport const gestureMap = {\n pan: 'pan',\n panstart: 'pan',\n panmove: 'pan',\n panend: 'pan',\n pancancel: 'pan',\n panleft: 'pan',\n panright: 'pan',\n panup: 'pan',\n pandown: 'pan',\n pinch: 'pinch',\n pinchstart: 'pinch',\n pinchmove: 'pinch',\n pinchend: 'pinch',\n pinchcancel: 'pinch',\n pinchin: 'pinch',\n pinchout: 'pinch',\n press: 'press',\n pressup: 'press',\n rotate: 'rotate',\n rotatestart: 'rotate',\n rotatemove: 'rotate',\n rotateend: 'rotate',\n rotatecancel: 'rotate',\n swipe: 'swipe',\n swipeleft: 'swipe',\n swiperight: 'swipe',\n swipeup: 'swipe',\n swipedown: 'swipe',\n tap: 'tap'\n}\n","import Hammer from 'hammerjs'\n\nimport {\n createProp,\n capitalize,\n guardDirections,\n gestures,\n gestureMap,\n directions,\n assign,\n config,\n customEvents\n} from './utils'\n\nexport default {\n props: {\n options: createProp(),\n tapOptions: createProp(),\n panOptions: createProp(),\n pinchOptions: createProp(),\n pressOptions: createProp(),\n rotateOptions: createProp(),\n swipeOptions: createProp(),\n tag: { type: String, default: 'div' },\n enabled: {\n default: true,\n type: [Boolean, Object],\n\n }\n },\n\n mounted() {\n if (!this.$isServer) {\n this.hammer = new Hammer.Manager(this.$el, this.options)\n this.recognizers = {} // not reactive\n this.setupBuiltinRecognizers()\n this.setupCustomRecognizers()\n this.updateEnabled(this.enabled)\n }\n },\n destroyed() {\n if (!this.$isServer) {\n this.hammer.destroy()\n }\n },\n\n watch: {\n enabled: {\n deep: true,\n handler(...args) {\n this.updateEnabled(...args)\n }\n }\n },\n\n methods: {\n\n setupBuiltinRecognizers() {\n // Built-in Hammer events\n // We check weither any event callbacks are registered\n // for the gesture, and if so, add a Recognizer\n for (let i = 0; i < gestures.length; i++) {\n const gesture = gestures[i]\n if (this._events[gesture]) {\n // get the main gesture (e.g. 'panstart' -> 'pan')\n const mainGesture = gestureMap[gesture]\n //merge global and local options\n const options = assign({}, (config[mainGesture] || {}), this[`${mainGesture}Options`])\n // add recognizer for this main gesture\n this.addRecognizer(mainGesture, options)\n // register Event Emit for the specific gesture\n this.addEvent(gesture)\n }\n }\n },\n\n setupCustomRecognizers() {\n // Custom events\n // We get the customGestures and options from the\n // customEvents object, then basically do the same check\n // as we did for the built-in events.\n const gestures = Object.keys(customEvents)\n\n for (let i = 0; i < gestures.length; i++) {\n\n const gesture = gestures[i]\n\n if (this._events[gesture]) {\n const opts = customEvents[gesture]\n const localCustomOpts = this[`${gesture}Options`] || {}\n const options = assign({}, opts, localCustomOpts)\n this.addRecognizer(gesture, options, {mainGesture: options.type})\n this.addEvent(gesture)\n }\n }\n },\n\n /**\n * Registers a new Recognizer with the manager and saves it on the component\n * instance\n * @param {String} gesture See utils.js -> gestures\n * @param {Object} options Hammer options\n * @param {String} mainGesture if gesture is a custom event name, mapping to utils.js -> gestures\n */\n addRecognizer: function addRecognizer(gesture, options, { mainGesture } = {}) {\n // create recognizer, e.g. new Hammer['Swipe'](options)\n if (!this.recognizers[gesture]) {\n const recognizer = new Hammer[capitalize(mainGesture || gesture)](guardDirections(options))\n this.recognizers[gesture] = recognizer\n this.hammer.add(recognizer)\n recognizer.recognizeWith(this.hammer.recognizers)\n }\n },\n\n addEvent(gesture) {\n this.hammer.on(gesture, (e) => this.$emit(gesture, e))\n },\n\n // Enabling / Disabling certain recognizers.\n\n /**\n * Called when the `enabled` prop changes, and during mounted()\n * It enables/disables values according to the value of the `emabled` prop\n * @param {Boolean|Object} newVal If an object: { recognizer: true|false }\n * @param {Boolean|Object} oldVal The previous value\n * @return {undefined}\n */\n updateEnabled: function updateEnabled(newVal, oldVal) {\n if (newVal === true) {\n this.enableAll()\n\n } else if (newVal === false) {\n this.disableAll()\n\n } else if (typeof newVal === 'object') {\n const keys = Object.keys(newVal)\n\n for (let i = 0; i < keys.length; i++) {\n const event = keys[i]\n\n if (this.recognizers[event]) {\n newVal[event]\n ? this.enable(event)\n : this.disable(event)\n }\n }\n }\n },\n\n enable(r) {\n const recognizer = this.recognizers[r]\n if (!recognizer.options.enable) {\n recognizer.set({ enable: true })\n }\n },\n disable(r) {\n const recognizer = this.recognizers[r]\n if (recognizer.options.enable) {\n recognizer.set({ enable: false })\n }\n },\n toggle(r) {\n const recognizer = this.recognizers[r]\n if (recognizer) {\n recognizer.options.enable\n ? this.disable(r)\n : this.enable(r)\n }\n },\n\n enableAll(r) {\n this.toggleAll({ enable: true })\n },\n disableAll(r) {\n this.toggleAll({ enable: false })\n },\n toggleAll({ enable }) {\n const keys = Object.keys(this.recognizers)\n for (let i = 0; i < keys.length; i++) {\n const r = this.recognizers[keys[i]]\n if (r.options.enable !== enable) {\n r.set({ enable: enable })\n }\n }\n },\n\n isEnabled(r) {\n return this.recognizers[r] && this.recognizers[r].options.enable\n }\n },\n\n render(h) {\n return h(this.tag, {}, this.$slots.default)\n }\n}\n","import Component from './component'\nimport { assign, config, customEvents } from './utils'\n\nlet installed = false\n\nconst vueTouch = { config, customEvents }\n\n// Plugin API\n// *********\nvueTouch.install = function install(Vue, opts = {}) {\n const name = opts.name || 'v-touch'\n Vue.component(name, assign(Component, { name }))\n installed = true\n}.bind(vueTouch)\n\nvueTouch.registerCustomEvent = function registerCustomEvent(event, options = {}) {\n if (installed) {\n console.warn(`\n [vue-touch]: Custom Event '${event}' couldn't be added to vue-touch.\n Custom Events have to be registered before installing the plugin.\n `)\n return\n }\n options.event = event\n customEvents[event] = options\n Component.props[`${event}Options`] = {\n type: Object,\n default() { return {} }\n }\n}.bind(vueTouch)\n\nvueTouch.component = Component\n\n// Utilities\n// ********\n\nif (typeof exports == \"object\") {\n module.exports = vueTouch\n} else if (typeof define == \"function\" && define.amd) {\n define([], function(){ return vueTouch })\n} else if (typeof window !== 'undefined' && window.Vue) {\n window.VueTouch = vueTouch\n Vue.use(vueTouch)\n}\n"],"names":["let","const","i","this","gestures"],"mappings":"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"} \ No newline at end of file diff --git a/dist/vue-touch.min.js b/dist/vue-touch.min.js index 82a667f..9be236b 100644 --- a/dist/vue-touch.min.js +++ b/dist/vue-touch.min.js @@ -1 +1 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(require("hammerjs")):"function"==typeof define&&define.amd?define(["hammerjs"],n):n(e.Hammer)}(this,function(e){"use strict";function n(e){for(var n=[],t=arguments.length-1;t-- >0;)n[t]=arguments[t+1];for(var i=0;i-1&&e.hasOwnProperty(i)?n.direction=e[i]:console.warn("[vue-touch] invalid direction: "+t)}return n}e="default"in e?e.default:e;var r=["up","down","left","right","horizontal","vertical","all"],a={},s={},p=["pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap"],c={pan:"pan",panstart:"pan",panmove:"pan",panend:"pan",pancancel:"pan",panleft:"pan",panright:"pan",panup:"pan",pandown:"pan",pinch:"pinch",pinchstart:"pinch",pinchmove:"pinch",pinchend:"pinch",pinchcancel:"pinch",pinchin:"pinch",pinchout:"pinch",press:"press",pressup:"press",rotate:"rotate",rotatestart:"rotate",rotatemove:"rotate",rotateend:"rotate",rotatecancel:"rotate",swipe:"swipe",swipeleft:"swipe",swiperight:"swipe",swipeup:"swipe",swipedown:"swipe",tap:"tap"},l={props:{tapOptions:t(),panOptions:t(),pinchOptions:t(),pressOptions:t(),rotateOptions:t(),swipeOptions:t(),tag:{type:String,default:"div"},enabled:{default:!0,type:[Boolean,Object]}},mounted:function(){this.$isServer||(this.hammer=new e.Manager(this.$el),this.recognizers={},this.setupBuiltinRecognizers(),this.setupCustomRecognizers(),this.updateEnabled(this.enabled))},destroyed:function(){this.$isServer||this.hammer.destroy()},watch:{enabled:{deep:!0,handler:function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];(t=this).updateEnabled.apply(t,e);var t}}},methods:{setupBuiltinRecognizers:function(){for(var e=this,t=0;t0;)n[t]=arguments[t+1];for(var i=0;i-1&&e.hasOwnProperty(i)?n.direction=e[i]:console.warn("[vue-touch] invalid direction: "+t)}return n}e="default"in e?e.default:e;var r=["up","down","left","right","horizontal","vertical","all"],a={},s={},p=["pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap"],c={pan:"pan",panstart:"pan",panmove:"pan",panend:"pan",pancancel:"pan",panleft:"pan",panright:"pan",panup:"pan",pandown:"pan",pinch:"pinch",pinchstart:"pinch",pinchmove:"pinch",pinchend:"pinch",pinchcancel:"pinch",pinchin:"pinch",pinchout:"pinch",press:"press",pressup:"press",rotate:"rotate",rotatestart:"rotate",rotatemove:"rotate",rotateend:"rotate",rotatecancel:"rotate",swipe:"swipe",swipeleft:"swipe",swiperight:"swipe",swipeup:"swipe",swipedown:"swipe",tap:"tap"},l={props:{options:t(),tapOptions:t(),panOptions:t(),pinchOptions:t(),pressOptions:t(),rotateOptions:t(),swipeOptions:t(),tag:{type:String,default:"div"},enabled:{default:!0,type:[Boolean,Object]}},mounted:function(){this.$isServer||(this.hammer=new e.Manager(this.$el,this.options),this.recognizers={},this.setupBuiltinRecognizers(),this.setupCustomRecognizers(),this.updateEnabled(this.enabled))},destroyed:function(){this.$isServer||this.hammer.destroy()},watch:{enabled:{deep:!0,handler:function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];(t=this).updateEnabled.apply(t,e);var t}}},methods:{setupBuiltinRecognizers:function(){for(var e=this,t=0;t Date: Tue, 24 Jan 2017 18:38:16 +0100 Subject: [PATCH 08/11] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 99f063e..5cecab2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-touch", - "version": "2.0.0-beta.3", + "version": "2.0.0-beta.4", "main": "dist/vue-touch.js", "files": [ "dist/vue-touch.js", From 43d0023cabff40c498fef6863349c126131c2e57 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Sat, 11 Feb 2017 14:57:30 +0100 Subject: [PATCH 09/11] BATMAN! --- README.md | 25 +++++++++++++++++++++++++ example/example.js | 4 ++++ example/index.html | 12 ++++++++---- src/component.js | 43 ++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 79 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index badef2d..a198ef1 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,31 @@ VueTouch keeps that from you and accepts simple strings as directions: const directions = ['up', 'down', 'left', 'right', 'horizontal', 'vertical', 'all'] ``` +#### `recognize-with` & `require-failure` Props + +To define which gestures should be recognized together, use `recognize-with`: + +```html + +``` + +If you a recognizer to trigger only if another one failes, use `require-failure`: +```html + + + +``` + #### The 'enabled' Prop |Prop|allowed Values| diff --git a/example/example.js b/example/example.js index cae595c..055a879 100644 --- a/example/example.js +++ b/example/example.js @@ -33,6 +33,10 @@ new Vue({ delete e.target this.event = e console.log(e) + }, + testdouble: function (e) { + console.log('doubletap') + this.test(e) } } }) diff --git a/example/index.html b/example/index.html index b6102f0..cfbc475 100644 --- a/example/index.html +++ b/example/index.html @@ -14,13 +14,17 @@
-

{{event.type}}

- --> +
{{event}}
diff --git a/src/component.js b/src/component.js index e560ff7..1c130cb 100644 --- a/src/component.js +++ b/src/component.js @@ -22,6 +22,8 @@ export default { rotateOptions: createProp(), swipeOptions: createProp(), tag: { type: String, default: 'div' }, + recognizeWith: {type: Object, default: () => ({}) }, + requireFailure: {type: Object, default: () => ({}) }, enabled: { default: true, type: [Boolean, Object], @@ -35,6 +37,7 @@ export default { this.recognizers = {} // not reactive this.setupBuiltinRecognizers() this.setupCustomRecognizers() + this.setupRecognizerDependencies() this.updateEnabled(this.enabled) } }, @@ -95,6 +98,43 @@ export default { } }, + setupRecognizerDependencies() { + + /** + * THIS DOESNT WORK, DOUBLETAP NOT RECOGNIZED - SEE EXAMPLE + */ + const rW = this.recognizeWith + + if (rW && typeof rW === 'object') { + const keys = Object.keys(rW) + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + if (!Array.isArray(rW[key])) { + console.error('[v-touch]: recognize-with expects an object whose property values are arrays.') + return + } + const recs = rW[key].map(name => this.recognizers[name]) + this.recognizers[key].recognizeWith(recs) + console.log('recognize-with', recs) + } + } + + const rF = this.requireFailure + if (rF && typeof rF === 'object') { + const keys = Object.keys(rF) + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + if (!Array.isArray(rF[key])) { + console.error('[v-touch]: require-failure expects an object whose property values are arrays.') + return + } + const recs = rF[key].map(name => this.recognizers[name]) + this.recognizers[key].requireFailure(recs) + console.log('require-failure', recs) + } + } + }, + /** * Registers a new Recognizer with the manager and saves it on the component * instance @@ -108,7 +148,8 @@ export default { const recognizer = new Hammer[capitalize(mainGesture || gesture)](guardDirections(options)) this.recognizers[gesture] = recognizer this.hammer.add(recognizer) - recognizer.recognizeWith(this.hammer.recognizers) + // the following line is unnecessary with the new recognizeWith prop. + // recognizer.recognizeWith(this.hammer.recognizers) } }, From 67064a7e8f01e3238a85cc396f5e8ec0284cd95e Mon Sep 17 00:00:00 2001 From: Thorsten Date: Thu, 25 May 2017 22:47:38 +0200 Subject: [PATCH 10/11] little changes to examples --- example/example.js | 6 +++--- example/index.html | 6 ++++-- src/component.js | 2 -- src/index.js | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/example/example.js b/example/example.js index 055a879..db82cfb 100644 --- a/example/example.js +++ b/example/example.js @@ -3,7 +3,7 @@ var Vue = require('vue') var VueTouch if (process.env.NODE_ENV === 'development') { - VueTouch = require('../src') + VueTouch = require('../src').default } else { VueTouch = require('../dist/vue-touch.js') @@ -29,10 +29,10 @@ new Vue({ state: {rotate: true, doubletap: true} }, methods: { - test: function (e) { + test: function (e, name = '') { delete e.target this.event = e - console.log(e) + console.log(e, name) }, testdouble: function (e) { console.log('doubletap') diff --git a/example/index.html b/example/index.html index cfbc475..7fd2d17 100644 --- a/example/index.html +++ b/example/index.html @@ -15,13 +15,15 @@

{{event.type}}

diff --git a/src/component.js b/src/component.js index 1c130cb..fcbd428 100644 --- a/src/component.js +++ b/src/component.js @@ -115,7 +115,6 @@ export default { } const recs = rW[key].map(name => this.recognizers[name]) this.recognizers[key].recognizeWith(recs) - console.log('recognize-with', recs) } } @@ -130,7 +129,6 @@ export default { } const recs = rF[key].map(name => this.recognizers[name]) this.recognizers[key].requireFailure(recs) - console.log('require-failure', recs) } } }, diff --git a/src/index.js b/src/index.js index 50a848a..b1ea9a9 100644 --- a/src/index.js +++ b/src/index.js @@ -38,4 +38,4 @@ vueTouch.component = Component Vue.use(vueTouch) } -export default vueTouch +export { vueTouch as default } From 4c36808a4e344fb7d299a33bc8e1f66177f8803f Mon Sep 17 00:00:00 2001 From: Rahul Kadyan Date: Sun, 28 May 2017 18:20:56 +0530 Subject: [PATCH 11/11] Refactoring --- build/rollup.config.prod.js | 23 ---- build/rollup.js | 45 +++++++ package.json | 5 +- src/component.js | 200 ++++++++++++------------------- src/events.js | 14 +++ src/hammer-ssr.js | 2 +- src/index.js | 47 +++----- src/utils.js | 66 ++++------ test/e2e/index.js | 19 +-- test/unit/builtinEvents.js | 5 +- test/unit/customEvents.js | 7 +- test/unit/enabledProp.js | 3 - test/unit/helpers/vue-touch.js | 12 +- test/unit/index.js | 1 - test/unit/publicMethods.js | 1 - test/unit/registerCustomEvent.js | 4 +- 16 files changed, 203 insertions(+), 251 deletions(-) delete mode 100644 build/rollup.config.prod.js create mode 100644 build/rollup.js create mode 100644 src/events.js diff --git a/build/rollup.config.prod.js b/build/rollup.config.prod.js deleted file mode 100644 index ee938d9..0000000 --- a/build/rollup.config.prod.js +++ /dev/null @@ -1,23 +0,0 @@ -import buble from 'rollup-plugin-buble' -import commonjs from 'rollup-plugin-commonjs' -import nodeResolve from 'rollup-plugin-node-resolve' -import cleanup from 'rollup-plugin-cleanup' - -export default { - entry: './src/index.js', - dest: './dist/vue-touch.js', - // Module settings - format: 'umd', - external: ['hammerjs'], - globals: { - hammerjs: 'Hammer' - }, - moduleName: 'VueTouch', - - plugins: [ - buble(), - nodeResolve({ jsnext: true, main: true }), - commonjs(), - cleanup() - ] -} diff --git a/build/rollup.js b/build/rollup.js new file mode 100644 index 0000000..a2cb1a9 --- /dev/null +++ b/build/rollup.js @@ -0,0 +1,45 @@ +const buble = require('rollup-plugin-buble'); +const commonjs = require('rollup-plugin-commonjs'); +const nodeResolve = require('rollup-plugin-node-resolve'); +const cleanup = require('rollup-plugin-cleanup'); +const { rollup } = require('rollup'); +const path = require('path'); + +const bubbleConfig = { + transforms: { dangerousForOf: true }, +}; + +// UMD +rollup({ + entry: path.resolve(__dirname, '../src/index.js'), + sourceMap: true, + external: ['hammerjs'], + + plugins: [ + buble(bubbleConfig), + nodeResolve({ jsnext: true, main: true }), + commonjs(), + cleanup() + ] +}).then(bundle => bundle.write({ + format: 'umd', + exports: 'named', + moduleName: 'VueTouch', + globals: { + hammerjs: 'Hammer' + }, + dest: path.join(path.resolve(__dirname, '../dist'), 'vue-touch.js') +})) + +// ESM +rollup({ + entry: path.resolve(__dirname, '../src/index.js'), + external: ['hammerjs'], + plugins: [ + buble(bubbleConfig), + cleanup() + ] +}).then(bundle => bundle.write({ + format: 'es', + dest: path.join(path.resolve(__dirname, '../dist'), 'vue-touch.esm.js'), +})); diff --git a/package.json b/package.json index 5cecab2..e8301c5 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,11 @@ "name": "vue-touch", "version": "2.0.0-beta.4", "main": "dist/vue-touch.js", + "jsnext:main": "dist/vue-touch.esm.js", + "module": "dist/vue-touch.esm.js", "files": [ "dist/vue-touch.js", + "dist/vue-touch.esm.js", "dist/vue-touch.js.map", "dist/vue-touch.min.js", "dist/hammer-ssr.js" @@ -39,7 +42,7 @@ "vue": "^2.0.0" }, "scripts": { - "build": "node_modules/.bin/rollup -m -c build/rollup.config.prod.js && uglifyjs dist/vue-touch.js -c -m > dist/vue-touch.min.js && cp src/hammer-ssr.js dist/", + "build": "node build/rollup.js && uglifyjs dist/vue-touch.js -c -m > dist/vue-touch.min.js && cp src/hammer-ssr.js dist/", "dev": "node build/devserver.js", "test:watch": "NODE_ENV=development node_modules/.bin/ava --watch --verbose", "test:unit:dev": "NODE_ENV=development node_modules/.bin/ava --verbose", diff --git a/src/component.js b/src/component.js index fcbd428..8522f10 100644 --- a/src/component.js +++ b/src/component.js @@ -1,46 +1,52 @@ -import Hammer from 'hammerjs' +import Hammer from 'hammerjs' import { createProp, capitalize, guardDirections, - gestures, - gestureMap, - directions, - assign, - config, - customEvents + normalizeGesture, + objectHasArrayValues, } from './utils' +import { + customEvents +} from './events' + export default { props: { options: createProp(), - tapOptions: createProp(), - panOptions: createProp(), - pinchOptions: createProp(), - pressOptions: createProp(), - rotateOptions: createProp(), - swipeOptions: createProp(), + tap: createProp(), + pan: createProp(), + pinch: createProp(), + press: createProp(), + rotate: createProp(), + swipe: createProp(), tag: { type: String, default: 'div' }, - recognizeWith: {type: Object, default: () => ({}) }, - requireFailure: {type: Object, default: () => ({}) }, + recognizeWith: { + type: Object, + default: () => ({}), + validate: objectHasArrayValues, + }, + requireFailure: { + type: Object, default: () => ({}), + validate: objectHasArrayValues, + }, enabled: { default: true, type: [Boolean, Object], - } }, mounted() { if (!this.$isServer) { this.hammer = new Hammer.Manager(this.$el, this.options) - this.recognizers = {} // not reactive - this.setupBuiltinRecognizers() - this.setupCustomRecognizers() + this.recognizers = {} + this.setupRecognizers() this.setupRecognizerDependencies() this.updateEnabled(this.enabled) } }, + destroyed() { if (!this.$isServer) { this.hammer.destroy() @@ -58,84 +64,42 @@ export default { methods: { - setupBuiltinRecognizers() { - // Built-in Hammer events - // We check weither any event callbacks are registered - // for the gesture, and if so, add a Recognizer - for (let i = 0; i < gestures.length; i++) { - const gesture = gestures[i] - if (this._events[gesture]) { - // get the main gesture (e.g. 'panstart' -> 'pan') - const mainGesture = gestureMap[gesture] - //merge global and local options - const options = assign({}, (config[mainGesture] || {}), this[`${mainGesture}Options`]) - // add recognizer for this main gesture - this.addRecognizer(mainGesture, options) - // register Event Emit for the specific gesture + /** + * Register recognizers for any event that matches + * a defined gesture or custom event. + */ + setupRecognizers() { + for (let gesture of Object.keys(this._events)) { + if (normalizeGesture(gesture)) { this.addEvent(gesture) - } - } - }, - - setupCustomRecognizers() { - // Custom events - // We get the customGestures and options from the - // customEvents object, then basically do the same check - // as we did for the built-in events. - const gestures = Object.keys(customEvents) - - for (let i = 0; i < gestures.length; i++) { - const gesture = gestures[i] - - if (this._events[gesture]) { - const opts = customEvents[gesture] - const localCustomOpts = this[`${gesture}Options`] || {} - const options = assign({}, opts, localCustomOpts) - this.addRecognizer(gesture, options, {mainGesture: options.type}) + gesture = normalizeGesture(gesture) + const options = Object.assign({}, this.$options.config[gesture] || {}, this[gesture]) + this.addRecognizer(gesture, options) + } else if (customEvents(gesture)) { this.addEvent(gesture) + + const options = Object.assign({}, customEvents(gesture), this[gesture]) + this.addRecognizer(gesture, options, { mainGesture: options.type }) + } else { + throw new Error(`Unknown gesture: ${gesture}`) } } }, setupRecognizerDependencies() { - - /** - * THIS DOESNT WORK, DOUBLETAP NOT RECOGNIZED - SEE EXAMPLE - */ - const rW = this.recognizeWith - - if (rW && typeof rW === 'object') { - const keys = Object.keys(rW) - for (let i = 0; i < keys.length; i++) { - const key = keys[i] - if (!Array.isArray(rW[key])) { - console.error('[v-touch]: recognize-with expects an object whose property values are arrays.') - return - } - const recs = rW[key].map(name => this.recognizers[name]) - this.recognizers[key].recognizeWith(recs) - } + for (const [key, value] of Object.entries(this.recognizeWith)) { + this.recognizers[key] && this.recognizers[key].recognizeWith(value.map(name => this.recognizers[name])) } - const rF = this.requireFailure - if (rF && typeof rF === 'object') { - const keys = Object.keys(rF) - for (let i = 0; i < keys.length; i++) { - const key = keys[i] - if (!Array.isArray(rF[key])) { - console.error('[v-touch]: require-failure expects an object whose property values are arrays.') - return - } - const recs = rF[key].map(name => this.recognizers[name]) - this.recognizers[key].requireFailure(recs) - } + for (const [key, value] of Object.entries(this.requireFailure)) { + this.recognizers[key] && this.recognizers[key].requireFailure(value.map(name => this.recognizers[name])) } }, /** - * Registers a new Recognizer with the manager and saves it on the component - * instance + * Registers a new Recognizer with the manager and saves it on the component instance + * * @param {String} gesture See utils.js -> gestures * @param {Object} options Hammer options * @param {String} mainGesture if gesture is a custom event name, mapping to utils.js -> gestures @@ -143,23 +107,18 @@ export default { addRecognizer: function addRecognizer(gesture, options, { mainGesture } = {}) { // create recognizer, e.g. new Hammer['Swipe'](options) if (!this.recognizers[gesture]) { - const recognizer = new Hammer[capitalize(mainGesture || gesture)](guardDirections(options)) - this.recognizers[gesture] = recognizer - this.hammer.add(recognizer) - // the following line is unnecessary with the new recognizeWith prop. - // recognizer.recognizeWith(this.hammer.recognizers) + this.recognizers[gesture] = new Hammer[capitalize(mainGesture || gesture)](guardDirections(options)) + this.hammer.add(this.recognizers[gesture]) } }, addEvent(gesture) { - this.hammer.on(gesture, (e) => this.$emit(gesture, e)) + this.hammer.on(gesture, e => this.$emit(gesture, e)) }, - // Enabling / Disabling certain recognizers. - /** * Called when the `enabled` prop changes, and during mounted() - * It enables/disables values according to the value of the `emabled` prop + * It enables/disables values according to the value of the `enabled` prop * @param {Boolean|Object} newVal If an object: { recognizer: true|false } * @param {Boolean|Object} oldVal The previous value * @return {undefined} @@ -167,64 +126,55 @@ export default { updateEnabled: function updateEnabled(newVal, oldVal) { if (newVal === true) { this.enableAll() - } else if (newVal === false) { this.disableAll() - } else if (typeof newVal === 'object') { - const keys = Object.keys(newVal) - - for (let i = 0; i < keys.length; i++) { - const event = keys[i] - - if (this.recognizers[event]) { - newVal[event] - ? this.enable(event) - : this.disable(event) - } + for (const [event, status] of Object.entries(newVal)) { + this.recognizers[event] && status ? this.enable(event) : this.disable(event) } } }, - enable(r) { - const recognizer = this.recognizers[r] + enable(gesture) { + const recognizer = this.recognizers[gesture] if (!recognizer.options.enable) { recognizer.set({ enable: true }) } }, - disable(r) { - const recognizer = this.recognizers[r] + + disable(gesture) { + const recognizer = this.recognizers[gesture] if (recognizer.options.enable) { recognizer.set({ enable: false }) } }, - toggle(r) { - const recognizer = this.recognizers[r] + + toggle(gesture) { + const recognizer = this.recognizers[gesture] + if (recognizer) { - recognizer.options.enable - ? this.disable(r) - : this.enable(r) + recognizer.options.enable ? this.disable(gesture) : this.enable(gesture) } }, - enableAll(r) { - this.toggleAll({ enable: true }) + enableAll() { + this.setAll({ enable: true }) }, - disableAll(r) { - this.toggleAll({ enable: false }) + + disableAll() { + this.setAll({ enable: false }) }, - toggleAll({ enable }) { - const keys = Object.keys(this.recognizers) - for (let i = 0; i < keys.length; i++) { - const r = this.recognizers[keys[i]] - if (r.options.enable !== enable) { - r.set({ enable: enable }) + + setAll({ enable }) { + for (const recognizer of Object.values(this.recognizers)) { + if (recognizer.options.enable !== enable) { + recognizer.set({ enable }) } } }, - isEnabled(r) { - return this.recognizers[r] && this.recognizers[r].options.enable + isEnabled(gesture) { + return this.recognizers[gesture] && this.recognizers[gesture].options.enable } }, diff --git a/src/events.js b/src/events.js new file mode 100644 index 0000000..82670fc --- /dev/null +++ b/src/events.js @@ -0,0 +1,14 @@ +import Component from './component' +import { createProp } from './utils' + +const events = {} + +export const customEvents = (name) => name === undefined ? events : events[name] + +export const register = (event, options = {}) => { + options.event = event + events[event] = options + if (!(event in Component.props)) { + Component.props[event] = createProp() + } +} diff --git a/src/hammer-ssr.js b/src/hammer-ssr.js index 32b8f0e..b7cd66f 100644 --- a/src/hammer-ssr.js +++ b/src/hammer-ssr.js @@ -1,4 +1,4 @@ -module.exports = function Hammer { +export default function Hammer() { console.log(`[vue-touch] Your should never see this message. When you do, your code tried to call 'new Hammer(), but your app has included a stub for HammerJS, provided by vue-touch, instead of the actual HammerJS library. `) diff --git a/src/index.js b/src/index.js index b1ea9a9..f66e7f3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,41 +1,32 @@ import Component from './component' -import { assign, config, customEvents } from './utils' +import { customEvents, register } from './events' -let installed = false +function plugin(Vue, options = {}) { + if (plugin.installed === true) return + plugin.installed = true + Component.config = plugin.config + Vue.component(options.name || 'v-touch', Component) +} -const vueTouch = { config, customEvents } +plugin.config = {} -// Plugin API -// ********* -vueTouch.install = function install(Vue, opts = {}) { - const name = opts.name || 'v-touch' - Vue.component(name, assign(Component, { name })) - installed = true -}.bind(vueTouch) +if (typeof window !== 'undefined' && window.Vue) { + window.Vue.use(plugin) +} -vueTouch.registerCustomEvent = function registerCustomEvent(event, options = {}) { - if (installed) { +export default plugin +export { + Component, + customEvents, +} +export const registerCustomEvent = (event, options) => { + if (plugin.installed) { console.warn(` [vue-touch]: Custom Event '${event}' couldn't be added to vue-touch. Custom Events have to be registered before installing the plugin. `) return } - options.event = event - customEvents[event] = options - Component.props[`${event}Options`] = { - type: Object, - default() { return {} } - } -}.bind(vueTouch) - -vueTouch.component = Component -// Utilities -// ******** - if ( window !== undefined && window.Vue) { - window.VueTouch = vueTouch - Vue.use(vueTouch) + register(event, options) } - -export { vueTouch as default } diff --git a/src/utils.js b/src/utils.js index 1d06a06..50473f5 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,22 +1,4 @@ -import Hammer from 'hammerjs' // used by guardDirections - -/** - * Tiny Object.assign replacement - * @param {Object} target Any type of object - * @param {Object} sources Any type of object - * @return {Object} Merged Object - */ -export function assign(target, ...sources) { - for (let i = 0; i < sources.length; i++) { - const source = sources[i] - const keys = Object.keys(source) - for (let i = 0; i < keys.length; i++) { - const key = keys[i] - target[key] = source[key] - } - } - return target -} +import Hammer from 'hammerjs' /** * Small helper method to generate prop options for all the @@ -26,30 +8,32 @@ export function assign(target, ...sources) { export function createProp() { return { type: Object, - default: function() { return {} } + default: function () { + return {} + } } } -export function capitalize (str) { +export function capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1) } /** * Directions that VueTouch understands. - * Will be tanslated to Hammer-style directions by guardDirections() + * Will be translated to Hammer-style directions by guardDirections() * @type {Array} */ export const directions = ['up', 'down', 'left', 'right', 'horizontal', 'vertical', 'all'] /** * Translates VueTouch direction names into Hammer Direction numbers. - * @param {Objects} options Hammer Options + * @param {Object} options Hammer Options * @return {Object} [Hammer Options] */ -export function guardDirections (options) { - var dir = options.direction +export function guardDirections(options) { + const dir = options.direction if (typeof dir === 'string') { - var hammerDirection = 'DIRECTION_' + dir.toUpperCase() + const hammerDirection = 'DIRECTION_' + dir.toUpperCase() if (directions.indexOf(dir) > -1 && Hammer.hasOwnProperty(hammerDirection)) { options.direction = Hammer[hammerDirection] } else { @@ -60,33 +44,23 @@ export function guardDirections (options) { } /** - * This pobject will contain global options for recognizers + * This object will contain global options for recognizers * see index.js -> vueTouch.config * @type {Object} */ -export const config = { - -} - -/** - * This object will contain recognizer options for custom events. - * see index.js -> registerCustomEvent - * @type {Object} - */ -export const customEvents = { - -} +export const config = {} /** * Names of all the builtin gestures of Hammer + * * @type {Array} */ export const gestures = [ - 'pan','panstart','panmove','panend','pancancel','panleft','panright','panup','pandown', - 'pinch','pinchstart','pinchmove','pinchend','pinchcancel','pinchin','pinchout', - 'press','pressup', - 'rotate','rotatestart','rotatemove','rotateend','rotatecancel', - 'swipe','swipeleft','swiperight','swipeup','swipedown', + 'pan', 'panstart', 'panmove', 'panend', 'pancancel', 'panleft', 'panright', 'panup', 'pandown', + 'pinch', 'pinchstart', 'pinchmove', 'pinchend', 'pinchcancel', 'pinchin', 'pinchout', + 'press', 'pressup', + 'rotate', 'rotatestart', 'rotatemove', 'rotateend', 'rotatecancel', + 'swipe', 'swipeleft', 'swiperight', 'swipeup', 'swipedown', 'tap' ] @@ -125,3 +99,7 @@ export const gestureMap = { swipedown: 'swipe', tap: 'tap' } + +export const normalizeGesture = name => gestureMap[name] + +export const objectHasArrayValues = value => typeof value === 'object' && Object.values(value).every(any => Array.isArray(any)) \ No newline at end of file diff --git a/test/e2e/index.js b/test/e2e/index.js index dba5980..649c0fa 100644 --- a/test/e2e/index.js +++ b/test/e2e/index.js @@ -1,12 +1,13 @@ -var server = require( '../../build/devserver.js') +const server = require('../../build/devserver.js') // initialize Testcafe -/* const createTestCafe = require('testcafe'); -const testCafe = await createTestCafe('localhost', 1337, 1338); -const runner = testcafe.createRunner(); +(async function () { + const createTestCafe = require('testcafe'); + const testCafe = await createTestCafe('localhost', 1337, 1338); + const runner = testcafe.createRunner(); -const failedCount = await runner - .src('tests/e2e/fixtures') - .browsers(['chrome']) - .run(); -*/ + const failedCount = await runner + .src('tests/e2e/fixtures') + .browsers(['chrome']) + .run(); +})(); diff --git a/test/unit/builtinEvents.js b/test/unit/builtinEvents.js index 21c1e76..e121da1 100644 --- a/test/unit/builtinEvents.js +++ b/test/unit/builtinEvents.js @@ -2,15 +2,12 @@ import test from 'ava' import sinon from 'sinon' import Vue from 'vue/dist/vue.common' import VueTouch from './helpers/vue-touch' -import Hammer from 'hammerjs' Vue.use(VueTouch) import { createFromTemplate, hasRecognizer, hasHandler, - isEnabled, isDisabled, - allEnabled, allDisabled } from './helpers' @@ -49,7 +46,7 @@ test('Uses global options from VueTouch.config', t => { test('Options prop overwrites global config', t => { const vt = createFromTemplate(` - + `) const options = vt.recognizers['swipe'].options t.true(options.threshold === 15) diff --git a/test/unit/customEvents.js b/test/unit/customEvents.js index fa6a21d..1c04b6a 100644 --- a/test/unit/customEvents.js +++ b/test/unit/customEvents.js @@ -1,10 +1,9 @@ import test from 'ava' import Vue from 'vue/dist/vue.common' -import VueTouch from './helpers/vue-touch' -import Hammer from 'hammerjs' +import VueTouch, { registerCustomEvent } from './helpers/vue-touch' -VueTouch.registerCustomEvent('doubletap', { +registerCustomEvent('doubletap', { type: 'tap', taps: 2 }) @@ -32,7 +31,7 @@ test('Custom Event local options work', t => { vt = createFromTemplate(` `) diff --git a/test/unit/enabledProp.js b/test/unit/enabledProp.js index eb5ee17..110c568 100644 --- a/test/unit/enabledProp.js +++ b/test/unit/enabledProp.js @@ -2,7 +2,6 @@ import test from 'ava' import Vue from 'vue/dist/vue.common' import VueTouch from './helpers/vue-touch' -import Hammer from 'hammerjs' Vue.use(VueTouch) @@ -12,8 +11,6 @@ import { allEnabled, allDisabled } from './helpers' -let vt - test('prop is true by default & events are enabled', t => { t.plan(2) diff --git a/test/unit/helpers/vue-touch.js b/test/unit/helpers/vue-touch.js index 6bcb85b..07f8bc5 100644 --- a/test/unit/helpers/vue-touch.js +++ b/test/unit/helpers/vue-touch.js @@ -1,7 +1,9 @@ -if (process.env.NODE_ENV === 'development') { - var vueTouch = require('../../../src/index.js') -} else { - var vueTouch = require('../../../dist/vue-touch.js') +import devVueTouch, { registerCustomEvent as devRegisterCustomEvent } from '../../../src/index' +import VueTouch, { registerCustomEvent as prodRegisterCustomEvent } from '../../../dist/vue-touch' + +function checkDev(a, b) { + return process.env.NODE_ENV === 'development' ? a : b } -export default vueTouch +export default checkDev(devVueTouch, VueTouch) +export const registerCustomEvent = checkDev(devRegisterCustomEvent, prodRegisterCustomEvent) diff --git a/test/unit/index.js b/test/unit/index.js index f56c107..801e20a 100644 --- a/test/unit/index.js +++ b/test/unit/index.js @@ -2,7 +2,6 @@ import test from 'ava' import Vue from 'vue/dist/vue.common' import VueTouch from './helpers/vue-touch' -import Hammer from 'hammerjs' import { createFromTemplate, createInstanceFromTemplate } from './helpers' diff --git a/test/unit/publicMethods.js b/test/unit/publicMethods.js index ded5afe..eeb3076 100644 --- a/test/unit/publicMethods.js +++ b/test/unit/publicMethods.js @@ -2,7 +2,6 @@ import test from 'ava' import Vue from 'vue/dist/vue.common' import VueTouch from './helpers/vue-touch' -import Hammer from 'hammerjs' Vue.use(VueTouch) diff --git a/test/unit/registerCustomEvent.js b/test/unit/registerCustomEvent.js index b198474..c26ce05 100644 --- a/test/unit/registerCustomEvent.js +++ b/test/unit/registerCustomEvent.js @@ -2,7 +2,7 @@ import test from 'ava' import sinon from 'sinon' import Vue from 'vue/dist/vue.common' -import VueTouch from './helpers/vue-touch' +import VueTouch, { registerCustomEvent } from './helpers/vue-touch' import Hammer from 'hammerjs' Vue.use(VueTouch, {hammer: Hammer}) @@ -12,7 +12,7 @@ test.before(t => { warn = sinon.stub(console, 'warn') }) test('registerCustomEvent works before Vue.use(), errors after', t => { - VueTouch.registerCustomEvent('doubletap', {taps: 2}) + registerCustomEvent('doubletap', {taps: 2}) // console.log(log.getCall(0).args[0]) const pattern = /\[vue\-touch\]: Custom Event/ t.true(pattern.test(warn.getCall(0).args[0]))