diff --git a/lib/OpenLayers/Layer/XYZ.js b/lib/OpenLayers/Layer/XYZ.js index 1a833926fc..2b749cc026 100644 --- a/lib/OpenLayers/Layer/XYZ.js +++ b/lib/OpenLayers/Layer/XYZ.js @@ -65,7 +65,7 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, { * obj - {Object} Is this ever used? * * Returns: - * {} An exact clone of this OpenLayers.Layer.Grid + * {} An exact clone of this OpenLayers.Layer.XYZ */ clone: function (obj) { @@ -76,15 +76,7 @@ OpenLayers.Layer.XYZ = OpenLayers.Class(OpenLayers.Layer.Grid, { } //get all additions from superclasses - obj = OpenLayers.Layer.HTTPRequest.prototype.clone.apply(this, [obj]); - - // copy/set any non-init, non-simple values here - if (this.tileSize != null) { - obj.tileSize = this.tileSize.clone(); - } - - // we do not want to copy reference to grid, so we make a new array - obj.grid = []; + obj = OpenLayers.Layer.Grid.prototype.clone.apply(this, [obj]); return obj; }, @@ -174,5 +166,13 @@ OpenLayers.Layer.OSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { attribution: "Data CC-By-SA by OpenStreetMap", sphericalMercator: true, url: 'http://tile.openstreetmap.org/${z}/${x}/${y}.png', + clone: function(obj) { + if (obj == null) { + obj = new OpenLayers.Layer.OSM( + this.name, this.url, this.getOptions()); + } + obj = OpenLayers.Layer.XYZ.prototype.clone.apply(this, [obj]); + return obj; + }, CLASS_NAME: "OpenLayers.Layer.OSM" }); diff --git a/tests/Layer/XYZ.html b/tests/Layer/XYZ.html index ae02f79ffa..99b4616f66 100644 --- a/tests/Layer/XYZ.html +++ b/tests/Layer/XYZ.html @@ -173,6 +173,19 @@ map.destroy(); } + function test_clone(t) { + t.plan(2); + + var clone; + + layer = new OpenLayers.Layer.XYZ(name, url, options); + clone = layer.clone(); + t.ok(clone instanceof OpenLayers.Layer.XYZ, "clone is a Layer.XYZ instance"); + + layer = new OpenLayers.Layer.OSM(); + clone = layer.clone(); + t.ok(clone instanceof OpenLayers.Layer.OSM, "clone is a Layer.OSM instance"); + }