Skip to content

Commit

Permalink
Fix getVisibleParent when no parent is visible. Add tests for getVisi…
Browse files Browse the repository at this point in the history
…bleParent. Fixes #265
  • Loading branch information
danzel committed Oct 23, 2013
1 parent 1ac2d9e commit df054cf
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ markers.on('clusterclick', function (a) {

### Getting the visible parent of a marker
If you have a marker in your MarkerClusterGroup and you want to get the visible parent of it (Either itself or a cluster it is contained in that is currently visible on the map).
This will return null if the marker and its parent clusters are not visible currently (they are not near the visible viewpoint)
```
var visibleOne = markerClusterGroup.getVisibleParent(myMarker);
console.log(visibleOne.getLatLng());
Expand Down
1 change: 1 addition & 0 deletions spec/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
<script type="text/javascript" src="suites/eventsSpec.js"></script>
<script type="text/javascript" src="suites/getBoundsSpec.js"></script>
<script type="text/javascript" src="suites/getLayersSpec.js"></script>
<script type="text/javascript" src="suites/getVisibleParentSpec.js"></script>

<script type="text/javascript" src="suites/NonPointSpec.js"></script>

Expand Down
59 changes: 59 additions & 0 deletions spec/suites/getVisibleParentSpec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
describe('getVisibleParent', function () {
var map, div;
beforeEach(function () {
div = document.createElement('div');
div.style.width = '200px';
div.style.height = '200px';
document.body.appendChild(div);

map = L.map(div, { maxZoom: 18 });

map.fitBounds(new L.LatLngBounds([
[1, 1],
[2, 2]
]));
});
afterEach(function () {
document.body.removeChild(div);
});

it('gets the marker if the marker is visible', function () {
var group = new L.MarkerClusterGroup();
var marker = new L.Marker([1.5, 1.5]);

group.addLayer(marker);
map.addLayer(group);

var vp = group.getVisibleParent(marker);

expect(vp).to.be(marker);
});

it('gets the visible cluster if it is clustered', function () {
var group = new L.MarkerClusterGroup();
var marker = new L.Marker([1.5, 1.5]);
var marker2 = new L.Marker([1.5, 1.5]);

group.addLayers([marker, marker2]);
map.addLayer(group);

var vp = group.getVisibleParent(marker);

expect(vp).to.be.a(L.MarkerCluster);
expect(vp._icon).to.not.be(null);
expect(vp._icon).to.not.be(undefined);
});

it('returns null if the marker and parents are all not visible', function () {
var group = new L.MarkerClusterGroup();
var marker = new L.Marker([5.5, 1.5]);
var marker2 = new L.Marker([5.5, 1.5]);

group.addLayers([marker, marker2]);
map.addLayer(group);

var vp = group.getVisibleParent(marker);

expect(vp).to.be(null);
});
});
4 changes: 2 additions & 2 deletions src/MarkerClusterGroup.js
Original file line number Diff line number Diff line change
Expand Up @@ -467,10 +467,10 @@ L.MarkerClusterGroup = L.FeatureGroup.extend({

getVisibleParent: function (marker) {
var vMarker = marker;
while (vMarker !== null && !vMarker._icon) {
while (vMarker && !vMarker._icon) {
vMarker = vMarker.__parent;
}
return vMarker;
return vMarker || null;
},

//Remove the given object from the given array
Expand Down

0 comments on commit df054cf

Please sign in to comment.