From 289d9d371d729d8fc48ed3a2701ef6aad14d0dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 22 Dec 2011 14:18:12 +0100 Subject: [PATCH 01/18] make Layer.redraw not unconditionally set zoomChanged to true in moveTo --- lib/OpenLayers/Layer.js | 11 +++++-- tests/Layer.html | 68 +++++++++++++++++++++++++++++++++++++++-- tests/Tile/Image.html | 32 +++++++++++++++++++ 3 files changed, 106 insertions(+), 5 deletions(-) diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 4c39b766c0..2fd470a14e 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -541,7 +541,9 @@ OpenLayers.Layer = OpenLayers.Class({ * Returns: * {Boolean} The layer was redrawn. */ - redraw: function() { + redraw: function(zoomChanged) { + // zoomChanged forces a zoom change in the layer's moveTo + // call. This isn't documented because not part of the API. var redrawn = false; if (this.map) { @@ -552,7 +554,9 @@ OpenLayers.Layer = OpenLayers.Class({ var extent = this.getExtent(); if (extent && this.inRange && this.visibility) { - var zoomChanged = true; + zoomChanged = zoomChanged || + this._resolution === undefined || + this._resolution !== this.map.getResolution(); this.moveTo(extent, zoomChanged, false); this.events.triggerEvent("moveend", {"zoomChanged": zoomChanged}); @@ -577,6 +581,7 @@ OpenLayers.Layer = OpenLayers.Class({ display = display && this.inRange; } this.display(display); + this._resolution = this.map.getResolution(); }, /** @@ -632,6 +637,8 @@ OpenLayers.Layer = OpenLayers.Class({ // deal with gutters this.setTileSize(); + + delete this._resolution; } }, diff --git a/tests/Layer.html b/tests/Layer.html index eabd233aee..01f5218cab 100644 --- a/tests/Layer.html +++ b/tests/Layer.html @@ -672,19 +672,81 @@ // test that the moveend event was triggered t.ok(log.event, "an event was logged"); t.eq(log.event.type, "moveend", "moveend was triggered"); - t.eq(log.event.zoomChanged, true, "event says zoomChanged true - poor name"); + t.eq(log.event.zoomChanged, false, "event says zoomChanged false"); layer.moveTo = function(bounds, zoomChanged, dragging) { var extent = layer.map.getExtent(); t.ok(bounds.equals(extent), "redraw calls moveTo with the map extent"); - t.ok(zoomChanged, - "redraw calls moveTo with zoomChanged true"); + t.ok(!zoomChanged, + "redraw calls moveTo with zoomChanged false"); t.ok(!dragging, "redraw calls moveTo with dragging false"); } layer.redraw(); } + + // This function includes integration tests to verify that the + // layer's moveTo function is called with the expected value + // for zoomChanged + function test_moveTo_zoomChanged(t) { + t.plan(6); + + var log = {}; + var map = new OpenLayers.Map('map'); + + var l1 = new OpenLayers.Layer('l1', {isBaseLayer: true}); + l1.moveTo = function(bounds, zoomChanged, dragging) { + log.moveTo = {zoomChanged: zoomChanged}; + OpenLayers.Layer.prototype.moveTo.apply(this, arguments); + }; + + map.addLayer(l1); + map.zoomToMaxExtent(); + + log = {}; + l1.redraw(); + t.eq(log.moveTo.zoomChanged, false, + "[a] redraw calls moveTo with zoomChanged false"); + + log = {}; + l1.redraw(true); + t.eq(log.moveTo.zoomChanged, true, + "[b] redraw calls moveTo with zoomChanged true"); + + l1.setVisibility(false); + log = {}; + l1.setVisibility(true); + t.eq(log.moveTo.zoomChanged, false, + "[c] redraw calls moveTo with zoomChanged false"); + + l1.setVisibility(false); + map.zoomIn(); + log = {}; + l1.setVisibility(true); + t.eq(log.moveTo.zoomChanged, true, + "[d] redraw calls moveTo with zoomChanged true"); + + l1.moveTo = OpenLayers.Layer.prototype.moveTo; + + var l2 = new OpenLayers.Layer('l2'); + l2.moveTo = function(bounds, zoomChanged, dragging) { + log.moveTo = {zoomChanged: zoomChanged}; + OpenLayers.Layer.prototype.moveTo.apply(this, arguments); + }; + log = {}; + map.addLayer(l2); + t.eq(log.moveTo.zoomChanged, true, + "[e] redraw calls moveTo with zoomChanged true"); + + map.removeLayer(l2); + log = {}; + map.addLayer(l2); + t.eq(log.moveTo.zoomChanged, true, + "[f] redraw calls moveTo with zoomChanged true"); + + map.destroy(); + } function test_layer_setIsBaseLayer(t) { t.plan(2); diff --git a/tests/Tile/Image.html b/tests/Tile/Image.html index 0f71c542dd..f350b5c059 100644 --- a/tests/Tile/Image.html +++ b/tests/Tile/Image.html @@ -342,6 +342,38 @@ t.ok(tile.imgDiv == null, "image reference removed from tile"); map.destroy(); } + + // test for https://github.com/openlayers/openlayers/pull/36 + // (more an integration test than a unit test) + function test_olImageLoadError(t) { + t.plan(2); + + var map = new OpenLayers.Map('map'); + var layer = new OpenLayers.Layer.WMS("invalid", "", {layers: 'basic'}); + map.addLayer(layer); + + var size = new OpenLayers.Size(5, 6); + var position = new OpenLayers.Pixel(20, 30); + var bounds = new OpenLayers.Bounds(1, 2, 3, 4); + + var tile = new OpenLayers.Tile.Image(layer, position, bounds, null, size); + tile.draw(); + + t.delay_call(0.1, function() { + + // check initial state + t.ok(OpenLayers.Element.hasClass(tile.imgDiv, 'olImageLoadError'), + 'tile image has the olImageLoadError class (init state)'); + + layer.setVisibility(false); + layer.setVisibility(true); + + t.ok(OpenLayers.Element.hasClass(tile.imgDiv, 'olImageLoadError'), + 'tile image still has the olImageLoadError class'); + + map.destroy(); + }); + } From ff045172320eb74808d7c3b3c6e1d80dfaa9c761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 22 Dec 2011 14:21:07 +0100 Subject: [PATCH 02/18] HTTPRequest.mergeNewParams should now do redraw(true) --- lib/OpenLayers/Layer/HTTPRequest.js | 4 ++-- tests/Layer/ArcGIS93Rest.html | 5 ++++- tests/Layer/HTTPRequest.html | 11 ++++++----- tests/Layer/KaMap.html | 6 +++++- tests/Layer/MapGuide.html | 5 ++++- tests/Layer/MapServer.html | 5 ++++- tests/Layer/WMS.html | 5 ++++- 7 files changed, 29 insertions(+), 12 deletions(-) diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js index ddf3d51073..3841c9f73d 100644 --- a/lib/OpenLayers/Layer/HTTPRequest.js +++ b/lib/OpenLayers/Layer/HTTPRequest.js @@ -120,7 +120,7 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { */ mergeNewParams:function(newParams) { this.params = OpenLayers.Util.extend(this.params, newParams); - var ret = this.redraw(); + var ret = OpenLayers.Layer.prototype.redraw.call(this, true); if(this.map != null) { this.map.events.triggerEvent("changelayer", { layer: this, @@ -144,7 +144,7 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { if (force) { return this.mergeNewParams({"_olSalt": Math.random()}); } else { - return OpenLayers.Layer.prototype.redraw.apply(this, []); + return OpenLayers.Layer.prototype.redraw.call(this); } }, diff --git a/tests/Layer/ArcGIS93Rest.html b/tests/Layer/ArcGIS93Rest.html index 4f1a4c618d..7c815b773e 100644 --- a/tests/Layer/ArcGIS93Rest.html +++ b/tests/Layer/ArcGIS93Rest.html @@ -155,7 +155,8 @@ map.addLayer(layer); map.zoomToMaxExtent(); - layer.redraw = function() { + var redraw = OpenLayers.Layer.prototype.redraw; + OpenLayers.Layer.prototype.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -167,6 +168,8 @@ newParams.CHICKPEAS = 151; t.eq( layer.params.CHICKPEAS, "png", "mergeNewParams() makes clean copy of hashtable"); + + OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/HTTPRequest.html b/tests/Layer/HTTPRequest.html index 02311564f1..e753586dd0 100644 --- a/tests/Layer/HTTPRequest.html +++ b/tests/Layer/HTTPRequest.html @@ -92,13 +92,14 @@ t.eq( log[0].scope, scope, "mergeNewParams() executes changelayer listener with expected scope"); newParams.chickpeas = 151; - t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hash"); - - layer.redraw = function() { - t.ok(true, "layer.mergeNewParams calls layer.redraw"); - } + + var redraw = OpenLayers.Layer.prototype.redraw; + OpenLayers.Layer.prototype.redraw = function(forceZoomChanged) { + t.eq(forceZoomChanged, true, 'mergeNewParams() sends true to Layer.redraw'); + }; layer.mergeNewParams(); + OpenLayers.Layer.prototype.redraw = redraw; } function test_Layer_HTTPRequest_getFullRequestString (t) { diff --git a/tests/Layer/KaMap.html b/tests/Layer/KaMap.html index b22917fda0..b2c22cf650 100644 --- a/tests/Layer/KaMap.html +++ b/tests/Layer/KaMap.html @@ -153,7 +153,9 @@ map.addLayer(layer); map.zoomToMaxExtent(); - layer.redraw = function() { + + var redraw = OpenLayers.Layer.prototype.redraw; + OpenLayers.Layer.prototype.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -165,6 +167,8 @@ newParams.chickpeas = 151; t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable"); + + OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/MapGuide.html b/tests/Layer/MapGuide.html index b1eb386c27..f71218071c 100644 --- a/tests/Layer/MapGuide.html +++ b/tests/Layer/MapGuide.html @@ -132,7 +132,8 @@ map.addLayer(layer); map.zoomToMaxExtent(); - layer.redraw = function() { + var redraw = OpenLayers.Layer.prototype.redraw; + OpenLayers.Layer.prototype.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -144,6 +145,8 @@ newParams.chickpeas = 151; t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable"); + + OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/MapServer.html b/tests/Layer/MapServer.html index 16e59156e3..ff8cdf4e53 100644 --- a/tests/Layer/MapServer.html +++ b/tests/Layer/MapServer.html @@ -136,7 +136,8 @@ map.addLayer(layer); map.zoomToMaxExtent(); - layer.redraw = function() { + var redraw = OpenLayers.Layer.prototype.redraw; + OpenLayers.Layer.prototype.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } layer.mergeNewParams(newParams); @@ -147,6 +148,8 @@ newParams.chickpeas = 151; t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable"); + + OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/WMS.html b/tests/Layer/WMS.html index a07b36c1d9..bb04560c88 100644 --- a/tests/Layer/WMS.html +++ b/tests/Layer/WMS.html @@ -195,7 +195,8 @@ map.addLayer(layer); map.zoomToMaxExtent(); - layer.redraw = function() { + var redraw = OpenLayers.Layer.prototype.redraw; + OpenLayers.Layer.prototype.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -207,6 +208,8 @@ newParams.CHICKPEAS = 151; t.eq( layer.params.CHICKPEAS, "image/png", "mergeNewParams() makes clean copy of hashtable"); + + OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } From d42eec97756d88f92147a46319484c55e8623a1a Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 26 Dec 2011 11:09:07 +0100 Subject: [PATCH 03/18] No new argument for Layer::redraw. Instead, make _resolution a private property (resolution) which is set to null to make redraw call moveTo with zoomChanged set to true. --- lib/OpenLayers/Layer.js | 21 +++++++++++++-------- lib/OpenLayers/Layer/HTTPRequest.js | 8 ++++---- tests/Layer.html | 3 ++- tests/Layer/HTTPRequest.html | 4 ++-- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 2fd470a14e..dd6ebd790a 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -265,6 +265,14 @@ OpenLayers.Layer = OpenLayers.Class({ * {Float} */ minResolution: null, + + /** + * Property: resolution + * {Float} Current resolution that the layer is drawn in. Used by + * subclasses to determine whether the zoom has changed when calling + * . + */ + resolution: null, /** * APIProperty: numZoomLevels @@ -541,9 +549,7 @@ OpenLayers.Layer = OpenLayers.Class({ * Returns: * {Boolean} The layer was redrawn. */ - redraw: function(zoomChanged) { - // zoomChanged forces a zoom change in the layer's moveTo - // call. This isn't documented because not part of the API. + redraw: function() { var redrawn = false; if (this.map) { @@ -554,9 +560,8 @@ OpenLayers.Layer = OpenLayers.Class({ var extent = this.getExtent(); if (extent && this.inRange && this.visibility) { - zoomChanged = zoomChanged || - this._resolution === undefined || - this._resolution !== this.map.getResolution(); + zoomChanged = this.resolution == null || + this.resolution !== this.map.getResolution(); this.moveTo(extent, zoomChanged, false); this.events.triggerEvent("moveend", {"zoomChanged": zoomChanged}); @@ -581,7 +586,7 @@ OpenLayers.Layer = OpenLayers.Class({ display = display && this.inRange; } this.display(display); - this._resolution = this.map.getResolution(); + this.resolution = this.map.getResolution(); }, /** @@ -638,7 +643,7 @@ OpenLayers.Layer = OpenLayers.Class({ // deal with gutters this.setTileSize(); - delete this._resolution; + this.resolution = null; } }, diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js index 3841c9f73d..8f939f7b40 100644 --- a/lib/OpenLayers/Layer/HTTPRequest.js +++ b/lib/OpenLayers/Layer/HTTPRequest.js @@ -120,7 +120,8 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { */ mergeNewParams:function(newParams) { this.params = OpenLayers.Util.extend(this.params, newParams); - var ret = OpenLayers.Layer.prototype.redraw.call(this, true); + this.resolution = null; + var ret = this.redraw(); if(this.map != null) { this.map.events.triggerEvent("changelayer", { layer: this, @@ -142,10 +143,9 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { */ redraw: function(force) { if (force) { - return this.mergeNewParams({"_olSalt": Math.random()}); - } else { - return OpenLayers.Layer.prototype.redraw.call(this); + this.params["_olSalt"] = Math.random(); } + return OpenLayers.Layer.prototype.redraw.call(this); }, /** diff --git a/tests/Layer.html b/tests/Layer.html index 01f5218cab..d3b5072f4c 100644 --- a/tests/Layer.html +++ b/tests/Layer.html @@ -710,7 +710,8 @@ "[a] redraw calls moveTo with zoomChanged false"); log = {}; - l1.redraw(true); + l1.resolution = null; + l1.redraw(); t.eq(log.moveTo.zoomChanged, true, "[b] redraw calls moveTo with zoomChanged true"); diff --git a/tests/Layer/HTTPRequest.html b/tests/Layer/HTTPRequest.html index e753586dd0..2025677fe4 100644 --- a/tests/Layer/HTTPRequest.html +++ b/tests/Layer/HTTPRequest.html @@ -95,8 +95,8 @@ t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hash"); var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function(forceZoomChanged) { - t.eq(forceZoomChanged, true, 'mergeNewParams() sends true to Layer.redraw'); + OpenLayers.Layer.prototype.redraw = function() { + t.eq(this.resolution, null, 'mergeNewParams sets layer resolution to null, causing redraw to call moveTo with zoomChanged set to true'); }; layer.mergeNewParams(); OpenLayers.Layer.prototype.redraw = redraw; From 22e9fc92b8427a843ea0196107fd10a8c5383af2 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 26 Dec 2011 19:53:23 +0100 Subject: [PATCH 04/18] Don't change existing behavior for redraw(true) --- lib/OpenLayers/Layer/HTTPRequest.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js index 8f939f7b40..0ae44bcbc1 100644 --- a/lib/OpenLayers/Layer/HTTPRequest.js +++ b/lib/OpenLayers/Layer/HTTPRequest.js @@ -143,9 +143,10 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { */ redraw: function(force) { if (force) { - this.params["_olSalt"] = Math.random(); + this.mergeNewParams({"_olSalt": Math.random()}); + } else { + return OpenLayers.Layer.prototype.redraw.call(this); } - return OpenLayers.Layer.prototype.redraw.call(this); }, /** From 0ef4c8dd5b15f9e8e32fc511567c170749229d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 4 Jan 2012 08:47:28 +0100 Subject: [PATCH 05/18] make redraw return the return value of mergeNewParams --- lib/OpenLayers/Layer/HTTPRequest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/OpenLayers/Layer/HTTPRequest.js b/lib/OpenLayers/Layer/HTTPRequest.js index 0ae44bcbc1..0e1b3afb8b 100644 --- a/lib/OpenLayers/Layer/HTTPRequest.js +++ b/lib/OpenLayers/Layer/HTTPRequest.js @@ -143,7 +143,7 @@ OpenLayers.Layer.HTTPRequest = OpenLayers.Class(OpenLayers.Layer, { */ redraw: function(force) { if (force) { - this.mergeNewParams({"_olSalt": Math.random()}); + return this.mergeNewParams({"_olSalt": Math.random()}); } else { return OpenLayers.Layer.prototype.redraw.call(this); } From d64bbe1cfc02780b13bf775ad4ffb2ebca36d13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 4 Jan 2012 08:47:55 +0100 Subject: [PATCH 06/18] better doc strings for Layer.resolution --- lib/OpenLayers/Layer.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index dd6ebd790a..595c51f3f5 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -268,9 +268,11 @@ OpenLayers.Layer = OpenLayers.Class({ /** * Property: resolution - * {Float} Current resolution that the layer is drawn in. Used by - * subclasses to determine whether the zoom has changed when calling - * . + * {Float} Current resolution that the layer is drawn in. This is + * used to determine whether the zoom has changed when calling + * from . Subclasses may set this.resolution to + * null prior to calling redraw to force passing zoomChanged + * true to moveTo. */ resolution: null, From 0d702609b125cf9ad979d13a1f0ce2718d75e7aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 4 Jan 2012 08:59:47 +0100 Subject: [PATCH 07/18] revert changes to layer mergeNewParams tests (ff045172) --- tests/Layer/ArcGIS93Rest.html | 5 +---- tests/Layer/HTTPRequest.html | 11 +++++------ tests/Layer/KaMap.html | 6 +----- tests/Layer/MapGuide.html | 5 +---- tests/Layer/MapServer.html | 5 +---- tests/Layer/WMS.html | 5 +---- 6 files changed, 10 insertions(+), 27 deletions(-) diff --git a/tests/Layer/ArcGIS93Rest.html b/tests/Layer/ArcGIS93Rest.html index 7c815b773e..4f1a4c618d 100644 --- a/tests/Layer/ArcGIS93Rest.html +++ b/tests/Layer/ArcGIS93Rest.html @@ -155,8 +155,7 @@ map.addLayer(layer); map.zoomToMaxExtent(); - var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function() { + layer.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -168,8 +167,6 @@ newParams.CHICKPEAS = 151; t.eq( layer.params.CHICKPEAS, "png", "mergeNewParams() makes clean copy of hashtable"); - - OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/HTTPRequest.html b/tests/Layer/HTTPRequest.html index 2025677fe4..02311564f1 100644 --- a/tests/Layer/HTTPRequest.html +++ b/tests/Layer/HTTPRequest.html @@ -92,14 +92,13 @@ t.eq( log[0].scope, scope, "mergeNewParams() executes changelayer listener with expected scope"); newParams.chickpeas = 151; - t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hash"); - var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function() { - t.eq(this.resolution, null, 'mergeNewParams sets layer resolution to null, causing redraw to call moveTo with zoomChanged set to true'); - }; + t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hash"); + + layer.redraw = function() { + t.ok(true, "layer.mergeNewParams calls layer.redraw"); + } layer.mergeNewParams(); - OpenLayers.Layer.prototype.redraw = redraw; } function test_Layer_HTTPRequest_getFullRequestString (t) { diff --git a/tests/Layer/KaMap.html b/tests/Layer/KaMap.html index b2c22cf650..b22917fda0 100644 --- a/tests/Layer/KaMap.html +++ b/tests/Layer/KaMap.html @@ -153,9 +153,7 @@ map.addLayer(layer); map.zoomToMaxExtent(); - - var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function() { + layer.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -167,8 +165,6 @@ newParams.chickpeas = 151; t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable"); - - OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/MapGuide.html b/tests/Layer/MapGuide.html index f71218071c..b1eb386c27 100644 --- a/tests/Layer/MapGuide.html +++ b/tests/Layer/MapGuide.html @@ -132,8 +132,7 @@ map.addLayer(layer); map.zoomToMaxExtent(); - var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function() { + layer.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -145,8 +144,6 @@ newParams.chickpeas = 151; t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable"); - - OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/MapServer.html b/tests/Layer/MapServer.html index ff8cdf4e53..16e59156e3 100644 --- a/tests/Layer/MapServer.html +++ b/tests/Layer/MapServer.html @@ -136,8 +136,7 @@ map.addLayer(layer); map.zoomToMaxExtent(); - var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function() { + layer.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } layer.mergeNewParams(newParams); @@ -148,8 +147,6 @@ newParams.chickpeas = 151; t.eq( layer.params.chickpeas, "image/png", "mergeNewParams() makes clean copy of hashtable"); - - OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } diff --git a/tests/Layer/WMS.html b/tests/Layer/WMS.html index bb04560c88..a07b36c1d9 100644 --- a/tests/Layer/WMS.html +++ b/tests/Layer/WMS.html @@ -195,8 +195,7 @@ map.addLayer(layer); map.zoomToMaxExtent(); - var redraw = OpenLayers.Layer.prototype.redraw; - OpenLayers.Layer.prototype.redraw = function() { + layer.redraw = function() { t.ok(true, "layer is redrawn after new params merged"); } @@ -208,8 +207,6 @@ newParams.CHICKPEAS = 151; t.eq( layer.params.CHICKPEAS, "image/png", "mergeNewParams() makes clean copy of hashtable"); - - OpenLayers.Layer.prototype.redraw = redraw; map.destroy(); } From eedcaf0ba26c9c40190a55fa19cec66e3aaefc52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Wed, 4 Jan 2012 09:02:38 +0100 Subject: [PATCH 08/18] add a test to verify that Layer.HTTPRequest.mergeNewParams set resolution to null prior to calling redraw --- tests/Layer/HTTPRequest.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/Layer/HTTPRequest.html b/tests/Layer/HTTPRequest.html index 02311564f1..6539b12bef 100644 --- a/tests/Layer/HTTPRequest.html +++ b/tests/Layer/HTTPRequest.html @@ -65,7 +65,7 @@ } function test_Layer_HTTPRequest_mergeNewParams (t) { - t.plan( 8 ); + t.plan( 9 ); var map = new OpenLayers.Map('map'); layer = new OpenLayers.Layer.HTTPRequest(name, url, params, options); @@ -97,7 +97,9 @@ layer.redraw = function() { t.ok(true, "layer.mergeNewParams calls layer.redraw"); - } + t.ok(layer.resolution === null, "layer.mergeNewParams sets resolution to null"); + }; + layer.resolution = 'fake'; layer.mergeNewParams(); } From 78714f6de48de22eed3aebdb29fe5bc267ea4310 Mon Sep 17 00:00:00 2001 From: Pierre GIRAUD Date: Fri, 13 Jan 2012 12:12:35 +0100 Subject: [PATCH 09/18] Adding some documentation to the locationupdated documentation. No functional change. --- lib/OpenLayers/Control/Geolocate.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/OpenLayers/Control/Geolocate.js b/lib/OpenLayers/Control/Geolocate.js index 2daf898fb1..e037533bf9 100644 --- a/lib/OpenLayers/Control/Geolocate.js +++ b/lib/OpenLayers/Control/Geolocate.js @@ -24,7 +24,10 @@ OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, { /** * Supported event types: - * - *locationupdated* Triggered when browser return a new position + * - *locationupdated* Triggered when browser return a new position. Listeners will + * receive an object with a 'position' property which is the lon lat position, as + * well as a 'point' property which the is location transform in the current map + * projection. * - *locationfailed* Triggered when geolocation has failed * - *locationuncapable* Triggered when control is activated on a browser * which doesn't support geolocation From c667e9a147d6fee3bdcc457f5cbf8d0d3fd29d7f Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Fri, 13 Jan 2012 13:05:20 +0100 Subject: [PATCH 10/18] ignore empty subject tags in CSWGetRecords parser --- lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js | 4 +++- tests/Format/CSWGetRecords/v2_0_2.html | 5 ++++- tests/Format/CSWGetRecords/v2_0_2.js | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js b/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js index 8ad98a25aa..9cb6427ff9 100644 --- a/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js +++ b/lib/OpenLayers/Format/CSWGetRecords/v2_0_2.js @@ -262,7 +262,9 @@ OpenLayers.Format.CSWGetRecords.v2_0_2 = OpenLayers.Class(OpenLayers.Format.XML, dc_element[attrs[i].name] = attrs[i].nodeValue; } dc_element.value = this.getChildValue(node); - obj[name].push(dc_element); + if (dc_element.value != "") { + obj[name].push(dc_element); + } } }, "dct": { diff --git a/tests/Format/CSWGetRecords/v2_0_2.html b/tests/Format/CSWGetRecords/v2_0_2.html index 5fda134bb1..07e1b96ba3 100644 --- a/tests/Format/CSWGetRecords/v2_0_2.html +++ b/tests/Format/CSWGetRecords/v2_0_2.html @@ -41,7 +41,7 @@ function test_read(t) { - t.plan(16); + t.plan(17); var obj = format.read(csw_response); @@ -65,6 +65,9 @@ t.eq(testRecord.type, "BriefRecord", "check value for record.type"); t.eq(testRecord.title, [{value:"Sample title"}], "check value for record.title"); + // test empty subject + t.eq(testRecord.subject, [], "Empty subject tags are ignored"); + //test bbox t.eq(testRecord.BoundingBox.length, 2, "object contains 2 BoundingBoxes"); var bbox = testRecord.BoundingBox[0]; diff --git a/tests/Format/CSWGetRecords/v2_0_2.js b/tests/Format/CSWGetRecords/v2_0_2.js index a7616714ee..6a57e11eeb 100644 --- a/tests/Format/CSWGetRecords/v2_0_2.js +++ b/tests/Format/CSWGetRecords/v2_0_2.js @@ -21,6 +21,8 @@ var csw_response = '' + '895ac38b-7aef-4a21-b593-b35a6fc7bba9' + 'Sample title' + + '' + + '' + '' + '156 -3' + '37 83' + From a719de7e9394640ea8a48c27bd441cc3fb2761e7 Mon Sep 17 00:00:00 2001 From: Pierre GIRAUD Date: Fri, 13 Jan 2012 17:12:14 +0100 Subject: [PATCH 11/18] Fixing typo and documentation mistakes. No functional changes. --- lib/OpenLayers/Control/Geolocate.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/OpenLayers/Control/Geolocate.js b/lib/OpenLayers/Control/Geolocate.js index e037533bf9..28b93bb062 100644 --- a/lib/OpenLayers/Control/Geolocate.js +++ b/lib/OpenLayers/Control/Geolocate.js @@ -25,9 +25,9 @@ OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, { /** * Supported event types: * - *locationupdated* Triggered when browser return a new position. Listeners will - * receive an object with a 'position' property which is the lon lat position, as - * well as a 'point' property which the is location transform in the current map - * projection. + * receive an object with a 'position' property which is the browser.geolocation.position + * native object, as well as a 'point' property which is the location transformed in the + * current map projection. * - *locationfailed* Triggered when geolocation has failed * - *locationuncapable* Triggered when control is activated on a browser * which doesn't support geolocation From 7a0336a9efb4f52e8cc0224af9ac653e97c4498e Mon Sep 17 00:00:00 2001 From: Pierre GIRAUD Date: Fri, 13 Jan 2012 17:36:23 +0100 Subject: [PATCH 12/18] Fixing a wrong calculation in LinearRing::containsPoint --- lib/OpenLayers/Geometry/LinearRing.js | 2 +- tests/Geometry/LinearRing.html | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/OpenLayers/Geometry/LinearRing.js b/lib/OpenLayers/Geometry/LinearRing.js index c8b960915c..bcb9ea4c4b 100644 --- a/lib/OpenLayers/Geometry/LinearRing.js +++ b/lib/OpenLayers/Geometry/LinearRing.js @@ -294,7 +294,7 @@ OpenLayers.Geometry.LinearRing = OpenLayers.Class( var px = approx(point.x, digs); var py = approx(point.y, digs); function getX(y, x1, y1, x2, y2) { - return (((x1 - x2) * y) + ((x2 * y1) - (x1 * y2))) / (y1 - y2); + return (y-y2)*((x2-x1)/(y2-y1)) + x2; } var numSeg = this.components.length - 1; var start, end, x1, y1, x2, y2, cx, cy; diff --git a/tests/Geometry/LinearRing.html b/tests/Geometry/LinearRing.html index 5cacd89eb7..20ef87efdd 100644 --- a/tests/Geometry/LinearRing.html +++ b/tests/Geometry/LinearRing.html @@ -250,6 +250,22 @@ "resize correctly adjusts y of component 4"); } + function test_LinearRing_containsPoint(t) { + t.plan(1); + + var components = [ + new OpenLayers.Geometry.Point(-10812863.417266,3923827.912779), + new OpenLayers.Geometry.Point(-10812863.417264,3923951.5257855), + new OpenLayers.Geometry.Point(-10812309.24881,3923990.9386282), + new OpenLayers.Geometry.Point(-10812751.15038,3923798.0545649) + ]; + + var ring = new OpenLayers.Geometry.LinearRing(components); + var point = new OpenLayers.Geometry.Point(-10812964.078829, 3923856.9524225); + + t.ok(!ring.containsPoint(point), + "containsPoint correctly returns false for point outside"); + } From 3eee019fca354de270c8d4d9d31da841cb497d41 Mon Sep 17 00:00:00 2001 From: Peter Robins Date: Sat, 14 Jan 2012 14:51:03 +0000 Subject: [PATCH 13/18] Remove QueryStringFilter requires from Protocol/HTTP --- lib/OpenLayers/Protocol/HTTP.js | 5 ----- notes/2.12.md | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/OpenLayers/Protocol/HTTP.js b/lib/OpenLayers/Protocol/HTTP.js index 37768fbac0..2fbec736fc 100644 --- a/lib/OpenLayers/Protocol/HTTP.js +++ b/lib/OpenLayers/Protocol/HTTP.js @@ -8,11 +8,6 @@ * @requires OpenLayers/Request/XMLHttpRequest.js */ -/** - * TODO: remove this dependency in 3.0 - * @requires OpenLayers/Format/QueryStringFilter.js - */ - /** * Class: OpenLayers.Protocol.HTTP * A basic HTTP protocol for vector layers. Create a new instance with the diff --git a/notes/2.12.md b/notes/2.12.md index d57ce08859..06a2f0ec16 100644 --- a/notes/2.12.md +++ b/notes/2.12.md @@ -50,6 +50,10 @@ The base `OpenLayers.Geometry` class no longer depends on `OpenLayers.Format.WKT Without the WKT format included (by default), the `OpenLayers.Geometry::toString` method now returns "[object Object]." Previously, it returned the Well-Known Text representation of the geometry. To maintain the previous behavior, include the OpenLayers/Format/WKT.js file in your build. +## QueryStringFilter + +`OpenLayers.Protocol.HTTP` no longer requires `OpenLayers.Format.QueryStringFilter`. It you need this, make sure it is included in your build config file. + ## Deprecated Components A number of properties, methods, and constructors have been marked as deprecated for multiple releases in the 2.x series. For the 2.12 release this deprecated functionality has been moved to a separate deprecated.js file. If you use any of the constructors or methods below, you will have to explicitly include the deprecated.js file in your build (or add it in a separate `