diff --git a/lib/OpenLayers/Icon.js b/lib/OpenLayers/Icon.js index 2f55cde810..0cea2833f9 100644 --- a/lib/OpenLayers/Icon.js +++ b/lib/OpenLayers/Icon.js @@ -193,6 +193,22 @@ OpenLayers.Icon = OpenLayers.Class({ display: function(display) { this.imageDiv.style.display = (display) ? "" : "none"; }, + + + /** + * APIMethod: isDrawn + * + * Returns: + * {Boolean} Whether or not the icon is drawn. + */ + isDrawn: function() { + // nodeType 11 for ie, whose nodes *always* have a parentNode + // (of type document fragment) + var isDrawn = (this.imageDiv && this.imageDiv.parentNode && + (this.imageDiv.parentNode.nodeType != 11)); + + return isDrawn; + }, CLASS_NAME: "OpenLayers.Icon" }); diff --git a/lib/OpenLayers/Layer/Markers.js b/lib/OpenLayers/Layer/Markers.js index ede3024bc8..051be713a7 100644 --- a/lib/OpenLayers/Layer/Markers.js +++ b/lib/OpenLayers/Layer/Markers.js @@ -125,7 +125,6 @@ OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, { if ((marker.icon != null) && (marker.icon.imageDiv != null) && (marker.icon.imageDiv.parentNode == this.div) ) { this.div.removeChild(marker.icon.imageDiv); - marker.drawn = false; } } }, @@ -156,10 +155,9 @@ OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, { if (px == null) { marker.display(false); } else { - var markerImg = marker.draw(px); - if (!marker.drawn) { + if (!marker.isDrawn()) { + var markerImg = marker.draw(px); this.div.appendChild(markerImg); - marker.drawn = true; } } }, diff --git a/lib/OpenLayers/Marker.js b/lib/OpenLayers/Marker.js index 19c592db49..979003f606 100644 --- a/lib/OpenLayers/Marker.js +++ b/lib/OpenLayers/Marker.js @@ -129,6 +129,17 @@ OpenLayers.Marker = OpenLayers.Class({ this.lonlat = this.map.getLonLatFromLayerPx(px); }, + /** + * APIMethod: isDrawn + * + * Returns: + * {Boolean} Whether or not the marker is drawn. + */ + isDrawn: function() { + var isDrawn = (this.icon && this.icon.isDrawn()); + return isDrawn; + }, + /** * Method: onScreen * diff --git a/tests/Icon.html b/tests/Icon.html index 4de0757921..09f09b8117 100644 --- a/tests/Icon.html +++ b/tests/Icon.html @@ -33,6 +33,32 @@ icon.setOpacity(0.5); t.eq(parseFloat(icon.imageDiv.style.opacity), 0.5, "icon.setOpacity() works"); } + + function test_Icon_isDrawn(t) { + t.plan(4); + + var icon = {}; + + //no imageDiv + var drawn = OpenLayers.Icon.prototype.isDrawn.apply(icon, []); + t.ok(!drawn, "icon with no imageDiv not drawn"); + + //imageDiv no parentNode + icon.imageDiv = {}; + drawn = OpenLayers.Icon.prototype.isDrawn.apply(icon, []); + t.ok(!drawn, "icon with imageDiv with no parentNode not drawn"); + + //imageDiv with parent + icon.imageDiv.parentNode = {}; + drawn = OpenLayers.Icon.prototype.isDrawn.apply(icon, []); + t.ok(drawn, "icon with imageDiv with parentNode drawn"); + + //imageDiv with parent but nodetype 11 + icon.imageDiv.parentNode = {'nodeType': 11}; + drawn = OpenLayers.Icon.prototype.isDrawn.apply(icon, []); + t.ok(!drawn, "imageDiv with parent but nodetype 11 not drawn"); + } + diff --git a/tests/Layer/Markers.html b/tests/Layer/Markers.html index 72980be23d..f76ab3effa 100644 --- a/tests/Layer/Markers.html +++ b/tests/Layer/Markers.html @@ -46,6 +46,7 @@ t.ok(true, "removing marker when no markers present does not script error"); } + function test_Layer_Markers_destroy (t) { t.plan( 1 ); layer = new OpenLayers.Layer.Markers('Test Layer'); diff --git a/tests/Marker.html b/tests/Marker.html index 24ff9987f5..69b9a81935 100644 --- a/tests/Marker.html +++ b/tests/Marker.html @@ -134,6 +134,26 @@ t.eq(marker.lonlat.lat, map.getExtent().top, "on top edge of map"); map.destroy(); } + + function test_Marker_isDrawn(t) { + t.plan(3); + + var marker = {}; + + //no icon + var drawn = OpenLayers.Marker.prototype.isDrawn.apply(marker, []); + t.ok(!drawn, "marker with no icon not drawn"); + + //not drawn icon + marker.icon = { isDrawn: function() { return false; } }; + drawn = OpenLayers.Marker.prototype.isDrawn.apply(marker, []); + t.ok(!drawn, "marker with not drawn icon not drawn"); + + //drawn icon + marker.icon.isDrawn = function() { return true; }; + drawn = OpenLayers.Marker.prototype.isDrawn.apply(marker, []); + t.ok(drawn, "marker with drawn icon drawn"); + }