OpenLayers OpenLayers

Changeset 4345

Show
Ignore:
Timestamp:
09/16/07 23:47:57 (1 year ago)
Author:
crschmidt
Message:

"New permalink code maintains existing parameters ... including the
lat/lon/zoom/layers." Reported by bobkare (thx, bobkare!) with a patch by same,
rewritten by Schuyler, reviewed by me -- and I'm committing because Schuyler's
whitespace was bad. (RC1, here we come!)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/lib/OpenLayers/Control/Permalink.js

    r4333 r4345  
    110110            return;  
    111111        } 
     112 
     113        var params = OpenLayers.Util.getParameters(this.base); 
    112114         
    113         var zoom = "zoom=" + this.map.getZoom();  
    114         var lat = "lat=" + Math.round(center.lat*100000)/100000; 
    115         var lon = "lon=" + Math.round(center.lon*100000)/100000; 
     115        params.zoom = this.map.getZoom();  
     116        params.lat = Math.round(center.lat*100000)/100000; 
     117        params.lon = Math.round(center.lon*100000)/100000; 
    116118 
    117         var layers = "layers="
     119        params.layers = ''
    118120        for(var i=0; i< this.map.layers.length; i++) { 
    119121            var layer = this.map.layers[i]; 
    120122 
    121123            if (layer.isBaseLayer) { 
    122                 layers += (layer == this.map.baseLayer) ? "B" : "0"; 
     124                params.layers += (layer == this.map.baseLayer) ? "B" : "0"; 
    123125            } else { 
    124                 layers += (layer.getVisibility()) ? "T" : "F";            
     126                params.layers += (layer.getVisibility()) ? "T" : "F";            
    125127            } 
    126128        } 
    127          
     129 
    128130        var href = this.base; 
    129         var paramsString =  lat + "&" + lon + "&" + zoom + "&" + layers;  
    130          
    131         var lastServerChar = href.charAt(href.length - 1); 
    132         if ((lastServerChar == "&") || (lastServerChar == "?")) { 
    133             href += paramsString; 
    134         } else { 
    135             if (href.indexOf('?') == -1) { 
    136                 //serverPath has no ? -- add one 
    137                 href += '?' + paramsString; 
    138             } else { 
    139                 //serverPath contains ?, so must already have paramsString at the end 
    140                 href += '&' + paramsString; 
    141             } 
     131        if( href.indexOf('?') != -1 ){ 
     132            href = href.substring( 0, href.indexOf('?') ); 
    142133        } 
     134 
     135        href += '?' + OpenLayers.Util.getParameterString(params); 
    143136        this.element.href = href; 
    144137    },  
  • trunk/openlayers/tests/Control/test_Permalink.html

    r4337 r4345  
    4040        map.addControl(control); 
    4141        map.pan(5, 0); 
    42         t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getElement('permalink').href, location+"?lat=0&lon=1.75781&zoom=2&layers=BT"), 'pan sets permalink'); 
     42        t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getElement('permalink').href, location+"?zoom=2&lat=0&lon=1.75781&layers=BT"), 'pan sets permalink'); 
    4343         
    4444        map.layers[1].setVisibility(false); 
    4545         
    46         t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getElement('permalink').href, location+"?lat=0&lon=1.75781&zoom=2&layers=BF"), 'setVisibility sets permalink'); 
     46        t.ok(OpenLayers.Util.isEquivalentUrl(OpenLayers.Util.getElement('permalink').href, location+"?zoom=2&lat=0&lon=1.75781&layers=BF"), 'setVisibility sets permalink'); 
    4747    } 
    4848    function test_03_Control_Permalink_updateLinksBase (t) { 
     
    5757        map.addControl(control); 
    5858        map.pan(5, 0); 
    59         OpenLayers.Util.getElement('edit_permalink').href = './edit.html?lat=0&lon=1.75781&zoom=2&layers=B'; 
     59        OpenLayers.Util.getElement('edit_permalink').href = './edit.html?zoom=2&lat=0&lon=1.75781&layers=B'; 
    6060        t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base"); 
    6161  } 
     
    7878      map.addControl(control); 
    7979      map.pan(5, 0); 
    80       OpenLayers.Util.getElement('edit_permalink').href = './edit.html?foo=bar&lat=0&lon=1.75781&zoom=2&layers=B'; 
     80      OpenLayers.Util.getElement('edit_permalink').href = './edit.html?foo=bar&zoom=2&lat=0&lon=1.75781&layers=B'; 
    8181      t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with base and querystring"); 
    8282       
     
    8787       
    8888      control = new OpenLayers.Control.Permalink('permalink', "./edit.html?" ); 
    89       OpenLayers.Util.getElement('edit_permalink').href = './edit.html?lat=0&lon=1.75781&zoom=2&layers=B'; 
     89      OpenLayers.Util.getElement('edit_permalink').href = './edit.html?zoom=2&lat=0&lon=1.75781&layers=B'; 
    9090      map.addControl(control); 
    9191      map.pan(5, 0); 
     
    9595  } 
    9696 
     97    function test_06_Control_Permalink_nonRepeating (t) { 
     98        t.plan( 2 ); 
     99     
     100        control = new OpenLayers.Control.Permalink('permalink', "./edit.html?zoom=3" ); 
     101        t.ok( control instanceof OpenLayers.Control.Permalink, "new OpenLayers.Control returns object" ); 
     102        map = new OpenLayers.Map('map'); 
     103        layer = new OpenLayers.Layer.WMS('Test Layer', "http://octo.metacarta.com/cgi-bin/mapserv", {map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'}); 
     104        map.addLayer(layer); 
     105        if (!map.getCenter())  map.zoomToMaxExtent(); 
     106        map.addControl(control); 
     107        map.pan(5, 0); 
     108        OpenLayers.Util.getElement('edit_permalink').href = './edit.html?zoom=2&lat=0&lon=1.75781&layers=B'; 
     109        t.eq(OpenLayers.Util.getElement('permalink').href, OpenLayers.Util.getElement('edit_permalink').href, "Panning sets permalink with existing zoom in base"); 
     110  } 
    97111  </script> 
    98112</head>