GUAC-959: Unwrap touch events if they come from jQuery (based on the various solutions and pull requests discussed here: https://github.com/angular/angular.js/issues/2548)

This commit is contained in:
Michael Jumper
2015-01-05 01:48:51 -08:00
parent e3a7a7dcd3
commit ecf62ffbb7

View File

@@ -54,11 +54,13 @@ ngTouch.factory('$swipe', [function() {
var MOVE_BUFFER_RADIUS = 10;
function getCoordinates(event) {
// Unwrap event if wrapped by jQuery
if(event.originalEvent) {
event = event.originalEvent;
}
var touches = event.touches && event.touches.length ? event.touches : [event];
var e = (event.changedTouches && event.changedTouches[0]) ||
(event.originalEvent && event.originalEvent.changedTouches &&
event.originalEvent.changedTouches[0]) ||
touches[0].originalEvent || touches[0];
var e = (event.changedTouches && event.changedTouches[0]) || touches[0];
return {
x: e.clientX,
@@ -283,6 +285,11 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
return; // Too old.
}
// Unwrap event if wrapped by jQuery
if(event.originalEvent) {
event = event.originalEvent;
}
var touches = event.touches && event.touches.length ? event.touches : [event];
var x = touches[0].clientX;
var y = touches[0].clientY;
@@ -312,6 +319,11 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
// Global touchstart handler that creates an allowable region for a click event.
// This allowable region can be removed by preventGhostClick if we want to bust it.
function onTouchStart(event) {
// Unwrap event if wrapped by jQuery
if(event.originalEvent) {
event = event.originalEvent;
}
var touches = event.touches && event.touches.length ? event.touches : [event];
var x = touches[0].clientX;
var y = touches[0].clientY;
@@ -358,6 +370,12 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
element.on('touchstart', function(event) {
tapping = true;
// Unwrap event if wrapped by jQuery
if(event.originalEvent) {
event = event.originalEvent;
}
tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.
// Hack for Safari, which can target text nodes instead of containers.
if(tapElement.nodeType == 3) {
@@ -385,6 +403,11 @@ ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
element.on('touchend', function(event) {
var diff = Date.now() - startTime;
// Unwrap event if wrapped by jQuery
if(event.originalEvent) {
event = event.originalEvent;
}
var touches = (event.changedTouches && event.changedTouches.length) ? event.changedTouches :
((event.touches && event.touches.length) ? event.touches : [event]);
var e = touches[0].originalEvent || touches[0];