OpenLayers OpenLayers

Ticket #1489: permalink.3.patch

File permalink.3.patch, 6.4 kB (added by euzuro, 4 months ago)

take three. this time using the parameters passed in. includes full tests.

  • tests/Control/Permalink.html

    old new  
    134134        t.eq(this.map.controls[this.map.controls.length-1].CLASS_NAME, "CustomArgParser", "Custom ArgParser added correctly."); 
    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> 
    139232<body> 
  • lib/OpenLayers/Control/Permalink.js

    old new  
    168168     */ 
    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); 
    175173         
     
    177175        // Break out of this function, and simply return the params from the 
    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; 
    184185             
     
    192193            }        
    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) { 
    201204                    params.layers += (layer == this.map.baseLayer) ? "B" : "0";