devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
99 lines (76 loc) • 2.9 kB
JavaScript
"use strict";
var eventsEngine = require("../../events/core/events_engine"),
browser = require("../../core/utils/browser"),
domAdapter = require("../../core/dom_adapter"),
Class = require("../../core/class"),
eventUtils = require("../utils");
var POINTER_EVENTS_NAMESPACE = "dxPointerEvents";
var BaseStrategy = Class.inherit({
ctor: function ctor(eventName, originalEvents) {
this._eventName = eventName;
this._originalEvents = eventUtils.addNamespace(originalEvents, POINTER_EVENTS_NAMESPACE);
this._handlerCount = 0;
this.noBubble = this._isNoBubble();
},
_isNoBubble: function _isNoBubble() {
var eventName = this._eventName;
return eventName === "dxpointerenter" || eventName === "dxpointerleave";
},
_handler: function _handler(e) {
var delegateTarget = this._getDelegateTarget(e);
return this._fireEvent({
type: this._eventName,
pointerType: e.pointerType || eventUtils.eventSource(e),
originalEvent: e,
delegateTarget: delegateTarget,
// NOTE: TimeStamp normalization (FF bug #238041) (T277118)
timeStamp: browser.mozilla ? new Date().getTime() : e.timeStamp
});
},
_getDelegateTarget: function _getDelegateTarget(e) {
var delegateTarget;
if (this.noBubble) {
delegateTarget = e.delegateTarget;
}
return delegateTarget;
},
_fireEvent: function _fireEvent(args) {
return eventUtils.fireEvent(args);
},
setup: function setup() {
return true;
},
add: function add(element, handleObj) {
if (this._handlerCount <= 0 || this.noBubble) {
element = this.noBubble ? element : domAdapter.getDocument();
this._selector = this.noBubble ? handleObj.selector : null;
var that = this;
eventsEngine.on(element, this._originalEvents, this._selector, function (e) {
that._handler(e);
});
}
if (!this.noBubble) {
this._handlerCount++;
}
},
remove: function remove() {
if (!this.noBubble) {
this._handlerCount--;
}
},
teardown: function teardown(element) {
if (this._handlerCount && !this.noBubble) {
return;
}
element = this.noBubble ? element : domAdapter.getDocument();
if (this._originalEvents !== "." + POINTER_EVENTS_NAMESPACE) {
eventsEngine.off(element, this._originalEvents, this._selector);
}
},
dispose: function dispose(element) {
element = this.noBubble ? element : domAdapter.getDocument();
eventsEngine.off(element, this._originalEvents);
}
});
BaseStrategy.POINTER_EVENTS_NAMESPACE = POINTER_EVENTS_NAMESPACE;
module.exports = BaseStrategy;