Use document fragments to write multiple nodes
For writer functions that need to generate multiple nodes, the createDocumentFragment method can be used.
This commit is contained in:
@@ -281,19 +281,6 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
return this.writers.ogc["Filter"].apply(this, [filter]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: writeFeatureIdNodes
|
||||
*
|
||||
* Parameters:
|
||||
* filter - {<OpenLayers.Filter.FeatureId}
|
||||
* node - {DOMElement}
|
||||
*/
|
||||
writeFeatureIdNodes: function(filter, node) {
|
||||
for (var i=0, ii=filter.fids.length; i<ii; ++i) {
|
||||
this.writeNode("FeatureId", filter.fids[i], node);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Property: writers
|
||||
* As a compliment to the readers property, this structure contains public
|
||||
@@ -304,10 +291,13 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"ogc": {
|
||||
"Filter": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:Filter");
|
||||
if (filter.type === "FID") {
|
||||
OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, filter, node);
|
||||
} else {
|
||||
this.writeNode(this.getFilterType(filter), filter, node);
|
||||
this.writeNode(this.getFilterType(filter), filter, node);
|
||||
return node;
|
||||
},
|
||||
"_featureIds": function(filter) {
|
||||
var node = this.createDocumentFragment();
|
||||
for (var i=0, ii=filter.fids.length; i<ii; ++i) {
|
||||
this.writeNode("ogc:FeatureId", filter.fids[i], node);
|
||||
}
|
||||
return node;
|
||||
},
|
||||
@@ -321,14 +311,10 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
var childFilter;
|
||||
for (var i=0, ii=filter.filters.length; i<ii; ++i) {
|
||||
childFilter = filter.filters[i];
|
||||
if (childFilter.type === "FID") {
|
||||
OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, childFilter, node);
|
||||
} else {
|
||||
this.writeNode(
|
||||
this.getFilterType(childFilter), childFilter, node
|
||||
);
|
||||
}
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"Or": function(filter) {
|
||||
@@ -336,26 +322,18 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
var childFilter;
|
||||
for (var i=0, ii=filter.filters.length; i<ii; ++i) {
|
||||
childFilter = filter.filters[i];
|
||||
if (childFilter.type === "FID") {
|
||||
OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, childFilter, node);
|
||||
} else {
|
||||
this.writeNode(
|
||||
this.getFilterType(childFilter), childFilter, node
|
||||
);
|
||||
}
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"Not": function(filter) {
|
||||
var node = this.createElementNSPlus("ogc:Not");
|
||||
var childFilter = filter.filters[0];
|
||||
if (childFilter.type === "FID") {
|
||||
OpenLayers.Format.Filter.v1.prototype.writeFeatureIdNodes.call(this, childFilter, node);
|
||||
} else {
|
||||
this.writeNode(
|
||||
this.getFilterType(childFilter), childFilter, node
|
||||
);
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"PropertyIsLessThan": function(filter) {
|
||||
@@ -498,7 +476,7 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"WITHIN": "WITHIN",
|
||||
"CONTAINS": "CONTAINS",
|
||||
"INTERSECTS": "INTERSECTS",
|
||||
"FID": "FeatureId"
|
||||
"FID": "_featureIds"
|
||||
},
|
||||
|
||||
CLASS_NAME: "OpenLayers.Format.Filter.v1"
|
||||
|
||||
@@ -230,6 +230,26 @@ OpenLayers.Format.XML = OpenLayers.Class(OpenLayers.Format, {
|
||||
return element;
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: createDocumentFragment
|
||||
* Create a document fragment node that can be appended to another node
|
||||
* created by createElementNS. This will call
|
||||
* document.createDocumentFragment outside of IE. In IE, the ActiveX
|
||||
* object's createDocumentFragment method is used.
|
||||
*
|
||||
* Returns:
|
||||
* {Element} A document fragment.
|
||||
*/
|
||||
createDocumentFragment: function() {
|
||||
var element;
|
||||
if (this.xmldom) {
|
||||
element = this.xmldom.createDocumentFragment();
|
||||
} else {
|
||||
element = document.createDocumentFragment();
|
||||
}
|
||||
return element;
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: createTextNode
|
||||
* Create a text node. This node can be appended to another node with
|
||||
|
||||
Reference in New Issue
Block a user