From 224d86802e4faaf1a6dd4256055fb35c70bdf99d Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 15 Sep 2014 13:45:15 +0200 Subject: [PATCH 1/7] Remove 'pointerup' listener in ol.control.FullScreen --- src/ol/control/fullscreencontrol.js | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/ol/control/fullscreencontrol.js b/src/ol/control/fullscreencontrol.js index 6fe367bfaa..8b688e38f2 100644 --- a/src/ol/control/fullscreencontrol.js +++ b/src/ol/control/fullscreencontrol.js @@ -10,7 +10,6 @@ goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('ol.control.Control'); goog.require('ol.css'); -goog.require('ol.pointer.PointerEventHandler'); @@ -45,10 +44,7 @@ ol.control.FullScreen = function(opt_options) { 'type': 'button', 'title': tipLabel }); - var buttonHandler = new ol.pointer.PointerEventHandler(button); - this.registerDisposable(buttonHandler); - goog.events.listen(buttonHandler, - ol.pointer.EventType.POINTERUP, this.handlePointerUp_, false, this); + goog.events.listen(button, goog.events.EventType.CLICK, this.handleClick_, false, this); @@ -88,19 +84,7 @@ goog.inherits(ol.control.FullScreen, ol.control.Control); * @private */ ol.control.FullScreen.prototype.handleClick_ = function(event) { - if (event.screenX !== 0 && event.screenY !== 0) { - return; - } - this.handleFullScreen_(); -}; - - -/** - * @param {ol.pointer.PointerEvent} pointerEvent The event to handle - * @private - */ -ol.control.FullScreen.prototype.handlePointerUp_ = function(pointerEvent) { - pointerEvent.browserEvent.preventDefault(); + event.preventDefault(); this.handleFullScreen_(); }; From c7a3fcd426d32aca06c67bbef2be5f0511ae7659 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 1 Oct 2014 13:30:07 +0200 Subject: [PATCH 2/7] Remove 'pointerup' listener in ol.control.Zoom --- src/ol/control/zoomcontrol.js | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/src/ol/control/zoomcontrol.js b/src/ol/control/zoomcontrol.js index 5d613a7788..d9ec25bb8d 100644 --- a/src/ol/control/zoomcontrol.js +++ b/src/ol/control/zoomcontrol.js @@ -8,7 +8,6 @@ goog.require('ol.animation'); goog.require('ol.control.Control'); goog.require('ol.css'); goog.require('ol.easing'); -goog.require('ol.pointer.PointerEventHandler'); @@ -47,11 +46,6 @@ ol.control.Zoom = function(opt_options) { 'title': zoomInTipLabel }, zoomInLabel); - var inElementHandler = new ol.pointer.PointerEventHandler(inElement); - this.registerDisposable(inElementHandler); - goog.events.listen(inElementHandler, - ol.pointer.EventType.POINTERUP, goog.partial( - ol.control.Zoom.prototype.handlePointerUp_, delta), false, this); goog.events.listen(inElement, goog.events.EventType.CLICK, goog.partial( ol.control.Zoom.prototype.handleClick_, delta), false, this); @@ -69,11 +63,6 @@ ol.control.Zoom = function(opt_options) { 'title': zoomOutTipLabel }, zoomOutLabel); - var outElementHandler = new ol.pointer.PointerEventHandler(outElement); - this.registerDisposable(outElementHandler); - goog.events.listen(outElementHandler, - ol.pointer.EventType.POINTERUP, goog.partial( - ol.control.Zoom.prototype.handlePointerUp_, -delta), false, this); goog.events.listen(outElement, goog.events.EventType.CLICK, goog.partial( ol.control.Zoom.prototype.handleClick_, -delta), false, this); @@ -111,20 +100,7 @@ goog.inherits(ol.control.Zoom, ol.control.Control); * @private */ ol.control.Zoom.prototype.handleClick_ = function(delta, event) { - if (event.screenX !== 0 && event.screenY !== 0) { - return; - } - this.zoomByDelta_(delta); -}; - - -/** - * @param {number} delta Zoom delta. - * @param {ol.pointer.PointerEvent} pointerEvent The event to handle - * @private - */ -ol.control.Zoom.prototype.handlePointerUp_ = function(delta, pointerEvent) { - pointerEvent.browserEvent.preventDefault(); + event.preventDefault(); this.zoomByDelta_(delta); }; From e55caef0d221f191b86a7602bcae451b09d89f75 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 1 Oct 2014 13:31:14 +0200 Subject: [PATCH 3/7] Remove 'pointerup' listener in ol.control.Rotate --- src/ol/control/rotatecontrol.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/ol/control/rotatecontrol.js b/src/ol/control/rotatecontrol.js index 60c7823cae..8f70495f83 100644 --- a/src/ol/control/rotatecontrol.js +++ b/src/ol/control/rotatecontrol.js @@ -11,7 +11,6 @@ goog.require('ol.animation'); goog.require('ol.control.Control'); goog.require('ol.css'); goog.require('ol.easing'); -goog.require('ol.pointer.PointerEventHandler'); @@ -49,10 +48,6 @@ ol.control.Rotate = function(opt_options) { 'title': tipLabel }, this.label_); - var handler = new ol.pointer.PointerEventHandler(button); - this.registerDisposable(handler); - goog.events.listen(handler, ol.pointer.EventType.POINTERUP, - ol.control.Rotate.prototype.handlePointerUp_, false, this); goog.events.listen(button, goog.events.EventType.CLICK, ol.control.Rotate.prototype.handleClick_, false, this); @@ -103,19 +98,7 @@ goog.inherits(ol.control.Rotate, ol.control.Control); * @private */ ol.control.Rotate.prototype.handleClick_ = function(event) { - if (event.screenX !== 0 && event.screenY !== 0) { - return; - } - this.resetNorth_(); -}; - - -/** - * @param {ol.pointer.PointerEvent} pointerEvent The event to handle - * @private - */ -ol.control.Rotate.prototype.handlePointerUp_ = function(pointerEvent) { - pointerEvent.browserEvent.preventDefault(); + event.preventDefault(); this.resetNorth_(); }; From cc442d964b8d42529188f544516ee118e992798b Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 1 Oct 2014 13:32:49 +0200 Subject: [PATCH 4/7] Remove 'pointerup' listener in ol.control.ZoomToExtent --- src/ol/control/zoomtoextentcontrol.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/ol/control/zoomtoextentcontrol.js b/src/ol/control/zoomtoextentcontrol.js index 6f79e2ed7b..0af782407d 100644 --- a/src/ol/control/zoomtoextentcontrol.js +++ b/src/ol/control/zoomtoextentcontrol.js @@ -7,7 +7,6 @@ goog.require('goog.events'); goog.require('goog.events.EventType'); goog.require('ol.control.Control'); goog.require('ol.css'); -goog.require('ol.pointer.PointerEventHandler'); @@ -40,10 +39,6 @@ ol.control.ZoomToExtent = function(opt_options) { 'title': tipLabel }); - var buttonHandler = new ol.pointer.PointerEventHandler(button); - this.registerDisposable(buttonHandler); - goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP, - this.handlePointerUp_, false, this); goog.events.listen(button, goog.events.EventType.CLICK, this.handleClick_, false, this); @@ -71,19 +66,7 @@ goog.inherits(ol.control.ZoomToExtent, ol.control.Control); * @private */ ol.control.ZoomToExtent.prototype.handleClick_ = function(event) { - if (event.screenX !== 0 && event.screenY !== 0) { - return; - } - this.handleZoomToExtent_(); -}; - - -/** - * @param {ol.pointer.PointerEvent} pointerEvent The event to handle - * @private - */ -ol.control.ZoomToExtent.prototype.handlePointerUp_ = function(pointerEvent) { - pointerEvent.browserEvent.preventDefault(); + event.preventDefault(); this.handleZoomToExtent_(); }; From e32be091a491c4e1aa2f68b8d1e58e79e4f3d33e Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 1 Oct 2014 13:33:45 +0200 Subject: [PATCH 5/7] Remove 'pointerup' listener in ol.control.Attribution --- src/ol/control/attributioncontrol.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/ol/control/attributioncontrol.js b/src/ol/control/attributioncontrol.js index c14051509c..6953af7843 100644 --- a/src/ol/control/attributioncontrol.js +++ b/src/ol/control/attributioncontrol.js @@ -12,7 +12,6 @@ goog.require('goog.style'); goog.require('ol.Attribution'); goog.require('ol.control.Control'); goog.require('ol.css'); -goog.require('ol.pointer.PointerEventHandler'); @@ -97,10 +96,6 @@ ol.control.Attribution = function(opt_options) { 'title': tipLabel }, this.labelSpan_); - var buttonHandler = new ol.pointer.PointerEventHandler(button); - this.registerDisposable(buttonHandler); - goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP, - this.handlePointerUp_, false, this); goog.events.listen(button, goog.events.EventType.CLICK, this.handleClick_, false, this); @@ -330,19 +325,7 @@ ol.control.Attribution.prototype.insertLogos_ = function(frameState) { * @private */ ol.control.Attribution.prototype.handleClick_ = function(event) { - if (event.screenX !== 0 && event.screenY !== 0) { - return; - } - this.handleToggle_(); -}; - - -/** - * @param {ol.pointer.PointerEvent} pointerEvent The event to handle - * @private - */ -ol.control.Attribution.prototype.handlePointerUp_ = function(pointerEvent) { - pointerEvent.browserEvent.preventDefault(); + event.preventDefault(); this.handleToggle_(); }; From 4c8d8c21dc0a73f00c7eb62a101e5687f10e4f30 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 28 Oct 2014 15:02:16 +0100 Subject: [PATCH 6/7] Remove 'pointerup' listener in ol.control.OverviewMap --- src/ol/control/overviewmapcontrol.js | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/ol/control/overviewmapcontrol.js b/src/ol/control/overviewmapcontrol.js index 0e8da6cdc8..a7b5abcdae 100644 --- a/src/ol/control/overviewmapcontrol.js +++ b/src/ol/control/overviewmapcontrol.js @@ -19,7 +19,6 @@ goog.require('ol.control.Control'); goog.require('ol.coordinate'); goog.require('ol.css'); goog.require('ol.extent'); -goog.require('ol.pointer.PointerEventHandler'); @@ -84,10 +83,6 @@ ol.control.OverviewMap = function(opt_options) { 'title': tipLabel }, this.labelSpan_); - var buttonHandler = new ol.pointer.PointerEventHandler(button); - this.registerDisposable(buttonHandler); - goog.events.listen(buttonHandler, ol.pointer.EventType.POINTERUP, - this.handlePointerUp_, false, this); goog.events.listen(button, goog.events.EventType.CLICK, this.handleClick_, false, this); @@ -419,19 +414,7 @@ ol.control.OverviewMap.prototype.calculateCoordinateRotate_ = function( * @private */ ol.control.OverviewMap.prototype.handleClick_ = function(event) { - if (event.screenX !== 0 && event.screenY !== 0) { - return; - } - this.handleToggle_(); -}; - - -/** - * @param {ol.pointer.PointerEvent} pointerEvent The event to handle - * @private - */ -ol.control.OverviewMap.prototype.handlePointerUp_ = function(pointerEvent) { - pointerEvent.browserEvent.preventDefault(); + event.preventDefault(); this.handleToggle_(); }; From 1253177ae49a6114fd43a7647d7138b66c890aa1 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 4 Nov 2014 09:44:55 +0100 Subject: [PATCH 7/7] Add FastClick in mobile-full-screen example --- build.py | 1 + config/examples-all.json | 1 + examples/mobile-full-screen.html | 1 + examples/mobile-full-screen.js | 8 ++++++++ externs/fastclick.js | 25 +++++++++++++++++++++++++ 5 files changed, 36 insertions(+) create mode 100644 externs/fastclick.js diff --git a/build.py b/build.py index 3c3aa7cb5b..f3bdd9b16a 100755 --- a/build.py +++ b/build.py @@ -290,6 +290,7 @@ def examples_star_json(name, match): "externs/bootstrap.js", "externs/closure-compiler.js", "externs/example.js", + "externs/fastclick.js", "externs/geojson.js", "externs/jquery-1.9.js", "externs/proj4js.js", diff --git a/config/examples-all.json b/config/examples-all.json index 12e017f984..29e51fb47e 100644 --- a/config/examples-all.json +++ b/config/examples-all.json @@ -15,6 +15,7 @@ "externs/bootstrap.js", "externs/closure-compiler.js", "externs/example.js", + "externs/fastclick.js", "externs/geojson.js", "externs/jquery-1.9.js", "externs/proj4js.js", diff --git a/examples/mobile-full-screen.html b/examples/mobile-full-screen.html index e249c4dce5..1afd9087f0 100644 --- a/examples/mobile-full-screen.html +++ b/examples/mobile-full-screen.html @@ -18,6 +18,7 @@
+
diff --git a/examples/mobile-full-screen.js b/examples/mobile-full-screen.js index 986bb92572..22967b7bb6 100644 --- a/examples/mobile-full-screen.js +++ b/examples/mobile-full-screen.js @@ -32,3 +32,11 @@ geolocation.once('change:position', function() { view.setCenter(geolocation.getPosition()); view.setResolution(2.388657133911758); }); + +// Use FastClick to eliminate the 300ms delay between a physical tap +// and the firing of a click event on mobile browsers. +// See http://updates.html5rocks.com/2013/12/300ms-tap-delay-gone-away +// for more information. +$(function() { + FastClick.attach(document.body); +}); diff --git a/externs/fastclick.js b/externs/fastclick.js new file mode 100644 index 0000000000..676200f2b8 --- /dev/null +++ b/externs/fastclick.js @@ -0,0 +1,25 @@ +/** + * @fileoverview Externs for FastClick 1.0.3 + * @see https://github.com/ftlabs/fastclick + * @externs + */ + +/** + * @type {Object} + * @const + */ +var FastClick = {}; + +/** + * @typedef {{ + * touchBoundary: (number|undefined), + * tapDelay: (number|undefined) + * }} + */ +FastClick.AttachOptions; + +/** + * @param {Element} layer + * @param {FastClick.AttachOptions=} opt_options + */ +FastClick.attach = function(layer, opt_options) {};