diff options
Diffstat (limited to 'ecomp-portal-FE/client/bower_components/hammerjs')
11 files changed, 0 insertions, 2933 deletions
diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/.bower.json b/ecomp-portal-FE/client/bower_components/hammerjs/.bower.json deleted file mode 100644 index 8e27563c..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/.bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "hammerjs", - "main": "hammer.js", - "ignore": [ - "tests", - "src", - ".bowerrc", - ".gitignore", - ".jscsrc", - ".jshintrc", - ".travis.yml", - "component.json", - "Gruntfile.coffee", - "package.json" - ], - "homepage": "https://github.com/EightMedia/hammer.js", - "version": "2.0.8", - "_release": "2.0.8", - "_resolution": { - "type": "version", - "tag": "v2.0.8", - "commit": "ee611316bec077fcfbba3fd604ebc4b0b35ac288" - }, - "_source": "https://github.com/EightMedia/hammer.js.git", - "_target": "~2.0.0", - "_originalSource": "hammerjs" -}
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/CHANGELOG.md b/ecomp-portal-FE/client/bower_components/hammerjs/CHANGELOG.md deleted file mode 100644 index d3bc17db..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/CHANGELOG.md +++ /dev/null @@ -1,54 +0,0 @@ -# Changelog - -### 2.0.6, 2015-12-23 -- Add Assign method and deprecate merge and extend ([#895](https://github.com/hammerjs/hammer.js/pull/895)[fc01eae](https://github.com/hammerjs/hammer.js/commit/fc01eaea678acc430c664eb374555fbe3d403bdd)) -- Expose Hammer on window or self if either is defined to avoid issues when AMD is present but not used. ( [356f795](https://github.com/hammerjs/hammer.js/commit/356f7955b01f3679c29d6c45931679256b45036e)) -- Add support for PointerEvent instead of MSPointerEvent if supported. ([#754](https://github.com/hammerjs/hammer.js/issues/754), [439c7a6](https://github.com/hammerjs/hammer.js/commit/439c7a6c46978ab387b4b8289399e904d1c49535)) -- Fixed moz-prefix, prefix should be Moz not moz. ([3ea47f3](https://github.com/hammerjs/hammer.js/commit/3ea47f3aebadc9d3bb6bf52bc8402cad135ef8a9)) -- Removed non-existant recognizer ([f1c2d3b](https://github.com/hammerjs/hammer.js/commit/f1c2d3bf05f530ae092ecfc2335fceeff0e9eec9)) -- Fixed config leaking between instances([189098f](https://github.com/hammerjs/hammer.js/commit/189098ff7736f6ed2fce9a3d3e1f5a3afee085ba)) -- Fixed gaps in gesture configs and update tests to match ([70c2902](https://github.com/hammerjs/hammer.js/commit/70c2902d773a750e92ce8c423f8a4165c07eab97)) -- Fixed Manager off method ([#768](https://github.com/hammerjs/hammer.js/issues/768), [da49a27](https://github.com/hammerjs/hammer.js/commit/da49a2730779ecc3b4dd147cc418a0df7c70fad9)) -- Added compatibility with requirejs optimizer namespaces ( [70075f2](https://github.com/hammerjs/hammer.js/commit/70075f2df1b855f7c6d8d3caac49b9276b88c8d6)) -- Made touchaction test zoomable ( [50264a7](https://github.com/hammerjs/hammer.js/commit/50264a70251ca88bbaf7b666401e527eee616de5)) -- Fixed preventing default when for `pan-x pan-y` case ( [95eaafa](https://github.com/hammerjs/hammer.js/commit/95eaafadad27bd1b25d20cf976811a451922f1c4)) -- Fixed incorrect touch action pan direction ( [a81da57](https://github.com/hammerjs/hammer.js/commit/a81da57a82ebf37e695e7c443e4e2715e7f32856)) -- Fixed combined pan-x pan-y to resolve to none ( [fdae07b](https://github.com/hammerjs/hammer.js/commit/fdae07bc2ba3c90aad28da6791b3d5df627bc612)) -- Fixed inverted touch-action for pan recognizer ([#728](https://github.com/hammerjs/hammer.js/issues/728), [605bd3b](https://github.com/hammerjs/hammer.js/commit/605bd3beca780be91dd43f9da8b809d155a43d1a)) -- Fixed dependency on non standard touch list ordering ([#610](https://github.com/hammerjs/hammer.js/issues/610), [#791](https://github.com/hammerjs/hammer.js/issues/791), [287720a](https://github.com/hammerjs/hammer.js/commit/287720a6e5067e7f28be8b8b3b266d22905361c4)) -- Fixed swipe to not trigger after multitouch gesture ([#640](https://github.com/hammerjs/hammer.js/issues/640), [711d8a1](https://github.com/hammerjs/hammer.js/commit/711d8a1df1aa5057ecb536454a36257e3c0d6d91)) -- Fixed swipe recognizer to use overall gesture direction and velocity ( [963fe69](https://github.com/hammerjs/hammer.js/commit/963fe697515273fee508414bc29e2656465cea55)) -- Fixed getDirection returning reversed direction ( [e40dcde](https://github.com/hammerjs/hammer.js/commit/e40dcde43bdac7a74c8ce5c05a4f62121089cd91)) -- Fixed detection of tap when multi touch gestures are present ( [c46cbba](https://github.com/hammerjs/hammer.js/commit/c46cbba1c2cbbf874b59913416858d9dae297e64)) -- Fixed incorrect event order ([#824](https://github.com/hammerjs/hammer.js/issues/824), [92f2d76](https://github.com/hammerjs/hammer.js/commit/92f2d76188480d967e738a19cd508d0b94a31329)) -- Fixed leaking options between recognizer instances ([#813](https://github.com/hammerjs/hammer.js/issues/813), [af32c9b](https://github.com/hammerjs/hammer.js/commit/af32c9bace3f04bb34bee852ff56a33cc8fc27cd)) -- Fixed detection when element has no style attribute ( [5ca6d8c](https://github.com/hammerjs/hammer.js/commit/5ca6d8cbead02c71929a8073e95ddf98e11c0e06)) - -### 2.0.4, 2014-09-28 -- Fix IE pointer issue. [#665](https://github.com/hammerjs/hammer.js/pull/665) -- Fix multi-touch at different elements. [#668](https://github.com/hammerjs/hammer.js/pull/668) -- Added experimental [single-user Touch input handler](src/input/singletouch.js). This to improve performance/ux when only a single user has to be supported. Plans are to release 2.1 with this as default, and a settings to enable the multi-user handler. - -### 2.0.3, 2014-09-10 -- Manager.set improvements. -- Fix requireFailure() call in Manager.options.recognizers. -- Make DIRECTION_ALL for pan and swipe gestures less blocking. -- Fix Swipe recognizer threshold option. -- Expose the Input classes. -- Added the option `inputClass` to set the used input handler. - -### 2.0.2, 2014-07-26 -- Improved mouse and pointer-events input, now able to move outside the window. -- Added the export name (`Hammer`) as an argument to the wrapper. -- Add the option *experimental* `inputTarget` to change the element that receives the events. -- Improved performance when only one touch being active. -- Fixed the jumping deltaXY bug when going from single to multi-touch. -- Improved velocity calculations. - -### 2.0.1, 2014-07-15 -- Fix issue when no document.body is available -- Added pressup event for the press recognizer -- Removed alternative for Object.create - -### 2.0.0, 2014-07-11 -- Full rewrite of the library. diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/CONTRIBUTING.md b/ecomp-portal-FE/client/bower_components/hammerjs/CONTRIBUTING.md deleted file mode 100644 index b1934de6..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/CONTRIBUTING.md +++ /dev/null @@ -1,41 +0,0 @@ -# Contributing to Hammer.js - -Looking to contribute something to Hammer.js? **Here's how you can help.** - - -## Reporting issues - -We only accept issues that are bug reports or feature requests. Bugs must be -isolated and reproducible problems that can be fixed within the Hammer.js. -Please read the following guidelines before opening any issue. - -1. [**Read the documentation**](https://hammerjs.github.io) - -2. **Search for existing issues.** We get a lot of duplicate issues, and you'd -help us out a lot by first checking if someone else has reported the same issue. -Moreover, the issue may have already been resolved with a fix available. Also -take a look if your problem is explained at the Wiki. - -3. **Create an isolated and reproducible test case.** Be sure the problem exists -in Hammer's code with a reduced test case that should be included in each bug -report. - -4. **Include a live example.** Make use of jsFiddle or jsBin to share your -isolated test cases. Also, a screen capture would work, with tools like LICEcap. - -5. **Share as much information as possible.** Include operating system and -version, browser and version, version of Hammer.js, customized or vanilla build, -etc. where appropriate. Also include steps to reproduce the bug. - -## Pull requests - -1. Changes must be done in `/src` files, never just the compiled files. Also, don't -commit the compiled files. - -2. Try not to pollute your pull request with unintended changes. Keep them simple -and small - -3. Try to share which browsers your code has been tested in before submitting a -pull request - -4. Write tests for your code, these can be found in `/tests`. diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/LICENSE.md b/ecomp-portal-FE/client/bower_components/hammerjs/LICENSE.md deleted file mode 100644 index e067655d..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/README.md b/ecomp-portal-FE/client/bower_components/hammerjs/README.md deleted file mode 100644 index e7bf8b8f..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Hammer.js 2.0.6 - -[![Build Status](https://travis-ci.org/hammerjs/hammer.js.svg)](https://travis-ci.org/hammerjs/hammer.js) - -## Support, Questions, and Collaboration - -[![Slack Status](https://hammerjs.herokuapp.com/badge.svg)](https://hammerjs.herokuapp.com/) - -## Documentation - -Visit [hammerjs.github.io](http://hammerjs.github.io) for detailed documentation. - -```js -// get a reference to an element -var stage = document.getElementById('stage'); - -// create a manager for that element -var mc = new Hammer.Manager(stage); - -// create a recognizer -var Rotate = new Hammer.Rotate(); - -// add the recognizer -mc.add(Rotate); - -// subscribe to events -mc.on('rotate', function(e) { - // do something cool - var rotation = Math.round(e.rotation); - stage.style.transform = 'rotate('+rotation+'deg)'; -}); -``` - -An advanced demo is available here: [http://codepen.io/runspired/full/ZQBGWd/](http://codepen.io/runspired/full/ZQBGWd/) - - -## Contributing - -Read the [contributing guidelines](./CONTRIBUTING.md). - -For PRs. - -- Use [Angular Style commit messages](https://github.com/angular/angular.js/blob/v1.4.8/CONTRIBUTING.md#commit) -- Rebase your PR branch when necessary -- If you add a feature or fix a bug, please add or fix any necessary tests. -- If a new feature, open a docs PR to go with. - -## Building - -You can get the pre-build versions from the Hammer.js website, or do this by yourself running -`npm install -g grunt-cli && npm install && grunt build` diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/bower.json b/ecomp-portal-FE/client/bower_components/hammerjs/bower.json deleted file mode 100644 index f241608c..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/bower.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "hammerjs", - "main": "hammer.js", - "ignore": [ - "tests", - "src", - ".bowerrc", - ".gitignore", - ".jscsrc", - ".jshintrc", - ".travis.yml", - "component.json", - "Gruntfile.coffee", - "package.json" - ] -} diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/changelog.js b/ecomp-portal-FE/client/bower_components/hammerjs/changelog.js deleted file mode 100644 index 887a3292..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/changelog.js +++ /dev/null @@ -1,71 +0,0 @@ -var changelog = require( "changelogplease" ); -var gittags = require( "git-tags" ).get( function( error, tags ) { - if ( error ) { - throw error - } - console.log( tags[ 1 ] + ".." + tags[ 0 ] ); - var exclude = [ "Merge", "Whitespace", "Fixup", "Cleanup", "Formatting", "Ignore" ]; - changelog( { - ticketUrl: "https://github.com/hammerjs/hammer.js/issues/{id}", - commitUrl: "https://github.com/hammerjs/hammerjs/commit/{id}", - sort: false, - repo: "./", - committish: tags[ 1 ] + ".." + tags[ 0 ] - }, function( error, log ) { - if ( error ) { - throw error; - } - log = parseLog( log ); - console.log( log ); - } ); - function parseLog( log ) { - var lines = log.split( "\n" ); - var newLog = []; - var log = []; - var currentComponent; - - - lines.shift(); - lines.forEach( function( line ) { - var newLine = parseLine( line ); - if ( newLine ) { - log.push( line ); - } - } ); - var log = log.join( "\n" ); - return log.replace( /\*/g, "-" ).replace( /__TICKETREF__,/g, "" ); - } - function parseLine( line ) { - var parts = getParts( line ); - - if ( exclude.indexOf( parts.component ) > -1 ) { - return false; - } - return parts; - } - function getParts( line ) { - var parts = line.split( ":" ); - var component = ""; - var message; - var commits = line.match( /\{\{([A-Za-z0-9 ]){0,99}\}\}/ ) - - if ( parts.length > 1 && parts[ 0 ].length <= 20 ) { - component = parts[ 0 ]; - parts.shift(); - message = parts.join( ":" ); - } else { - parts = line.split( " " ); - component = parts[ 1 ]; - parts.shift(); - message = parts.join( " " ); - } - - if ( component ) { - component = component.replace( /\* |,/, "" ); - } - return { - component: component, - message: message - }; - } -} ); diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.js b/ecomp-portal-FE/client/bower_components/hammerjs/hammer.js deleted file mode 100644 index 00d2965e..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.js +++ /dev/null @@ -1,2643 +0,0 @@ -/*! Hammer.JS - v2.0.7 - 2016-04-22 - * http://hammerjs.github.io/ - * - * Copyright (c) 2016 Jorik Tangelder; - * Licensed under the MIT license */ -(function(window, document, exportName, undefined) { - 'use strict'; - -var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o']; -var TEST_ELEMENT = document.createElement('div'); - -var TYPE_FUNCTION = 'function'; - -var round = Math.round; -var abs = Math.abs; -var now = Date.now; - -/** - * set a timeout with a given scope - * @param {Function} fn - * @param {Number} timeout - * @param {Object} context - * @returns {number} - */ -function setTimeoutContext(fn, timeout, context) { - return setTimeout(bindFn(fn, context), timeout); -} - -/** - * if the argument is an array, we want to execute the fn on each entry - * if it aint an array we don't want to do a thing. - * this is used by all the methods that accept a single and array argument. - * @param {*|Array} arg - * @param {String} fn - * @param {Object} [context] - * @returns {Boolean} - */ -function invokeArrayArg(arg, fn, context) { - if (Array.isArray(arg)) { - each(arg, context[fn], context); - return true; - } - return false; -} - -/** - * walk objects and arrays - * @param {Object} obj - * @param {Function} iterator - * @param {Object} context - */ -function each(obj, iterator, context) { - var i; - - if (!obj) { - return; - } - - if (obj.forEach) { - obj.forEach(iterator, context); - } else if (obj.length !== undefined) { - i = 0; - while (i < obj.length) { - iterator.call(context, obj[i], i, obj); - i++; - } - } else { - for (i in obj) { - obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); - } - } -} - -/** - * wrap a method with a deprecation warning and stack trace - * @param {Function} method - * @param {String} name - * @param {String} message - * @returns {Function} A new function wrapping the supplied method. - */ -function deprecate(method, name, message) { - var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n'; - return function() { - var e = new Error('get-stack-trace'); - var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '') - .replace(/^\s+at\s+/gm, '') - .replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace'; - - var log = window.console && (window.console.warn || window.console.log); - if (log) { - log.call(window.console, deprecationMessage, stack); - } - return method.apply(this, arguments); - }; -} - -/** - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} target - * @param {...Object} objects_to_assign - * @returns {Object} target - */ -var assign; -if (typeof Object.assign !== 'function') { - assign = function assign(target) { - if (target === undefined || target === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - var output = Object(target); - for (var index = 1; index < arguments.length; index++) { - var source = arguments[index]; - if (source !== undefined && source !== null) { - for (var nextKey in source) { - if (source.hasOwnProperty(nextKey)) { - output[nextKey] = source[nextKey]; - } - } - } - } - return output; - }; -} else { - assign = Object.assign; -} - -/** - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge=false] - * @returns {Object} dest - */ -var extend = deprecate(function extend(dest, src, merge) { - var keys = Object.keys(src); - var i = 0; - while (i < keys.length) { - if (!merge || (merge && dest[keys[i]] === undefined)) { - dest[keys[i]] = src[keys[i]]; - } - i++; - } - return dest; -}, 'extend', 'Use `assign`.'); - -/** - * merge the values from src in the dest. - * means that properties that exist in dest will not be overwritten by src - * @param {Object} dest - * @param {Object} src - * @returns {Object} dest - */ -var merge = deprecate(function merge(dest, src) { - return extend(dest, src, true); -}, 'merge', 'Use `assign`.'); - -/** - * simple class inheritance - * @param {Function} child - * @param {Function} base - * @param {Object} [properties] - */ -function inherit(child, base, properties) { - var baseP = base.prototype, - childP; - - childP = child.prototype = Object.create(baseP); - childP.constructor = child; - childP._super = baseP; - - if (properties) { - assign(childP, properties); - } -} - -/** - * simple function bind - * @param {Function} fn - * @param {Object} context - * @returns {Function} - */ -function bindFn(fn, context) { - return function boundFn() { - return fn.apply(context, arguments); - }; -} - -/** - * let a boolean value also be a function that must return a boolean - * this first item in args will be used as the context - * @param {Boolean|Function} val - * @param {Array} [args] - * @returns {Boolean} - */ -function boolOrFn(val, args) { - if (typeof val == TYPE_FUNCTION) { - return val.apply(args ? args[0] || undefined : undefined, args); - } - return val; -} - -/** - * use the val2 when val1 is undefined - * @param {*} val1 - * @param {*} val2 - * @returns {*} - */ -function ifUndefined(val1, val2) { - return (val1 === undefined) ? val2 : val1; -} - -/** - * addEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler - */ -function addEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.addEventListener(type, handler, false); - }); -} - -/** - * removeEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler - */ -function removeEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.removeEventListener(type, handler, false); - }); -} - -/** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ -function hasParent(node, parent) { - while (node) { - if (node == parent) { - return true; - } - node = node.parentNode; - } - return false; -} - -/** - * small indexOf wrapper - * @param {String} str - * @param {String} find - * @returns {Boolean} found - */ -function inStr(str, find) { - return str.indexOf(find) > -1; -} - -/** - * split string on whitespace - * @param {String} str - * @returns {Array} words - */ -function splitStr(str) { - return str.trim().split(/\s+/g); -} - -/** - * find if a array contains the object using indexOf or a simple polyFill - * @param {Array} src - * @param {String} find - * @param {String} [findByKey] - * @return {Boolean|Number} false when not found, or the index - */ -function inArray(src, find, findByKey) { - if (src.indexOf && !findByKey) { - return src.indexOf(find); - } else { - var i = 0; - while (i < src.length) { - if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { - return i; - } - i++; - } - return -1; - } -} - -/** - * convert array-like objects to real arrays - * @param {Object} obj - * @returns {Array} - */ -function toArray(obj) { - return Array.prototype.slice.call(obj, 0); -} - -/** - * unique array with objects based on a key (like 'id') or just by the array's value - * @param {Array} src [{id:1},{id:2},{id:1}] - * @param {String} [key] - * @param {Boolean} [sort=False] - * @returns {Array} [{id:1},{id:2}] - */ -function uniqueArray(src, key, sort) { - var results = []; - var values = []; - var i = 0; - - while (i < src.length) { - var val = key ? src[i][key] : src[i]; - if (inArray(values, val) < 0) { - results.push(src[i]); - } - values[i] = val; - i++; - } - - if (sort) { - if (!key) { - results = results.sort(); - } else { - results = results.sort(function sortUniqueArray(a, b) { - return a[key] > b[key]; - }); - } - } - - return results; -} - -/** - * get the prefixed property - * @param {Object} obj - * @param {String} property - * @returns {String|Undefined} prefixed - */ -function prefixed(obj, property) { - var prefix, prop; - var camelProp = property[0].toUpperCase() + property.slice(1); - - var i = 0; - while (i < VENDOR_PREFIXES.length) { - prefix = VENDOR_PREFIXES[i]; - prop = (prefix) ? prefix + camelProp : property; - - if (prop in obj) { - return prop; - } - i++; - } - return undefined; -} - -/** - * get a unique id - * @returns {number} uniqueId - */ -var _uniqueId = 1; -function uniqueId() { - return _uniqueId++; -} - -/** - * get the window object of an element - * @param {HTMLElement} element - * @returns {DocumentView|Window} - */ -function getWindowForElement(element) { - var doc = element.ownerDocument || element; - return (doc.defaultView || doc.parentWindow || window); -} - -var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; - -var SUPPORT_TOUCH = ('ontouchstart' in window); -var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; -var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); - -var INPUT_TYPE_TOUCH = 'touch'; -var INPUT_TYPE_PEN = 'pen'; -var INPUT_TYPE_MOUSE = 'mouse'; -var INPUT_TYPE_KINECT = 'kinect'; - -var COMPUTE_INTERVAL = 25; - -var INPUT_START = 1; -var INPUT_MOVE = 2; -var INPUT_END = 4; -var INPUT_CANCEL = 8; - -var DIRECTION_NONE = 1; -var DIRECTION_LEFT = 2; -var DIRECTION_RIGHT = 4; -var DIRECTION_UP = 8; -var DIRECTION_DOWN = 16; - -var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; -var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; -var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; - -var PROPS_XY = ['x', 'y']; -var PROPS_CLIENT_XY = ['clientX', 'clientY']; - -/** - * create new input type manager - * @param {Manager} manager - * @param {Function} callback - * @returns {Input} - * @constructor - */ -function Input(manager, callback) { - var self = this; - this.manager = manager; - this.callback = callback; - this.element = manager.element; - this.target = manager.options.inputTarget; - - // smaller wrapper around the handler, for the scope and the enabled state of the manager, - // so when disabled the input events are completely bypassed. - this.domHandler = function(ev) { - if (boolOrFn(manager.options.enable, [manager])) { - self.handler(ev); - } - }; - - this.init(); - -} - -Input.prototype = { - /** - * should handle the inputEvent data and trigger the callback - * @virtual - */ - handler: function() { }, - - /** - * bind the events - */ - init: function() { - this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - }, - - /** - * unbind the events - */ - destroy: function() { - this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - } -}; - -/** - * create new input type manager - * called by the Manager constructor - * @param {Hammer} manager - * @returns {Input} - */ -function createInputInstance(manager) { - var Type; - var inputClass = manager.options.inputClass; - - if (inputClass) { - Type = inputClass; - } else if (SUPPORT_POINTER_EVENTS) { - Type = PointerEventInput; - } else if (SUPPORT_ONLY_TOUCH) { - Type = TouchInput; - } else if (!SUPPORT_TOUCH) { - Type = MouseInput; - } else { - Type = TouchMouseInput; - } - return new (Type)(manager, inputHandler); -} - -/** - * handle input events - * @param {Manager} manager - * @param {String} eventType - * @param {Object} input - */ -function inputHandler(manager, eventType, input) { - var pointersLen = input.pointers.length; - var changedPointersLen = input.changedPointers.length; - var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0)); - var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0)); - - input.isFirst = !!isFirst; - input.isFinal = !!isFinal; - - if (isFirst) { - manager.session = {}; - } - - // source event is the normalized value of the domEvents - // like 'touchstart, mouseup, pointerdown' - input.eventType = eventType; - - // compute scale, rotation etc - computeInputData(manager, input); - - // emit secret event - manager.emit('hammer.input', input); - - manager.recognize(input); - manager.session.prevInput = input; -} - -/** - * extend the data with some usable properties like scale, rotate, velocity etc - * @param {Object} manager - * @param {Object} input - */ -function computeInputData(manager, input) { - var session = manager.session; - var pointers = input.pointers; - var pointersLength = pointers.length; - - // store the first input to calculate the distance and direction - if (!session.firstInput) { - session.firstInput = simpleCloneInputData(input); - } - - // to compute scale and rotation we need to store the multiple touches - if (pointersLength > 1 && !session.firstMultiple) { - session.firstMultiple = simpleCloneInputData(input); - } else if (pointersLength === 1) { - session.firstMultiple = false; - } - - var firstInput = session.firstInput; - var firstMultiple = session.firstMultiple; - var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; - - var center = input.center = getCenter(pointers); - input.timeStamp = now(); - input.deltaTime = input.timeStamp - firstInput.timeStamp; - - input.angle = getAngle(offsetCenter, center); - input.distance = getDistance(offsetCenter, center); - - computeDeltaXY(session, input); - input.offsetDirection = getDirection(input.deltaX, input.deltaY); - - var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY); - input.overallVelocityX = overallVelocity.x; - input.overallVelocityY = overallVelocity.y; - input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y; - - input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; - input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; - - input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length > - session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers); - - computeIntervalInputData(session, input); - - // find the correct target - var target = manager.element; - if (hasParent(input.srcEvent.target, target)) { - target = input.srcEvent.target; - } - input.target = target; -} - -function computeDeltaXY(session, input) { - var center = input.center; - var offset = session.offsetDelta || {}; - var prevDelta = session.prevDelta || {}; - var prevInput = session.prevInput || {}; - - if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { - prevDelta = session.prevDelta = { - x: prevInput.deltaX || 0, - y: prevInput.deltaY || 0 - }; - - offset = session.offsetDelta = { - x: center.x, - y: center.y - }; - } - - input.deltaX = prevDelta.x + (center.x - offset.x); - input.deltaY = prevDelta.y + (center.y - offset.y); -} - -/** - * velocity is calculated every x ms - * @param {Object} session - * @param {Object} input - */ -function computeIntervalInputData(session, input) { - var last = session.lastInterval || input, - deltaTime = input.timeStamp - last.timeStamp, - velocity, velocityX, velocityY, direction; - - if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { - var deltaX = input.deltaX - last.deltaX; - var deltaY = input.deltaY - last.deltaY; - - var v = getVelocity(deltaTime, deltaX, deltaY); - velocityX = v.x; - velocityY = v.y; - velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; - direction = getDirection(deltaX, deltaY); - - session.lastInterval = input; - } else { - // use latest velocity info if it doesn't overtake a minimum period - velocity = last.velocity; - velocityX = last.velocityX; - velocityY = last.velocityY; - direction = last.direction; - } - - input.velocity = velocity; - input.velocityX = velocityX; - input.velocityY = velocityY; - input.direction = direction; -} - -/** - * create a simple clone from the input used for storage of firstInput and firstMultiple - * @param {Object} input - * @returns {Object} clonedInputData - */ -function simpleCloneInputData(input) { - // make a simple copy of the pointers because we will get a reference if we don't - // we only need clientXY for the calculations - var pointers = []; - var i = 0; - while (i < input.pointers.length) { - pointers[i] = { - clientX: round(input.pointers[i].clientX), - clientY: round(input.pointers[i].clientY) - }; - i++; - } - - return { - timeStamp: now(), - pointers: pointers, - center: getCenter(pointers), - deltaX: input.deltaX, - deltaY: input.deltaY - }; -} - -/** - * get the center of all the pointers - * @param {Array} pointers - * @return {Object} center contains `x` and `y` properties - */ -function getCenter(pointers) { - var pointersLength = pointers.length; - - // no need to loop when only one touch - if (pointersLength === 1) { - return { - x: round(pointers[0].clientX), - y: round(pointers[0].clientY) - }; - } - - var x = 0, y = 0, i = 0; - while (i < pointersLength) { - x += pointers[i].clientX; - y += pointers[i].clientY; - i++; - } - - return { - x: round(x / pointersLength), - y: round(y / pointersLength) - }; -} - -/** - * calculate the velocity between two points. unit is in px per ms. - * @param {Number} deltaTime - * @param {Number} x - * @param {Number} y - * @return {Object} velocity `x` and `y` - */ -function getVelocity(deltaTime, x, y) { - return { - x: x / deltaTime || 0, - y: y / deltaTime || 0 - }; -} - -/** - * get the direction between two points - * @param {Number} x - * @param {Number} y - * @return {Number} direction - */ -function getDirection(x, y) { - if (x === y) { - return DIRECTION_NONE; - } - - if (abs(x) >= abs(y)) { - return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - return y < 0 ? DIRECTION_UP : DIRECTION_DOWN; -} - -/** - * calculate the absolute distance between two points - * @param {Object} p1 {x, y} - * @param {Object} p2 {x, y} - * @param {Array} [props] containing x and y keys - * @return {Number} distance - */ -function getDistance(p1, p2, props) { - if (!props) { - props = PROPS_XY; - } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; - - return Math.sqrt((x * x) + (y * y)); -} - -/** - * calculate the angle between two coordinates - * @param {Object} p1 - * @param {Object} p2 - * @param {Array} [props] containing x and y keys - * @return {Number} angle - */ -function getAngle(p1, p2, props) { - if (!props) { - props = PROPS_XY; - } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; - return Math.atan2(y, x) * 180 / Math.PI; -} - -/** - * calculate the rotation degrees between two pointersets - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} rotation - */ -function getRotation(start, end) { - return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); -} - -/** - * calculate the scale factor between two pointersets - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} scale - */ -function getScale(start, end) { - return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); -} - -var MOUSE_INPUT_MAP = { - mousedown: INPUT_START, - mousemove: INPUT_MOVE, - mouseup: INPUT_END -}; - -var MOUSE_ELEMENT_EVENTS = 'mousedown'; -var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; - -/** - * Mouse events input - * @constructor - * @extends Input - */ -function MouseInput() { - this.evEl = MOUSE_ELEMENT_EVENTS; - this.evWin = MOUSE_WINDOW_EVENTS; - - this.pressed = false; // mousedown state - - Input.apply(this, arguments); -} - -inherit(MouseInput, Input, { - /** - * handle mouse events - * @param {Object} ev - */ - handler: function MEhandler(ev) { - var eventType = MOUSE_INPUT_MAP[ev.type]; - - // on start we want to have the left mouse button down - if (eventType & INPUT_START && ev.button === 0) { - this.pressed = true; - } - - if (eventType & INPUT_MOVE && ev.which !== 1) { - eventType = INPUT_END; - } - - // mouse must be down - if (!this.pressed) { - return; - } - - if (eventType & INPUT_END) { - this.pressed = false; - } - - this.callback(this.manager, eventType, { - pointers: [ev], - changedPointers: [ev], - pointerType: INPUT_TYPE_MOUSE, - srcEvent: ev - }); - } -}); - -var POINTER_INPUT_MAP = { - pointerdown: INPUT_START, - pointermove: INPUT_MOVE, - pointerup: INPUT_END, - pointercancel: INPUT_CANCEL, - pointerout: INPUT_CANCEL -}; - -// in IE10 the pointer types is defined as an enum -var IE10_POINTER_TYPE_ENUM = { - 2: INPUT_TYPE_TOUCH, - 3: INPUT_TYPE_PEN, - 4: INPUT_TYPE_MOUSE, - 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 -}; - -var POINTER_ELEMENT_EVENTS = 'pointerdown'; -var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; - -// IE10 has prefixed support, and case-sensitive -if (window.MSPointerEvent && !window.PointerEvent) { - POINTER_ELEMENT_EVENTS = 'MSPointerDown'; - POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; -} - -/** - * Pointer events input - * @constructor - * @extends Input - */ -function PointerEventInput() { - this.evEl = POINTER_ELEMENT_EVENTS; - this.evWin = POINTER_WINDOW_EVENTS; - - Input.apply(this, arguments); - - this.store = (this.manager.session.pointerEvents = []); -} - -inherit(PointerEventInput, Input, { - /** - * handle mouse events - * @param {Object} ev - */ - handler: function PEhandler(ev) { - var store = this.store; - var removePointer = false; - - var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); - var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; - var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; - - var isTouch = (pointerType == INPUT_TYPE_TOUCH); - - // get index of the event in the store - var storeIndex = inArray(store, ev.pointerId, 'pointerId'); - - // start and mouse must be down - if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { - if (storeIndex < 0) { - store.push(ev); - storeIndex = store.length - 1; - } - } else if (eventType & (INPUT_END | INPUT_CANCEL)) { - removePointer = true; - } - - // it not found, so the pointer hasn't been down (so it's probably a hover) - if (storeIndex < 0) { - return; - } - - // update the event in the store - store[storeIndex] = ev; - - this.callback(this.manager, eventType, { - pointers: store, - changedPointers: [ev], - pointerType: pointerType, - srcEvent: ev - }); - - if (removePointer) { - // remove from the store - store.splice(storeIndex, 1); - } - } -}); - -var SINGLE_TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL -}; - -var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; -var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; - -/** - * Touch events input - * @constructor - * @extends Input - */ -function SingleTouchInput() { - this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; - this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; - this.started = false; - - Input.apply(this, arguments); -} - -inherit(SingleTouchInput, Input, { - handler: function TEhandler(ev) { - var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; - - // should we handle the touch events? - if (type === INPUT_START) { - this.started = true; - } - - if (!this.started) { - return; - } - - var touches = normalizeSingleTouches.call(this, ev, type); - - // when done, reset the started state - if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { - this.started = false; - } - - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } -}); - -/** - * @this {TouchInput} - * @param {Object} ev - * @param {Number} type flag - * @returns {undefined|Array} [all, changed] - */ -function normalizeSingleTouches(ev, type) { - var all = toArray(ev.touches); - var changed = toArray(ev.changedTouches); - - if (type & (INPUT_END | INPUT_CANCEL)) { - all = uniqueArray(all.concat(changed), 'identifier', true); - } - - return [all, changed]; -} - -var TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL -}; - -var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; - -/** - * Multi-user touch events input - * @constructor - * @extends Input - */ -function TouchInput() { - this.evTarget = TOUCH_TARGET_EVENTS; - this.targetIds = {}; - - Input.apply(this, arguments); -} - -inherit(TouchInput, Input, { - handler: function MTEhandler(ev) { - var type = TOUCH_INPUT_MAP[ev.type]; - var touches = getTouches.call(this, ev, type); - if (!touches) { - return; - } - - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } -}); - -/** - * @this {TouchInput} - * @param {Object} ev - * @param {Number} type flag - * @returns {undefined|Array} [all, changed] - */ -function getTouches(ev, type) { - var allTouches = toArray(ev.touches); - var targetIds = this.targetIds; - - // when there is only one touch, the process can be simplified - if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { - targetIds[allTouches[0].identifier] = true; - return [allTouches, allTouches]; - } - - var i, - targetTouches, - changedTouches = toArray(ev.changedTouches), - changedTargetTouches = [], - target = this.target; - - // get target touches from touches - targetTouches = allTouches.filter(function(touch) { - return hasParent(touch.target, target); - }); - - // collect touches - if (type === INPUT_START) { - i = 0; - while (i < targetTouches.length) { - targetIds[targetTouches[i].identifier] = true; - i++; - } - } - - // filter changed touches to only contain touches that exist in the collected target ids - i = 0; - while (i < changedTouches.length) { - if (targetIds[changedTouches[i].identifier]) { - changedTargetTouches.push(changedTouches[i]); - } - - // cleanup removed touches - if (type & (INPUT_END | INPUT_CANCEL)) { - delete targetIds[changedTouches[i].identifier]; - } - i++; - } - - if (!changedTargetTouches.length) { - return; - } - - return [ - // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' - uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), - changedTargetTouches - ]; -} - -/** - * Combined touch and mouse input - * - * Touch has a higher priority then mouse, and while touching no mouse events are allowed. - * This because touch devices also emit mouse events while doing a touch. - * - * @constructor - * @extends Input - */ - -var DEDUP_TIMEOUT = 2500; -var DEDUP_DISTANCE = 25; - -function TouchMouseInput() { - Input.apply(this, arguments); - - var handler = bindFn(this.handler, this); - this.touch = new TouchInput(this.manager, handler); - this.mouse = new MouseInput(this.manager, handler); - - this.primaryTouch = null; - this.lastTouches = []; -} - -inherit(TouchMouseInput, Input, { - /** - * handle mouse and touch events - * @param {Hammer} manager - * @param {String} inputEvent - * @param {Object} inputData - */ - handler: function TMEhandler(manager, inputEvent, inputData) { - var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), - isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE); - - if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) { - return; - } - - // when we're in a touch event, record touches to de-dupe synthetic mouse event - if (isTouch) { - recordTouches.call(this, inputEvent, inputData); - } else if (isMouse && isSyntheticEvent.call(this, inputData)) { - return; - } - - this.callback(manager, inputEvent, inputData); - }, - - /** - * remove the event listeners - */ - destroy: function destroy() { - this.touch.destroy(); - this.mouse.destroy(); - } -}); - -function recordTouches(eventType, eventData) { - if (eventType & INPUT_START) { - this.primaryTouch = eventData.changedPointers[0].identifier; - setLastTouch.call(this, eventData); - } else if (eventType & (INPUT_END | INPUT_CANCEL)) { - setLastTouch.call(this, eventData); - } -} - -function setLastTouch(eventData) { - var touch = eventData.changedPointers[0]; - - if (touch.identifier === this.primaryTouch) { - var lastTouch = {x: touch.clientX, y: touch.clientY}; - this.lastTouches.push(lastTouch); - var lts = this.lastTouches; - var removeLastTouch = function() { - var i = lts.indexOf(lastTouch); - if (i > -1) { - lts.splice(i, 1); - } - }; - setTimeout(removeLastTouch, DEDUP_TIMEOUT); - } -} - -function isSyntheticEvent(eventData) { - var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY; - for (var i = 0; i < this.lastTouches.length; i++) { - var t = this.lastTouches[i]; - var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y); - if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) { - return true; - } - } - return false; -} - -var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); -var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; - -// magical touchAction value -var TOUCH_ACTION_COMPUTE = 'compute'; -var TOUCH_ACTION_AUTO = 'auto'; -var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented -var TOUCH_ACTION_NONE = 'none'; -var TOUCH_ACTION_PAN_X = 'pan-x'; -var TOUCH_ACTION_PAN_Y = 'pan-y'; -var TOUCH_ACTION_MAP = getTouchActionProps(); - -/** - * Touch Action - * sets the touchAction property or uses the js alternative - * @param {Manager} manager - * @param {String} value - * @constructor - */ -function TouchAction(manager, value) { - this.manager = manager; - this.set(value); -} - -TouchAction.prototype = { - /** - * set the touchAction value on the element or enable the polyfill - * @param {String} value - */ - set: function(value) { - // find out the touch-action by the event handlers - if (value == TOUCH_ACTION_COMPUTE) { - value = this.compute(); - } - - if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) { - this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; - } - this.actions = value.toLowerCase().trim(); - }, - - /** - * just re-set the touchAction value - */ - update: function() { - this.set(this.manager.options.touchAction); - }, - - /** - * compute the value for the touchAction property based on the recognizer's settings - * @returns {String} value - */ - compute: function() { - var actions = []; - each(this.manager.recognizers, function(recognizer) { - if (boolOrFn(recognizer.options.enable, [recognizer])) { - actions = actions.concat(recognizer.getTouchAction()); - } - }); - return cleanTouchActions(actions.join(' ')); - }, - - /** - * this method is called on each input cycle and provides the preventing of the browser behavior - * @param {Object} input - */ - preventDefaults: function(input) { - var srcEvent = input.srcEvent; - var direction = input.offsetDirection; - - // if the touch action did prevented once this session - if (this.manager.session.prevented) { - srcEvent.preventDefault(); - return; - } - - var actions = this.actions; - var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE]; - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y]; - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X]; - - if (hasNone) { - //do not prevent defaults if this is a tap gesture - - var isTapPointer = input.pointers.length === 1; - var isTapMovement = input.distance < 2; - var isTapTouchTime = input.deltaTime < 250; - - if (isTapPointer && isTapMovement && isTapTouchTime) { - return; - } - } - - if (hasPanX && hasPanY) { - // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent - return; - } - - if (hasNone || - (hasPanY && direction & DIRECTION_HORIZONTAL) || - (hasPanX && direction & DIRECTION_VERTICAL)) { - return this.preventSrc(srcEvent); - } - }, - - /** - * call preventDefault to prevent the browser's default behavior (scrolling in most cases) - * @param {Object} srcEvent - */ - preventSrc: function(srcEvent) { - this.manager.session.prevented = true; - srcEvent.preventDefault(); - } -}; - -/** - * when the touchActions are collected they are not a valid value, so we need to clean things up. * - * @param {String} actions - * @returns {*} - */ -function cleanTouchActions(actions) { - // none - if (inStr(actions, TOUCH_ACTION_NONE)) { - return TOUCH_ACTION_NONE; - } - - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - - // if both pan-x and pan-y are set (different recognizers - // for different directions, e.g. horizontal pan but vertical swipe?) - // we need none (as otherwise with pan-x pan-y combined none of these - // recognizers will work, since the browser would handle all panning - if (hasPanX && hasPanY) { - return TOUCH_ACTION_NONE; - } - - // pan-x OR pan-y - if (hasPanX || hasPanY) { - return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; - } - - // manipulation - if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { - return TOUCH_ACTION_MANIPULATION; - } - - return TOUCH_ACTION_AUTO; -} - -function getTouchActionProps() { - if (!NATIVE_TOUCH_ACTION) { - return false; - } - var touchMap = {}; - var cssSupports = window.CSS && window.CSS.supports; - ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) { - - // If css.supports is not supported but there is native touch-action assume it supports - // all values. This is the case for IE 10 and 11. - touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true; - }); - return touchMap; -} - -/** - * Recognizer flow explained; * - * All recognizers have the initial state of POSSIBLE when a input session starts. - * The definition of a input session is from the first input until the last input, with all it's movement in it. * - * Example session for mouse-input: mousedown -> mousemove -> mouseup - * - * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed - * which determines with state it should be. - * - * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to - * POSSIBLE to give it another change on the next cycle. - * - * Possible - * | - * +-----+---------------+ - * | | - * +-----+-----+ | - * | | | - * Failed Cancelled | - * +-------+------+ - * | | - * Recognized Began - * | - * Changed - * | - * Ended/Recognized - */ -var STATE_POSSIBLE = 1; -var STATE_BEGAN = 2; -var STATE_CHANGED = 4; -var STATE_ENDED = 8; -var STATE_RECOGNIZED = STATE_ENDED; -var STATE_CANCELLED = 16; -var STATE_FAILED = 32; - -/** - * Recognizer - * Every recognizer needs to extend from this class. - * @constructor - * @param {Object} options - */ -function Recognizer(options) { - this.options = assign({}, this.defaults, options || {}); - - this.id = uniqueId(); - - this.manager = null; - - // default is enable true - this.options.enable = ifUndefined(this.options.enable, true); - - this.state = STATE_POSSIBLE; - - this.simultaneous = {}; - this.requireFail = []; -} - -Recognizer.prototype = { - /** - * @virtual - * @type {Object} - */ - defaults: {}, - - /** - * set options - * @param {Object} options - * @return {Recognizer} - */ - set: function(options) { - assign(this.options, options); - - // also update the touchAction, in case something changed about the directions/enabled state - this.manager && this.manager.touchAction.update(); - return this; - }, - - /** - * recognize simultaneous with an other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - recognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { - return this; - } - - var simultaneous = this.simultaneous; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (!simultaneous[otherRecognizer.id]) { - simultaneous[otherRecognizer.id] = otherRecognizer; - otherRecognizer.recognizeWith(this); - } - return this; - }, - - /** - * drop the simultaneous link. it doesnt remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - dropRecognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { - return this; - } - - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - delete this.simultaneous[otherRecognizer.id]; - return this; - }, - - /** - * recognizer can only run when an other is failing - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - requireFailure: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { - return this; - } - - var requireFail = this.requireFail; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (inArray(requireFail, otherRecognizer) === -1) { - requireFail.push(otherRecognizer); - otherRecognizer.requireFailure(this); - } - return this; - }, - - /** - * drop the requireFailure link. it does not remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - dropRequireFailure: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { - return this; - } - - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - var index = inArray(this.requireFail, otherRecognizer); - if (index > -1) { - this.requireFail.splice(index, 1); - } - return this; - }, - - /** - * has require failures boolean - * @returns {boolean} - */ - hasRequireFailures: function() { - return this.requireFail.length > 0; - }, - - /** - * if the recognizer can recognize simultaneous with an other recognizer - * @param {Recognizer} otherRecognizer - * @returns {Boolean} - */ - canRecognizeWith: function(otherRecognizer) { - return !!this.simultaneous[otherRecognizer.id]; - }, - - /** - * You should use `tryEmit` instead of `emit` directly to check - * that all the needed recognizers has failed before emitting. - * @param {Object} input - */ - emit: function(input) { - var self = this; - var state = this.state; - - function emit(event) { - self.manager.emit(event, input); - } - - // 'panstart' and 'panmove' - if (state < STATE_ENDED) { - emit(self.options.event + stateStr(state)); - } - - emit(self.options.event); // simple 'eventName' events - - if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...) - emit(input.additionalEvent); - } - - // panend and pancancel - if (state >= STATE_ENDED) { - emit(self.options.event + stateStr(state)); - } - }, - - /** - * Check that all the require failure recognizers has failed, - * if true, it emits a gesture event, - * otherwise, setup the state to FAILED. - * @param {Object} input - */ - tryEmit: function(input) { - if (this.canEmit()) { - return this.emit(input); - } - // it's failing anyway - this.state = STATE_FAILED; - }, - - /** - * can we emit? - * @returns {boolean} - */ - canEmit: function() { - var i = 0; - while (i < this.requireFail.length) { - if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { - return false; - } - i++; - } - return true; - }, - - /** - * update the recognizer - * @param {Object} inputData - */ - recognize: function(inputData) { - // make a new copy of the inputData - // so we can change the inputData without messing up the other recognizers - var inputDataClone = assign({}, inputData); - - // is is enabled and allow recognizing? - if (!boolOrFn(this.options.enable, [this, inputDataClone])) { - this.reset(); - this.state = STATE_FAILED; - return; - } - - // reset when we've reached the end - if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { - this.state = STATE_POSSIBLE; - } - - this.state = this.process(inputDataClone); - - // the recognizer has recognized a gesture - // so trigger an event - if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { - this.tryEmit(inputDataClone); - } - }, - - /** - * return the state of the recognizer - * the actual recognizing happens in this method - * @virtual - * @param {Object} inputData - * @returns {Const} STATE - */ - process: function(inputData) { }, // jshint ignore:line - - /** - * return the preferred touch-action - * @virtual - * @returns {Array} - */ - getTouchAction: function() { }, - - /** - * called when the gesture isn't allowed to recognize - * like when another is being recognized or it is disabled - * @virtual - */ - reset: function() { } -}; - -/** - * get a usable string, used as event postfix - * @param {Const} state - * @returns {String} state - */ -function stateStr(state) { - if (state & STATE_CANCELLED) { - return 'cancel'; - } else if (state & STATE_ENDED) { - return 'end'; - } else if (state & STATE_CHANGED) { - return 'move'; - } else if (state & STATE_BEGAN) { - return 'start'; - } - return ''; -} - -/** - * direction cons to string - * @param {Const} direction - * @returns {String} - */ -function directionStr(direction) { - if (direction == DIRECTION_DOWN) { - return 'down'; - } else if (direction == DIRECTION_UP) { - return 'up'; - } else if (direction == DIRECTION_LEFT) { - return 'left'; - } else if (direction == DIRECTION_RIGHT) { - return 'right'; - } - return ''; -} - -/** - * get a recognizer by name if it is bound to a manager - * @param {Recognizer|String} otherRecognizer - * @param {Recognizer} recognizer - * @returns {Recognizer} - */ -function getRecognizerByNameIfManager(otherRecognizer, recognizer) { - var manager = recognizer.manager; - if (manager) { - return manager.get(otherRecognizer); - } - return otherRecognizer; -} - -/** - * This recognizer is just used as a base for the simple attribute recognizers. - * @constructor - * @extends Recognizer - */ -function AttrRecognizer() { - Recognizer.apply(this, arguments); -} - -inherit(AttrRecognizer, Recognizer, { - /** - * @namespace - * @memberof AttrRecognizer - */ - defaults: { - /** - * @type {Number} - * @default 1 - */ - pointers: 1 - }, - - /** - * Used to check if it the recognizer receives valid input, like input.distance > 10. - * @memberof AttrRecognizer - * @param {Object} input - * @returns {Boolean} recognized - */ - attrTest: function(input) { - var optionPointers = this.options.pointers; - return optionPointers === 0 || input.pointers.length === optionPointers; - }, - - /** - * Process the input and return the state for the recognizer - * @memberof AttrRecognizer - * @param {Object} input - * @returns {*} State - */ - process: function(input) { - var state = this.state; - var eventType = input.eventType; - - var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); - var isValid = this.attrTest(input); - - // on cancel input and we've recognized before, return STATE_CANCELLED - if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { - return state | STATE_CANCELLED; - } else if (isRecognized || isValid) { - if (eventType & INPUT_END) { - return state | STATE_ENDED; - } else if (!(state & STATE_BEGAN)) { - return STATE_BEGAN; - } - return state | STATE_CHANGED; - } - return STATE_FAILED; - } -}); - -/** - * Pan - * Recognized when the pointer is down and moved in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ -function PanRecognizer() { - AttrRecognizer.apply(this, arguments); - - this.pX = null; - this.pY = null; -} - -inherit(PanRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof PanRecognizer - */ - defaults: { - event: 'pan', - threshold: 10, - pointers: 1, - direction: DIRECTION_ALL - }, - - getTouchAction: function() { - var direction = this.options.direction; - var actions = []; - if (direction & DIRECTION_HORIZONTAL) { - actions.push(TOUCH_ACTION_PAN_Y); - } - if (direction & DIRECTION_VERTICAL) { - actions.push(TOUCH_ACTION_PAN_X); - } - return actions; - }, - - directionTest: function(input) { - var options = this.options; - var hasMoved = true; - var distance = input.distance; - var direction = input.direction; - var x = input.deltaX; - var y = input.deltaY; - - // lock to axis? - if (!(direction & options.direction)) { - if (options.direction & DIRECTION_HORIZONTAL) { - direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - hasMoved = x != this.pX; - distance = Math.abs(input.deltaX); - } else { - direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN; - hasMoved = y != this.pY; - distance = Math.abs(input.deltaY); - } - } - input.direction = direction; - return hasMoved && distance > options.threshold && direction & options.direction; - }, - - attrTest: function(input) { - return AttrRecognizer.prototype.attrTest.call(this, input) && - (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); - }, - - emit: function(input) { - - this.pX = input.deltaX; - this.pY = input.deltaY; - - var direction = directionStr(input.direction); - - if (direction) { - input.additionalEvent = this.options.event + direction; - } - this._super.emit.call(this, input); - } -}); - -/** - * Pinch - * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). - * @constructor - * @extends AttrRecognizer - */ -function PinchRecognizer() { - AttrRecognizer.apply(this, arguments); -} - -inherit(PinchRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof PinchRecognizer - */ - defaults: { - event: 'pinch', - threshold: 0, - pointers: 2 - }, - - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, - - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); - }, - - emit: function(input) { - if (input.scale !== 1) { - var inOut = input.scale < 1 ? 'in' : 'out'; - input.additionalEvent = this.options.event + inOut; - } - this._super.emit.call(this, input); - } -}); - -/** - * Press - * Recognized when the pointer is down for x ms without any movement. - * @constructor - * @extends Recognizer - */ -function PressRecognizer() { - Recognizer.apply(this, arguments); - - this._timer = null; - this._input = null; -} - -inherit(PressRecognizer, Recognizer, { - /** - * @namespace - * @memberof PressRecognizer - */ - defaults: { - event: 'press', - pointers: 1, - time: 251, // minimal time of the pointer to be pressed - threshold: 9 // a minimal movement is ok, but keep it low - }, - - getTouchAction: function() { - return [TOUCH_ACTION_AUTO]; - }, - - process: function(input) { - var options = this.options; - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTime = input.deltaTime > options.time; - - this._input = input; - - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) { - this.reset(); - } else if (input.eventType & INPUT_START) { - this.reset(); - this._timer = setTimeoutContext(function() { - this.state = STATE_RECOGNIZED; - this.tryEmit(); - }, options.time, this); - } else if (input.eventType & INPUT_END) { - return STATE_RECOGNIZED; - } - return STATE_FAILED; - }, - - reset: function() { - clearTimeout(this._timer); - }, - - emit: function(input) { - if (this.state !== STATE_RECOGNIZED) { - return; - } - - if (input && (input.eventType & INPUT_END)) { - this.manager.emit(this.options.event + 'up', input); - } else { - this._input.timeStamp = now(); - this.manager.emit(this.options.event, this._input); - } - } -}); - -/** - * Rotate - * Recognized when two or more pointer are moving in a circular motion. - * @constructor - * @extends AttrRecognizer - */ -function RotateRecognizer() { - AttrRecognizer.apply(this, arguments); -} - -inherit(RotateRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof RotateRecognizer - */ - defaults: { - event: 'rotate', - threshold: 0, - pointers: 2 - }, - - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, - - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); - } -}); - -/** - * Swipe - * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ -function SwipeRecognizer() { - AttrRecognizer.apply(this, arguments); -} - -inherit(SwipeRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof SwipeRecognizer - */ - defaults: { - event: 'swipe', - threshold: 10, - velocity: 0.3, - direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, - pointers: 1 - }, - - getTouchAction: function() { - return PanRecognizer.prototype.getTouchAction.call(this); - }, - - attrTest: function(input) { - var direction = this.options.direction; - var velocity; - - if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { - velocity = input.overallVelocity; - } else if (direction & DIRECTION_HORIZONTAL) { - velocity = input.overallVelocityX; - } else if (direction & DIRECTION_VERTICAL) { - velocity = input.overallVelocityY; - } - - return this._super.attrTest.call(this, input) && - direction & input.offsetDirection && - input.distance > this.options.threshold && - input.maxPointers == this.options.pointers && - abs(velocity) > this.options.velocity && input.eventType & INPUT_END; - }, - - emit: function(input) { - var direction = directionStr(input.offsetDirection); - if (direction) { - this.manager.emit(this.options.event + direction, input); - } - - this.manager.emit(this.options.event, input); - } -}); - -/** - * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur - * between the given interval and position. The delay option can be used to recognize multi-taps without firing - * a single tap. - * - * The eventData from the emitted event contains the property `tapCount`, which contains the amount of - * multi-taps being recognized. - * @constructor - * @extends Recognizer - */ -function TapRecognizer() { - Recognizer.apply(this, arguments); - - // previous time and center, - // used for tap counting - this.pTime = false; - this.pCenter = false; - - this._timer = null; - this._input = null; - this.count = 0; -} - -inherit(TapRecognizer, Recognizer, { - /** - * @namespace - * @memberof PinchRecognizer - */ - defaults: { - event: 'tap', - pointers: 1, - taps: 1, - interval: 300, // max time between the multi-tap taps - time: 250, // max time of the pointer to be down (like finger on the screen) - threshold: 9, // a minimal movement is ok, but keep it low - posThreshold: 10 // a multi-tap can be a bit off the initial position - }, - - getTouchAction: function() { - return [TOUCH_ACTION_MANIPULATION]; - }, - - process: function(input) { - var options = this.options; - - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTouchTime = input.deltaTime < options.time; - - this.reset(); - - if ((input.eventType & INPUT_START) && (this.count === 0)) { - return this.failTimeout(); - } - - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (validMovement && validTouchTime && validPointers) { - if (input.eventType != INPUT_END) { - return this.failTimeout(); - } - - var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; - var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; - - this.pTime = input.timeStamp; - this.pCenter = input.center; - - if (!validMultiTap || !validInterval) { - this.count = 1; - } else { - this.count += 1; - } - - this._input = input; - - // if tap count matches we have recognized it, - // else it has began recognizing... - var tapCount = this.count % options.taps; - if (tapCount === 0) { - // no failing requirements, immediately trigger the tap event - // or wait as long as the multitap interval to trigger - if (!this.hasRequireFailures()) { - return STATE_RECOGNIZED; - } else { - this._timer = setTimeoutContext(function() { - this.state = STATE_RECOGNIZED; - this.tryEmit(); - }, options.interval, this); - return STATE_BEGAN; - } - } - } - return STATE_FAILED; - }, - - failTimeout: function() { - this._timer = setTimeoutContext(function() { - this.state = STATE_FAILED; - }, this.options.interval, this); - return STATE_FAILED; - }, - - reset: function() { - clearTimeout(this._timer); - }, - - emit: function() { - if (this.state == STATE_RECOGNIZED) { - this._input.tapCount = this.count; - this.manager.emit(this.options.event, this._input); - } - } -}); - -/** - * Simple way to create a manager with a default set of recognizers. - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor - */ -function Hammer(element, options) { - options = options || {}; - options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); - return new Manager(element, options); -} - -/** - * @const {string} - */ -Hammer.VERSION = '2.0.7'; - -/** - * default settings - * @namespace - */ -Hammer.defaults = { - /** - * set if DOM events are being triggered. - * But this is slower and unused by simple implementations, so disabled by default. - * @type {Boolean} - * @default false - */ - domEvents: false, - - /** - * The value for the touchAction property/fallback. - * When set to `compute` it will magically set the correct value based on the added recognizers. - * @type {String} - * @default compute - */ - touchAction: TOUCH_ACTION_COMPUTE, - - /** - * @type {Boolean} - * @default true - */ - enable: true, - - /** - * EXPERIMENTAL FEATURE -- can be removed/changed - * Change the parent input target element. - * If Null, then it is being set the to main element. - * @type {Null|EventTarget} - * @default null - */ - inputTarget: null, - - /** - * force an input class - * @type {Null|Function} - * @default null - */ - inputClass: null, - - /** - * Default recognizer setup when calling `Hammer()` - * When creating a new Manager these will be skipped. - * @type {Array} - */ - preset: [ - // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] - [RotateRecognizer, {enable: false}], - [PinchRecognizer, {enable: false}, ['rotate']], - [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}], - [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']], - [TapRecognizer], - [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']], - [PressRecognizer] - ], - - /** - * Some CSS properties can be used to improve the working of Hammer. - * Add them to this method and they will be set when creating a new Manager. - * @namespace - */ - cssProps: { - /** - * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userSelect: 'none', - - /** - * Disable the Windows Phone grippers when pressing an element. - * @type {String} - * @default 'none' - */ - touchSelect: 'none', - - /** - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @type {String} - * @default 'none' - */ - touchCallout: 'none', - - /** - * Specifies whether zooming is enabled. Used by IE10> - * @type {String} - * @default 'none' - */ - contentZooming: 'none', - - /** - * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userDrag: 'none', - - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in iOS. This property obeys the alpha value, if specified. - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' - } -}; - -var STOP = 1; -var FORCED_STOP = 2; - -/** - * Manager - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor - */ -function Manager(element, options) { - this.options = assign({}, Hammer.defaults, options || {}); - - this.options.inputTarget = this.options.inputTarget || element; - - this.handlers = {}; - this.session = {}; - this.recognizers = []; - this.oldCssProps = {}; - - this.element = element; - this.input = createInputInstance(this); - this.touchAction = new TouchAction(this, this.options.touchAction); - - toggleCssProps(this, true); - - each(this.options.recognizers, function(item) { - var recognizer = this.add(new (item[0])(item[1])); - item[2] && recognizer.recognizeWith(item[2]); - item[3] && recognizer.requireFailure(item[3]); - }, this); -} - -Manager.prototype = { - /** - * set options - * @param {Object} options - * @returns {Manager} - */ - set: function(options) { - assign(this.options, options); - - // Options that need a little more setup - if (options.touchAction) { - this.touchAction.update(); - } - if (options.inputTarget) { - // Clean up existing event listeners and reinitialize - this.input.destroy(); - this.input.target = options.inputTarget; - this.input.init(); - } - return this; - }, - - /** - * stop recognizing for this session. - * This session will be discarded, when a new [input]start event is fired. - * When forced, the recognizer cycle is stopped immediately. - * @param {Boolean} [force] - */ - stop: function(force) { - this.session.stopped = force ? FORCED_STOP : STOP; - }, - - /** - * run the recognizers! - * called by the inputHandler function on every movement of the pointers (touches) - * it walks through all the recognizers and tries to detect the gesture that is being made - * @param {Object} inputData - */ - recognize: function(inputData) { - var session = this.session; - if (session.stopped) { - return; - } - - // run the touch-action polyfill - this.touchAction.preventDefaults(inputData); - - var recognizer; - var recognizers = this.recognizers; - - // this holds the recognizer that is being recognized. - // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED - // if no recognizer is detecting a thing, it is set to `null` - var curRecognizer = session.curRecognizer; - - // reset when the last recognizer is recognized - // or when we're in a new session - if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) { - curRecognizer = session.curRecognizer = null; - } - - var i = 0; - while (i < recognizers.length) { - recognizer = recognizers[i]; - - // find out if we are allowed try to recognize the input for this one. - // 1. allow if the session is NOT forced stopped (see the .stop() method) - // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one - // that is being recognized. - // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. - // this can be setup with the `recognizeWith()` method on the recognizer. - if (session.stopped !== FORCED_STOP && ( // 1 - !curRecognizer || recognizer == curRecognizer || // 2 - recognizer.canRecognizeWith(curRecognizer))) { // 3 - recognizer.recognize(inputData); - } else { - recognizer.reset(); - } - - // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the - // current active recognizer. but only if we don't already have an active recognizer - if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { - curRecognizer = session.curRecognizer = recognizer; - } - i++; - } - }, - - /** - * get a recognizer by its event name. - * @param {Recognizer|String} recognizer - * @returns {Recognizer|Null} - */ - get: function(recognizer) { - if (recognizer instanceof Recognizer) { - return recognizer; - } - - var recognizers = this.recognizers; - for (var i = 0; i < recognizers.length; i++) { - if (recognizers[i].options.event == recognizer) { - return recognizers[i]; - } - } - return null; - }, - - /** - * add a recognizer to the manager - * existing recognizers with the same event name will be removed - * @param {Recognizer} recognizer - * @returns {Recognizer|Manager} - */ - add: function(recognizer) { - if (invokeArrayArg(recognizer, 'add', this)) { - return this; - } - - // remove existing - var existing = this.get(recognizer.options.event); - if (existing) { - this.remove(existing); - } - - this.recognizers.push(recognizer); - recognizer.manager = this; - - this.touchAction.update(); - return recognizer; - }, - - /** - * remove a recognizer by name or instance - * @param {Recognizer|String} recognizer - * @returns {Manager} - */ - remove: function(recognizer) { - if (invokeArrayArg(recognizer, 'remove', this)) { - return this; - } - - recognizer = this.get(recognizer); - - // let's make sure this recognizer exists - if (recognizer) { - var recognizers = this.recognizers; - var index = inArray(recognizers, recognizer); - - if (index !== -1) { - recognizers.splice(index, 1); - this.touchAction.update(); - } - } - - return this; - }, - - /** - * bind event - * @param {String} events - * @param {Function} handler - * @returns {EventEmitter} this - */ - on: function(events, handler) { - if (events === undefined) { - return; - } - if (handler === undefined) { - return; - } - - var handlers = this.handlers; - each(splitStr(events), function(event) { - handlers[event] = handlers[event] || []; - handlers[event].push(handler); - }); - return this; - }, - - /** - * unbind event, leave emit blank to remove all handlers - * @param {String} events - * @param {Function} [handler] - * @returns {EventEmitter} this - */ - off: function(events, handler) { - if (events === undefined) { - return; - } - - var handlers = this.handlers; - each(splitStr(events), function(event) { - if (!handler) { - delete handlers[event]; - } else { - handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1); - } - }); - return this; - }, - - /** - * emit event to the listeners - * @param {String} event - * @param {Object} data - */ - emit: function(event, data) { - // we also want to trigger dom events - if (this.options.domEvents) { - triggerDomEvent(event, data); - } - - // no handlers, so skip it all - var handlers = this.handlers[event] && this.handlers[event].slice(); - if (!handlers || !handlers.length) { - return; - } - - data.type = event; - data.preventDefault = function() { - data.srcEvent.preventDefault(); - }; - - var i = 0; - while (i < handlers.length) { - handlers[i](data); - i++; - } - }, - - /** - * destroy the manager and unbinds all events - * it doesn't unbind dom events, that is the user own responsibility - */ - destroy: function() { - this.element && toggleCssProps(this, false); - - this.handlers = {}; - this.session = {}; - this.input.destroy(); - this.element = null; - } -}; - -/** - * add/remove the css properties as defined in manager.options.cssProps - * @param {Manager} manager - * @param {Boolean} add - */ -function toggleCssProps(manager, add) { - var element = manager.element; - if (!element.style) { - return; - } - var prop; - each(manager.options.cssProps, function(value, name) { - prop = prefixed(element.style, name); - if (add) { - manager.oldCssProps[prop] = element.style[prop]; - element.style[prop] = value; - } else { - element.style[prop] = manager.oldCssProps[prop] || ''; - } - }); - if (!add) { - manager.oldCssProps = {}; - } -} - -/** - * trigger dom event - * @param {String} event - * @param {Object} data - */ -function triggerDomEvent(event, data) { - var gestureEvent = document.createEvent('Event'); - gestureEvent.initEvent(event, true, true); - gestureEvent.gesture = data; - data.target.dispatchEvent(gestureEvent); -} - -assign(Hammer, { - INPUT_START: INPUT_START, - INPUT_MOVE: INPUT_MOVE, - INPUT_END: INPUT_END, - INPUT_CANCEL: INPUT_CANCEL, - - STATE_POSSIBLE: STATE_POSSIBLE, - STATE_BEGAN: STATE_BEGAN, - STATE_CHANGED: STATE_CHANGED, - STATE_ENDED: STATE_ENDED, - STATE_RECOGNIZED: STATE_RECOGNIZED, - STATE_CANCELLED: STATE_CANCELLED, - STATE_FAILED: STATE_FAILED, - - DIRECTION_NONE: DIRECTION_NONE, - DIRECTION_LEFT: DIRECTION_LEFT, - DIRECTION_RIGHT: DIRECTION_RIGHT, - DIRECTION_UP: DIRECTION_UP, - DIRECTION_DOWN: DIRECTION_DOWN, - DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, - DIRECTION_VERTICAL: DIRECTION_VERTICAL, - DIRECTION_ALL: DIRECTION_ALL, - - Manager: Manager, - Input: Input, - TouchAction: TouchAction, - - TouchInput: TouchInput, - MouseInput: MouseInput, - PointerEventInput: PointerEventInput, - TouchMouseInput: TouchMouseInput, - SingleTouchInput: SingleTouchInput, - - Recognizer: Recognizer, - AttrRecognizer: AttrRecognizer, - Tap: TapRecognizer, - Pan: PanRecognizer, - Swipe: SwipeRecognizer, - Pinch: PinchRecognizer, - Rotate: RotateRecognizer, - Press: PressRecognizer, - - on: addEventListeners, - off: removeEventListeners, - each: each, - merge: merge, - extend: extend, - assign: assign, - inherit: inherit, - bindFn: bindFn, - prefixed: prefixed -}); - -// this prevents errors when Hammer is loaded in the presence of an AMD -// style loader but by script tag, not by the loader. -var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line -freeGlobal.Hammer = Hammer; - -if (typeof define === 'function' && define.amd) { - define(function() { - return Hammer; - }); -} else if (typeof module != 'undefined' && module.exports) { - module.exports = Hammer; -} else { - window[exportName] = Hammer; -} - -})(window, document, 'Hammer'); diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.js b/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.js deleted file mode 100644 index 34a8c86f..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! Hammer.JS - v2.0.7 - 2016-04-22 - * http://hammerjs.github.io/ - * - * Copyright (c) 2016 Jorik Tangelder; - * Licensed under the MIT license */ -!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(b,c,d){var e="DEPRECATED METHOD: "+c+"\n"+d+" AT \n";return function(){var c=new Error("get-stack-trace"),d=c&&c.stack?c.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function s(a){return Array.prototype.slice.call(a,0)}function t(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];r(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ma.length;){if(c=ma[g],e=c?c+f:b,e in a)return e;g++}return d}function v(){return ua++}function w(b){var c=b.ownerDocument||b;return c.defaultView||c.parentWindow||a}function x(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){k(a.options.enable,[a])&&c.handler(b)},this.init()}function y(a){var b,c=a.options.inputClass;return new(b=c?c:xa?M:ya?P:wa?R:L)(a,z)}function z(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&Ea&&d-e===0,g=b&(Ga|Ha)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,A(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}function A(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=D(b)),e>1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:pa(a.pointers[c].clientX),clientY:pa(a.pointers[c].clientY)},c++;return{timeStamp:ra(),pointers:b,center:E(b),deltaX:a.deltaX,deltaY:a.deltaY}}function E(a){var b=a.length;if(1===b)return{x:pa(a[0].clientX),y:pa(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),"identifier",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ga|Ha)&&delete d[g[e].identifier],e++;return h.length?[t(f.concat(h),"identifier",!0),h]:void 0}function R(){x.apply(this,arguments);var a=j(this.handler,this);this.touch=new P(this.manager,a),this.mouse=new L(this.manager,a),this.primaryTouch=null,this.lastTouches=[]}function S(a,b){a&Ea?(this.primaryTouch=b.changedPointers[0].identifier,T.call(this,b)):a&(Ga|Ha)&&T.call(this,b)}function T(a){var b=a.changedPointers[0];if(b.identifier===this.primaryTouch){var c={x:b.clientX,y:b.clientY};this.lastTouches.push(c);var d=this.lastTouches,e=function(){var a=d.indexOf(c);a>-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d<this.lastTouches.length;d++){var e=this.lastTouches[d],f=Math.abs(b-e.x),g=Math.abs(c-e.y);if(db>=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(d){b[d]=c?a.CSS.supports("touch-action",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?"cancel":a&qb?"end":a&pb?"move":a&ob?"start":""}function $(a){return a==Ma?"down":a==La?"up":a==Ja?"left":a==Ka?"right":""}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||""}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=["","webkit","Moz","MS","ms","o"],na=b.createElement("div"),oa="function",pa=Math.round,qa=Math.abs,ra=Date.now;la="function"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;c<arguments.length;c++){var e=arguments[c];if(e!==d&&null!==e)for(var f in e)e.hasOwnProperty(f)&&(b[f]=e[f])}return b}:Object.assign;var sa=h(function(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a},"extend","Use `assign`."),ta=h(function(a,b){return sa(a,b,!0)},"merge","Use `assign`."),ua=1,va=/mobile|tablet|ip(ad|hone|od)|android/i,wa="ontouchstart"in a,xa=u(a,"PointerEvent")!==d,ya=wa&&va.test(navigator.userAgent),za="touch",Aa="pen",Ba="mouse",Ca="kinect",Da=25,Ea=1,Fa=2,Ga=4,Ha=8,Ia=1,Ja=2,Ka=4,La=8,Ma=16,Na=Ja|Ka,Oa=La|Ma,Pa=Na|Oa,Qa=["x","y"],Ra=["clientX","clientY"];x.prototype={handler:function(){},init:function(){this.evEl&&m(this.element,this.evEl,this.domHandler),this.evTarget&&m(this.target,this.evTarget,this.domHandler),this.evWin&&m(w(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(w(this.element),this.evWin,this.domHandler)}};var Sa={mousedown:Ea,mousemove:Fa,mouseup:Ga},Ta="mousedown",Ua="mousemove mouseup";i(L,x,{handler:function(a){var b=Sa[a.type];b&Ea&&0===a.button&&(this.pressed=!0),b&Fa&&1!==a.which&&(b=Ga),this.pressed&&(b&Ga&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:Ba,srcEvent:a}))}});var Va={pointerdown:Ea,pointermove:Fa,pointerup:Ga,pointercancel:Ha,pointerout:Ha},Wa={2:za,3:Aa,4:Ba,5:Ca},Xa="pointerdown",Ya="pointermove pointerup pointercancel";a.MSPointerEvent&&!a.PointerEvent&&(Xa="MSPointerDown",Ya="MSPointerMove MSPointerUp MSPointerCancel"),i(M,x,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Va[d],f=Wa[a.pointerType]||a.pointerType,g=f==za,h=r(b,a.pointerId,"pointerId");e&Ea&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a="touchstart",_a="touchstart touchmove touchend touchcancel";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb="touchstart touchmove touchend touchcancel";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,"touchAction"),fb=eb!==d,gb="compute",hb="auto",ib="manipulation",jb="none",kb="pan-x",lb="pan-y",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(" "))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(tb|nb)))return!1;a++}return!0},recognize:function(a){var b=la({},a);return k(this.options.enable,[this,b])?(this.state&(rb|sb|tb)&&(this.state=nb),this.state=this.process(b),void(this.state&(ob|pb|qb|sb)&&this.tryEmit(b))):(this.reset(),void(this.state=tb))},process:function(a){},getTouchAction:function(){},reset:function(){}},i(aa,Y,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(ob|pb),e=this.attrTest(a);return d&&(c&Ha||!e)?b|sb:d||e?c&Ga?b|qb:b&ob?b|pb:ob:tb}}),i(ba,aa,{defaults:{event:"pan",threshold:10,pointers:1,direction:Pa},getTouchAction:function(){var a=this.options.direction,b=[];return a&Na&&b.push(lb),a&Oa&&b.push(kb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Na?(e=0===f?Ia:0>f?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?"in":"out";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&Ea&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ga)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||H(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=rb,this.tryEmit()},b.interval,this),ob):rb}return tb},failTimeout:function(){return this._timer=e(function(){this.state=tb},this.options.interval,this),tb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==rb&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),ha.VERSION="2.0.7",ha.defaults={domEvents:!1,touchAction:gb,enable:!0,inputTarget:null,inputClass:null,preset:[[ea,{enable:!1}],[ca,{enable:!1},["rotate"]],[fa,{direction:Na}],[ba,{direction:Na},["swipe"]],[ga],[ga,{event:"doubletap",taps:2},["tap"]],[da]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var ub=1,vb=2;ia.prototype={set:function(a){return la(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?vb:ub},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&rb)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===vb||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(ob|pb|qb)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof Y)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,"add",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))return this;if(a=this.get(a)){var b=this.recognizers,c=r(b,a);-1!==c&&(b.splice(c,1),this.touchAction.update())}return this},on:function(a,b){if(a!==d&&b!==d){var c=this.handlers;return g(q(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this}},off:function(a,b){if(a!==d){var c=this.handlers;return g(q(a),function(a){b?c[a]&&c[a].splice(r(c[a],b),1):delete c[a]}),this}},emit:function(a,b){this.options.domEvents&&ka(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},la(ha,{INPUT_START:Ea,INPUT_MOVE:Fa,INPUT_END:Ga,INPUT_CANCEL:Ha,STATE_POSSIBLE:nb,STATE_BEGAN:ob,STATE_CHANGED:pb,STATE_ENDED:qb,STATE_RECOGNIZED:rb,STATE_CANCELLED:sb,STATE_FAILED:tb,DIRECTION_NONE:Ia,DIRECTION_LEFT:Ja,DIRECTION_RIGHT:Ka,DIRECTION_UP:La,DIRECTION_DOWN:Ma,DIRECTION_HORIZONTAL:Na,DIRECTION_VERTICAL:Oa,DIRECTION_ALL:Pa,Manager:ia,Input:x,TouchAction:V,TouchInput:P,MouseInput:L,PointerEventInput:M,TouchMouseInput:R,SingleTouchInput:N,Recognizer:Y,AttrRecognizer:aa,Tap:ga,Pan:ba,Swipe:fa,Pinch:ca,Rotate:ea,Press:da,on:m,off:n,each:g,merge:ta,extend:sa,assign:la,inherit:i,bindFn:j,prefixed:u});var wb="undefined"!=typeof a?a:"undefined"!=typeof self?self:{};wb.Hammer=ha,"function"==typeof define&&define.amd?define(function(){return ha}):"undefined"!=typeof module&&module.exports?module.exports=ha:a[c]=ha}(window,document,"Hammer"); -//# sourceMappingURL=hammer.min.js.map
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.js.map b/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.js.map deleted file mode 100644 index 2fa0e325..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["hammer.js"],"names":["window","document","exportName","undefined","setTimeoutContext","fn","timeout","context","setTimeout","bindFn","invokeArrayArg","arg","Array","isArray","each","obj","iterator","i","forEach","length","call","hasOwnProperty","deprecate","method","name","message","deprecationMessage","e","Error","stack","replace","log","console","warn","apply","this","arguments","inherit","child","base","properties","childP","baseP","prototype","Object","create","constructor","_super","assign","boolOrFn","val","args","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","target","types","handler","splitStr","type","addEventListener","removeEventListeners","removeEventListener","hasParent","node","parent","parentNode","inStr","str","find","indexOf","trim","split","inArray","src","findByKey","toArray","slice","uniqueArray","key","sort","results","values","push","a","b","prefixed","property","prefix","prop","camelProp","toUpperCase","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","Input","manager","callback","self","options","inputTarget","domHandler","ev","enable","init","createInputInstance","Type","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","emit","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","now","deltaTime","angle","getAngle","distance","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","x","overallVelocityY","y","abs","scale","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","srcEvent","offset","offsetDelta","prevDelta","velocity","velocityX","velocityY","direction","last","lastInterval","COMPUTE_INTERVAL","v","clientX","round","clientY","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","p1","p2","props","PROPS_XY","Math","sqrt","atan2","PI","start","end","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changed","changedTouches","concat","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","targetTouches","changedTargetTouches","filter","touch","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","splice","DEDUP_TIMEOUT","isSyntheticEvent","t","dx","dy","DEDUP_DISTANCE","TouchAction","value","set","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","getTouchActionProps","NATIVE_TOUCH_ACTION","touchMap","cssSupports","CSS","supports","Recognizer","defaults","id","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","recognizers","preset","Manager","handlers","oldCssProps","touchAction","toggleCssProps","item","add","recognizeWith","requireFailure","style","cssProps","triggerDomEvent","event","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","createElement","Date","TypeError","output","index","source","nextKey","extend","dest","merge","keys","MOBILE_REGEX","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_MAP","compute","update","getTouchAction","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","process","reset","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","stop","force","stopped","curRecognizer","existing","remove","on","events","off","Tap","Pan","Swipe","Pinch","Rotate","Press","freeGlobal","define","amd","module","exports"],"mappings":"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","file":"hammer.min.js"}
\ No newline at end of file diff --git a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.map b/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.map deleted file mode 100644 index 91d29e52..00000000 --- a/ecomp-portal-FE/client/bower_components/hammerjs/hammer.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"hammer.min.js","sources":["hammer.js"],"names":["window","document","exportName","undefined","setTimeoutContext","fn","timeout","context","setTimeout","bindFn","invokeArrayArg","arg","Array","isArray","each","obj","iterator","i","forEach","length","call","hasOwnProperty","deprecate","method","name","message","deprecationMessage","e","Error","stack","replace","log","console","warn","apply","this","arguments","inherit","child","base","properties","childP","baseP","prototype","Object","create","constructor","_super","assign","boolOrFn","val","args","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","target","types","handler","splitStr","type","addEventListener","removeEventListeners","removeEventListener","hasParent","node","parent","parentNode","inStr","str","find","indexOf","trim","split","inArray","src","findByKey","toArray","slice","uniqueArray","key","sort","results","values","push","a","b","prefixed","property","prefix","prop","camelProp","toUpperCase","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","Input","manager","callback","self","options","inputTarget","domHandler","ev","enable","init","createInputInstance","Type","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","emit","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","now","deltaTime","angle","getAngle","distance","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","x","overallVelocityY","y","abs","scale","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","srcEvent","offset","offsetDelta","prevDelta","velocity","velocityX","velocityY","direction","last","lastInterval","COMPUTE_INTERVAL","v","clientX","round","clientY","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","p1","p2","props","PROPS_XY","Math","sqrt","atan2","PI","start","end","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","allow","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changed","changedTouches","concat","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","targetTouches","changedTargetTouches","filter","touch","mouse","TouchAction","value","set","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","defaults","id","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","get","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","recognizers","preset","Manager","handlers","touchAction","toggleCssProps","item","add","recognizeWith","requireFailure","style","cssProps","triggerDomEvent","event","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","createElement","Date","TypeError","output","index","source","nextKey","extend","dest","merge","keys","MOBILE_REGEX","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","compute","update","getTouchAction","join","preventDefaults","prevented","preventDefault","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","process","reset","attrTest","optionPointers","isRecognized","isValid","threshold","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","clearTimeout","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","stop","force","stopped","curRecognizer","existing","remove","on","events","off","Tap","Pan","Swipe","Pinch","Rotate","Press","freeGlobal","define","amd","module","exports"],"mappings":"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"}
\ No newline at end of file |