{"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","document","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","documentElement","stopPropagation","pressed","on","applyEventMap","version","css","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, document = window.document, 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 ? $(document.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', 'pan-y');\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}));"],"sourceRoot":"/source/"}