OpenLayers OpenLayers

Changeset 7986

Show
Ignore:
Timestamp:
09/09/08 11:53:09 (3 months ago)
Author:
euzuro
Message:

Fix for Permalink's override-able createParams() function, which was designed to allow for input parameter values for center, zoom, and layers... but was actually only using the center value... zoom and layers were being taken from the map and the input parameters ignored. Big thanks to our anonymous poster for spotting this. r=ahocevar (Pullup #1489)

Files:

Legend:

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

    r7881 r7986  
    169169    createParams: function(center, zoom, layers) { 
    170170        center = center || this.map.getCenter(); 
    171         zoom = zoom || this.map.getZoom(); 
    172         layers = layers || this.map.layers;   
    173171           
    174172        var params = OpenLayers.Util.getParameters(this.base); 
     
    178176        // base link. 
    179177        if (center) {  
    180      
    181             params.zoom = this.map.getZoom();  
     178 
     179            //zoom 
     180            params.zoom = zoom || this.map.getZoom();  
     181 
     182            //lon,lat 
    182183            var lat = center.lat; 
    183184            var lon = center.lon; 
     
    193194            params.lat = Math.round(lat*100000)/100000; 
    194195            params.lon = Math.round(lon*100000)/100000; 
    195              
     196     
     197            //layers         
     198            layers = layers || this.map.layers;   
    196199            params.layers = ''; 
    197             for (var i=0, len=this.map.layers.length; i<len; i++) { 
    198                 var layer = this.map.layers[i]; 
     200            for (var i=0, len=layers.length; i<len; i++) { 
     201                var layer = layers[i]; 
    199202     
    200203                if (layer.isBaseLayer) { 
  • trunk/openlayers/tests/Control/Permalink.html

    r7881 r7986  
    135135        t.eq(control.div.firstChild.getAttribute("href"), "./edit.html?zoom=2&lat=0&lon=1.75781&layers=B&customParam=foo", "Custom parameter encoded correctly."); 
    136136    } 
     137     
     138    function test_Control_Permalink_createParams(t) { 
     139        t.plan(18); 
     140 
     141        var baseLayer = { 'isBaseLayer': true }; 
     142 
     143        var m = { 
     144            'getCenter': function() { return null; } 
     145        }; 
     146         
     147        var pl = { 
     148            'map': m, 
     149            'base': {} 
     150        }; 
     151 
     152        old_getParameters = OpenLayers.Util.getParameters; 
     153        OpenLayers.Util.getParameters = function(base) { 
     154            t.ok(base == pl.base, "correct base sent in to Util.getParameters()"); 
     155            return g_Params; 
     156        }; 
     157         
     158      //null center, null map.getCenter() 
     159        g_Params = {}; 
     160        m.baseLayer = baseLayer; 
     161        var returnParams = OpenLayers.Control.Permalink.prototype.createParams.apply(pl, []); 
     162        t.ok(returnParams == g_Params, "correct params returned on null center"); 
     163 
     164      //valid center, zoom, layers 
     165        g_Params = { 'test': {} }; 
     166        var center = { 'lon': 1.2345678901, 'lat': 9.8765432109 }; 
     167        var zoom = {}; 
     168        var layers = [ 
     169            { 'isBaseLayer': true }, 
     170            baseLayer, 
     171            { 'isBaseLayer': false, 'getVisibility': function() { return true; } }, 
     172            { 'isBaseLayer': false, 'getVisibility': function() { return false; } } 
     173        ]; 
     174        var returnParams = OpenLayers.Control.Permalink.prototype.createParams.apply(pl, [center, zoom, layers]); 
     175 
     176        t.ok(returnParams.test == g_Params.test, "correct params returned from Util.getParameters() when valid center, zoom, layers"); 
     177        t.ok(returnParams.zoom == zoom, "params.zoom set correctly when valid center, zoom, layers"); 
     178        t.eq(returnParams.lon, 1.23457, "lon set and rounded correctly when valid center, zoom, layers"); 
     179        t.eq(returnParams.lat, 9.87654, "lat set and rounded correctly when valid center, zoom, layers"); 
     180        t.eq(returnParams.layers, "0BTF", "layers processed correctly when valid center, zoom, layers") 
     181 
     182 
     183      //null center, zoom, layers, with displayProjection 
     184        g_Params = { 'test': {} }; 
     185        g_Projection = {}; 
     186        m = { 
     187            'baseLayer': baseLayer, 
     188            'getProjectionObject':  function() { return g_Projection; }, 
     189            'center': { 'lon': {}, 'lat': {} }, 
     190            'getCenter': function() { return this.center; }, 
     191            'zoom': {}, 
     192            'getZoom': function() { return this.zoom; }, 
     193           'layers': [ 
     194                { 'isBaseLayer': false, 'getVisibility': function() { return true; } }, 
     195                baseLayer, 
     196                { 'isBaseLayer': false, 'getVisibility': function() { return false; } }, 
     197                { 'isBaseLayer': true } 
     198            ], 
     199            'getLayers': function() { return this.layers; } 
     200        }; 
     201        pl = {  
     202            'base': {}, 
     203            'map': m, 
     204            'displayProjection': {} 
     205        }; 
     206         
     207        old_transform = OpenLayers.Projection.transform; 
     208        OpenLayers.Projection.transform = function(point, projObj, dispProj) { 
     209            t.ok(point.x = m.center.lon, "correct x value passed into transform"); 
     210            t.ok(point.y = m.center.lat, "correct x value passed into transform"); 
     211            t.ok(projObj == g_Projection, "correct projection object from map passed into transform"); 
     212            t.ok(dispProj == pl.displayProjection, "correct displayProjection from control passed into transform"); 
     213 
     214            return { 'x': 9.8765432109, 'y': 1.2345678901 }; 
     215        }; 
     216         
     217        center = zoom = layers = null; 
     218 
     219        var returnParams = OpenLayers.Control.Permalink.prototype.createParams.apply(pl, [center, zoom, layers]); 
     220        t.ok(returnParams.test == g_Params.test, "correct params returned from Util.getParameters() when null center, zoom, layers, with displayProjection"); 
     221        t.ok(returnParams.zoom == m.zoom, "params.zoom set correctly when null center, zoom, layers, with displayProjection"); 
     222        t.eq(returnParams.lon, 9.87654, "lon set, transformed, and rounded correctly when null center, zoom, layers, with displayProjection"); 
     223        t.eq(returnParams.lat, 1.23457, "lat set, transformed, and rounded correctly when null center, zoom, layers, with displayProjection"); 
     224        t.eq(returnParams.layers, "TBF0", "layers processed correctly when null center, zoom, layers, with displayProjection"); 
     225 
     226        OpenLayers.Util.getParameters = old_getParameters; 
     227        OpenLayers.Projection.transform = old_transform; 
     228    } 
     229     
    137230  </script> 
    138231</head>