Skip to content

Commit 02040d0

Browse files
author
Sebastien Pereira
committed
Fixes incorrect PageX, PageY (fixes #21). Rework synthetic event creation/properties definition. Add intern test (fixes #6).
1 parent 6c6826c commit 02040d0

File tree

8 files changed

+314
-143
lines changed

8 files changed

+314
-143
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ script:
1010
- grunt jshint test:remote
1111
env:
1212
global:
13-
- secure: eY1OxvXmDHrxYoO5hQwcWNptaJClL69aswUw5G+ZNppSEymNCTquYN/MS87iZm76G98o4A0aafM989d5UDhjU187NYdxf6K7jEPwtaxuHi6d48M0LRG/DoAWCNOUoNyNuhpRCVEB7XmwvZOG9nmoRcPvt+KjM5VkiOvp+CluCk0=
14-
- secure: F0RyTrC3kdKomLNbKXJJA1Ju0ZCnB5E7oW7eYwkikLjlfn/4rBkuX4MYJqGBdCIwotpx0k30Wmql7cpYsk9pfM36NIqZoY3bOMITAY/FR8gxiE6zLjFEV/JBdY1hKIeDStsCEPJIRPd27oq4yK1j8dVFel9rI+aENWV1+CZ7o7o=
13+
- secure: qWxE8Cml8cm35ztk4EAusV0WF7akjEjaH6GLjbAcpWTmQqLFHPbPODI0V7V6n9n2Cvxm7eV+70KTg7SgDa62pQndqlcP83mW0hnmfrbWwH0AsNYwDOnvfFDhCLDYN3dGpe7tQr0pLUNil6J/g7E6YYJmFxOrLDp3Y238c77Xdh8=
14+
- secure: S2opjyuFArWLEl9H/82PYcHq63XNG6u9nCYZ+CobPT+h8CpKeoNfNwdwGyVnabLftbrB4c/y+L+DHT6p1G8PIr0Cm0T97ij5SRIsiFW/MqKL9NIzLiM/euXRvrQCkKBKndPo3DqYUe1iJIVNfmT8KtcAA0krQT9x2J258bsNo2c=

handlers/mouse.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ define([
6262
utils.dispatchEvent(e.target, createPointer(utils.events.OUT, e, {}));
6363
// generate pointerleave events
6464
utils.dispatchLeaveEvents(e.target, e.relatedTarget,
65-
createPointer(utils.events.LEAVE, e, {bubbles: false}));
65+
createPointer(utils.events.LEAVE, e));
6666
}
6767
MouseTracker.update(e);
6868
}
@@ -80,7 +80,7 @@ define([
8080
utils.dispatchEvent(e.target, createPointer(utils.events.OVER, e, {}));
8181
// generate pointerenter events
8282
utils.dispatchEnterEvents(e.target, e.relatedTarget,
83-
createPointer(utils.events.ENTER, e, {bubbles: false}));
83+
createPointer(utils.events.ENTER, e));
8484
}
8585
MouseTracker.update(e);
8686
}
@@ -119,16 +119,16 @@ define([
119119
props.altKey = mouseEvent.altKey;
120120
props.shiftKey = mouseEvent.shiftKey;
121121
props.metaKey = mouseEvent.metaKey;
122+
props.pageX = mouseEvent.pageX;
123+
props.pageY = mouseEvent.pageY;
122124
// normalize button/buttons values
123125
// http://www.w3.org/TR/pointerevents/#chorded-button-interactions
124126
var buttonValue = mouseEvent.button,
125127
buttonsValue = (mouseEvent.buttons !== undefined) ? mouseEvent.buttons :
126128
utils.which2buttons(mouseEvent.which);
127-
// on mouse move with no buttons pressed, buttonValue should be -1 but browsers implement
128-
// with unsigned int: http://www.w3.org/TR/DOM-Level-3-Events/
129-
// so we set it to 0.
130-
if (mouseEvent.type === "mousemove" || mouseEvent.type === "mouseup") {
131-
buttonValue = 0;
129+
130+
if (mouseEvent.type === "mousemove") {
131+
buttonValue = -1;
132132
}
133133
props.button = buttonValue;
134134
props.buttons = buttonsValue;

handlers/mspointer.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ define([
5454
function msPointerOut(e) {
5555
utils.dispatchEvent(e.target, createPointer(utils.events.OUT, e, {}));
5656
// generate pointerleave events
57-
utils.dispatchLeaveEvents(e.target, e.relatedTarget, createPointer(utils.events.LEAVE, e, {bubbles: false}));
57+
utils.dispatchLeaveEvents(e.target, e.relatedTarget, createPointer(utils.events.LEAVE, e));
5858
}
5959

6060
/**
@@ -65,7 +65,7 @@ define([
6565
function msPointerOver(e) {
6666
utils.dispatchEvent(e.target, createPointer(utils.events.OVER, e, {}));
6767
// generate pointerenter events
68-
utils.dispatchEnterEvents(e.target, e.relatedTarget, createPointer(utils.events.ENTER, e, {bubbles: false}));
68+
utils.dispatchEnterEvents(e.target, e.relatedTarget, createPointer(utils.events.ENTER, e));
6969
}
7070

7171
/**
@@ -106,9 +106,6 @@ define([
106106
function createPointer(pointerType, msPointerEvent, props) {
107107
props = props || {};
108108
// Mouse events properties
109-
props.bubbles = msPointerEvent.bubbles;
110-
props.cancelable = msPointerEvent.cancelable;
111-
props.view = msPointerEvent.view;
112109
props.detail = msPointerEvent.detail;
113110
props.screenX = msPointerEvent.screenX;
114111
props.screenY = msPointerEvent.screenY;

handlers/touch.js

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ define([
112112
createPointer(utils.events.OUT, e, touch, {relatedTarget: touchTarget}));
113113
// generate pointerleave event(s)
114114
utils.dispatchLeaveEvents(lastElementFromPoint, touchTarget,
115-
createPointer(utils.events.LEAVE, e, touch, {relatedTarget: touchTarget, bubbles: false}));
115+
createPointer(utils.events.LEAVE, e, touch, {relatedTarget: touchTarget}));
116116
// generate pointermove
117117
utils.dispatchEvent(touchTarget, createPointer(utils.events.MOVE, e, touch, {}));
118118
// generate pointerover
@@ -121,7 +121,7 @@ define([
121121
// generate pointerenter event(s)
122122
utils.dispatchEnterEvents(touchTarget, lastElementFromPoint,
123123
createPointer(utils.events.ENTER, e, touch,
124-
{relatedTarget: lastElementFromPoint, bubbles: false}));
124+
{relatedTarget: lastElementFromPoint}));
125125
} else {
126126
utils.dispatchEvent(touchTarget, createPointer(utils.events.MOVE, e, touch, {}));
127127
}
@@ -233,16 +233,16 @@ define([
233233
props.altKey = touchEvent.altKey;
234234
props.shiftKey = touchEvent.shiftKey;
235235
props.metaKey = touchEvent.metaKey;
236+
props.pageX = touch.pageX;
237+
props.pageY = touch.pageY;
236238
if (TouchTracker.hasCapture(touch.identifier)) { // W3C spec §10.1
237239
props.relatedTarget = null;
238240
}
239241
// normalize button/buttons values
240242
// http://www.w3.org/TR/pointerevents/#chorded-button-interactions
241-
// for pointer: button=0, buttons=1, which=1 for all events but PointerMove: button=-1,buttons=0,which=0
242-
// as it is not possible to assign negative value to button(s), just use 0.
243-
props.button = 0;
243+
props.button = (pointerType === utils.events.MOVE) ? -1 : 0;
244244
props.buttons = 1;
245-
props.which = 1;
245+
props.which = props.button + 1;
246246
// Pointer Events properties
247247
props.pointerId = touch.identifier + 2; // avoid id collision: 1 is reserved for mouse events mapping
248248
props.pointerType = "touch";
@@ -282,18 +282,17 @@ define([
282282
* @return HTMLElement the DOM element.
283283
*/
284284
function elementFromTouch(touch) {
285-
//todo: investigate #15821 (different behaviors?)
286-
return touch.target.ownerDocument.elementFromPoint(touch.pageX, touch.pageY);
285+
return touch.target.ownerDocument.elementFromPoint(touch.clientX, touch.clientY);
287286
}
288287

289288
// todo:refactor + document TouchTracker/TouchInfo
290-
/* function TouchInfo(touchId, touchAction) {
291-
this.touchId = touchId;
292-
this.touchAction = 0;
293-
this.lastNativeEvent = null;
294-
this.lastTargetElement = null;
295-
this.captureTarget = null;
296-
}*/
289+
/* function TouchInfo(touchId, touchAction) {
290+
this.touchId = touchId;
291+
this.touchAction = 0;
292+
this.lastNativeEvent = null;
293+
this.lastTargetElement = null;
294+
this.captureTarget = null;
295+
}*/
297296
var TouchTracker = {
298297
// touchId of the primary pointer, or -1 if no primary pointer set.
299298
primaryTouchId: -1,

0 commit comments

Comments
 (0)