Merge pull request #733 from tschaub/filter-tweaks
Allow writer functions to use document fragments when they need to append more than a single child to the parent.
This commit is contained in:
@@ -279,9 +279,8 @@ OpenLayers.Format.Filter.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
* {DOMElement} Updated node element.
|
||||
*/
|
||||
writeOgcExpression: function(value, node) {
|
||||
if(value instanceof OpenLayers.Filter.Function){
|
||||
var child = this.writeNode("Function", value, node);
|
||||
node.appendChild(child);
|
||||
if (value instanceof OpenLayers.Filter.Function){
|
||||
this.writeNode("Function", value, node);
|
||||
} else {
|
||||
this.writeNode("Literal", value, node);
|
||||
}
|
||||
@@ -301,19 +300,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
|
||||
@@ -324,10 +310,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;
|
||||
},
|
||||
@@ -341,14 +330,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) {
|
||||
@@ -356,26 +341,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) {
|
||||
@@ -519,7 +496,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