From a6119f6a7528e013b922fd0d997a07df13f6bd6e Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 14 Mar 2012 10:30:03 +0100 Subject: [PATCH] Prevent the default browser behavior without stopping the event propagation. --- lib/OpenLayers/Events.js | 22 +++++++++++++++++----- lib/OpenLayers/Handler/Drag.js | 3 ++- lib/OpenLayers/Handler/Pinch.js | 2 +- tests/Handler/Drag.html | 24 +++++++++--------------- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/lib/OpenLayers/Events.js b/lib/OpenLayers/Events.js index c2b5b99d46..1cf1b64996 100644 --- a/lib/OpenLayers/Events.js +++ b/lib/OpenLayers/Events.js @@ -167,11 +167,7 @@ OpenLayers.Event = { stop: function(event, allowDefault) { if (!allowDefault) { - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; - } + OpenLayers.Event.preventDefault(event); } if (event.stopPropagation) { @@ -181,6 +177,22 @@ OpenLayers.Event = { } }, + /** + * Method: preventDefault + * Cancels the event if it is cancelable, without stopping further + * propagation of the event. + * + * Parameters: + * event - {Event} + */ + preventDefault: function(event) { + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; + } + }, + /** * Method: findElement * diff --git a/lib/OpenLayers/Handler/Drag.js b/lib/OpenLayers/Handler/Drag.js index 59456a8fe2..a0aab81bf9 100644 --- a/lib/OpenLayers/Handler/Drag.js +++ b/lib/OpenLayers/Handler/Drag.js @@ -172,7 +172,8 @@ OpenLayers.Handler.Drag = OpenLayers.Class(OpenLayers.Handler, { this.down(evt); this.callback("down", [evt.xy]); - OpenLayers.Event.stop(evt); + // prevent document dragging + OpenLayers.Event.preventDefault(evt); if(!this.oldOnselectstart) { this.oldOnselectstart = document.onselectstart ? diff --git a/lib/OpenLayers/Handler/Pinch.js b/lib/OpenLayers/Handler/Pinch.js index 1d115a2c5a..24138cf6dd 100644 --- a/lib/OpenLayers/Handler/Pinch.js +++ b/lib/OpenLayers/Handler/Pinch.js @@ -103,7 +103,7 @@ OpenLayers.Handler.Pinch = OpenLayers.Class(OpenLayers.Handler, { this.last = null; } // prevent document dragging - OpenLayers.Event.stop(evt); + OpenLayers.Event.preventDefault(evt); return propagate; }, diff --git a/tests/Handler/Drag.html b/tests/Handler/Drag.html index 4be1df9e6d..71ad3ef71f 100644 --- a/tests/Handler/Drag.html +++ b/tests/Handler/Drag.html @@ -117,7 +117,7 @@ handler.activate(); var oldIsLeftClick = OpenLayers.Event.isLeftClick; - var oldStop = OpenLayers.Event.stop; + var oldPreventDefault = OpenLayers.Event.preventDefault; var oldCheckModifiers = handler.checkModifiers; // test mousedown with right click @@ -163,15 +163,9 @@ "mousedown calls isLeftClick with the proper event"); return true; } - OpenLayers.Event.stop = function(evt, allowDefault) { - if(!allowDefault) { - t.ok(evt.xy.x == testEvents.down.xy.x && - evt.xy.y == testEvents.down.xy.y, - "mousedown default action is disabled"); - } else { - t.fail( - "mousedown is prevented from falling to other elements"); - } + OpenLayers.Event.preventDefault = function(evt) { + t.ok(evt.xy.x == testEvents.down.xy.x && evt.xy.y == testEvents.down.xy.y, + "mousedown default action is disabled"); } map.events.triggerEvent("mousedown", testEvents.down); t.ok(handler.started, "mousedown sets the started flag to true"); @@ -183,7 +177,7 @@ handler.last.y == testEvents.down.xy.y, "mouse down sets handler.last correctly"); - OpenLayers.Event.stop = oldStop; + OpenLayers.Event.preventDefault = oldPreventDefault; OpenLayers.Event.isLeftClick = oldIsLeftClick; handler.checkModifiers = oldCheckModifiers; @@ -292,7 +286,7 @@ function test_Handler_Drag_touch(t) { // In this test we verify that "touchstart", "touchmove", and // "touchend" events set expected states in the drag handler. - // We also verify that we stop event bubbling as appropriate. + // We also verify that we prevent the default as appropriate. t.plan(14); @@ -308,8 +302,8 @@ }); h.activate(); - var _stop = OpenLayers.Event.stop; - OpenLayers.Event.stop = function(e) { + var _preventDefault = OpenLayers.Event.preventDefault; + OpenLayers.Event.preventDefault = function(e) { log.push(e); }; @@ -343,7 +337,7 @@ // tear down - OpenLayers.Event.stop = _stop; + OpenLayers.Event.preventDefault = _preventDefault; m.destroy(); }