From 9eebd13a3cf0a61861c44bcb2788fa3c58545a29 Mon Sep 17 00:00:00 2001 From: Leticia Date: Wed, 19 Jun 2019 10:36:25 -0300 Subject: [PATCH 1/2] package-lock.json --- package-lock.json | 41 +++++++++++------------------------------ 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index a706f28..e042a0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2679,8 +2679,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2701,14 +2700,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2723,20 +2720,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2853,8 +2847,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2866,7 +2859,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2881,7 +2873,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2889,14 +2880,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2915,7 +2904,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2996,8 +2984,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3009,7 +2996,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -3095,8 +3081,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3132,7 +3117,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3152,7 +3136,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3196,14 +3179,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, From a26395a06d2b97ad8de4a48b42de401699363cc1 Mon Sep 17 00:00:00 2001 From: Leticia Date: Wed, 19 Jun 2019 10:37:00 -0300 Subject: [PATCH 2/2] passing target element as parameter to event listeners in gestures --- dist/gestures.js | 2 +- dist/gestures.js.map | 2 +- dist/gestures.mjs | 2 +- dist/gestures.mjs.map | 2 +- package-lock.json | 43 +++++++++++++++++++++++++++++++------------ package.json | 2 +- src/gestures.js | 16 ++++++++-------- 7 files changed, 44 insertions(+), 25 deletions(-) diff --git a/dist/gestures.js b/dist/gestures.js index c75cab3..b55bacd 100644 --- a/dist/gestures.js +++ b/dist/gestures.js @@ -1,2 +1,2 @@ -(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.gestures={})})(this,function(a){"use strict";function b(a,b,c,d){if(!b)return void console.error("No event was provided. You do need to provide one.");if("string"==typeof a&&(a=document.querySelector(a)),document.createEvent){var e=document.createEvent("Events");e.initEvent(b,!0,!1),e.data=c,e.originalEvent=d,a.dispatchEvent(e)}}window.navigator.pointerEnabled?(a.eventstart="pointerdown",a.eventend="pointerup",a.eventmove="pointermove",a.eventcancel="pointercancel"):window.navigator.msPointerEnabled?(a.eventstart="MSPointerDown",a.eventend="MSPointerUp",a.eventmove="MSPointerMove",a.eventcancel="MSPointerCancel"):"ontouchstart"in window?(a.eventstart="touchstart",a.eventend="touchend",a.eventmove="touchmove",a.eventcancel="touchcancel"):(a.eventstart="mousedown",a.eventend="mouseup",a.eventmove="mousemove",a.eventcancel="mouseout");a.trigger=b,a.gestures=function(){var i=Math.abs;function c(a){return"tagName"in a?a:a.parentNode}function d(a,b,c,d){return i(a-b)>=i(c-d)?0=r&&(m.isDoubleTap=!0),m.last=q,p=setTimeout(f,750,b)}),s.addEventListener(a.eventmove,function(b){if(g(),"mousemove"===a.eventmove)m.x2=b.pageX,m.y2=b.pageY;else if(1===b.touches.length)m.x2=b.touches[0].pageX,m.y2=b.touches[0].pageY,m.move=!0;else if(2===b.touches.length);}),s.addEventListener(a.eventend,function(a){g();!m.el||(m.x2&&i(m.x1-m.x2)>o||m.y2&&i(m.y1-m.y2)>o?k=setTimeout(function(){if(m&&m.el){var c=d(m.x1,m.x2,m.y1,m.y2);b(m.el,"swipe",c,a),b(m.el,"swipe"+c,null,a),m={}}},0):"last"in m&&(l=setTimeout(function(){m&&m.isDoubleTap?m&&m.el&&(b(m.el,"dbltap",null,a),a.preventDefault(),m={}):j=setTimeout(function(){j=null,m&&m.el&&!m.move?(b(m.el,"tap",null,a),m={}):h()},n)},0)))}),s.addEventListener("touchcancel",h)})()},a.disableTextSelection=function(a,b){if(a){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.add("disable-user-select")})}else"string"==typeof a&&(a=document.querySelector(a),a.classList.add("disable-user-select"));var d=document.head.querySelector(".disable-user-select");d||(d=document.createElement("style"),d.className="disable-user-select",d.innerHTML=".disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }",document.head.appendChild(d))}},a.enableTextSelection=function(a,b){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.remove("disable-user-select")})}else{if("string"==typeof a&&(a=document.querySelector(a)),!a)return;a.classList.remove("disable-user-select")}},Object.defineProperty(a,"__esModule",{value:!0})}); +(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.gestures={})})(this,function(a){"use strict";function b(a,b,c,d){if(!b)return void console.error("No event was provided. You do need to provide one.");if("string"==typeof a&&(a=document.querySelector(a)),document.createEvent){var e=document.createEvent("Events");e.initEvent(b,!0,!1),e.data=c,e.originalEvent=d,a.dispatchEvent(e)}}window.navigator.pointerEnabled?(a.eventstart="pointerdown",a.eventend="pointerup",a.eventmove="pointermove",a.eventcancel="pointercancel"):window.navigator.msPointerEnabled?(a.eventstart="MSPointerDown",a.eventend="MSPointerUp",a.eventmove="MSPointerMove",a.eventcancel="MSPointerCancel"):"ontouchstart"in window?(a.eventstart="touchstart",a.eventend="touchend",a.eventmove="touchmove",a.eventcancel="touchcancel"):(a.eventstart="mousedown",a.eventend="mouseup",a.eventmove="mousemove",a.eventcancel="mouseout");a.trigger=b,a.gestures=function(c){var j=Math.abs;function d(a){return"tagName"in a?a:a.parentNode}function f(a,b,c,d){return j(a-b)>=j(c-d)?0=s&&(n.isDoubleTap=!0),n.last=r,q=setTimeout(g,750,b)}),t.addEventListener(a.eventmove,function(b){if(h(),"mousemove"===a.eventmove)n.x2=b.pageX,n.y2=b.pageY;else if(1===b.touches.length)n.x2=b.touches[0].pageX,n.y2=b.touches[0].pageY,n.move=!0;else if(2===b.touches.length);}),t.addEventListener(a.eventend,function(a){h();!n.el||(n.x2&&j(n.x1-n.x2)>p||n.y2&&j(n.y1-n.y2)>p?l=setTimeout(function(){if(n&&n.el){var c=f(n.x1,n.x2,n.y1,n.y2);b(n.el,"swipe",c,a),b(n.el,"swipe"+c,null,a),n={}}},0):"last"in n&&(m=setTimeout(function(){n&&n.isDoubleTap?n&&n.el&&(b(n.el,"dbltap",null,a),a.preventDefault(),n={}):k=setTimeout(function(){k=null,n&&n.el&&!n.move?(b(n.el,"tap",null,a),n={}):i()},o)},0)))}),t.addEventListener("touchcancel",i)})(c)},a.disableTextSelection=function(a,b){if(a){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.add("disable-user-select")})}else"string"==typeof a&&(a=document.querySelector(a),a.classList.add("disable-user-select"));var d=document.head.querySelector(".disable-user-select");d||(d=document.createElement("style"),d.className="disable-user-select",d.innerHTML=".disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }",document.head.appendChild(d))}},a.enableTextSelection=function(a,b){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.remove("disable-user-select")})}else{if("string"==typeof a&&(a=document.querySelector(a)),!a)return;a.classList.remove("disable-user-select")}},Object.defineProperty(a,"__esModule",{value:!0})}); //# sourceMappingURL=gestures.js.map diff --git a/dist/gestures.js.map b/dist/gestures.js.map index cb4b032..ba4224e 100644 --- a/dist/gestures.js.map +++ b/dist/gestures.js.map @@ -1 +1 @@ -{"version":3,"file":"gestures.js.map","sources":["../src/gestures.js"],"sourcesContent":["/**\n * @type {string} eventstart\n */\nvar eventstart\n/**\n * @type {string} eventend\n */\nvar eventend\n/**\n * @type {string} eventmove\n */\nvar eventmove\n/**\n * @type {string} eventcancel\n */\nvar eventcancel\n\n// Pointer events for IE11 and MSEdge:\nif (window.navigator.pointerEnabled) {\n eventstart = 'pointerdown'\n eventend = 'pointerup'\n eventmove = 'pointermove'\n eventcancel = 'pointercancel'\n\n // Pointer events for IE10 and WP8:\n} else if (window.navigator.msPointerEnabled) {\n eventstart = 'MSPointerDown'\n eventend = 'MSPointerUp'\n eventmove = 'MSPointerMove'\n eventcancel = 'MSPointerCancel'\n\n // Touch events for iOS & Android:\n} else if ('ontouchstart' in window) {\n eventstart = 'touchstart'\n eventend = 'touchend'\n eventmove = 'touchmove'\n eventcancel = 'touchcancel'\n\n // Mouse events for desktop:\n} else {\n eventstart = 'mousedown'\n eventend = 'mouseup'\n eventmove = 'mousemove'\n eventcancel = 'mouseout'\n}\nexport { eventstart, eventend, eventmove, eventcancel }\n\n/**\n * Fire a gesture on an element and pass it some optional data.\n * @param {Element} el\n * @param {string} event\n * @param {*} [data]\n * @param {Event} originalEvent\n */\nexport function trigger(el, event, data, originalEvent) {\n if (!event) {\n console.error('No event was provided. You do need to provide one.')\n return\n }\n if (typeof el === 'string') el = document.querySelector(el)\n if (document.createEvent) {\n var evtObj = document.createEvent('Events')\n evtObj.initEvent(event, true, false)\n evtObj['data'] = data\n evtObj['originalEvent'] = originalEvent\n el.dispatchEvent(evtObj)\n }\n}\n\n/**\n * Enable gestures in the browser.\n * @return {void} undefined\n */\nexport var gestures = function() {\n var touch = {}\n var touchTimeout\n var swipeTimeout\n var tapTimeout\n var longTapDelay = 750\n var singleTapDelay = 150\n var gestureLength = 20\n if (/android/gim.test(navigator.userAgent)) singleTapDelay = 200\n var longTapTimeout\n\n /**\n * @param {Node} node\n */\n function parentIfText(node) {\n return 'tagName' in node ? node : node.parentNode\n }\n\n /**\n * @param {number} x1\n * @param {number} x2\n * @param {number} y1\n * @param {number} y2\n */\n function swipeDirection(x1, x2, y1, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2)\n ? x1 - x2 > 0\n ? 'left'\n : 'right'\n : y1 - y2 > 0\n ? 'up'\n : 'down'\n }\n\n function longTap(event) {\n longTapTimeout = null\n if (touch.last) {\n try {\n if (touch && touch.el) {\n trigger(touch.el, 'longtap', null, event)\n touch = {}\n }\n } catch (err) {}\n }\n }\n\n function cancelLongTap() {\n if (longTapTimeout) clearTimeout(longTapTimeout)\n longTapTimeout = null\n }\n\n function cancelAll() {\n if (touchTimeout) clearTimeout(touchTimeout)\n if (tapTimeout) clearTimeout(tapTimeout)\n if (swipeTimeout) clearTimeout(swipeTimeout)\n if (longTapTimeout) clearTimeout(longTapTimeout)\n touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null\n touch = {}\n }\n\n /**\n * Execute this after DOM loads:\n */\n ;(function() {\n var now\n var delta\n var body = document.body\n\n /**\n * Capture start of event:\n */\n body.addEventListener(eventstart, function(e) {\n now = Date.now()\n delta = now - (touch.last || now)\n\n if (eventstart === 'mousedown') {\n touch.el = parentIfText(/** @type{Node} */ (e.target))\n if (e.target['nodeName'] === 'ripple') {\n touch.el = e.target['parentNode']\n }\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['pageX']\n touch.y1 = e['pageY']\n\n /**\n * Detect one finger gesture:\n */\n } else {\n if (e['touches'].length === 1) {\n if (!!e.target['disabled']) return\n touch.el = parentIfText(e['touches'][0].target)\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['touches'][0]['pageX']\n touch.y1 = e['touches'][0]['pageY']\n }\n }\n\n if (delta > 0 && delta <= 450) {\n touch.isDoubleTap = true\n }\n touch.last = now\n longTapTimeout = setTimeout(longTap, longTapDelay, e)\n })\n\n /**\n * Capture event move:\n */\n body.addEventListener(eventmove, function(e) {\n cancelLongTap()\n if (eventmove === 'mousemove') {\n touch.x2 = e['pageX']\n touch.y2 = e['pageY']\n } else {\n /**\n * One finger gesture:\n */\n if (e['touches'].length === 1) {\n touch.x2 = e['touches'][0]['pageX']\n touch.y2 = e['touches'][0]['pageY']\n touch.move = true\n } else if (e['touches'].length === 2) {\n // TODO: pinch - rotate gestures?\n }\n }\n })\n\n /**\n * Capture event end:\n */\n body.addEventListener(eventend, function(e) {\n cancelLongTap()\n if (!!touch.el) {\n /**\n * Swipe detection:\n */\n if (\n (touch.x2 && Math.abs(touch.x1 - touch.x2) > gestureLength) ||\n (touch.y2 && Math.abs(touch.y1 - touch.y2) > gestureLength)\n ) {\n swipeTimeout = setTimeout(function() {\n if (touch && touch.el) {\n var direction = swipeDirection(\n touch.x1,\n touch.x2,\n touch.y1,\n touch.y2\n )\n trigger(touch.el, 'swipe', direction, e)\n trigger(touch.el, 'swipe' + direction, null, e)\n touch = {}\n }\n }, 0)\n\n /**\n * Normal tap:\n */\n } else if ('last' in touch) {\n /**\n * Delay by one tick so we can cancel the 'tap' event if 'scroll' fires:\n */\n tapTimeout = setTimeout(function() {\n /**\n * Trigger double tap immediately:\n */\n if (touch && touch.isDoubleTap) {\n if (touch && touch.el) {\n trigger(touch.el, 'dbltap', null, e)\n e.preventDefault()\n touch = {}\n }\n } else {\n /**\n * Trigger tap after singleTapDelay:\n */\n touchTimeout = setTimeout(function() {\n touchTimeout = null\n if (touch && touch.el && !touch.move) {\n trigger(touch.el, 'tap', null, e)\n touch = {}\n } else {\n /**\n * Touch moved, so cancel tap:\n */\n cancelAll()\n }\n }, singleTapDelay)\n }\n }, 0)\n }\n } else {\n return\n }\n })\n body.addEventListener('touchcancel', cancelAll)\n })()\n}\n\n/**\n * Function to disable text selection. Use with make swipe events not select the element's text.\n * @param {Element} element\n * @param {string | boolean} [all]\n * @return {void} undefined\n */\nexport function disableTextSelection(element, all) {\n if (!element) return\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.add('disable-user-select')\n })\n } else {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n element.classList.add('disable-user-select')\n }\n }\n var stylesheet = document.head.querySelector('.disable-user-select')\n if (!stylesheet) {\n stylesheet = document.createElement('style')\n stylesheet.className = 'disable-user-select'\n stylesheet.innerHTML =\n '.disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }'\n document.head.appendChild(stylesheet)\n }\n}\n\n/**\n * Function to remove a style set to disable text selection. This will re-enable text selection.\n * @param {Element} element\n * @param {string | boolean} all\n * @return {void} undefined\n */\nexport function enableTextSelection(element, all) {\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.remove('disable-user-select')\n })\n } else {\n if (typeof element === 'string') element = document.querySelector(element)\n if (!element) return\n element.classList.remove('disable-user-select')\n }\n}\n"],"names":["trigger","el","event","data","originalEvent","console","error","document","querySelector","createEvent","evtObj","initEvent","dispatchEvent","window","navigator","pointerEnabled","eventstart","eventend","eventmove","eventcancel","msPointerEnabled","Math","abs","parentIfText","node","parentNode","swipeDirection","x1","x2","y1","y2","longTap","longTapTimeout","touch","last","err","cancelLongTap","clearTimeout","cancelAll","touchTimeout","tapTimeout","swipeTimeout","singleTapDelay","gestureLength","test","userAgent","now","delta","body","addEventListener","e","Date","target","length","isDoubleTap","setTimeout","move","direction","preventDefault","element","all","elements","Array","prototype","slice","call","querySelectorAll","map","classList","add","stylesheet","head","createElement","className","innerHTML","appendChild","remove"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gestures.js.map","sources":["../src/gestures.js"],"sourcesContent":["/**\n * @type {string} eventstart\n */\nvar eventstart\n/**\n * @type {string} eventend\n */\nvar eventend\n/**\n * @type {string} eventmove\n */\nvar eventmove\n/**\n * @type {string} eventcancel\n */\nvar eventcancel\n\n// Pointer events for IE11 and MSEdge:\nif (window.navigator.pointerEnabled) {\n eventstart = 'pointerdown'\n eventend = 'pointerup'\n eventmove = 'pointermove'\n eventcancel = 'pointercancel'\n\n // Pointer events for IE10 and WP8:\n} else if (window.navigator.msPointerEnabled) {\n eventstart = 'MSPointerDown'\n eventend = 'MSPointerUp'\n eventmove = 'MSPointerMove'\n eventcancel = 'MSPointerCancel'\n\n // Touch events for iOS & Android:\n} else if ('ontouchstart' in window) {\n eventstart = 'touchstart'\n eventend = 'touchend'\n eventmove = 'touchmove'\n eventcancel = 'touchcancel'\n\n // Mouse events for desktop:\n} else {\n eventstart = 'mousedown'\n eventend = 'mouseup'\n eventmove = 'mousemove'\n eventcancel = 'mouseout'\n}\nexport { eventstart, eventend, eventmove, eventcancel }\n\n/**\n * Fire a gesture on an element and pass it some optional data.\n * @param {Element} el\n * @param {string} event\n * @param {*} [data]\n * @param {Event} originalEvent\n */\nexport function trigger(el, event, data, originalEvent) {\n if (!event) {\n console.error('No event was provided. You do need to provide one.')\n return\n }\n if (typeof el === 'string') el = document.querySelector(el)\n if (document.createEvent) {\n var evtObj = document.createEvent('Events')\n evtObj.initEvent(event, true, false)\n evtObj['data'] = data\n evtObj['originalEvent'] = originalEvent\n el.dispatchEvent(evtObj)\n }\n}\n\n/**\n * Enable gestures in the browser.\n * @return {void} undefined\n */\nexport var gestures = function(target) {\n var touch = {}\n var touchTimeout\n var swipeTimeout\n var tapTimeout\n var longTapDelay = 750\n var singleTapDelay = 150\n var gestureLength = 20\n if (/android/gim.test(navigator.userAgent)) singleTapDelay = 200\n var longTapTimeout\n\n /**\n * @param {Node} node\n */\n function parentIfText(node) {\n return 'tagName' in node ? node : node.parentNode\n }\n\n /**\n * @param {number} x1\n * @param {number} x2\n * @param {number} y1\n * @param {number} y2\n */\n function swipeDirection(x1, x2, y1, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2)\n ? x1 - x2 > 0\n ? 'left'\n : 'right'\n : y1 - y2 > 0\n ? 'up'\n : 'down'\n }\n\n function longTap(event) {\n longTapTimeout = null\n if (touch.last) {\n try {\n if (touch && touch.el) {\n trigger(touch.el, 'longtap', null, event)\n touch = {}\n }\n } catch (err) {}\n }\n }\n\n function cancelLongTap() {\n if (longTapTimeout) clearTimeout(longTapTimeout)\n longTapTimeout = null\n }\n\n function cancelAll() {\n if (touchTimeout) clearTimeout(touchTimeout)\n if (tapTimeout) clearTimeout(tapTimeout)\n if (swipeTimeout) clearTimeout(swipeTimeout)\n if (longTapTimeout) clearTimeout(longTapTimeout)\n touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null\n touch = {}\n }\n\n /**\n * Execute this after DOM loads:\n */\n ;(function(target) {\n var now\n var delta\n var element = target || document.body\n\n /**\n * Capture start of event:\n */\n element.addEventListener(eventstart, function(e) {\n now = Date.now()\n delta = now - (touch.last || now)\n\n if (eventstart === 'mousedown') {\n touch.el = parentIfText(/** @type{Node} */ (e.target))\n if (e.target['nodeName'] === 'ripple') {\n touch.el = e.target['parentNode']\n }\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['pageX']\n touch.y1 = e['pageY']\n\n /**\n * Detect one finger gesture:\n */\n } else {\n if (e['touches'].length === 1) {\n if (!!e.target['disabled']) return\n touch.el = parentIfText(e['touches'][0].target)\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['touches'][0]['pageX']\n touch.y1 = e['touches'][0]['pageY']\n }\n }\n\n if (delta > 0 && delta <= 450) {\n touch.isDoubleTap = true\n }\n touch.last = now\n longTapTimeout = setTimeout(longTap, longTapDelay, e)\n })\n\n /**\n * Capture event move:\n */\n element.addEventListener(eventmove, function(e) {\n cancelLongTap()\n if (eventmove === 'mousemove') {\n touch.x2 = e['pageX']\n touch.y2 = e['pageY']\n } else {\n /**\n * One finger gesture:\n */\n if (e['touches'].length === 1) {\n touch.x2 = e['touches'][0]['pageX']\n touch.y2 = e['touches'][0]['pageY']\n touch.move = true\n } else if (e['touches'].length === 2) {\n // TODO: pinch - rotate gestures?\n }\n }\n })\n\n /**\n * Capture event end:\n */\n element.addEventListener(eventend, function(e) {\n cancelLongTap()\n if (!!touch.el) {\n /**\n * Swipe detection:\n */\n if (\n (touch.x2 && Math.abs(touch.x1 - touch.x2) > gestureLength) ||\n (touch.y2 && Math.abs(touch.y1 - touch.y2) > gestureLength)\n ) {\n swipeTimeout = setTimeout(function() {\n if (touch && touch.el) {\n var direction = swipeDirection(\n touch.x1,\n touch.x2,\n touch.y1,\n touch.y2\n )\n trigger(touch.el, 'swipe', direction, e)\n trigger(touch.el, 'swipe' + direction, null, e)\n touch = {}\n }\n }, 0)\n\n /**\n * Normal tap:\n */\n } else if ('last' in touch) {\n /**\n * Delay by one tick so we can cancel the 'tap' event if 'scroll' fires:\n */\n tapTimeout = setTimeout(function() {\n /**\n * Trigger double tap immediately:\n */\n if (touch && touch.isDoubleTap) {\n if (touch && touch.el) {\n trigger(touch.el, 'dbltap', null, e)\n e.preventDefault()\n touch = {}\n }\n } else {\n /**\n * Trigger tap after singleTapDelay:\n */\n touchTimeout = setTimeout(function() {\n touchTimeout = null\n if (touch && touch.el && !touch.move) {\n trigger(touch.el, 'tap', null, e)\n touch = {}\n } else {\n /**\n * Touch moved, so cancel tap:\n */\n cancelAll()\n }\n }, singleTapDelay)\n }\n }, 0)\n }\n } else {\n return\n }\n })\n element.addEventListener('touchcancel', cancelAll)\n })(target)\n}\n\n/**\n * Function to disable text selection. Use with make swipe events not select the element's text.\n * @param {Element} element\n * @param {string | boolean} [all]\n * @return {void} undefined\n */\nexport function disableTextSelection(element, all) {\n if (!element) return\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.add('disable-user-select')\n })\n } else {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n element.classList.add('disable-user-select')\n }\n }\n var stylesheet = document.head.querySelector('.disable-user-select')\n if (!stylesheet) {\n stylesheet = document.createElement('style')\n stylesheet.className = 'disable-user-select'\n stylesheet.innerHTML =\n '.disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }'\n document.head.appendChild(stylesheet)\n }\n}\n\n/**\n * Function to remove a style set to disable text selection. This will re-enable text selection.\n * @param {Element} element\n * @param {string | boolean} all\n * @return {void} undefined\n */\nexport function enableTextSelection(element, all) {\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.remove('disable-user-select')\n })\n } else {\n if (typeof element === 'string') element = document.querySelector(element)\n if (!element) return\n element.classList.remove('disable-user-select')\n }\n}\n"],"names":["trigger","el","event","data","originalEvent","console","error","document","querySelector","createEvent","evtObj","initEvent","dispatchEvent","window","navigator","pointerEnabled","eventstart","eventend","eventmove","eventcancel","msPointerEnabled","target","Math","abs","parentIfText","node","parentNode","swipeDirection","x1","x2","y1","y2","longTap","longTapTimeout","touch","last","err","cancelLongTap","clearTimeout","cancelAll","touchTimeout","tapTimeout","swipeTimeout","singleTapDelay","gestureLength","test","userAgent","now","delta","element","body","addEventListener","e","Date","length","isDoubleTap","setTimeout","move","direction","preventDefault","all","elements","Array","prototype","slice","call","querySelectorAll","map","classList","add","stylesheet","head","createElement","className","innerHTML","appendChild","remove"],"mappings":"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"} \ No newline at end of file diff --git a/dist/gestures.mjs b/dist/gestures.mjs index c198f4b..5b9ba33 100644 --- a/dist/gestures.mjs +++ b/dist/gestures.mjs @@ -1,2 +1,2 @@ -var eventstart,eventend,eventmove,eventcancel;window.navigator.pointerEnabled?(eventstart="pointerdown",eventend="pointerup",eventmove="pointermove",eventcancel="pointercancel"):window.navigator.msPointerEnabled?(eventstart="MSPointerDown",eventend="MSPointerUp",eventmove="MSPointerMove",eventcancel="MSPointerCancel"):"ontouchstart"in window?(eventstart="touchstart",eventend="touchend",eventmove="touchmove",eventcancel="touchcancel"):(eventstart="mousedown",eventend="mouseup",eventmove="mousemove",eventcancel="mouseout");function trigger(a,b,c,d){if(!b)return void console.error("No event was provided. You do need to provide one.");if("string"==typeof a&&(a=document.querySelector(a)),document.createEvent){var e=document.createEvent("Events");e.initEvent(b,!0,!1),e.data=c,e.originalEvent=d,a.dispatchEvent(e)}}var gestures=function(){var g=Math.abs;function a(a){return"tagName"in a?a:a.parentNode}function b(a,b,c,d){return g(a-b)>=g(c-d)?0=p&&(k.isDoubleTap=!0),k.last=o,n=setTimeout(c,750,b)}),q.addEventListener(eventmove,function(a){if(d(),"mousemove"===eventmove)k.x2=a.pageX,k.y2=a.pageY;else if(1===a.touches.length)k.x2=a.touches[0].pageX,k.y2=a.touches[0].pageY,k.move=!0;else if(2===a.touches.length);}),q.addEventListener(eventend,function(a){d();!k.el||(k.x2&&g(k.x1-k.x2)>m||k.y2&&g(k.y1-k.y2)>m?i=setTimeout(function(){if(k&&k.el){var c=b(k.x1,k.x2,k.y1,k.y2);trigger(k.el,"swipe",c,a),trigger(k.el,"swipe"+c,null,a),k={}}},0):"last"in k&&(j=setTimeout(function(){k&&k.isDoubleTap?k&&k.el&&(trigger(k.el,"dbltap",null,a),a.preventDefault(),k={}):h=setTimeout(function(){h=null,k&&k.el&&!k.move?(trigger(k.el,"tap",null,a),k={}):f()},l)},0)))}),q.addEventListener("touchcancel",f)})()};function disableTextSelection(a,b){if(a){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.add("disable-user-select")})}else"string"==typeof a&&(a=document.querySelector(a),a.classList.add("disable-user-select"));var d=document.head.querySelector(".disable-user-select");d||(d=document.createElement("style"),d.className="disable-user-select",d.innerHTML=".disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }",document.head.appendChild(d))}}function enableTextSelection(a,b){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.remove("disable-user-select")})}else{if("string"==typeof a&&(a=document.querySelector(a)),!a)return;a.classList.remove("disable-user-select")}}export{eventstart,eventend,eventmove,eventcancel,trigger,gestures,disableTextSelection,enableTextSelection}; +var eventstart,eventend,eventmove,eventcancel;window.navigator.pointerEnabled?(eventstart="pointerdown",eventend="pointerup",eventmove="pointermove",eventcancel="pointercancel"):window.navigator.msPointerEnabled?(eventstart="MSPointerDown",eventend="MSPointerUp",eventmove="MSPointerMove",eventcancel="MSPointerCancel"):"ontouchstart"in window?(eventstart="touchstart",eventend="touchend",eventmove="touchmove",eventcancel="touchcancel"):(eventstart="mousedown",eventend="mouseup",eventmove="mousemove",eventcancel="mouseout");function trigger(a,b,c,d){if(!b)return void console.error("No event was provided. You do need to provide one.");if("string"==typeof a&&(a=document.querySelector(a)),document.createEvent){var e=document.createEvent("Events");e.initEvent(b,!0,!1),e.data=c,e.originalEvent=d,a.dispatchEvent(e)}}var gestures=function(a){var h=Math.abs;function b(a){return"tagName"in a?a:a.parentNode}function c(a,b,c,d){return h(a-b)>=h(c-d)?0=q&&(l.isDoubleTap=!0),l.last=p,o=setTimeout(d,750,a)}),r.addEventListener(eventmove,function(a){if(f(),"mousemove"===eventmove)l.x2=a.pageX,l.y2=a.pageY;else if(1===a.touches.length)l.x2=a.touches[0].pageX,l.y2=a.touches[0].pageY,l.move=!0;else if(2===a.touches.length);}),r.addEventListener(eventend,function(a){f();!l.el||(l.x2&&h(l.x1-l.x2)>n||l.y2&&h(l.y1-l.y2)>n?j=setTimeout(function(){if(l&&l.el){var b=c(l.x1,l.x2,l.y1,l.y2);trigger(l.el,"swipe",b,a),trigger(l.el,"swipe"+b,null,a),l={}}},0):"last"in l&&(k=setTimeout(function(){l&&l.isDoubleTap?l&&l.el&&(trigger(l.el,"dbltap",null,a),a.preventDefault(),l={}):i=setTimeout(function(){i=null,l&&l.el&&!l.move?(trigger(l.el,"tap",null,a),l={}):g()},m)},0)))}),r.addEventListener("touchcancel",g)})(a)};function disableTextSelection(a,b){if(a){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.add("disable-user-select")})}else"string"==typeof a&&(a=document.querySelector(a),a.classList.add("disable-user-select"));var d=document.head.querySelector(".disable-user-select");d||(d=document.createElement("style"),d.className="disable-user-select",d.innerHTML=".disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }",document.head.appendChild(d))}}function enableTextSelection(a,b){if(b&&"string"==typeof a){var c=Array.prototype.slice.call(document.querySelectorAll(a));c.map(function(a){a.classList.remove("disable-user-select")})}else{if("string"==typeof a&&(a=document.querySelector(a)),!a)return;a.classList.remove("disable-user-select")}}export{eventstart,eventend,eventmove,eventcancel,trigger,gestures,disableTextSelection,enableTextSelection}; //# sourceMappingURL=gestures.mjs.map diff --git a/dist/gestures.mjs.map b/dist/gestures.mjs.map index 5f1cfe5..e6798fd 100644 --- a/dist/gestures.mjs.map +++ b/dist/gestures.mjs.map @@ -1 +1 @@ -{"version":3,"file":"gestures.mjs.map","sources":["../src/gestures.js"],"sourcesContent":["/**\n * @type {string} eventstart\n */\nvar eventstart\n/**\n * @type {string} eventend\n */\nvar eventend\n/**\n * @type {string} eventmove\n */\nvar eventmove\n/**\n * @type {string} eventcancel\n */\nvar eventcancel\n\n// Pointer events for IE11 and MSEdge:\nif (window.navigator.pointerEnabled) {\n eventstart = 'pointerdown'\n eventend = 'pointerup'\n eventmove = 'pointermove'\n eventcancel = 'pointercancel'\n\n // Pointer events for IE10 and WP8:\n} else if (window.navigator.msPointerEnabled) {\n eventstart = 'MSPointerDown'\n eventend = 'MSPointerUp'\n eventmove = 'MSPointerMove'\n eventcancel = 'MSPointerCancel'\n\n // Touch events for iOS & Android:\n} else if ('ontouchstart' in window) {\n eventstart = 'touchstart'\n eventend = 'touchend'\n eventmove = 'touchmove'\n eventcancel = 'touchcancel'\n\n // Mouse events for desktop:\n} else {\n eventstart = 'mousedown'\n eventend = 'mouseup'\n eventmove = 'mousemove'\n eventcancel = 'mouseout'\n}\nexport { eventstart, eventend, eventmove, eventcancel }\n\n/**\n * Fire a gesture on an element and pass it some optional data.\n * @param {Element} el\n * @param {string} event\n * @param {*} [data]\n * @param {Event} originalEvent\n */\nexport function trigger(el, event, data, originalEvent) {\n if (!event) {\n console.error('No event was provided. You do need to provide one.')\n return\n }\n if (typeof el === 'string') el = document.querySelector(el)\n if (document.createEvent) {\n var evtObj = document.createEvent('Events')\n evtObj.initEvent(event, true, false)\n evtObj['data'] = data\n evtObj['originalEvent'] = originalEvent\n el.dispatchEvent(evtObj)\n }\n}\n\n/**\n * Enable gestures in the browser.\n * @return {void} undefined\n */\nexport var gestures = function() {\n var touch = {}\n var touchTimeout\n var swipeTimeout\n var tapTimeout\n var longTapDelay = 750\n var singleTapDelay = 150\n var gestureLength = 20\n if (/android/gim.test(navigator.userAgent)) singleTapDelay = 200\n var longTapTimeout\n\n /**\n * @param {Node} node\n */\n function parentIfText(node) {\n return 'tagName' in node ? node : node.parentNode\n }\n\n /**\n * @param {number} x1\n * @param {number} x2\n * @param {number} y1\n * @param {number} y2\n */\n function swipeDirection(x1, x2, y1, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2)\n ? x1 - x2 > 0\n ? 'left'\n : 'right'\n : y1 - y2 > 0\n ? 'up'\n : 'down'\n }\n\n function longTap(event) {\n longTapTimeout = null\n if (touch.last) {\n try {\n if (touch && touch.el) {\n trigger(touch.el, 'longtap', null, event)\n touch = {}\n }\n } catch (err) {}\n }\n }\n\n function cancelLongTap() {\n if (longTapTimeout) clearTimeout(longTapTimeout)\n longTapTimeout = null\n }\n\n function cancelAll() {\n if (touchTimeout) clearTimeout(touchTimeout)\n if (tapTimeout) clearTimeout(tapTimeout)\n if (swipeTimeout) clearTimeout(swipeTimeout)\n if (longTapTimeout) clearTimeout(longTapTimeout)\n touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null\n touch = {}\n }\n\n /**\n * Execute this after DOM loads:\n */\n ;(function() {\n var now\n var delta\n var body = document.body\n\n /**\n * Capture start of event:\n */\n body.addEventListener(eventstart, function(e) {\n now = Date.now()\n delta = now - (touch.last || now)\n\n if (eventstart === 'mousedown') {\n touch.el = parentIfText(/** @type{Node} */ (e.target))\n if (e.target['nodeName'] === 'ripple') {\n touch.el = e.target['parentNode']\n }\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['pageX']\n touch.y1 = e['pageY']\n\n /**\n * Detect one finger gesture:\n */\n } else {\n if (e['touches'].length === 1) {\n if (!!e.target['disabled']) return\n touch.el = parentIfText(e['touches'][0].target)\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['touches'][0]['pageX']\n touch.y1 = e['touches'][0]['pageY']\n }\n }\n\n if (delta > 0 && delta <= 450) {\n touch.isDoubleTap = true\n }\n touch.last = now\n longTapTimeout = setTimeout(longTap, longTapDelay, e)\n })\n\n /**\n * Capture event move:\n */\n body.addEventListener(eventmove, function(e) {\n cancelLongTap()\n if (eventmove === 'mousemove') {\n touch.x2 = e['pageX']\n touch.y2 = e['pageY']\n } else {\n /**\n * One finger gesture:\n */\n if (e['touches'].length === 1) {\n touch.x2 = e['touches'][0]['pageX']\n touch.y2 = e['touches'][0]['pageY']\n touch.move = true\n } else if (e['touches'].length === 2) {\n // TODO: pinch - rotate gestures?\n }\n }\n })\n\n /**\n * Capture event end:\n */\n body.addEventListener(eventend, function(e) {\n cancelLongTap()\n if (!!touch.el) {\n /**\n * Swipe detection:\n */\n if (\n (touch.x2 && Math.abs(touch.x1 - touch.x2) > gestureLength) ||\n (touch.y2 && Math.abs(touch.y1 - touch.y2) > gestureLength)\n ) {\n swipeTimeout = setTimeout(function() {\n if (touch && touch.el) {\n var direction = swipeDirection(\n touch.x1,\n touch.x2,\n touch.y1,\n touch.y2\n )\n trigger(touch.el, 'swipe', direction, e)\n trigger(touch.el, 'swipe' + direction, null, e)\n touch = {}\n }\n }, 0)\n\n /**\n * Normal tap:\n */\n } else if ('last' in touch) {\n /**\n * Delay by one tick so we can cancel the 'tap' event if 'scroll' fires:\n */\n tapTimeout = setTimeout(function() {\n /**\n * Trigger double tap immediately:\n */\n if (touch && touch.isDoubleTap) {\n if (touch && touch.el) {\n trigger(touch.el, 'dbltap', null, e)\n e.preventDefault()\n touch = {}\n }\n } else {\n /**\n * Trigger tap after singleTapDelay:\n */\n touchTimeout = setTimeout(function() {\n touchTimeout = null\n if (touch && touch.el && !touch.move) {\n trigger(touch.el, 'tap', null, e)\n touch = {}\n } else {\n /**\n * Touch moved, so cancel tap:\n */\n cancelAll()\n }\n }, singleTapDelay)\n }\n }, 0)\n }\n } else {\n return\n }\n })\n body.addEventListener('touchcancel', cancelAll)\n })()\n}\n\n/**\n * Function to disable text selection. Use with make swipe events not select the element's text.\n * @param {Element} element\n * @param {string | boolean} [all]\n * @return {void} undefined\n */\nexport function disableTextSelection(element, all) {\n if (!element) return\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.add('disable-user-select')\n })\n } else {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n element.classList.add('disable-user-select')\n }\n }\n var stylesheet = document.head.querySelector('.disable-user-select')\n if (!stylesheet) {\n stylesheet = document.createElement('style')\n stylesheet.className = 'disable-user-select'\n stylesheet.innerHTML =\n '.disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }'\n document.head.appendChild(stylesheet)\n }\n}\n\n/**\n * Function to remove a style set to disable text selection. This will re-enable text selection.\n * @param {Element} element\n * @param {string | boolean} all\n * @return {void} undefined\n */\nexport function enableTextSelection(element, all) {\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.remove('disable-user-select')\n })\n } else {\n if (typeof element === 'string') element = document.querySelector(element)\n if (!element) return\n element.classList.remove('disable-user-select')\n }\n}\n"],"names":["eventstart","eventend","eventmove","eventcancel","window","navigator","pointerEnabled","msPointerEnabled","trigger","el","event","data","originalEvent","console","error","document","querySelector","createEvent","evtObj","initEvent","dispatchEvent","gestures","Math","abs","parentIfText","node","parentNode","swipeDirection","x1","x2","y1","y2","longTap","longTapTimeout","touch","last","err","cancelLongTap","clearTimeout","cancelAll","touchTimeout","tapTimeout","swipeTimeout","singleTapDelay","gestureLength","test","userAgent","now","delta","body","addEventListener","e","Date","target","length","isDoubleTap","setTimeout","move","direction","preventDefault","disableTextSelection","element","all","elements","Array","prototype","slice","call","querySelectorAll","map","classList","add","stylesheet","head","createElement","className","innerHTML","appendChild","enableTextSelection","remove"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gestures.mjs.map","sources":["../src/gestures.js"],"sourcesContent":["/**\n * @type {string} eventstart\n */\nvar eventstart\n/**\n * @type {string} eventend\n */\nvar eventend\n/**\n * @type {string} eventmove\n */\nvar eventmove\n/**\n * @type {string} eventcancel\n */\nvar eventcancel\n\n// Pointer events for IE11 and MSEdge:\nif (window.navigator.pointerEnabled) {\n eventstart = 'pointerdown'\n eventend = 'pointerup'\n eventmove = 'pointermove'\n eventcancel = 'pointercancel'\n\n // Pointer events for IE10 and WP8:\n} else if (window.navigator.msPointerEnabled) {\n eventstart = 'MSPointerDown'\n eventend = 'MSPointerUp'\n eventmove = 'MSPointerMove'\n eventcancel = 'MSPointerCancel'\n\n // Touch events for iOS & Android:\n} else if ('ontouchstart' in window) {\n eventstart = 'touchstart'\n eventend = 'touchend'\n eventmove = 'touchmove'\n eventcancel = 'touchcancel'\n\n // Mouse events for desktop:\n} else {\n eventstart = 'mousedown'\n eventend = 'mouseup'\n eventmove = 'mousemove'\n eventcancel = 'mouseout'\n}\nexport { eventstart, eventend, eventmove, eventcancel }\n\n/**\n * Fire a gesture on an element and pass it some optional data.\n * @param {Element} el\n * @param {string} event\n * @param {*} [data]\n * @param {Event} originalEvent\n */\nexport function trigger(el, event, data, originalEvent) {\n if (!event) {\n console.error('No event was provided. You do need to provide one.')\n return\n }\n if (typeof el === 'string') el = document.querySelector(el)\n if (document.createEvent) {\n var evtObj = document.createEvent('Events')\n evtObj.initEvent(event, true, false)\n evtObj['data'] = data\n evtObj['originalEvent'] = originalEvent\n el.dispatchEvent(evtObj)\n }\n}\n\n/**\n * Enable gestures in the browser.\n * @return {void} undefined\n */\nexport var gestures = function(target) {\n var touch = {}\n var touchTimeout\n var swipeTimeout\n var tapTimeout\n var longTapDelay = 750\n var singleTapDelay = 150\n var gestureLength = 20\n if (/android/gim.test(navigator.userAgent)) singleTapDelay = 200\n var longTapTimeout\n\n /**\n * @param {Node} node\n */\n function parentIfText(node) {\n return 'tagName' in node ? node : node.parentNode\n }\n\n /**\n * @param {number} x1\n * @param {number} x2\n * @param {number} y1\n * @param {number} y2\n */\n function swipeDirection(x1, x2, y1, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2)\n ? x1 - x2 > 0\n ? 'left'\n : 'right'\n : y1 - y2 > 0\n ? 'up'\n : 'down'\n }\n\n function longTap(event) {\n longTapTimeout = null\n if (touch.last) {\n try {\n if (touch && touch.el) {\n trigger(touch.el, 'longtap', null, event)\n touch = {}\n }\n } catch (err) {}\n }\n }\n\n function cancelLongTap() {\n if (longTapTimeout) clearTimeout(longTapTimeout)\n longTapTimeout = null\n }\n\n function cancelAll() {\n if (touchTimeout) clearTimeout(touchTimeout)\n if (tapTimeout) clearTimeout(tapTimeout)\n if (swipeTimeout) clearTimeout(swipeTimeout)\n if (longTapTimeout) clearTimeout(longTapTimeout)\n touchTimeout = tapTimeout = swipeTimeout = longTapTimeout = null\n touch = {}\n }\n\n /**\n * Execute this after DOM loads:\n */\n ;(function(target) {\n var now\n var delta\n var element = target || document.body\n\n /**\n * Capture start of event:\n */\n element.addEventListener(eventstart, function(e) {\n now = Date.now()\n delta = now - (touch.last || now)\n\n if (eventstart === 'mousedown') {\n touch.el = parentIfText(/** @type{Node} */ (e.target))\n if (e.target['nodeName'] === 'ripple') {\n touch.el = e.target['parentNode']\n }\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['pageX']\n touch.y1 = e['pageY']\n\n /**\n * Detect one finger gesture:\n */\n } else {\n if (e['touches'].length === 1) {\n if (!!e.target['disabled']) return\n touch.el = parentIfText(e['touches'][0].target)\n touchTimeout && clearTimeout(touchTimeout)\n touch.x1 = e['touches'][0]['pageX']\n touch.y1 = e['touches'][0]['pageY']\n }\n }\n\n if (delta > 0 && delta <= 450) {\n touch.isDoubleTap = true\n }\n touch.last = now\n longTapTimeout = setTimeout(longTap, longTapDelay, e)\n })\n\n /**\n * Capture event move:\n */\n element.addEventListener(eventmove, function(e) {\n cancelLongTap()\n if (eventmove === 'mousemove') {\n touch.x2 = e['pageX']\n touch.y2 = e['pageY']\n } else {\n /**\n * One finger gesture:\n */\n if (e['touches'].length === 1) {\n touch.x2 = e['touches'][0]['pageX']\n touch.y2 = e['touches'][0]['pageY']\n touch.move = true\n } else if (e['touches'].length === 2) {\n // TODO: pinch - rotate gestures?\n }\n }\n })\n\n /**\n * Capture event end:\n */\n element.addEventListener(eventend, function(e) {\n cancelLongTap()\n if (!!touch.el) {\n /**\n * Swipe detection:\n */\n if (\n (touch.x2 && Math.abs(touch.x1 - touch.x2) > gestureLength) ||\n (touch.y2 && Math.abs(touch.y1 - touch.y2) > gestureLength)\n ) {\n swipeTimeout = setTimeout(function() {\n if (touch && touch.el) {\n var direction = swipeDirection(\n touch.x1,\n touch.x2,\n touch.y1,\n touch.y2\n )\n trigger(touch.el, 'swipe', direction, e)\n trigger(touch.el, 'swipe' + direction, null, e)\n touch = {}\n }\n }, 0)\n\n /**\n * Normal tap:\n */\n } else if ('last' in touch) {\n /**\n * Delay by one tick so we can cancel the 'tap' event if 'scroll' fires:\n */\n tapTimeout = setTimeout(function() {\n /**\n * Trigger double tap immediately:\n */\n if (touch && touch.isDoubleTap) {\n if (touch && touch.el) {\n trigger(touch.el, 'dbltap', null, e)\n e.preventDefault()\n touch = {}\n }\n } else {\n /**\n * Trigger tap after singleTapDelay:\n */\n touchTimeout = setTimeout(function() {\n touchTimeout = null\n if (touch && touch.el && !touch.move) {\n trigger(touch.el, 'tap', null, e)\n touch = {}\n } else {\n /**\n * Touch moved, so cancel tap:\n */\n cancelAll()\n }\n }, singleTapDelay)\n }\n }, 0)\n }\n } else {\n return\n }\n })\n element.addEventListener('touchcancel', cancelAll)\n })(target)\n}\n\n/**\n * Function to disable text selection. Use with make swipe events not select the element's text.\n * @param {Element} element\n * @param {string | boolean} [all]\n * @return {void} undefined\n */\nexport function disableTextSelection(element, all) {\n if (!element) return\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.add('disable-user-select')\n })\n } else {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n element.classList.add('disable-user-select')\n }\n }\n var stylesheet = document.head.querySelector('.disable-user-select')\n if (!stylesheet) {\n stylesheet = document.createElement('style')\n stylesheet.className = 'disable-user-select'\n stylesheet.innerHTML =\n '.disable-user-select, .disable-user-select * { user-select: none; -webkit-user-select: none; -ms-user-select: none; }'\n document.head.appendChild(stylesheet)\n }\n}\n\n/**\n * Function to remove a style set to disable text selection. This will re-enable text selection.\n * @param {Element} element\n * @param {string | boolean} all\n * @return {void} undefined\n */\nexport function enableTextSelection(element, all) {\n if (all && typeof element === 'string') {\n var elements = Array.prototype.slice.call(\n document.querySelectorAll(element)\n )\n elements.map(function(element) {\n element.classList.remove('disable-user-select')\n })\n } else {\n if (typeof element === 'string') element = document.querySelector(element)\n if (!element) return\n element.classList.remove('disable-user-select')\n }\n}\n"],"names":["eventstart","eventend","eventmove","eventcancel","window","navigator","pointerEnabled","msPointerEnabled","trigger","el","event","data","originalEvent","console","error","document","querySelector","createEvent","evtObj","initEvent","dispatchEvent","gestures","target","Math","abs","parentIfText","node","parentNode","swipeDirection","x1","x2","y1","y2","longTap","longTapTimeout","touch","last","err","cancelLongTap","clearTimeout","cancelAll","touchTimeout","tapTimeout","swipeTimeout","singleTapDelay","gestureLength","test","userAgent","now","delta","element","body","addEventListener","e","Date","length","isDoubleTap","setTimeout","move","direction","preventDefault","disableTextSelection","all","elements","Array","prototype","slice","call","querySelectorAll","map","classList","add","stylesheet","head","createElement","className","innerHTML","appendChild","enableTextSelection","remove"],"mappings":"GAGIA,CAAAA,WAIAC,SAIAC,UAIAC,YAGAC,MAAM,CAACC,SAAPD,CAAiBE,gBACnBN,UAAU,CAAG,cACbC,QAAQ,CAAG,YACXC,SAAS,CAAG,cACZC,WAAW,CAAG,iBAGLC,MAAM,CAACC,SAAPD,CAAiBG,kBAC1BP,UAAU,CAAG,gBACbC,QAAQ,CAAG,cACXC,SAAS,CAAG,gBACZC,WAAW,CAAG,mBAGL,gBAAkBC,CAAAA,QAC3BJ,UAAU,CAAG,aACbC,QAAQ,CAAG,WACXC,SAAS,CAAG,YACZC,WAAW,CAAG,gBAIdH,UAAU,CAAG,YACbC,QAAQ,CAAG,UACXC,SAAS,CAAG,YACZC,WAAW,CAAG,YAWhB,QAAgBK,CAAAA,OAAhB,CAAwBC,CAAxB,CAA4BC,CAA5B,CAAmCC,CAAnC,CAAyCC,CAAzC,CAAwD,IAClD,CAACF,aACHG,CAAAA,OAAO,CAACC,KAARD,CAAc,oDAAdA,KAGgB,QAAd,QAAOJ,CAAAA,IAAiBA,CAAE,CAAGM,QAAQ,CAACC,aAATD,CAAuBN,CAAvBM,GAC7BA,QAAQ,CAACE,YAAa,IACpBC,CAAAA,CAAM,CAAGH,QAAQ,CAACE,WAATF,CAAqB,QAArBA,EACbG,CAAM,CAACC,SAAPD,CAAiBR,CAAjBQ,OAFwB,CAGxBA,CAAM,KAANA,CAAiBP,CAHO,CAIxBO,CAAM,cAANA,CAA0BN,CAJF,CAKxBH,CAAE,CAACW,aAAHX,CAAiBS,CAAjBT,MAQOY,CAAAA,QAAQ,CAAG,SAASC,CAAT,CAAiB,OAyB5BC,IAAI,CAACC,GAzBuB,SAc5BC,CAAAA,EAAaC,EAAM,OACnB,WAAaA,CAAAA,CAAb,CAAoBA,CAApB,CAA2BA,CAAI,CAACC,mBAShCC,CAAAA,EAAeC,EAAIC,EAAIC,EAAIC,EAAI,OAC/BT,GAASM,CAAE,CAAGC,CAAdP,GAAqBA,EAASQ,CAAE,CAAGC,CAAdT,CAArBA,CACO,CAAVM,CAAAA,CAAE,CAAGC,CAALD,CACE,MADFA,CAEE,OAHCN,CAIO,CAAVQ,CAAAA,CAAE,CAAGC,CAALD,CACA,IADAA,CAEA,eAGGE,CAAAA,EAAQvB,EAAO,IACtBwB,CAAc,CAAG,KACbC,CAAK,CAACC,QACJ,CACED,CAAK,EAAIA,CAAK,CAAC1B,EADjB,GAEAD,OAAO,CAAC2B,CAAK,CAAC1B,EAAP,CAAW,SAAX,CAAsB,IAAtB,CAA4BC,CAA5B,CAFP,CAGAyB,CAAK,CAAG,EAHR,CAAJ,CAKE,MAAOE,CAAP,CAAY,WAITC,CAAAA,GAAgB,CACnBJ,CADmB,EACHK,YAAY,CAACL,CAAD,CADT,CAEvBA,CAAc,CAAG,aAGVM,CAAAA,GAAY,CACfC,CADe,EACDF,YAAY,CAACE,CAAD,CADX,CAEfC,CAFe,EAEHH,YAAY,CAACG,CAAD,CAFT,CAGfC,CAHe,EAGDJ,YAAY,CAACI,CAAD,CAHX,CAIfT,CAJe,EAICK,YAAY,CAACL,CAAD,CAJb,CAKnBO,CAAY,CAAGC,CAAU,CAAGC,CAAY,CAAGT,CAAc,CAAG,IALzC,CAMnBC,CAAK,CAAG,GAzD2B,GAEjCM,CAAAA,CAFiC,CAGjCE,CAHiC,CAIjCD,CAJiC,CACjCP,CAAK,CAAG,EADyB,CAMjCS,CAAc,CAAG,GANgB,CAOjCC,CAAa,CAAG,EAPiB,CAQjC,aAAaC,IAAb,CAAkBzC,SAAS,CAAC0C,SAA5B,CARiC,GAQOH,CAAc,CAAG,GARxB,KASjCV,CAAAA,GAsDF,SAASZ,CAAT,CAAiB,IACb0B,CAAAA,CADa,CAEbC,CAFa,CAGbC,CAAO,CAAG5B,CAAM,EAAIP,QAAQ,CAACoC,IAHhB,CAQjBD,CAAO,CAACE,gBAARF,CAAyBlD,UAAzBkD,CAAqC,SAASG,CAAT,CAAY,IAC/CL,CAAG,CAAGM,IAAI,CAACN,GAALM,GACNL,CAAK,CAAGD,CAAG,EAAIb,CAAK,CAACC,IAAND,EAAca,CAAlB,EAEQ,WAAfhD,GAAAA,WACFmC,CAAK,CAAC1B,EAAN0B,CAAWV,CAAY,CAAqB4B,CAAC,CAAC/B,MAAvB,EACM,QAAzB+B,GAAAA,CAAC,CAAC/B,MAAF+B,YACFlB,CAAK,CAAC1B,EAAN0B,CAAWkB,CAAC,CAAC/B,MAAF+B,aAEbZ,CAAY,EAAIF,YAAY,CAACE,CAAD,EAC5BN,CAAK,CAACN,EAANM,CAAWkB,CAAC,OACZlB,CAAK,CAACJ,EAANI,CAAWkB,CAAC,eAMgB,CAAxBA,GAAAA,CAAC,QAADA,CAAaE,OAAc,IACzB,CAAC,CAACF,CAAC,CAAC/B,MAAF+B,UAAsB,OAC5BlB,CAAK,CAAC1B,EAAN0B,CAAWV,CAAY,CAAC4B,CAAC,QAADA,CAAa,CAAbA,EAAgB/B,MAAjB,CAFM,CAG7BmB,CAAY,EAAIF,YAAY,CAACE,CAAD,CAHC,CAI7BN,CAAK,CAACN,EAANM,CAAWkB,CAAC,QAADA,CAAa,CAAbA,OAJkB,CAK7BlB,CAAK,CAACJ,EAANI,CAAWkB,CAAC,QAADA,CAAa,CAAbA,QAIH,CAARJ,CAAAA,CAAK,EAAiB,GAATA,EAAAA,CA1B8B,GA2B7Cd,CAAK,CAACqB,WAANrB,GA3B6C,EA6B/CA,CAAK,CAACC,IAAND,CAAaa,CA7BkC,CA8B/Cd,CAAc,CAAGuB,UAAU,CAACxB,CAAD,CAhGZ,GAgGY,CAAwBoB,CAAxB,CA9B7B,CAAAH,CARiB,CA4CjBA,CAAO,CAACE,gBAARF,CAAyBhD,SAAzBgD,CAAoC,SAASG,CAAT,CAAY,IAC9Cf,CAAa,GACK,WAAdpC,GAAAA,UACFiC,CAAK,CAACL,EAANK,CAAWkB,CAAC,OACZlB,CAAK,CAACH,EAANG,CAAWkB,CAAC,eAKgB,CAAxBA,GAAAA,CAAC,QAADA,CAAaE,OACfpB,CAAK,CAACL,EAANK,CAAWkB,CAAC,QAADA,CAAa,CAAbA,QACXlB,CAAK,CAACH,EAANG,CAAWkB,CAAC,QAADA,CAAa,CAAbA,QACXlB,CAAK,CAACuB,IAANvB,QACK,IAA4B,CAAxBkB,GAAAA,CAAC,QAADA,CAAaE,MAAjB,CAA+B,CAb1C,CAAAL,CA5CiB,CAkEjBA,CAAO,CAACE,gBAARF,CAAyBjD,QAAzBiD,CAAmC,SAASG,CAAT,CAAY,CAC7Cf,CAAa,EADgC,CAExC,CAACH,CAAK,CAAC1B,EAFiC,GAOxC0B,CAAK,CAACL,EAANK,EAAYZ,EAASY,CAAK,CAACN,EAANM,CAAWA,CAAK,CAACL,EAA1BP,EAAgCsB,CAA5CV,EACAA,CAAK,CAACH,EAANG,EAAYZ,EAASY,CAAK,CAACJ,EAANI,CAAWA,CAAK,CAACH,EAA1BT,EAAgCsB,CARJ,CAUzCF,CAAY,CAAGc,UAAU,CAAC,UAAW,IAC/BtB,CAAK,EAAIA,CAAK,CAAC1B,GAAI,IACjBkD,CAAAA,CAAS,CAAG/B,CAAc,CAC5BO,CAAK,CAACN,EADsB,CAE5BM,CAAK,CAACL,EAFsB,CAG5BK,CAAK,CAACJ,EAHsB,CAI5BI,CAAK,CAACH,EAJsB,EAM9BxB,OAAO,CAAC2B,CAAK,CAAC1B,EAAP,CAAW,OAAX,CAAoBkD,CAApB,CAA+BN,CAA/B,CAPc,CAQrB7C,OAAO,CAAC2B,CAAK,CAAC1B,EAAP,CAAW,QAAUkD,CAArB,CAAgC,IAAhC,CAAsCN,CAAtC,CARc,CASrBlB,CAAK,CAAG,GAVa,CAAA,CAYtB,CAZsB,CAVgB,CA2BhC,QAAUA,CAAAA,CA3BsB,GA+BzCO,CAAU,CAAGe,UAAU,CAAC,UAAW,CAI7BtB,CAAK,EAAIA,CAAK,CAACqB,WAJc,CAK3BrB,CAAK,EAAIA,CAAK,CAAC1B,EALY,GAM7BD,OAAO,CAAC2B,CAAK,CAAC1B,EAAP,CAAW,QAAX,CAAqB,IAArB,CAA2B4C,CAA3B,CANsB,CAO7BA,CAAC,CAACO,cAAFP,EAP6B,CAQ7BlB,CAAK,CAAG,EARqB,EAc/BM,CAAY,CAAGgB,UAAU,CAAC,UAAW,CACnChB,CAAY,CAAG,IADoB,CAE/BN,CAAK,EAAIA,CAAK,CAAC1B,EAAf0B,EAAqB,CAACA,CAAK,CAACuB,IAFG,EAGjClD,OAAO,CAAC2B,CAAK,CAAC1B,EAAP,CAAW,KAAX,CAAkB,IAAlB,CAAwB4C,CAAxB,CAH0B,CAIjClB,CAAK,CAAG,EAJyB,EASjCK,CAAS,EATY,CAAA,CAWtBI,CAXsB,CAdN,CAAA,CA2BpB,CA3BoB,CA/BkB,EAA/C,CAAAM,CAlEiB,CAkIjBA,CAAO,CAACE,gBAARF,CAAyB,aAAzBA,CAAwCV,CAAxCU,CAlID,GAmIE5B,EAlME,EA2MA,QAASuC,CAAAA,oBAAT,CAA8BX,CAA9B,CAAuCY,CAAvC,CAA4C,IAC5CZ,MACDY,CAAG,EAAuB,QAAnB,QAAOZ,CAAAA,EAAsB,IAClCa,CAAAA,CAAQ,CAAGC,KAAK,CAACC,SAAND,CAAgBE,KAAhBF,CAAsBG,IAAtBH,CACbjD,QAAQ,CAACqD,gBAATrD,CAA0BmC,CAA1BnC,CADaiD,EAGfD,CAAQ,CAACM,GAATN,CAAa,SAASb,CAAT,CAAkB,CAC7BA,CAAO,CAACoB,SAARpB,CAAkBqB,GAAlBrB,CAAsB,qBAAtBA,CADF,CAAAa,CAJF,KAQyB,QAAnB,QAAOb,CAAAA,IACTA,CAAO,CAAGnC,QAAQ,CAACC,aAATD,CAAuBmC,CAAvBnC,EACVmC,CAAO,CAACoB,SAARpB,CAAkBqB,GAAlBrB,CAAsB,qBAAtBA,MAGAsB,CAAAA,CAAU,CAAGzD,QAAQ,CAAC0D,IAAT1D,CAAcC,aAAdD,CAA4B,sBAA5BA,EACZyD,IACHA,CAAU,CAAGzD,QAAQ,CAAC2D,aAAT3D,CAAuB,OAAvBA,EACbyD,CAAU,CAACG,SAAXH,CAAuB,sBACvBA,CAAU,CAACI,SAAXJ,CACE,wHACFzD,QAAQ,CAAC0D,IAAT1D,CAAc8D,WAAd9D,CAA0ByD,CAA1BzD,IAUG,QAAS+D,CAAAA,mBAAT,CAA6B5B,CAA7B,CAAsCY,CAAtC,CAA2C,IAC5CA,CAAG,EAAuB,QAAnB,QAAOZ,CAAAA,EAAsB,IAClCa,CAAAA,CAAQ,CAAGC,KAAK,CAACC,SAAND,CAAgBE,KAAhBF,CAAsBG,IAAtBH,CACbjD,QAAQ,CAACqD,gBAATrD,CAA0BmC,CAA1BnC,CADaiD,EAGfD,CAAQ,CAACM,GAATN,CAAa,SAASb,CAAT,CAAkB,CAC7BA,CAAO,CAACoB,SAARpB,CAAkB6B,MAAlB7B,CAAyB,qBAAzBA,CADF,CAAAa,CAJF,KAOO,IACkB,QAAnB,QAAOb,CAAAA,IAAsBA,CAAO,CAAGnC,QAAQ,CAACC,aAATD,CAAuBmC,CAAvBnC,GACvC,CAACmC,EAAS,OACdA,CAAO,CAACoB,SAARpB,CAAkB6B,MAAlB7B,CAAyB,qBAAzBA"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e042a0e..e4036e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@composi/gestures", - "version": "1.0.7", + "version": "1.0.8-rc1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2679,7 +2679,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2700,12 +2701,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2720,17 +2723,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2847,7 +2853,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2859,6 +2866,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2873,6 +2881,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2880,12 +2889,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2904,6 +2915,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2984,7 +2996,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2996,6 +3009,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3081,7 +3095,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -3117,6 +3132,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3136,6 +3152,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3179,12 +3196,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, diff --git a/package.json b/package.json index aa70068..ff4c101 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@composi/gestures", - "version": "1.0.7", + "version": "1.0.8-rc1", "description": "Cross-platform gesture library for desktop and mobile.", "main": "dist/gestures.js", "jsnext:main": "./index.js", diff --git a/src/gestures.js b/src/gestures.js index 16c9e03..9702dd1 100644 --- a/src/gestures.js +++ b/src/gestures.js @@ -71,7 +71,7 @@ export function trigger(el, event, data, originalEvent) { * Enable gestures in the browser. * @return {void} undefined */ -export var gestures = function() { +export var gestures = function(target) { var touch = {} var touchTimeout var swipeTimeout @@ -134,15 +134,15 @@ export var gestures = function() { /** * Execute this after DOM loads: */ - ;(function() { + ;(function(target) { var now var delta - var body = document.body + var element = target || document.body /** * Capture start of event: */ - body.addEventListener(eventstart, function(e) { + element.addEventListener(eventstart, function(e) { now = Date.now() delta = now - (touch.last || now) @@ -178,7 +178,7 @@ export var gestures = function() { /** * Capture event move: */ - body.addEventListener(eventmove, function(e) { + element.addEventListener(eventmove, function(e) { cancelLongTap() if (eventmove === 'mousemove') { touch.x2 = e['pageX'] @@ -200,7 +200,7 @@ export var gestures = function() { /** * Capture event end: */ - body.addEventListener(eventend, function(e) { + element.addEventListener(eventend, function(e) { cancelLongTap() if (!!touch.el) { /** @@ -264,8 +264,8 @@ export var gestures = function() { return } }) - body.addEventListener('touchcancel', cancelAll) - })() + element.addEventListener('touchcancel', cancelAll) + })(target) } /**