You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
20 KiB

{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nvar VELOCITY_FACTOR = 0.2;\nvar MAX_POINTERS = 20;\nvar PointerTracker = function () {\n function PointerTracker() {\n _classCallCheck(this, PointerTracker);\n _defineProperty(this, \"trackedPointers\", new Map());\n _defineProperty(this, \"touchEventsIds\", new Map());\n _defineProperty(this, \"lastMovedPointerId\", void 0);\n _defineProperty(this, \"cachedAverages\", {\n x: 0,\n y: 0\n });\n this.lastMovedPointerId = NaN;\n for (var i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n _createClass(PointerTracker, [{\n key: \"addToTracker\",\n value: function addToTracker(event) {\n if (this.trackedPointers.has(event.pointerId)) {\n return;\n }\n this.lastMovedPointerId = event.pointerId;\n var newElement = {\n lastX: event.x,\n lastY: event.y,\n timeStamp: event.time,\n velocityX: 0,\n velocityY: 0\n };\n this.trackedPointers.set(event.pointerId, newElement);\n this.mapTouchEventId(event.pointerId);\n this.cachedAverages = {\n x: this.getLastAvgX(),\n y: this.getLastAvgY()\n };\n }\n }, {\n key: \"removeFromTracker\",\n value: function removeFromTracker(pointerId) {\n this.trackedPointers.delete(pointerId);\n this.removeMappedTouchId(pointerId);\n }\n }, {\n key: \"track\",\n value: function track(event) {\n var element = this.trackedPointers.get(event.pointerId);\n if (!element) {\n return;\n }\n this.lastMovedPointerId = event.pointerId;\n var dx = event.x - element.lastX;\n var dy = event.y - element.lastY;\n var dt = event.time - element.timeStamp;\n element.velocityX = dx / dt * 1000 * VELOCITY_FACTOR;\n element.velocityY = dy / dt * 1000 * VELOCITY_FACTOR;\n element.lastX = event.x;\n element.lastY = event.y;\n this.trackedPointers.set(event.pointerId, element);\n var avgX = this.getLastAvgX();\n var avgY = this.getLastAvgY();\n this.cachedAverages = {\n x: avgX,\n y: avgY\n };\n }\n }, {\n key: \"mapTouchEventId\",\n value: function mapTouchEventId(id) {\n for (var _ref of this.touchEventsIds) {\n var _ref2 = _slicedToArray(_ref, 2);\n var mappedId = _ref2[0];\n var touchId = _ref2[1];\n if (isNaN(touchId)) {\n this.touchEventsIds.set(mappedId, id);\n break;\n }\n }\n }\n }, {\n key: \"removeMappedTouchId\",\n value: function removeMappedTouchId(id) {\n var mappedId = this.getMappedTouchEventId(id);\n if (!isNaN(mappedId)) {\n this.touchEventsIds.set(mappedId, NaN);\n }\n }\n }, {\n key: \"getMappedTouchEventId\",\n value: function getMappedTouchEventId(touchEventId) {\n for (var _ref3 of this.touchEventsIds.entries()) {\n var _ref4 = _slicedToArray(_ref3, 2);\n var key = _ref4[0];\n var value = _ref4[1];\n if (value === touchEventId) {\n return key;\n }\n }\n return NaN;\n }\n }, {\n key: \"getVelocityX\",\n value: function getVelocityX(pointerId) {\n var _this$trackedPointers;\n return (_this$trackedPointers = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers === void 0 ? void 0 : _this$trackedPointers.velocityX;\n }\n }, {\n key: \"getVelocityY\",\n value: function getVelocityY(pointerId) {\n var _this$trackedPointers2;\n return (_this$trackedPointers2 = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers2 === void 0 ? void 0 : _this$trackedPointers2.velocityY;\n }\n }, {\n key: \"getLastX\",\n value: function getLastX(pointerId) {\n if (pointerId !== undefined) {\n var _this$trackedPointers3;\n return (_this$trackedPointers3 = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers3 === void 0 ? void 0 : _this$trackedPointers3.lastX;\n } else {\n var _this$trackedPointers4;\n return (_this$trackedPointers4 = this.trackedPointers.get(this.lastMovedPointerId)) === null || _this$trackedPointers4 === void 0 ? void 0 : _this$trackedPointers4.lastX;\n }\n }\n }, {\n key: \"getLastY\",\n value: function getLastY(pointerId) {\n if (pointerId !== undefined) {\n var _this$trackedPointers5;\n return (_this$trackedPointers5 = this.trackedPointers.get(pointerId)) === null || _this$trackedPointers5 === void 0 ? void 0 : _this$trackedPointers5.lastY;\n } else {\n var _this$trackedPointers6;\n return (_this$trackedPointers6 = this.trackedPointers.get(this.lastMovedPointerId)) === null || _this$trackedPointers6 === void 0 ? void 0 : _this$trackedPointers6.lastY;\n }\n }\n }, {\n key: \"getLastAvgX\",\n value: function getLastAvgX() {\n var avgX = this.getSumX() / this.trackedPointers.size;\n return isNaN(avgX) ? this.cachedAverages.x : avgX;\n }\n }, {\n key: \"getLastAvgY\",\n value: function getLastAvgY() {\n var avgY = this.getSumY() / this.trackedPointers.size;\n return isNaN(avgY) ? this.cachedAverages.y : avgY;\n }\n }, {\n key: \"getSumX\",\n value: function getSumX(ignoredPointer) {\n var sumX = 0;\n this.trackedPointers.forEach(function (value, key) {\n if (key !== ignoredPointer) {\n sumX += value.lastX;\n }\n });\n return sumX;\n }\n }, {\n key: \"getSumY\",\n value: function getSumY(ignoredPointer) {\n var sumY = 0;\n this.trackedPointers.forEach(function (value, key) {\n if (key !== ignoredPointer) {\n sumY += value.lastY;\n }\n });\n return sumY;\n }\n }, {\n key: \"getTrackedPointersCount\",\n value: function getTrackedPointersCount() {\n return this.trackedPointers.size;\n }\n }, {\n key: \"getTrackedPointersID\",\n value: function getTrackedPointersID() {\n var keys = [];\n this.trackedPointers.forEach(function (_value, key) {\n keys.push(key);\n });\n return keys;\n }\n }, {\n key: \"getData\",\n value: function getData() {\n return this.trackedPointers;\n }\n }, {\n key: \"resetTracker\",\n value: function resetTracker() {\n this.trackedPointers.clear();\n this.lastMovedPointerId = NaN;\n for (var i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n }], [{\n key: \"shareCommonPointers\",\n value: function shareCommonPointers(stPointers, ndPointers) {\n return stPointers.some(function (pointerId) {\n return ndPointers.includes(pointerId);\n });\n }\n }]);\n return PointerTracker;\n}();\nexport { PointerTracker as default };","map":{"version":3,"sources":["PointerTracker.ts"],"names":["VELOCITY_FACTOR","MAX_POINTERS","PointerTracker","Map","x","y","constructor","lastMovedPointerId","NaN","i","touchEventsIds","set","addToTracker","event","trackedPointers","has","pointerId","newElement","lastX","lastY","timeStamp","time","velocityX","velocityY","mapTouchEventId","cachedAverages","getLastAvgX","getLastAvgY","removeFromTracker","delete","removeMappedTouchId","track","element","get","dx","dy","dt","avgX","avgY","id","mappedId","touchId","isNaN","getMappedTouchEventId","touchEventId","key","value","entries","getVelocityX","getVelocityY","getLastX","undefined","getLastY","getSumX","size","getSumY","ignoredPointer","sumX","forEach","sumY","getTrackedPointersCount","getTrackedPointersID","keys","_value","push","getData","resetTracker","clear","shareCommonPointers","stPointers","ndPointers","some","includes"],"mappings":"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","sourcesContent":["import { AdaptedEvent } from '../interfaces';\n\nexport interface TrackerElement {\n lastX: number;\n lastY: number;\n\n timeStamp: number;\n\n velocityX: number;\n velocityY: number;\n}\n\n// Used to scale velocity so that it is similar to velocity in Android/iOS\nconst VELOCITY_FACTOR = 0.2;\nconst MAX_POINTERS = 20;\n\nexport default class PointerTracker {\n private trackedPointers: Map<number, TrackerElement> = new Map<\n number,\n TrackerElement\n >();\n\n private touchEventsIds: Map<number, number> = new Map<number, number>();\n\n private lastMovedPointerId: number;\n\n private cachedAverages: { x: number; y: number } = { x: 0, y: 0 };\n\n public constructor() {\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public addToTracker(event: AdaptedEvent): void {\n if (this.trackedPointers.has(event.pointerId)) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n const newElement: TrackerElement = {\n lastX: event.x,\n lastY: event.y,\n timeStamp: event.time,\n velocityX: 0,\n velocityY: 0,\n };\n\n this.trackedPointers.set(event.pointerId, newElement);\n this.mapTouchEventId(event.pointerId);\n\n this.cachedAverages = {\n x: this.getLastAvgX(),\n y: this.getLastAvgY(),\n };\n }\n\n public removeFromTracker(pointerId: number): void {\n this.trackedPointers.delete(pointerId);\n this.removeMappedTouchId(pointerId);\n }\n\n public track(event: AdaptedEvent): void {\n const element: TrackerElement = this.trackedPointers.get(\n event.pointerId\n ) as TrackerElement;\n\n if (!element) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n const dx = event.x - element.lastX;\n const dy = event.y - element.lastY;\n const dt = event.time - element.timeStamp;\n\n element.velocityX = (dx / dt) * 1000 * VELOCITY_FACTOR;\n element.velocityY = (dy / dt) * 1000 * VELOCITY_FACTOR;\n\n element.lastX = event.x;\n element.lastY = event.y;\n\n this.trackedPointers.set(event.pointerId, element);\n\n const avgX: number = this.getLastAvgX();\n const avgY: number = this.getLastAvgY();\n\n this.cachedAverages = {\n x: avgX,\n y: avgY,\n };\n }\n\n //Mapping TouchEvents ID\n private mapTouchEventId(id: number): void {\n for (const [mappedId, touchId] of this.touchEventsIds) {\n if (isNaN(touchId)) {\n this.touchEventsIds.set(mappedId, id);\n break;\n }\n }\n }\n\n private removeMappedTouchId(id: number): void {\n const mappedId: number = this.getMappedTouchEventId(id);\n if (!isNaN(mappedId)) {\n this.touchEventsIds.set(mappedId, NaN);\n }\n }\n\n public getMappedTouchEventId(touchEventId: number): number {\n for (const [key, value] of this.touchEventsIds.entries()) {\n if (value === touchEventId) {\n return key;\n }\n }\n\n return NaN;\n }\n\n public getVelocityX(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.velocityX as number;\n }\n public getVelocityY(pointerId: number): number {\n return this.trackedPointers.get(pointerId)?.velocityY as number;\n }\n\n /**\n * Returns X coordinate of last moved pointer\n */\n public getLastX(): number;\n\n /**\n *\n * @param pointerId\n * Returns X coordinate of given pointer\n */\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n public getLastX(pointerId: number): number;\n\n public getLastX(pointerId?: number): number {\n if (pointerId !== undefined) {\n return this.trackedPointers.get(pointerId)?.lastX as number;\n } else {\n return this.trackedPointers.get(this.lastMovedPointerId)?.lastX as number;\n }\n }\n\n /**\n * Returns Y coordinate of last moved pointer\n */\n public getLastY(): number;\n\n /**\n *\n * @param pointerId\n * Returns Y coordinate of given pointer\n */\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n public getLastY(pointerId: number): number;\n\n public getLastY(pointerId?: number): number {\n if (pointerId !== undefined) {\n return this.trackedPointers.get(pointerId)?.lastY as number;\n } else {\n return this.trackedPointers.get(this.lastMovedPointerId)?.lastY as number;\n }\n }\n\n // Some handlers use these methods to send average values in native event.\n // This may happen when pointers have already been removed from tracker (i.e. pointerup event).\n // In situation when NaN would be sent as a response, we return cached value.\n // That prevents handlers from crashing\n public getLastAvgX(): number {\n const avgX: number = this.getSumX() / this.trackedPointers.size;\n return isNaN(avgX) ? this.cachedAverages.x : avgX;\n }\n public getLastAvgY(): number {\n const avgY: number = this.getSumY() / this.trackedPointers.size;\n return isNaN(avgY) ? this.cachedAverages.y : avgY;\n }\n public getSumX(ignoredPointer?: number): number {\n let sumX = 0;\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sumX += value.lastX;\n }\n });\n\n return sumX;\n }\n public getSumY(ignoredPointer?: number): number {\n let sumY = 0;\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sumY += value.lastY;\n }\n });\n\n return sumY;\n }\n public getTrackedPointersCount(): number {\n return this.trackedPointers.size;\n }\n public getTrackedPointersID(): number[] {\n const keys: number[] = [];\n\n this.trackedPointers.forEach((_value, key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n public getData(): Map<number, TrackerElement> {\n return this.trackedPointers;\n }\n\n public resetTracker(): void {\n this.trackedPointers.clear();\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public static shareCommonPointers(\n stPointers: number[],\n ndPointers: number[]\n ): boolean {\n return stPointers.some((pointerId) => ndPointers.includes(pointerId));\n }\n}\n"]},"metadata":{},"sourceType":"module"}