makes PointerEvent a plain closure class, instead of trying to mimic a mouse event, which was required for the polyfill

This commit is contained in:
tsauerwein
2014-02-19 10:23:30 +01:00
parent 7c8713f79d
commit d772c95ccf
7 changed files with 358 additions and 268 deletions

View File

@@ -164,14 +164,6 @@ ol.pointer.PointerEventHandler.prototype.registerSource =
};
/**
* @suppress {undefinedVars}
*/
ol.pointer.PointerEventHandler.prototype.log = function(obj) {
console.log(obj);
};
/**
* Set up the events for all registered event sources.
* @private
@@ -324,22 +316,27 @@ ol.pointer.PointerEventHandler.prototype.removeEvent = function(
/**
* Returns a snapshot of inEvent, with writable properties.
*
* @param {goog.events.BrowserEvent} browserEvent Browser event.
* @param {Event|Touch} inEvent An event that contains
* properties to copy.
* @return {Object} An object containing shallow copies of
* `inEvent`'s properties.
*/
ol.pointer.PointerEventHandler.prototype.cloneEvent = function(inEvent) {
ol.pointer.PointerEventHandler.prototype.cloneEvent =
function(browserEvent, inEvent) {
var eventCopy = {}, p;
for (var i = 0; i < ol.pointer.CLONE_PROPS.length; i++) {
p = ol.pointer.CLONE_PROPS[i];
eventCopy[p] = inEvent[p] || ol.pointer.CLONE_DEFAULTS[i];
eventCopy[p] =
browserEvent[p] ||
inEvent[p] ||
ol.pointer.CLONE_DEFAULTS[i];
}
// keep the semantics of preventDefault
if (inEvent.preventDefault) {
if (browserEvent.preventDefault) {
eventCopy.preventDefault = function() {
inEvent.preventDefault();
browserEvent.preventDefault();
};
}
@@ -352,100 +349,124 @@ ol.pointer.PointerEventHandler.prototype.cloneEvent = function(inEvent) {
/**
* Triggers a 'pointerdown' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.down = function(inEvent) {
this.fireEvent('pointerdown', inEvent);
ol.pointer.PointerEventHandler.prototype.down =
function(pointerEventData, browserEvent) {
this.fireEvent('pointerdown', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointermove' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.move = function(inEvent) {
this.fireEvent('pointermove', inEvent);
ol.pointer.PointerEventHandler.prototype.move =
function(pointerEventData, browserEvent) {
this.fireEvent('pointermove', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointerup' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.up = function(inEvent) {
this.fireEvent('pointerup', inEvent);
ol.pointer.PointerEventHandler.prototype.up =
function(pointerEventData, browserEvent) {
this.fireEvent('pointerup', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointerenter' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.enter = function(inEvent) {
inEvent.bubbles = false;
this.fireEvent('pointerenter', inEvent);
ol.pointer.PointerEventHandler.prototype.enter =
function(pointerEventData, browserEvent) {
pointerEventData.bubbles = false;
this.fireEvent('pointerenter', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointerleave' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.leave = function(inEvent) {
inEvent.bubbles = false;
this.fireEvent('pointerleave', inEvent);
ol.pointer.PointerEventHandler.prototype.leave =
function(pointerEventData, browserEvent) {
pointerEventData.bubbles = false;
this.fireEvent('pointerleave', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointerover' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.over = function(inEvent) {
inEvent.bubbles = true;
this.fireEvent('pointerover', inEvent);
ol.pointer.PointerEventHandler.prototype.over =
function(pointerEventData, browserEvent) {
pointerEventData.bubbles = true;
this.fireEvent('pointerover', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointerout' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.out = function(inEvent) {
inEvent.bubbles = true;
this.fireEvent('pointerout', inEvent);
ol.pointer.PointerEventHandler.prototype.out =
function(pointerEventData, browserEvent) {
pointerEventData.bubbles = true;
this.fireEvent('pointerout', pointerEventData, browserEvent);
};
/**
* Triggers a 'pointercancel' event.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.cancel = function(inEvent) {
this.fireEvent('pointercancel', inEvent);
ol.pointer.PointerEventHandler.prototype.cancel =
function(pointerEventData, browserEvent) {
this.fireEvent('pointercancel', pointerEventData, browserEvent);
};
/**
* Triggers a combination of 'pointerout' and 'pointerleave' events.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.leaveOut = function(inEvent) {
this.out(inEvent);
if (!this.contains_(inEvent.target, inEvent.relatedTarget)) {
this.leave(inEvent);
ol.pointer.PointerEventHandler.prototype.leaveOut =
function(pointerEventData, browserEvent) {
this.out(pointerEventData, browserEvent);
if (!this.contains_(
pointerEventData.target,
pointerEventData.relatedTarget)) {
this.leave(pointerEventData, browserEvent);
}
};
/**
* Triggers a combination of 'pointerover' and 'pointerevents' events.
* @param {Object} inEvent
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.enterOver = function(inEvent) {
this.over(inEvent);
if (!this.contains_(inEvent.target, inEvent.relatedTarget)) {
this.enter(inEvent);
ol.pointer.PointerEventHandler.prototype.enterOver =
function(pointerEventData, browserEvent) {
this.over(pointerEventData, browserEvent);
if (!this.contains_(
pointerEventData.target,
pointerEventData.relatedTarget)) {
this.enter(pointerEventData, browserEvent);
}
};
@@ -469,18 +490,20 @@ ol.pointer.PointerEventHandler.prototype.contains_ =
* `inEvent`.
*
* @param {string} inType A string representing the type of event to create.
* @param {Object} inEvent A platform event with a target.
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
* @return {ol.pointer.PointerEvent} A PointerEvent of type `inType`.
*/
ol.pointer.PointerEventHandler.prototype.makeEvent = function(inType, inEvent) {
ol.pointer.PointerEventHandler.prototype.makeEvent =
function(inType, pointerEventData, browserEvent) {
// relatedTarget must be null if pointer is captured
if (this.captureInfo) {
inEvent.relatedTarget = null;
pointerEventData.relatedTarget = null;
}
var e = new ol.pointer.PointerEvent(inType, inEvent);
if (inEvent.preventDefault) {
e.preventDefault = inEvent.preventDefault;
var e = new ol.pointer.PointerEvent(inType, browserEvent, pointerEventData);
if (pointerEventData.preventDefault) {
e.preventDefault = pointerEventData.preventDefault;
}
return e;
@@ -490,12 +513,13 @@ ol.pointer.PointerEventHandler.prototype.makeEvent = function(inType, inEvent) {
/**
* Make and dispatch an event in one call.
* @param {string} inType A string representing the type of event.
* @param {Object} inEvent A platform event with a target.
* @param {Object} pointerEventData
* @param {goog.events.BrowserEvent } browserEvent
*/
ol.pointer.PointerEventHandler.prototype.fireEvent = function(inType, inEvent) {
var e = this.makeEvent(inType, inEvent);
var browserEvent = new goog.events.BrowserEvent(e);
this.dispatchEvent(browserEvent);
ol.pointer.PointerEventHandler.prototype.fireEvent =
function(inType, pointerEventData, browserEvent) {
var e = this.makeEvent(inType, pointerEventData, browserEvent);
this.dispatchEvent(e);
};
@@ -505,7 +529,9 @@ ol.pointer.PointerEventHandler.prototype.fireEvent = function(inType, inEvent) {
*/
ol.pointer.PointerEventHandler.prototype.fireNativeEvent =
function(nativeEvent) {
this.dispatchEvent(nativeEvent);
var e = this.makeEvent(nativeEvent.type, nativeEvent.getBrowserEvent(),
nativeEvent);
this.dispatchEvent(e);
};