From c79f1a56c84c74d1489913df5a1ee3febfa2e8cd Mon Sep 17 00:00:00 2001 From: crschmidt Date: Mon, 27 Aug 2007 12:46:29 +0000 Subject: [PATCH] (Closes #730) These changes make the permalink smarter in the case where we already have some URL args in the URL. Thanks to penyaskito for the bug report. git-svn-id: http://svn.openlayers.org/trunk/openlayers@4047 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Control/Permalink.js | 22 +++++++++++++++++----- tests/Control/test_Permalink.html | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/lib/OpenLayers/Control/Permalink.js b/lib/OpenLayers/Control/Permalink.js index 2ea6f858ab..324453b188 100644 --- a/lib/OpenLayers/Control/Permalink.js +++ b/lib/OpenLayers/Control/Permalink.js @@ -35,9 +35,7 @@ OpenLayers.Control.Permalink = OpenLayers.Class(OpenLayers.Control, { initialize: function(element, base) { OpenLayers.Control.prototype.initialize.apply(this, arguments); this.element = OpenLayers.Util.getElement(element); - if (base) { - this.base = base; - } + this.base = base || document.location.href; }, /** @@ -116,8 +114,22 @@ OpenLayers.Control.Permalink = OpenLayers.Class(OpenLayers.Control, { layers += (layer.getVisibility()) ? "T" : "F"; } } - var href = this.base + "?" + lat + "&" + lon + "&" + zoom + - "&" + layers; + + var href = this.base; + var paramsString = lat + "&" + lon + "&" + zoom + "&" + layers; + + var lastServerChar = href.charAt(href.length - 1); + if ((lastServerChar == "&") || (lastServerChar == "?")) { + href += paramsString; + } else { + if (href.indexOf('?') == -1) { + //serverPath has no ? -- add one + href += '?' + paramsString; + } else { + //serverPath contains ?, so must already have paramsString at the end + href += '&' + paramsString; + } + } this.element.href = href; }, diff --git a/tests/Control/test_Permalink.html b/tests/Control/test_Permalink.html index 2f63d933e1..fcc9968791 100644 --- a/tests/Control/test_Permalink.html +++ b/tests/Control/test_Permalink.html @@ -49,6 +49,32 @@ map.addControl(control); t.eq(map.controls[3].div.firstChild.nodeName, "A", "Permalink control creates div with 'a' inside." ); } + function test_05_Control_Permalink_base_with_query (t) { + t.plan( 3 ); + + control = new OpenLayers.Control.Permalink('permalink', "./edit.html?foo=bar" ); + map = new OpenLayers.Map('map'); + layer = new OpenLayers.Layer.WMS('Test Layer', "http://example.com" ); + map.addLayer(layer); + if (!map.getCenter()) map.zoomToMaxExtent(); + map.addControl(control); + map.pan(5, 0); + OpenLayers.Util.getElement('edit_permalink').href = './edit.html?foo=bar&lat=0&lon=1.75781&zoom=2&layers=B'; + t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base and querystring"); + + control = new OpenLayers.Control.Permalink('permalink', "./edit.html?foo=bar&" ); + map.addControl(control); + map.pan(0, 0); + t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base and querystring ending with '&'"); + + control = new OpenLayers.Control.Permalink('permalink', "./edit.html?" ); + OpenLayers.Util.getElement('edit_permalink').href = './edit.html?lat=0&lon=1.75781&zoom=2&layers=B'; + map.addControl(control); + map.pan(5, 0); + map.pan(-5, 0); + t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base and querystring ending with '?'"); + + } // -->