Make sure that the background node is removed when redrawing with a different symbolizer. Thanks ahtih for this excellent debut patch. p=ahtih, r=me (closes #2891)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10851 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -509,10 +509,13 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
|
|||||||
};
|
};
|
||||||
|
|
||||||
rendered = false;
|
rendered = false;
|
||||||
|
var removeBackground = false;
|
||||||
if (style.display != "none") {
|
if (style.display != "none") {
|
||||||
if (style.backgroundGraphic) {
|
if (style.backgroundGraphic) {
|
||||||
this.redrawBackgroundNode(geometry.id, geometry, style,
|
this.redrawBackgroundNode(geometry.id, geometry, style,
|
||||||
featureId);
|
featureId);
|
||||||
|
} else {
|
||||||
|
removeBackground = true;
|
||||||
}
|
}
|
||||||
rendered = this.redrawNode(geometry.id, geometry, style,
|
rendered = this.redrawNode(geometry.id, geometry, style,
|
||||||
featureId);
|
featureId);
|
||||||
@@ -521,12 +524,18 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, {
|
|||||||
var node = document.getElementById(geometry.id);
|
var node = document.getElementById(geometry.id);
|
||||||
if (node) {
|
if (node) {
|
||||||
if (node._style.backgroundGraphic) {
|
if (node._style.backgroundGraphic) {
|
||||||
node.parentNode.removeChild(document.getElementById(
|
removeBackground = true;
|
||||||
geometry.id + this.BACKGROUND_ID_SUFFIX));
|
|
||||||
}
|
}
|
||||||
node.parentNode.removeChild(node);
|
node.parentNode.removeChild(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (removeBackground) {
|
||||||
|
var node = document.getElementById(
|
||||||
|
geometry.id + this.BACKGROUND_ID_SUFFIX);
|
||||||
|
if (node) {
|
||||||
|
node.parentNode.removeChild(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
return rendered;
|
return rendered;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -561,6 +561,61 @@
|
|||||||
tearDown();
|
tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Elements_drawGeometry_3(t) {
|
||||||
|
t.plan(2);
|
||||||
|
|
||||||
|
setUp();
|
||||||
|
|
||||||
|
var r = create_renderer();
|
||||||
|
|
||||||
|
var element = document.createElement("div");
|
||||||
|
r.vectorRoot = element;
|
||||||
|
|
||||||
|
r.nodeFactory = function(id, type) {
|
||||||
|
return document.createElement("div");
|
||||||
|
};
|
||||||
|
var g_Node = null;
|
||||||
|
var b_Node = null;
|
||||||
|
r.drawGeometryNode = function(node, geometry, style) {
|
||||||
|
g_Node = node;
|
||||||
|
return {node: node, complete: true};
|
||||||
|
};
|
||||||
|
r.redrawBackgroundNode = function(id, geometry, style, featureId) {
|
||||||
|
b_Node = r.nodeFactory();
|
||||||
|
b_Node.id = "foo_background";
|
||||||
|
element.appendChild(b_Node);
|
||||||
|
};
|
||||||
|
|
||||||
|
r.getNodeType = function(geometry, style) {
|
||||||
|
return "div";
|
||||||
|
};
|
||||||
|
var geometry = {
|
||||||
|
id: 'foo',
|
||||||
|
CLASS_NAME: 'bar',
|
||||||
|
getBounds: function() {return {bottom: 0}}
|
||||||
|
};
|
||||||
|
var style = {'backgroundGraphic': 'foo'};
|
||||||
|
var featureId = 'dude';
|
||||||
|
r.drawGeometry(geometry, style, featureId);
|
||||||
|
t.ok(b_Node.parentNode == element, "redrawBackgroundNode appended background node");
|
||||||
|
|
||||||
|
var returnNode = function(id) {
|
||||||
|
return id == "foo_background" ? b_Node : g_Node;
|
||||||
|
}
|
||||||
|
|
||||||
|
var _getElement = document.getElementById;
|
||||||
|
document.getElementById = returnNode;
|
||||||
|
OpenLayers.Util.getElement = returnNode;
|
||||||
|
|
||||||
|
style = {};
|
||||||
|
r.drawGeometry(geometry, style, featureId);
|
||||||
|
t.ok(b_Node.parentNode != element, "background node correctly removed")
|
||||||
|
|
||||||
|
document.getElementById = _getElement;
|
||||||
|
|
||||||
|
tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user