Skip to content
This repository has been archived by the owner on Sep 5, 2024. It is now read-only.

Commit

Permalink
fix(gesture): fix gesture event dispatching with jQuery
Browse files Browse the repository at this point in the history
Closes #1367. Closes #1359. Closes #1352. Closes #1270.
  • Loading branch information
Toilal authored and ajoslin committed Feb 4, 2015
1 parent f1a4bcc commit 88813b7
Showing 1 changed file with 33 additions and 12 deletions.
45 changes: 33 additions & 12 deletions src/core/services/gesture/gesture.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ angular.module('material.core')
},
onEnd: function(ev, pointer) {
if (pointer.distance < this.state.options.maxDistance) {
this.dispatchEvent(ev, 'click', null, ev);

This comment has been minimized.

Copy link
@marcysutton

marcysutton Feb 6, 2015

Contributor

Let's be sure to test this in IE11

this.dispatchEvent(ev, 'click');
}
}
});
Expand Down Expand Up @@ -302,7 +302,9 @@ angular.module('material.core')
onCancel: angular.noop,
options: {},

dispatchEvent: dispatchEvent,
dispatchEvent: typeof jQuery !== 'undefined' && angular.element === jQuery ?
jQueryDispatchEvent :
nativeDispatchEvent,

start: function(ev, pointer) {
if (this.state.isRunning) return;
Expand Down Expand Up @@ -357,24 +359,43 @@ angular.module('material.core')
},
};

var customEventOptions = {
bubbles: true,
cancelable: true
};
function jQueryDispatchEvent(srcEvent, eventType, eventPointer) {
eventPointer = eventPointer || pointer;
var eventObj = new angular.element.Event(eventType)

This comment has been minimized.

Copy link
@naomiblack

naomiblack Feb 6, 2015

Contributor

missing a semicolon here? Style nitpick but would be good to fix.


eventObj.$material = true;
eventObj.pointer = eventPointer;
eventObj.srcEvent = srcEvent;

angular.extend(eventObj, {
clientX: eventPointer.x,
clientY: eventPointer.y,
screenX: eventPointer.x,
screenY: eventPointer.y,
pageX: eventPointer.x,
pageY: eventPointer.y,
ctrlKey: srcEvent.ctrlKey,
altKey: srcEvent.altKey,
shiftKey: srcEvent.shiftKey,
metaKey: srcEvent.metaKey
});
angular.element(eventPointer.target).trigger(eventObj);
}

/*
* NOTE: dispatchEvent is very performance sensitive.
* NOTE: nativeDispatchEvent is very performance sensitive.
*/
function dispatchEvent(srcEvent, eventType, eventPointer, /*original DOMEvent */ev) {
function nativeDispatchEvent(srcEvent, eventType, eventPointer) {
eventPointer = eventPointer || pointer;
var eventObj;

if (eventType === 'click') {
eventObj = document.createEvent('MouseEvents');
eventObj.initMouseEvent(
'click', true, true, window, ev.detail,
ev.screenX, ev.screenY, ev.clientX, ev.clientY,
ev.ctrlKey, ev.altKey, ev.shiftKey, ev.metaKey,
ev.button, ev.relatedTarget || null
'click', true, true, window, srcEvent.detail,
eventPointer.x, eventPointer.y, eventPointer.x, eventPointer.y,
srcEvent.ctrlKey, srcEvent.altKey, srcEvent.shiftKey, srcEvent.metaKey,
srcEvent.button, srcEvent.relatedTarget || null
);

} else {
Expand Down

0 comments on commit 88813b7

Please sign in to comment.