UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

67 lines (52 loc) 1.79 kB
"use strict"; var devices = require("../../core/devices"), extend = require("../../core/utils/extend").extend, each = require("../../core/utils/iterator").each, BaseStrategy = require("./base"); var eventMap = { "dxpointerdown": "touchstart", "dxpointermove": "touchmove", "dxpointerup": "touchend", "dxpointercancel": "touchcancel", "dxpointerover": "", "dxpointerout": "", "dxpointerenter": "", "dxpointerleave": "" }; var normalizeTouchEvent = function normalizeTouchEvent(e) { var pointers = []; each(e.touches, function (_, touch) { pointers.push(extend({ pointerId: touch.identifier }, touch)); }); return { pointers: pointers, pointerId: e.changedTouches[0].identifier }; }; var skipTouchWithSameIdentifier = function skipTouchWithSameIdentifier(pointerEvent) { return devices.real().platform === "ios" && (pointerEvent === "dxpointerdown" || pointerEvent === "dxpointerup"); }; var TouchStrategy = BaseStrategy.inherit({ ctor: function ctor() { this.callBase.apply(this, arguments); this._pointerId = 0; }, _handler: function _handler(e) { if (skipTouchWithSameIdentifier(this._eventName)) { var touch = e.changedTouches[0]; if (this._pointerId === touch.identifier && this._pointerId !== 0) { return; } this._pointerId = touch.identifier; } return this.callBase.apply(this, arguments); }, _fireEvent: function _fireEvent(args) { return this.callBase(extend(normalizeTouchEvent(args.originalEvent), args)); } }); TouchStrategy.map = eventMap; TouchStrategy.normalize = normalizeTouchEvent; module.exports = TouchStrategy;