Merge pull request #1457 from jfirebaugh/eachLayer

Map#eachLayer?
This commit is contained in:
Vladimir Agafonkin 2013-02-27 02:37:33 -08:00
commit 99abc3e01d
2 changed files with 99 additions and 75 deletions

View File

@ -77,14 +77,12 @@ describe("Map", function () {
it("sets the view of the map", function () { it("sets the view of the map", function () {
expect(map.setView([51.505, -0.09], 13)).toBe(map); expect(map.setView([51.505, -0.09], 13)).toBe(map);
expect(map.getZoom()).toBe(13); expect(map.getZoom()).toBe(13);
expect(map.getCenter().distanceTo([51.505, -0.09])).toBeLessThan(5); expect(map.getCenter().distanceTo([51.505, -0.09])).toBeLessThan(5);
}); });
}); });
describe("#getBounds", function () { describe("#getBounds", function () {
it("is safe to call from within a moveend callback during initial " + it("is safe to call from within a moveend callback during initial load (#1027)", function () {
"load (#1027)", function () {
map.on("moveend", function () { map.on("moveend", function () {
map.getBounds(); map.getBounds();
}); });
@ -94,8 +92,7 @@ describe("Map", function () {
}); });
describe("#getMinZoom and #getMaxZoom", function () { describe("#getMinZoom and #getMaxZoom", function () {
it("The minZoom and maxZoom options overrides any" + it("minZoom and maxZoom options overrides any minZoom and maxZoom set on layers", function () {
" minZoom and maxZoom set on layers", function () {
var c = document.createElement('div'), var c = document.createElement('div'),
map = L.map(c, { minZoom: 5, maxZoom: 10 }); map = L.map(c, { minZoom: 5, maxZoom: 10 });
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map); L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
@ -114,9 +111,9 @@ describe("Map", function () {
expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalled();
}); });
}); });
describe("when a new layer with greater zoomlevel coverage than the current layer is added to a map", function () { describe("when a new layer with greater zoomlevel coverage than the current layer is added to a map", function () {
it("fires a zoomlevelschange event ", it("fires a zoomlevelschange event", function () {
function () {
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map); L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
map.on("zoomlevelschange", spy); map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
@ -124,9 +121,9 @@ describe("Map", function () {
expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalled();
}); });
}); });
describe("when a new layer with the same or lower zoomlevel coverage as the current layer is added to a map", function () { describe("when a new layer with the same or lower zoomlevel coverage as the current layer is added to a map", function () {
it("fires no a zoomlevelschange event ", it("fires no zoomlevelschange event", function () {
function () {
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map); L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
map.on("zoomlevelschange", spy); map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
@ -134,17 +131,15 @@ describe("Map", function () {
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 5 }).addTo(map); L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 5 }).addTo(map);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
});
}); });
}); });
});
describe("#removeLayer", function () { describe("#removeLayer", function () {
describe("when the last tile layer on a map is removed", function () { describe("when the last tile layer on a map is removed", function () {
it("fires a zoomlevelschange event ", function () { it("fires a zoomlevelschange event", function () {
map.whenReady(function(){ map.whenReady(function(){
var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }) var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map);
.addTo(map);
map.on("zoomlevelschange", spy); map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
@ -153,13 +148,12 @@ describe("Map", function () {
}); });
}); });
}); });
describe("when a tile layer is removed from a map and it had greater zoom level coverage than the remainding layer", function () { describe("when a tile layer is removed from a map and it had greater zoom level coverage than the remainding layer", function () {
it("fires a zoomlevelschange event ", function () { it("fires a zoomlevelschange event", function () {
map.whenReady(function(){ map.whenReady(function(){
var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }) var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map),
.addTo(map), t2 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 15 }).addTo(map);
t2 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 15 })
.addTo(map);
map.on("zoomlevelschange", spy); map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
@ -168,15 +162,13 @@ describe("Map", function () {
}); });
}); });
}); });
describe("when a tile layer is removed from a map it and it had lesser or the sa,e zoom level coverage as the remainding layer(s)", function () { describe("when a tile layer is removed from a map it and it had lesser or the sa,e zoom level coverage as the remainding layer(s)", function () {
it("shouldn't fire a zoomlevelschange event ", function () { it("fires no zoomlevelschange event", function () {
map.whenReady(function(){ map.whenReady(function(){
var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }) var tl = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map),
.addTo(map), t2 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }).addTo(map),
t2 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 10 }) t3 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 5 }).addTo(map);
.addTo(map),
t3 = L.tileLayer("{z}{x}{y}", { minZoom:0, maxZoom: 5 })
.addTo(map);
map.on("zoomlevelschange", spy); map.on("zoomlevelschange", spy);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
@ -184,10 +176,33 @@ describe("Map", function () {
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
map.removeLayer(t3); map.removeLayer(t3);
expect(spy).not.toHaveBeenCalled(); expect(spy).not.toHaveBeenCalled();
});
}); });
}); });
}); });
describe("#eachLayer", function () {
it("returns self", function () {
expect(map.eachLayer(function () {})).toBe(map);
});
it("calls the provided function for each layer", function () {
var t1 = L.tileLayer("{z}{x}{y}").addTo(map),
t2 = L.tileLayer("{z}{x}{y}").addTo(map);
map.eachLayer(spy);
expect(spy.calls.length).toEqual(2);
expect(spy.calls[0].args).toEqual([t1]);
expect(spy.calls[1].args).toEqual([t2]);
});
it("calls the provided function with the provided context", function () {
var t1 = L.tileLayer("{z}{x}{y}").addTo(map);
map.eachLayer(spy, map);
expect(spy.calls[0].object).toEqual(map);
});
}); });
}); });

View File

@ -198,6 +198,15 @@ L.Map = L.Class.extend({
return this._layers.hasOwnProperty(id); return this._layers.hasOwnProperty(id);
}, },
eachLayer: function (method, context) {
for (var i in this._layers) {
if (this._layers.hasOwnProperty(i)) {
method.call(context, this._layers[i]);
}
}
return this;
},
invalidateSize: function (animate) { invalidateSize: function (animate) {
var oldSize = this.getSize(); var oldSize = this.getSize();