From 6162cbafec8a9fdaa04bd625ebafff14267157d2 Mon Sep 17 00:00:00 2001 From: crschmidt Date: Sat, 2 May 2009 21:54:03 +0000 Subject: [PATCH] Pullup: * #1797 * #1978 * #2060 * #2066 git-svn-id: http://svn.openlayers.org/branches/openlayers/2.8@9348 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- examples/wfs-protocol.html | 2 +- lib/OpenLayers/Layer/Google.js | 48 ++++++++++++---------------------- lib/OpenLayers/Tile/Image.js | 3 ++- lib/OpenLayers/Util.js | 6 +++-- tests/Util.html | 9 +++++-- 5 files changed, 31 insertions(+), 37 deletions(-) diff --git a/examples/wfs-protocol.html b/examples/wfs-protocol.html index bb8d6db85e..978d627fe6 100644 --- a/examples/wfs-protocol.html +++ b/examples/wfs-protocol.html @@ -22,7 +22,7 @@ url: "http://publicus.opengeo.org/geoserver/wfs", featureType: "tasmania_roads", featureNS: "http://www.openplans.org/topp" - }), + }) }); map.addLayers([wms, layer]); diff --git a/lib/OpenLayers/Layer/Google.js b/lib/OpenLayers/Layer/Google.js index c6bdf4f81a..48d516cb89 100644 --- a/lib/OpenLayers/Layer/Google.js +++ b/lib/OpenLayers/Layer/Google.js @@ -212,22 +212,24 @@ OpenLayers.Layer.Google = OpenLayers.Class( * evt - {Event} */ onMapResize: function() { - this.windowResized = true; if(this.visibility) { - this.checkResize(); - } - }, - - /** - * APIMethod: checkResize - * Check if the map has been resized, and if the Google Maps object is ready for checkResize. - * If the mapObject.getSize() equals the layer div's offset size, or if mapObject.getCenter() - * is null, the mapObject.checkResize() will fail. - */ - checkResize: function() { - if (this.windowResized && this.div.style.display != "none" && this.mapObject.getCenter()) { this.mapObject.checkResize(); - this.windowResized = false; + } else { + // workaround for resizing of invisible layers where + // GMap2.checkResize() does not work. We need to load all tiles + // for the old div size, then checkResize(), and then call + // layer.moveTo() to trigger GMap.setCenter() (which will finish + // the GMap initialization). + if(!this._resized) { + var layer = this; + var handle = GEvent.addListener(this.mapObject, "tilesloaded", function() { + GEvent.removeListener(handle); + delete layer._resized; + layer.mapObject.checkResize(); + layer.moveTo(layer.map.getCenter(), layer.map.getZoom()); + }) + } + this._resized = true; } }, @@ -240,7 +242,6 @@ OpenLayers.Layer.Google = OpenLayers.Class( */ display: function(display) { OpenLayers.Layer.EventPane.prototype.display.apply(this, arguments); - this.checkResize(); this.termsOfUse.style.display = this.div.style.display; this.poweredBy.style.display = this.div.style.display; }, @@ -263,22 +264,7 @@ OpenLayers.Layer.Google = OpenLayers.Class( } OpenLayers.Layer.EventPane.prototype.removeMap.apply(this, arguments); }, - - /** - * Method: moveTo - * Handle calls to move the layer. - * - * Parameters: - * bound - {} - * zoomChanged - {Boolean} Tells when zoom has changed, as layers have to - * do some init work in that case. - * dragging - {Boolean} - */ - moveTo:function(bounds, zoomChanged, dragging) { - OpenLayers.Layer.EventPane.prototype.moveTo.apply(this, arguments); - this.checkResize(); - }, - + /** * APIMethod: getZoomForExtent * diff --git a/lib/OpenLayers/Tile/Image.js b/lib/OpenLayers/Tile/Image.js index d500bd57dc..ac89ed2cf7 100644 --- a/lib/OpenLayers/Tile/Image.js +++ b/lib/OpenLayers/Tile/Image.js @@ -122,7 +122,8 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, { this.imgDiv.map = null; } this.imgDiv.urls = null; - this.imgDiv.src = null; + // abort any currently loading image + this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif"; } this.imgDiv = null; if ((this.frame != null) && (this.frame.parentNode == this.layer.div)) { diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 4c0eab1bcf..d31c1dc6fb 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -1356,7 +1356,10 @@ OpenLayers.Util.createUrlObject = function(url, options) { a.href = url; //host (without port) - urlObject.host = a.host; + // if we don't have a host (which is the case with URLs starting with "/" + // in IE), take the window location's host to match other browsers that + // fill in the window's location host automatically + urlObject.host = a.host || window.location.host; var port = a.port; if (port.length <= 0) { var newHostLength = urlObject.host.length - (port.length); @@ -1380,7 +1383,6 @@ OpenLayers.Util.createUrlObject = function(url, options) { } urlObject.args = OpenLayers.Util.getParameters(queryString); - //pathname (this part allows for relative <-> absolute comparison) if ( ((urlObject.protocol == "file:") && (url.indexOf("file:") != -1)) || ((urlObject.protocol != "file:") && (urlObject.host != "")) ) { diff --git a/tests/Util.html b/tests/Util.html index 4e92d8c2ab..9d0982933c 100644 --- a/tests/Util.html +++ b/tests/Util.html @@ -606,7 +606,7 @@ } function test_Util_isEquivalentUrl(t) { - t.plan(8); + t.plan(9); var url1, url2, options; @@ -663,7 +663,12 @@ url1 = "foo.html?bar=now#go"; url2 = "../tests/../tests/foo.html?bar=now#go"; - t.ok(OpenLayers.Util.isEquivalentUrl(url1, url2), "relative vs. absolute paths works"); + t.ok(OpenLayers.Util.isEquivalentUrl(url1, url2), "relative vs. absolute paths works"); + + url1 = "/foo/bar"; + url2 = new Array(window.location.pathname.split("/").length-1).join("../")+"foo/bar"; + + t.ok(OpenLayers.Util.isEquivalentUrl(url1, url2), "absolute and relative path without host works for "+url2) } function test_Util_createUniqueIDSeq(t) {