diff --git a/examples/georss-flickr.html b/examples/georss-flickr.html
index 7e8d3037e9..747f7b5445 100644
--- a/examples/georss-flickr.html
+++ b/examples/georss-flickr.html
@@ -31,28 +31,34 @@
// the thumbail attribute of the rss item
style = new OpenLayers.Style({externalGraphic: "${thumbnail}"});
- // make the thumbnails larger when we select them
- selectStyle = new OpenLayers.Style({pointRadius: 35});
-
// create a rule with a point symbolizer that will make the thumbnail
// larger if the title of the rss item conatins "powder"
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.LIKE,
+ var rule = new OpenLayers.Rule({
+ symbolizer: {pointRadius: 30},
+ filter: new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.LIKE,
property: "title",
- value: "*powder*",
- symbolizer: {"Point": {pointRadius: 30}}});
- rule.value2regex("*");
+ value: "*powder*"
+ })
+ });
+ rule.filter.value2regex("*");
// If the above rule does not apply, use a smaller pointRadius.
var elseRule = new OpenLayers.Rule({
- elseFilter: true,
- symbolizer: {"Point": {pointRadius: 20}}});
+ elseFilter: true,
+ symbolizer: {pointRadius: 20}
+ });
style.addRules([rule, elseRule]);
- markerLayer = new OpenLayers.Layer.Vector("", {styleMap: new OpenLayers.StyleMap({
- "default": style,
- "select": selectStyle})});
+ // Create a layer with a style map. Giving the style map keys
+ // for "default" and "select" rendering intent.
+ markerLayer = new OpenLayers.Layer.Vector("", {
+ styleMap: new OpenLayers.StyleMap({
+ "default": style,
+ "select": new OpenLayers.Style({pointRadius: 35})
+ })
+ });
map.addLayer(markerLayer);
// control that will show a popup when clicking on a thumbnail
diff --git a/lib/OpenLayers.js b/lib/OpenLayers.js
index 354f705bc3..24b0003971 100644
--- a/lib/OpenLayers.js
+++ b/lib/OpenLayers.js
@@ -183,9 +183,10 @@
"OpenLayers/Style.js",
"OpenLayers/StyleMap.js",
"OpenLayers/Rule.js",
- "OpenLayers/Rule/FeatureId.js",
- "OpenLayers/Rule/Logical.js",
- "OpenLayers/Rule/Comparison.js",
+ "OpenLayers/Filter.js",
+ "OpenLayers/Filter/FeatureId.js",
+ "OpenLayers/Filter/Logical.js",
+ "OpenLayers/Filter/Comparison.js",
"OpenLayers/Format.js",
"OpenLayers/Format/XML.js",
"OpenLayers/Format/GML.js",
diff --git a/lib/OpenLayers/Filter.js b/lib/OpenLayers/Filter.js
new file mode 100644
index 0000000000..777ab4fbd3
--- /dev/null
+++ b/lib/OpenLayers/Filter.js
@@ -0,0 +1,55 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt
+ * for the full text of the license. */
+
+
+/**
+ * @requires OpenLayers/Util.js
+ * @requires OpenLayers/Style.js
+ */
+
+/**
+ * Class: OpenLayers.Filter
+ * This class represents an OGC Filter.
+ */
+OpenLayers.Filter = OpenLayers.Class({
+
+ /**
+ * Constructor: OpenLayers.Filter
+ * This is an abstract class. Create an instance of a filter subclass.
+ *
+ * Parameters:
+ * options - {Object} Optional object whose properties will be set on the
+ * instance.
+ *
+ * Returns:
+ * {}
+ */
+ initialize: function(options) {
+ OpenLayers.Util.extend(this, options);
+ },
+
+ /**
+ * APIMethod: destroy
+ * Remove reference to anything added.
+ */
+ destroy: function() {
+ },
+
+ /**
+ * APIMethod: evaluate
+ * Evaluates this filter in a specific context. Should be implemented by
+ * subclasses.
+ *
+ * Parameters:
+ * context - {Object} Context to use in evaluating the filter.
+ *
+ * Returns:
+ * {Boolean} The filter applies.
+ */
+ evaluate: function(context) {
+ return true;
+ },
+
+ CLASS_NAME: "OpenLayers.Filter"
+});
\ No newline at end of file
diff --git a/lib/OpenLayers/Rule/Comparison.js b/lib/OpenLayers/Filter/Comparison.js
similarity index 68%
rename from lib/OpenLayers/Rule/Comparison.js
rename to lib/OpenLayers/Filter/Comparison.js
index 334fe3b4b3..0cf3e7a059 100644
--- a/lib/OpenLayers/Rule/Comparison.js
+++ b/lib/OpenLayers/Filter/Comparison.js
@@ -3,30 +3,29 @@
* full text of the license. */
/**
- * @requires OpenLayers/Rule.js
+ * @requires OpenLayers/Filter.js
*/
/**
- * Class: OpenLayers.Rule.Comparison
- * This class represents the comparison rules, as being used for rule-based
- * SLD styling
+ * Class: OpenLayers.Filter.Comparison
+ * This class represents a comparison filter.
*
* Inherits from
- * -
+ * -
*/
-OpenLayers.Rule.Comparison = OpenLayers.Class(OpenLayers.Rule, {
+OpenLayers.Filter.Comparison = OpenLayers.Class(OpenLayers.Filter, {
/**
* APIProperty: type
* {String} type: type of the comparison. This is one of
- * - OpenLayers.Rule.Comparison.EQUAL_TO = "==";
- * - OpenLayers.Rule.Comparison.NOT_EQUAL_TO = "!=";
- * - OpenLayers.Rule.Comparison.LESS_THAN = "<";
- * - OpenLayers.Rule.Comparison.GREATER_THAN = ">";
- * - OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
- * - OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
- * - OpenLayers.Rule.Comparison.BETWEEN = "..";
- * - OpenLayers.Rule.Comparison.LIKE = "~";
+ * - OpenLayers.Filter.Comparison.EQUAL_TO = "==";
+ * - OpenLayers.Filter.Comparison.NOT_EQUAL_TO = "!=";
+ * - OpenLayers.Filter.Comparison.LESS_THAN = "<";
+ * - OpenLayers.Filter.Comparison.GREATER_THAN = ">";
+ * - OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
+ * - OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
+ * - OpenLayers.Filter.Comparison.BETWEEN = "..";
+ * - OpenLayers.Filter.Comparison.LIKE = "~";
*/
type: null,
@@ -65,7 +64,7 @@ OpenLayers.Rule.Comparison = OpenLayers.Class(OpenLayers.Rule, {
upperBoundary: null,
/**
- * Constructor: OpenLayers.Rule.Comparison
+ * Constructor: OpenLayers.Filter.Comparison
* Creates a comparison rule.
*
* Parameters:
@@ -76,42 +75,39 @@ OpenLayers.Rule.Comparison = OpenLayers.Class(OpenLayers.Rule, {
* rule
*
* Returns:
- * {}
+ * {}
*/
initialize: function(options) {
- OpenLayers.Rule.prototype.initialize.apply(this, [options]);
+ OpenLayers.Filter.prototype.initialize.apply(this, [options]);
},
/**
* APIMethod: evaluate
- * evaluates this rule for a specific context
+ * Evaluates this filter in a specific context. Should be implemented by
+ * subclasses.
*
* Parameters:
- * context - {Object} context to apply the rule to.
+ * context - {Object} Context to use in evaluating the filter.
*
* Returns:
- * {boolean} true if the rule applies, false if it does not
+ * {Boolean} The filter applies.
*/
- evaluate: function(feature) {
- if (!OpenLayers.Rule.prototype.evaluate.apply(this, arguments)) {
- return false;
- }
- var context = this.getContext(feature);
+ evaluate: function(context) {
switch(this.type) {
- case OpenLayers.Rule.Comparison.EQUAL_TO:
- case OpenLayers.Rule.Comparison.LESS_THAN:
- case OpenLayers.Rule.Comparison.GREATER_THAN:
- case OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO:
- case OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO:
+ case OpenLayers.Filter.Comparison.EQUAL_TO:
+ case OpenLayers.Filter.Comparison.LESS_THAN:
+ case OpenLayers.Filter.Comparison.GREATER_THAN:
+ case OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO:
+ case OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO:
return this.binaryCompare(context, this.property, this.value);
- case OpenLayers.Rule.Comparison.BETWEEN:
+ case OpenLayers.Filter.Comparison.BETWEEN:
var result =
context[this.property] >= this.lowerBoundary;
result = result &&
context[this.property] <= this.upperBoundary;
return result;
- case OpenLayers.Rule.Comparison.LIKE:
+ case OpenLayers.Filter.Comparison.LIKE:
var regexp = new RegExp(this.value,
"gi");
return regexp.test(context[this.property]);
@@ -139,7 +135,7 @@ OpenLayers.Rule.Comparison = OpenLayers.Class(OpenLayers.Rule, {
value2regex: function(wildCard, singleChar, escapeChar) {
if (wildCard == ".") {
var msg = "'.' is an unsupported wildCard character for "+
- "OpenLayers.Rule.Comparison";
+ "OpenLayers.Filter.Comparison";
OpenLayers.Console.error(msg);
return null;
}
@@ -212,30 +208,30 @@ OpenLayers.Rule.Comparison = OpenLayers.Class(OpenLayers.Rule, {
*/
binaryCompare: function(context, property, value) {
switch (this.type) {
- case OpenLayers.Rule.Comparison.EQUAL_TO:
+ case OpenLayers.Filter.Comparison.EQUAL_TO:
return context[property] == value;
- case OpenLayers.Rule.Comparison.NOT_EQUAL_TO:
+ case OpenLayers.Filter.Comparison.NOT_EQUAL_TO:
return context[property] != value;
- case OpenLayers.Rule.Comparison.LESS_THAN:
+ case OpenLayers.Filter.Comparison.LESS_THAN:
return context[property] < value;
- case OpenLayers.Rule.Comparison.GREATER_THAN:
+ case OpenLayers.Filter.Comparison.GREATER_THAN:
return context[property] > value;
- case OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO:
+ case OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO:
return context[property] <= value;
- case OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO:
+ case OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO:
return context[property] >= value;
}
},
- CLASS_NAME: "OpenLayers.Rule.Comparison"
+ CLASS_NAME: "OpenLayers.Filter.Comparison"
});
-OpenLayers.Rule.Comparison.EQUAL_TO = "==";
-OpenLayers.Rule.Comparison.NOT_EQUAL_TO = "!=";
-OpenLayers.Rule.Comparison.LESS_THAN = "<";
-OpenLayers.Rule.Comparison.GREATER_THAN = ">";
-OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
-OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
-OpenLayers.Rule.Comparison.BETWEEN = "..";
-OpenLayers.Rule.Comparison.LIKE = "~";
+OpenLayers.Filter.Comparison.EQUAL_TO = "==";
+OpenLayers.Filter.Comparison.NOT_EQUAL_TO = "!=";
+OpenLayers.Filter.Comparison.LESS_THAN = "<";
+OpenLayers.Filter.Comparison.GREATER_THAN = ">";
+OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO = "<=";
+OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO = ">=";
+OpenLayers.Filter.Comparison.BETWEEN = "..";
+OpenLayers.Filter.Comparison.LIKE = "~";
diff --git a/lib/OpenLayers/Rule/FeatureId.js b/lib/OpenLayers/Filter/FeatureId.js
similarity index 71%
rename from lib/OpenLayers/Rule/FeatureId.js
rename to lib/OpenLayers/Filter/FeatureId.js
index 4cb00b0ece..ca458fb084 100644
--- a/lib/OpenLayers/Rule/FeatureId.js
+++ b/lib/OpenLayers/Filter/FeatureId.js
@@ -4,18 +4,18 @@
/**
- * @requires OpenLayers/Rule.js
+ * @requires OpenLayers/Filter.js
*/
/**
- * Class: OpenLayers.Rule.FeatureId
- * This class represents a ogc:FeatureId Rule, as being used for rule-based SLD
+ * Class: OpenLayers.Filter.FeatureId
+ * This class represents a ogc:FeatureId Filter, as being used for rule-based SLD
* styling
*
* Inherits from
- * -
+ * -
*/
-OpenLayers.Rule.FeatureId = OpenLayers.Class(OpenLayers.Rule, {
+OpenLayers.Filter.FeatureId = OpenLayers.Class(OpenLayers.Filter, {
/**
* APIProperty: fids
@@ -25,7 +25,7 @@ OpenLayers.Rule.FeatureId = OpenLayers.Class(OpenLayers.Rule, {
fids: null,
/**
- * Constructor: OpenLayers.Rule.FeatureId
+ * Constructor: OpenLayers.Filter.FeatureId
* Creates an ogc:FeatureId rule.
*
* Parameters:
@@ -33,11 +33,11 @@ OpenLayers.Rule.FeatureId = OpenLayers.Class(OpenLayers.Rule, {
* rule
*
* Returns:
- * {}
+ * {}
*/
initialize: function(options) {
this.fids = [];
- OpenLayers.Rule.prototype.initialize.apply(this, [options]);
+ OpenLayers.Filter.prototype.initialize.apply(this, [options]);
},
/**
@@ -53,9 +53,6 @@ OpenLayers.Rule.FeatureId = OpenLayers.Class(OpenLayers.Rule, {
* {boolean} true if the rule applies, false if it does not
*/
evaluate: function(feature) {
- if (!OpenLayers.Rule.prototype.evaluate.apply(this, arguments)) {
- return false;
- }
for (var i=0; i
+ */
+OpenLayers.Filter.Logical = OpenLayers.Class(OpenLayers.Filter, {
+
+ /**
+ * APIProperty: filters
+ * {Array()} Child filters for this filter.
+ */
+ filters: null,
+
+ /**
+ * APIProperty: type
+ * {String} type of logical operator. Available types are:
+ * - OpenLayers.Filter.Locical.AND = "&&";
+ * - OpenLayers.Filter.Logical.OR = "||";
+ * - OpenLayers.Filter.Logical.NOT = "!";
+ */
+ type: null,
+
+ /**
+ * Constructor: OpenLayers.Filter.Logical
+ * Creates a logical filter (And, Or, Not).
+ *
+ * Parameters:
+ * options - {Object} An optional object with properties to set on the
+ * filter.
+ *
+ * Returns:
+ * {}
+ */
+ initialize: function(options) {
+ this.filters = [];
+ OpenLayers.Filter.prototype.initialize.apply(this, [options]);
+ },
+
+ /**
+ * APIMethod: destroy
+ * Remove reference to child filters.
+ */
+ destroy: function() {
+ this.filters = null;
+ OpenLayers.Filter.prototype.destroy.apply(this);
+ },
+
+ /**
+ * APIMethod: evaluate
+ * Evaluates this filter in a specific context. Should be implemented by
+ * subclasses.
+ *
+ * Parameters:
+ * context - {Object} Context to use in evaluating the filter.
+ *
+ * Returns:
+ * {Boolean} The filter applies.
+ */
+ evaluate: function(context) {
+ switch(this.type) {
+ case OpenLayers.Filter.Logical.AND:
+ for (var i=0; i 0) {
- rule.rules.push(new OpenLayers.Rule.FeatureId({
- fids: filter.fids
- }));
- }
- if(filter.rules.length > 0) {
- rule.rules = rule.rules.concat(filter.rules);
+ this.readChildNodes(node, obj);
+ if(obj.fids.length > 0) {
+ rule.filter = new OpenLayers.Filter.FeatureId({
+ fids: obj.fids
+ });
+ } else if(obj.filters.length > 0) {
+ rule.filter = obj.filters[0];
}
},
- "FeatureId": function(node, filter) {
+ "FeatureId": function(node, obj) {
var fid = node.getAttribute("fid");
if(fid) {
- filter.fids.push(fid);
+ obj.fids.push(fid);
}
},
- "And": function(node, filter) {
- var rule = new OpenLayers.Rule.Logical({
- type: OpenLayers.Rule.Logical.AND
+ "And": function(node, obj) {
+ var filter = new OpenLayers.Filter.Logical({
+ type: OpenLayers.Filter.Logical.AND
});
- // since FeatureId rules may be nested here, make room for them
- rule.fids = [];
- this.readChildNodes(node, rule);
- if(rule.fids.length > 0) {
- rule.rules.push(new OpenLayers.Rule.FeatureId({
- fids: rule.fids
- }));
- }
- delete rule.fids;
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "Or": function(node, filter) {
- var rule = new OpenLayers.Rule.Logical({
- type: OpenLayers.Rule.Logical.OR
+ "Or": function(node, obj) {
+ var filter = new OpenLayers.Filter.Logical({
+ type: OpenLayers.Filter.Logical.OR
});
- // since FeatureId rules may be nested here, make room for them
- rule.fids = [];
- this.readChildNodes(node, rule);
- if(rule.fids.length > 0) {
- rule.rules.push(new OpenLayers.Rule.FeatureId({
- fids: rule.fids
- }));
- }
- delete rule.fids;
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "Not": function(node, filter) {
- var rule = new OpenLayers.Rule.Logical({
- type: OpenLayers.Rule.Logical.NOT
+ "Not": function(node, obj) {
+ var filter = new OpenLayers.Filter.Logical({
+ type: OpenLayers.Filter.Logical.NOT
});
- // since FeatureId rules may be nested here, make room for them
- rule.fids = [];
- this.readChildNodes(node, rule);
- if(rule.fids.length > 0) {
- rule.rules.push(new OpenLayers.Rule.FeatureId({
- fids: rule.fids
- }));
- }
- delete rule.fids;
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsEqualTo": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.EQUAL_TO
+ "PropertyIsEqualTo": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.EQUAL_TO
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsNotEqualTo": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.NOT_EQUAL_TO
+ "PropertyIsNotEqualTo": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.NOT_EQUAL_TO
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsLessThan": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.LESS_THAN
+ "PropertyIsLessThan": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.LESS_THAN
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsGreaterThan": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.GREATER_THAN
+ "PropertyIsGreaterThan": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.GREATER_THAN
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsLessThanOrEqualTo": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO
+ "PropertyIsLessThanOrEqualTo": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.LESS_THAN_OR_EQUAL_TO
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsGreaterThanOrEqualTo": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO
+ "PropertyIsGreaterThanOrEqualTo": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.GREATER_THAN_OR_EQUAL_TO
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsBetween": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.BETWEEN
+ "PropertyIsBetween": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.BETWEEN
});
- this.readChildNodes(node, rule);
- filter.rules.push(rule);
+ this.readChildNodes(node, filter);
+ obj.filters.push(filter);
},
- "PropertyIsLike": function(node, filter) {
- var rule = new OpenLayers.Rule.Comparison({
- type: OpenLayers.Rule.Comparison.LIKE
+ "PropertyIsLike": function(node, obj) {
+ var filter = new OpenLayers.Filter.Comparison({
+ type: OpenLayers.Filter.Comparison.LIKE
});
- this.readChildNodes(node, rule);
+ this.readChildNodes(node, filter);
var wildCard = node.getAttribute("wildCard");
var singleChar = node.getAttribute("singleChar");
var esc = node.getAttribute("escape");
- rule.value2regex(wildCard, singleChar, esc);
- filter.rules.push(rule);
+ filter.value2regex(wildCard, singleChar, esc);
+ obj.filters.push(filter);
},
"Literal": function(node, obj) {
obj.value = this.getChildValue(node);
},
- "PropertyName": function(node, rule) {
- rule.property = this.getChildValue(node);
+ "PropertyName": function(node, filter) {
+ filter.property = this.getChildValue(node);
},
- "LowerBoundary": function(node, rule) {
- rule.lowerBoundary = this.readOgcExpression(node);
+ "LowerBoundary": function(node, filter) {
+ filter.lowerBoundary = this.readOgcExpression(node);
},
- "UpperBoundary": function(node, rule) {
- rule.upperBoundary = this.readOgcExpression(node);
+ "UpperBoundary": function(node, filter) {
+ filter.upperBoundary = this.readOgcExpression(node);
}
}
},
@@ -682,8 +641,8 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
// add in optional filters
if(rule.elseFilter) {
this.writeNode(node, "ElseFilter");
- } else if(rule.CLASS_NAME != "OpenLayers.Rule") {
- this.writeNode(node, "ogc:Filter", rule);
+ } else if(rule.filter) {
+ this.writeNode(node, "ogc:Filter", rule.filter);
}
// add in scale limits
@@ -867,15 +826,15 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
}
},
"ogc": {
- "Filter": function(rule) {
+ "Filter": function(filter) {
var node = this.createElementNSPlus("ogc:Filter");
- var sub = rule.CLASS_NAME.split(".").pop();
+ var sub = filter.CLASS_NAME.split(".").pop();
if(sub == "FeatureId") {
- for(var i=0; i} Optional filter for the rule.
+ */
+ filter: null,
/**
* Property: elseFilter
@@ -136,6 +142,16 @@ OpenLayers.Rule = OpenLayers.Class({
applies = scale < OpenLayers.Style.createLiteral(
this.maxScaleDenominator, context);
}
+
+ // check if optional filter applies
+ if(applies && this.filter) {
+ // feature id filters get the feature, others get the context
+ if(this.filter.CLASS_NAME == "OpenLayers.Filter.FeatureId") {
+ applies = this.filter.evaluate(feature);
+ } else {
+ applies = this.filter.evaluate(context);
+ }
+ }
return applies;
},
diff --git a/lib/OpenLayers/Rule/Logical.js b/lib/OpenLayers/Rule/Logical.js
deleted file mode 100644
index 05f1d4d4ea..0000000000
--- a/lib/OpenLayers/Rule/Logical.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
- * license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
-
-
-/**
- * @requires OpenLayers/Rule.js
- */
-
-/**
- * Class: OpenLayers.Rule.Logical
- * This class represents ogc:And, ogc:Or and ogc:Not rules.
- *
- * Inherits from
- * -
- */
-OpenLayers.Rule.Logical = OpenLayers.Class(OpenLayers.Rule, {
-
- /**
- * APIProperty: children
- * {Array()} child rules for this rule
- */
- rules: null,
-
- /**
- * APIProperty: type
- * {String} type of logical operator. Available types are:
- * - OpenLayers.Rule.Locical.AND = "&&";
- * - OpenLayers.Rule.Logical.OR = "||";
- * - OpenLayers.Rule.Logical.NOT = "!";
- */
- type: null,
-
- /**
- * Constructor: OpenLayers.Rule.Logical
- * Creates a logical rule (And, Or, Not).
- *
- * Parameters:
- * options - {Object} An optional object with properties to set on the
- * rule
- *
- * Returns:
- * {}
- */
- initialize: function(options) {
- this.rules = [];
- OpenLayers.Rule.prototype.initialize.apply(this, [options]);
- },
-
- /**
- * APIMethod: destroy
- * nullify references to prevent circular references and memory leaks
- */
- destroy: function() {
- for (var i=0; i} feature to apply the rule to.
- *
- * Returns:
- * {boolean} true if the rule applies, false if it does not
- */
- evaluate: function(feature) {
- if (!OpenLayers.Rule.prototype.evaluate.apply(this, arguments)) {
- return false;
- }
- switch(this.type) {
- case OpenLayers.Rule.Logical.AND:
- for (var i=0; i
+
+
+
+
+
+
+