{"version":3,"sources":["QueryTouch.ts","QueryTouchDetails.ts","QueryTouchPoint.ts","Recognizers/QueryTouchRecognizer.ts","Recognizers/QueryTouchSwipeRecognizer.ts","Recognizers/QueryTouchTapRecognizer.ts"],"names":[],"mappings":"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","file":"../QueryTs.Touch.js","sourcesContent":["/// \nenum QueryTouchDirection {\n X = 1 << 1,\n Y = 1 << 2,\n Both = X | Y\n}\n\nclass QueryTouch {\n private readonly _element: IQueryElement;\n\n private _current?: QueryTouchDetails;\n private _lastMove: QueryTouchPoint[] = [];\n private readonly _recognizers: IQueryTouchRecognizer[] = [];\n\n constructor(element: IQueryElement) {\n this._element = element;\n element.on(\"touchstart\", async(e: TouchEvent) => await this.touchStart(e));\n element.on(\"touchmove\", async(e: TouchEvent) => await this.touchMove(e));\n element.on(\"touchend\", async(e: TouchEvent) => await this.touchEnd(e));\n }\n\n addRecognizer(recognizer: IQueryTouchRecognizer) {\n this._recognizers.push(recognizer);\n }\n\n private _notRecognizeds: IQueryTouchRecognizer[] = [];\n private _isRecognizeds: IQueryTouchRecognizer[] = [];\n async touchStart(e: TouchEvent) {\n this._lastMove = this.getTouchPoints(e.touches);\n this._current = new QueryTouchDetails(this._lastMove);\n\n this._notRecognizeds = this._recognizers.concat();\n this._isRecognizeds = [];\n }\n async touchMove(e: TouchEvent) {\n if (this._current == null)\n throw \"TouchStart wasn't called first\";\n \n this._lastMove = this.getTouchPoints(e.touches);\n \n for(let x = 0; x < this._notRecognizeds.length; x++) {\n let item = this._notRecognizeds[x];\n let fulfilled = item.isFulfilled(this._current, new QueryTouchDetails(this._lastMove));\n \n if(fulfilled === true) {\n this._isRecognizeds.push(item);\n await item.onStart(this._current);\n }\n if(fulfilled !== null) {\n this._notRecognizeds.splice(x, 1);\n x--;\n }\n }\n\n if(this._isRecognizeds.length > 0) {\n for(let item of this._isRecognizeds) {\n await item.onMove(this._current, new QueryTouchDetails(this._lastMove));\n }\n e.preventDefault();\n }\n }\n async touchEnd(e: TouchEvent) {\n if (this._current == null)\n throw \"TouchStart wasn't called first\";\n \n for(let x of this._isRecognizeds) {\n await x.onStop(this._current, new QueryTouchDetails(this._lastMove));\n }\n }\n touchCancel() {\n\n }\n\n private getTouchPoints(list: TouchList) {\n let touches = [];\n for(let curr of list) {\n if(curr.pageX !== undefined && curr.pageY !== undefined)\n touches.push(new QueryTouchPoint(curr.pageX, curr.pageY));\n }\n return touches;\n }\n}\n\n","class QueryTouchDetails {\n\n private _touches: QueryTouchPoint[];\n private _time: number;\n\n public get touches() { return this._touches; }\n public get time() { return this._time; }\n\n constructor(touches: QueryTouchPoint[]) {\n this._time = new Date().getTime();\n this._touches = touches;\n }\n\n toString() {\n let str = \"Touch:\\r\\n\";\n\n if(this._touches !== undefined) {\n str+= `Started at:\\t ${this._time}\\r\\n`;\n for(let curr of this._touches) {\n str += `TouchStart:\\tx: ${curr.x}\\t y:${curr.y}\\r\\n`\n }\n }\n return str;\n }\n}","class QueryTouchPoint {\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n x: number;\n y: number;\n}","interface IQueryTouchRecognizer {\n isFulfilled(start: QueryTouchDetails, current: QueryTouchDetails) : boolean | null;\n \n onStart(details: QueryTouchDetails) : Promise;\n onMove(start: QueryTouchDetails, current: QueryTouchDetails) : Promise;\n onStop(details: QueryTouchDetails, stop: QueryTouchDetails) : Promise;\n}\ninterface IQueryTouchRecognizerConfig {\n // Distance in px\n threshold: number \n // Required pointers \n pointers: number \n // Direction \n direction: QueryTouchDirection\n}\nabstract class QueryTouchRecognizer\n implements IQueryTouchRecognizer {\n\n private readonly _config: T;\n\n constructor(config: T) {\n this._config = config;\n }\n\n public get config() { return this._config; }\n\n abstract onStart(details: QueryTouchDetails) : Promise;\n abstract onMove(details: QueryTouchDetails, current: QueryTouchDetails) : Promise;\n abstract onStop(details: QueryTouchDetails, stop: QueryTouchDetails) : Promise;\n abstract isFulfilled(details: QueryTouchDetails, current: QueryTouchDetails) : boolean | null;\n}","type QueryTouchSwipeRecognizerStopEvent = \"left\" | \"right\" | \"top\" | \"bottom\" | \"none\";\n\ninterface IQueryTouchSwipeRecognizerConfig \n extends IQueryTouchRecognizerConfig {\n // px per ms\n velocity: number; \n}\n\ninterface QueryTouchSwipeRecognizerMoveEvent {\n movedX: number;\n movedY: number;\n}\nclass QueryTouchSwipeRecognizer\n extends QueryTouchRecognizer {\n \n private readonly _start = new QueryEventAsync();\n private readonly _move = new QueryEventAsync();\n private readonly _stop = new QueryEventAsync();\n\n public get startEvent() { return this._start.expose(); };\n public get moveEvent() { return this._move.expose(); };\n public get stopEvent() { return this._stop.expose(); };\n\n constructor(config: IQueryTouchSwipeRecognizerConfig) {\n super(config);\n }\n isFulfilled(start: QueryTouchDetails, current: QueryTouchDetails) {\n if(current.touches.length != this.config.pointers)\n return false;\n \n let event = this.getEvent(start, current);\n let absMovedX = Math.abs(event.movedX);\n let absMovedY = Math.abs(event.movedY);\n\n if(absMovedX >= this.config.threshold)\n return absMovedX > absMovedY \n && ((this.config.direction ^ QueryTouchDirection.X) == 0);\n else if (absMovedY >= this.config.threshold)\n return absMovedY > absMovedX \n &&(this.config.direction ^ QueryTouchDirection.Y) == 0;\n\n return null;\n }\n\n async onStart(start: QueryTouchDetails) {\n await this._start.trigger(undefined);\n }\n async onMove(start: QueryTouchDetails, current: QueryTouchDetails) {\n await this._move.trigger(this.getEvent(start, current));\n }\n async onStop(start: QueryTouchDetails, stop: QueryTouchDetails) {\n let event = this.getEvent(start, stop);\n \n let duration = stop.time - start.time;\n\n let velocityX = event.movedX / duration;\n let absVelocityX = Math.abs(velocityX);\n\n let velocityY = event.movedY / duration;\n let absVelocityY = Math.abs(velocityY);\n\n if((this.config.direction ^ QueryTouchDirection.Y) == 0 && (this.config.direction ^ QueryTouchDirection.X) == 0) {\n if(Math.max(absVelocityX, absVelocityY) > this.config.velocity) {\n return this._stop.trigger(absVelocityX > absVelocityY ? \n (velocityX > 0 ? \"right\" : \"left\") : \n (velocityY > 0 ? \"bottom\" : \"top\")\n );\n }\n } else if ((this.config.direction ^ QueryTouchDirection.X) == 0) {\n if (absVelocityX > this.config.velocity) {\n return this._stop.trigger(velocityX > 0 ? \"right\" : \"left\");\n }\n } else if ((this.config.direction ^ QueryTouchDirection.Y) == 0) {\n if (absVelocityY > this.config.velocity) {\n return this._stop.trigger(velocityY > 0 ? \"bottom\" : \"top\");\n }\n }\n\n return this._stop.trigger(\"none\");\n }\n\n private getEvent(start: QueryTouchDetails, stop: QueryTouchDetails): QueryTouchSwipeRecognizerMoveEvent {\n let currTouch = stop.touches[0];\n let startTouch = start.touches[0];\n\n return {\n movedX: currTouch.x - startTouch.x,\n movedY: currTouch.y - startTouch.y\n }\n }\n}","\ninterface IQueryTouchTapRecognizerEvent {\n\n}\ninterface IQueryTouchTapRecognizerConfig \n extends IQueryTouchRecognizerConfig {\n // px per ms\n taps: number \n // max press time in ms \n time: number\n // max interval between multiple taps\n interval: number \n}\nclass QueryTouchTapRecognizer\n extends QueryTouchRecognizer {\n\n constructor(config: IQueryTouchTapRecognizerConfig) {\n super(config);\n }\n\n isFulfilled(details: QueryTouchDetails, current: QueryTouchDetails) {\n return false;\n }\n async onStart(details: QueryTouchDetails) {\n throw new Error(\"Method not implemented.\");\n }\n async onMove(start: QueryTouchDetails, current: QueryTouchDetails) {\n throw new Error(\"Method not implemented.\");\n }\n async onStop(start: QueryTouchDetails, stop: QueryTouchDetails) {\n throw new Error(\"Method not implemented.\");\n }\n}"],"sourceRoot":"../../src/ts/QueryTs.Touch/"}