{"version":3,"sources":["kendo.userevents.js"],"names":["f","define","$","undefined","touchDelta","touch1","touch2","x1","x","location","y1","y","x2","y2","dx","dy","center","distance","Math","sqrt","getTouches","e","length","changedTouches","touch","touches","originalEvent","currentTarget","idx","api","push","id","event","target","type","match","identifier","support","pointers","msPointers","pointerId","withEachUpEvent","callback","downEvents","kendo","eventMap","up","split","window","Class","Observable","now","extend","OS","mobileOS","invalidZeroEvents","android","DEFAULT_MIN_HOLD","DEFAULT_THRESHOLD","browser","msie","PRESS","HOLD","SELECT","START","MOVE","END","CANCEL","TAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","mouseAndTouchPresent","TouchAxis","init","axis","that","this","_updateLocationData","startLocation","velocity","delta","timeStamp","move","offset","timeDelta","initialDelta","client","screen","Touch","userEvents","touchInfo","useClickAsTap","threshold","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","setTimeout","proxy","minHold","_trigger","_hold","_withinIgnoreThreshold","UserEvents","current","dispose","_start","end","endTime","clearTimeout","activeTouches","splice","inArray","skip","cancel","isMoved","startTime","name","jQueryEvent","data","notify","preventDefault","xDelta","yDelta","element","options","filter","surfaceElement","preventIfMovingProxy","ns","guid","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","delayedClick","eventNS","handler","fn","call","surface","global","ownerDocument","documentElement","stopPropagation","pressed","on","applyEventMap","version","css","touchAction","preventDragEvent","root","eventCapture","preventIfMoving","eventName","addEventListener","bind","_isMoved","destroy","_destroyed","removeEventListener","kendoDestroy","removeData","_disposeAll","unbind","capture","trigger","_isMultiTouch","_apiCall","_maxTouchesReached","pop","grep","_select","which","_move","_eachTouch","_end","_click","pageX","clientX","pageY","clientY","methodName","matchingTouch","dict","noop","defaultThreshold","value","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.userevents.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n element.css('-ms-touch-action', 'pinch-zoom double-tap-zoom');\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}