LEFT | RIGHT |
1 // Copyright 2005 The Closure Library Authors. All Rights Reserved. | 1 // Copyright 2005 The Closure Library Authors. All Rights Reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS-IS" BASIS, | 10 // distributed under the License is distributed on an "AS-IS" BASIS, |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 * Accepts a browser event object and creates a patched, cross browser event | 236 * Accepts a browser event object and creates a patched, cross browser event |
237 * object. | 237 * object. |
238 * @param {Event} e Browser event object. | 238 * @param {Event} e Browser event object. |
239 * @param {Node=} opt_currentTarget Current target for event. | 239 * @param {Node=} opt_currentTarget Current target for event. |
240 */ | 240 */ |
241 goog.events.BrowserEvent.prototype.init = function(e, opt_currentTarget) { | 241 goog.events.BrowserEvent.prototype.init = function(e, opt_currentTarget) { |
242 var type = this.type = e.type; | 242 var type = this.type = e.type; |
243 goog.events.Event.call(this, type); | 243 goog.events.Event.call(this, type); |
244 | 244 |
245 /** @type {Touch} */ | 245 /** @type {Touch} */ |
246 var touch; | 246 var relevantTouch; |
247 | 247 |
248 if (type == goog.events.EventType.TOUCHSTART || | 248 if (type == goog.events.EventType.TOUCHSTART || |
249 type == goog.events.EventType.TOUCHMOVE) { | 249 type == goog.events.EventType.TOUCHMOVE) { |
250 touch = e.targetTouches[0]; | 250 relevantTouch = e.targetTouches[0]; |
251 } else if (type == goog.events.EventType.TOUCHEND || | 251 } else if (type == goog.events.EventType.TOUCHEND || |
252 type == goog.events.EventType.TOUCHCANCEL) { | 252 type == goog.events.EventType.TOUCHCANCEL) { |
253 touch = e.changedTouches[0]; | 253 relevantTouch = e.changedTouches[0]; |
254 } | 254 } |
| 255 |
| 256 // TODO(nicksantos): Change this.target to type EventTarget. |
| 257 if (!!relevantTouch) |
| 258 this.target = relevantTouch.target; |
| 259 else |
| 260 this.target = /** @type {Node} */ (e.target) || e.srcElement; |
255 | 261 |
256 this.currentTarget = opt_currentTarget; | 262 this.currentTarget = opt_currentTarget; |
257 | 263 |
258 var relatedTarget = /** @type {Node} */ (e.relatedTarget); | 264 var relatedTarget = /** @type {Node} */ (e.relatedTarget); |
259 if (relatedTarget) { | 265 if (relatedTarget) { |
260 // There's a bug in FireFox where sometimes, relatedTarget will be a | 266 // There's a bug in FireFox where sometimes, relatedTarget will be a |
261 // chrome element, and accessing any property of it will get a permission | 267 // chrome element, and accessing any property of it will get a permission |
262 // denied exception. See: | 268 // denied exception. See: |
263 // https://bugzilla.mozilla.org/show_bug.cgi?id=497780 | 269 // https://bugzilla.mozilla.org/show_bug.cgi?id=497780 |
264 if (goog.userAgent.GECKO) { | 270 if (goog.userAgent.GECKO) { |
265 if (!goog.reflect.canAccessProperty(relatedTarget, 'nodeName')) { | 271 if (!goog.reflect.canAccessProperty(relatedTarget, 'nodeName')) { |
266 relatedTarget = null; | 272 relatedTarget = null; |
267 } | 273 } |
268 } | 274 } |
269 // TODO(arv): Use goog.events.EventType when it has been refactored into its | 275 // TODO(arv): Use goog.events.EventType when it has been refactored into its |
270 // own file. | 276 // own file. |
271 } else if (type == goog.events.EventType.MOUSEOVER) { | 277 } else if (type == goog.events.EventType.MOUSEOVER) { |
272 relatedTarget = e.fromElement; | 278 relatedTarget = e.fromElement; |
273 } else if (type == goog.events.EventType.MOUSEOUT) { | 279 } else if (type == goog.events.EventType.MOUSEOUT) { |
274 relatedTarget = e.toElement; | 280 relatedTarget = e.toElement; |
275 } | 281 } |
276 | 282 |
277 this.relatedTarget = relatedTarget; | 283 this.relatedTarget = relatedTarget; |
278 | 284 |
279 // TODO(nicksantos): Change this.target to type EventTarget. | 285 if (!!relevantTouch) { |
280 if (touch) { | 286 this.clientX = relevantTouch.clientX; |
281 this.target = touch.target; | 287 this.clientY = relevantTouch.clientY; |
282 | 288 this.screenX = relevantTouch.screenX; |
283 this.clientX = touch.clientX; | 289 this.screenY = relevantTouch.screenY; |
284 this.clientY = touch.clientY; | |
285 this.screenX = touch.screenX; | |
286 this.screenY = touch.screenY; | |
287 } else { | 290 } else { |
288 this.target = /** @type {Node} */ (e.target) || e.srcElement; | |
289 | |
290 // Webkit emits a lame warning whenever layerX/layerY is accessed. | 291 // Webkit emits a lame warning whenever layerX/layerY is accessed. |
291 // http://code.google.com/p/chromium/issues/detail?id=101733 | 292 // http://code.google.com/p/chromium/issues/detail?id=101733 |
292 this.offsetX = (goog.userAgent.WEBKIT || e.offsetX !== undefined) ? | 293 this.offsetX = (goog.userAgent.WEBKIT || e.offsetX !== undefined) ? |
293 e.offsetX : e.layerX; | 294 e.offsetX : e.layerX; |
294 this.offsetY = (goog.userAgent.WEBKIT || e.offsetY !== undefined) ? | 295 this.offsetY = (goog.userAgent.WEBKIT || e.offsetY !== undefined) ? |
295 e.offsetY : e.layerY; | 296 e.offsetY : e.layerY; |
296 | 297 |
297 this.clientX = e.clientX !== undefined ? e.clientX : e.pageX; | 298 this.clientX = e.clientX !== undefined ? e.clientX : e.pageX; |
298 this.clientY = e.clientY !== undefined ? e.clientY : e.pageY; | 299 this.clientY = e.clientY !== undefined ? e.clientY : e.pageY; |
299 this.screenX = e.screenX || 0; | 300 this.screenX = e.screenX || 0; |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 /** | 421 /** |
421 * @return {Event} The underlying browser event object. | 422 * @return {Event} The underlying browser event object. |
422 */ | 423 */ |
423 goog.events.BrowserEvent.prototype.getBrowserEvent = function() { | 424 goog.events.BrowserEvent.prototype.getBrowserEvent = function() { |
424 return this.event_; | 425 return this.event_; |
425 }; | 426 }; |
426 | 427 |
427 | 428 |
428 /** @override */ | 429 /** @override */ |
429 goog.events.BrowserEvent.prototype.disposeInternal = function() { | 430 goog.events.BrowserEvent.prototype.disposeInternal = function() { |
430 goog.events.BrowserEvent.superClass_.disposeInternal.call(this); | 431 }; |
431 this.event_ = null; | |
432 this.target = null; | |
433 this.currentTarget = null; | |
434 this.relatedTarget = null; | |
435 }; | |
LEFT | RIGHT |