diff --git a/examples/georss-flickr.html b/examples/georss-flickr.html
index c9ba0dbc25..7e8d3037e9 100644
--- a/examples/georss-flickr.html
+++ b/examples/georss-flickr.html
@@ -31,6 +31,9 @@
// 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({
@@ -47,12 +50,13 @@
style.addRules([rule, elseRule]);
- markerLayer = new OpenLayers.Layer.Vector("", {style: style});
+ markerLayer = new OpenLayers.Layer.Vector("", {styleMap: new OpenLayers.StyleMap({
+ "default": style,
+ "select": selectStyle})});
map.addLayer(markerLayer);
// control that will show a popup when clicking on a thumbnail
var popupControl = new OpenLayers.Control.SelectFeature(markerLayer, {
- selectStyle: style,
onSelect: function(feature) {
var pos = feature.geometry;
if (popup) {
diff --git a/examples/openmnnd.html b/examples/openmnnd.html
index fc560d1741..c189e75074 100644
--- a/examples/openmnnd.html
+++ b/examples/openmnnd.html
@@ -28,7 +28,7 @@
map.addLayer(wms);
- wfs = new OpenLayers.Layer.WFS("Minnesota Streams (WFS)", wfs_url, {'typename':'streams'}, {ratio:1.25, minZoomLevel:4});
+ wfs = new OpenLayers.Layer.WFS("Minnesota Streams (WFS)", wfs_url, {'typename':'streams'}, {ratio:1.25, minZoomLevel:4, style: OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default'])});
// preFeatureInsert can be used to set style before the feature is drawn
wfs.preFeatureInsert= function(feature) { feature.style.strokeWidth="3"; feature.style.strokeColor="blue";
@@ -57,7 +57,7 @@
map.addLayer(pwfs);
rstyle = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
- OpenLayers.Util.extend(rstyle, {'strokeColor': 'white', strokeWIdth: "4"});
+ OpenLayers.Util.extend(rstyle, {'strokeColor': 'white', strokeWidth: "4"});
rwfs = new OpenLayers.Layer.WFS("Minnesota Roads (WFS)", wfs_url, {'typename':'roads'},
{ratio:1.25, minZoomLevel:7, extractAttributes: true, style:rstyle});
diff --git a/examples/osm-layer.html b/examples/osm-layer.html
index fa640c607d..77499350fa 100644
--- a/examples/osm-layer.html
+++ b/examples/osm-layer.html
@@ -47,7 +47,7 @@
gml.loadGML();
}
function style_osm_feature(feature) {
- feature.style.fill = "black";
+ feature.style = OpenLayers.Util.extend({'fill':'black'}, OpenLayers.Feature.Vector.style['default']);
if (feature.attributes.highway == "motorway") {
feature.style.strokeColor = "blue";
feature.style.strokeWidth = 5;
diff --git a/examples/sld.html b/examples/sld.html
index 24f6e2b6ce..0a23159f2d 100644
--- a/examples/sld.html
+++ b/examples/sld.html
@@ -32,41 +32,33 @@
styles = sld[1];
- waterStyle = styles["WaterBodies"];
+ // for the hover style, we do not want to use the SLD default as
+ // base style
+ styles["WaterBodies"]["Hover Styler"].defaultStyle = OpenLayers.Util.extend({},
+ OpenLayers.Feature.Vector.style["select"]);
gmlLayers = [
// use the sld UserStyle named "Default Styler"
new OpenLayers.Layer.GML("StateBoundaries",
"tasmania/TasmaniaStateBoundaries.xml", {
- style: waterStyle["default"]}),
+ styleMap: new OpenLayers.StyleMap(styles["WaterBodies"])}),
new OpenLayers.Layer.GML("Roads",
"tasmania/TasmaniaRoads.xml", {
- style: waterStyle["default"]}),
+ styleMap: new OpenLayers.StyleMap(styles["Roads"])}),
new OpenLayers.Layer.GML("WaterBodies",
"tasmania/TasmaniaWaterBodies.xml", {
- style: waterStyle["default"]}),
+ styleMap: new OpenLayers.StyleMap(styles["WaterBodies"])}),
new OpenLayers.Layer.GML("Cities",
"tasmania/TasmaniaCities.xml", {
- style: waterStyle["default"]})];
+ styleMap: new OpenLayers.StyleMap(styles["Cities"])})];
- // add the first layer with the style passed to the constructor
- map.addLayer(gmlLayers[0]);
- // add the other layers after setting the style using the
- // setStyle() method, which will pick the correct default style
- // from the styles hash we got back from
- // OpenLayers.Format.SLD.read()
- for (var i=1; i
diff --git a/examples/wfs-scribble.html b/examples/wfs-scribble.html
index 479a5db714..9e1bdb57df 100644
--- a/examples/wfs-scribble.html
+++ b/examples/wfs-scribble.html
@@ -35,7 +35,7 @@
df = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Path, {handlerOptions: {'freehand': false}, 'displayClass': 'olControlDrawFeaturePath'});
df.featureAdded = function(feature) {
feature.state = OpenLayers.State.INSERT;
- feature.style['strokeColor'] = "#ff0000";
+ feature.style = OpenLayers.Util.extend({'strokeColor': '#ff0000'}, OpenLayers.Feature.Vector.style['default']);
feature.layer.drawFeature(feature);
}
p.addControls([ new OpenLayers.Control.Navigation(), df ]);
diff --git a/lib/OpenLayers.js b/lib/OpenLayers.js
index 6ff0068a2b..ebc8f120bb 100644
--- a/lib/OpenLayers.js
+++ b/lib/OpenLayers.js
@@ -177,6 +177,7 @@
"OpenLayers/Layer/PointTrack.js",
"OpenLayers/Layer/GML.js",
"OpenLayers/Style.js",
+ "OpenLayers/StyleMap.js",
"OpenLayers/Rule.js",
"OpenLayers/Rule/FeatureId.js",
"OpenLayers/Rule/Logical.js",
diff --git a/lib/OpenLayers/Control/ModifyFeature.js b/lib/OpenLayers/Control/ModifyFeature.js
index 9ee2dcb1fc..29f206380a 100644
--- a/lib/OpenLayers/Control/ModifyFeature.js
+++ b/lib/OpenLayers/Control/ModifyFeature.js
@@ -167,7 +167,8 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
this.layer = layer;
this.vertices = [];
this.virtualVertices = [];
- this.styleVirtual = OpenLayers.Util.extend({}, this.layer.style);
+ this.styleVirtual = OpenLayers.Util.extend({},
+ this.layer.style || this.layer.styleMap.createSymbolizer());
this.styleVirtual.fillOpacity = 0.3;
this.styleVirtual.strokeOpacity = 0.3;
this.deleteCodes = [46, 100];
@@ -409,7 +410,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
this.layer.destroyFeatures(this.virtualVertices);
this.virtualVertices = [];
}
- this.layer.drawFeature(this.feature, this.selectControl.selectStyle);
+ this.layer.drawFeature(this.feature, this.selectControl.renderIntent);
}
// keep the vertex on top so it gets the mouseout after dragging
// this should be removed in favor of an option to draw under or
@@ -496,7 +497,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
// remove the vertex
vertex.geometry.parent.removeComponent(vertex.geometry);
this.layer.drawFeature(this.feature,
- this.selectControl.selectStyle);
+ this.selectControl.renderIntent);
this.resetVertices();
this.onModification(this.feature);
}
diff --git a/lib/OpenLayers/Control/SelectFeature.js b/lib/OpenLayers/Control/SelectFeature.js
index 5e2292bf2b..039ef7e8c9 100644
--- a/lib/OpenLayers/Control/SelectFeature.js
+++ b/lib/OpenLayers/Control/SelectFeature.js
@@ -95,7 +95,14 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
* APIProperty: selectStyle
* {Object} Hash of styles
*/
- selectStyle: OpenLayers.Feature.Vector.style['select'],
+ selectStyle: null,
+
+ /**
+ * Property: renderIntent
+ * {String} key used to retrieve the select style from the layer's
+ * style map.
+ */
+ renderIntent: "select",
/**
* Property: handler
@@ -247,25 +254,11 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
* feature - {}
*/
select: function(feature) {
- // Store feature style for restoration later
- if(feature.originalStyle != feature.style) {
- feature.originalStyle = feature.style;
- }
this.layer.selectedFeatures.push(feature);
- var selectStyle = this.selectStyle;
-
- if (feature.style.CLASS_NAME == "OpenLayers.Style") {
- feature.style = feature.style.createStyle(feature);
- } else {
- feature.style = OpenLayers.Util.extend({}, feature.style);
- }
- if (selectStyle.CLASS_NAME == "OpenLayers.Style") {
- selectStyle = selectStyle.createStyle(feature);
- }
- OpenLayers.Util.extend(feature.style, selectStyle);
-
- this.layer.drawFeature(feature);
+ var selectStyle = this.selectStyle || this.renderIntent;
+
+ this.layer.drawFeature(feature, selectStyle);
this.layer.events.triggerEvent("featureselected", {feature: feature});
this.onSelect(feature);
},
@@ -280,10 +273,7 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
*/
unselect: function(feature) {
// Store feature style for restoration later
- if(feature.originalStyle != null) {
- feature.style = feature.originalStyle;
- }
- this.layer.drawFeature(feature);
+ this.layer.drawFeature(feature, "default");
OpenLayers.Util.removeItem(this.layer.selectedFeatures, feature);
this.layer.events.triggerEvent("featureunselected", {feature: feature});
this.onUnselect(feature);
diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js
index 094cbe4eae..998d312e0e 100644
--- a/lib/OpenLayers/Feature/Vector.js
+++ b/lib/OpenLayers/Feature/Vector.js
@@ -59,6 +59,12 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, {
*/
style: null,
+ /**
+ * Property: renderIntent
+ * {String} rendering intent currently being used
+ */
+ renderIntent: "default",
+
/**
* Constructor: OpenLayers.Feature.Vector
* Create a vector feature.
diff --git a/lib/OpenLayers/Format/SLD.js b/lib/OpenLayers/Format/SLD.js
index 92980ac6f5..49223ee90e 100644
--- a/lib/OpenLayers/Format/SLD.js
+++ b/lib/OpenLayers/Format/SLD.js
@@ -195,7 +195,6 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, {
*
* Parameters:
* xmlNode - {}
- * name - {String} The name of the returned rule.
*
* Returns:
* {Object} Hash of rule properties
@@ -567,9 +566,6 @@ OpenLayers.Format.SLD = OpenLayers.Class(OpenLayers.Format.XML, {
* xmlNodeList - {Array()} list to search
* attributeName - {String} name of the attribute to match
* attributeValue - {String} optional value of the attribute
- *
- * Returns:
- * {DOMElement}
*/
getNodeWithAttribute: function(xmlNodeList, attributeName, attributeValue) {
for (var i=0; i}
+ */
+ styleMap: null,
/**
* Property: renderers
@@ -147,9 +153,6 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
OpenLayers.Layer.prototype.EVENT_TYPES
);
- var defaultStyle = OpenLayers.Feature.Vector.style['default'];
- this.style = OpenLayers.Util.extend({}, defaultStyle);
-
OpenLayers.Layer.prototype.initialize.apply(this, arguments);
// allow user-set renderer, otherwise assign one
@@ -163,6 +166,10 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
this.displayError();
}
+ if (!this.styleMap) {
+ this.styleMap = new OpenLayers.StyleMap();
+ }
+
this.features = [];
this.selectedFeatures = [];
},
@@ -312,7 +319,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
//give feature reference to its layer
feature.layer = this;
- if (!feature.style) {
+ if (!feature.style && this.style) {
feature.style = OpenLayers.Util.extend({}, this.style);
}
@@ -403,21 +410,17 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
*
* Parameters:
* feature - {}
- * style - {Object}
+ * style - {Object} Symbolizer hash or {String} renderIntent
*/
drawFeature: function(feature, style) {
- if(style == null) {
- if(feature.style) {
- style = feature.style;
- } else {
- style = this.style;
+ if (typeof style != "object") {
+ var renderIntent = typeof style == "string" ?
+ style : feature.renderIntent;
+ style = feature.style || this.style;
+ if (!style) {
+ style = this.styleMap.createSymbolizer(feature, renderIntent);
}
}
-
- if (style && style.CLASS_NAME &&
- style.CLASS_NAME == "OpenLayers.Style") {
- style = style.createStyle(feature);
- }
this.renderer.drawFeature(feature, style);
},
diff --git a/lib/OpenLayers/Style.js b/lib/OpenLayers/Style.js
index 941c6c2bdd..61294d3920 100644
--- a/lib/OpenLayers/Style.js
+++ b/lib/OpenLayers/Style.js
@@ -43,8 +43,8 @@ OpenLayers.Style = OpenLayers.Class({
/**
* Property: defaultStyle
* {Object} hash of style properties to use as default for merging
- * rule-based style symbolizers onto. If no rules are defined, createStyle
- * will return this style.
+ * rule-based style symbolizers onto. If no rules are defined,
+ * createSymbolizer will return this style.
*/
defaultStyle: null,
@@ -96,18 +96,17 @@ OpenLayers.Style = OpenLayers.Class({
},
/**
- * APIMethod: createStyle
+ * Method: createSymbolizer
* creates a style by applying all feature-dependent rules to the base
* style.
*
* Parameters:
* feature - {} feature to evaluate rules for
- * baseStyle - {Object} hash of styles feature styles to extend
*
* Returns:
- * {} hash of feature styles
+ * {Object} symbolizer hash
*/
- createStyle: function(feature) {
+ createSymbolizer: function(feature) {
var style = OpenLayers.Util.extend({}, this.defaultStyle);
var rules = this.rules;
diff --git a/lib/OpenLayers/StyleMap.js b/lib/OpenLayers/StyleMap.js
new file mode 100644
index 0000000000..ec4ddbbb13
--- /dev/null
+++ b/lib/OpenLayers/StyleMap.js
@@ -0,0 +1,115 @@
+/* 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/Style.js
+ * @requires OpenLayers/Feature/Vector.js
+ */
+
+/**
+ * Class: OpenLayers.StyleMap
+ */
+OpenLayers.StyleMap = OpenLayers.Class({
+
+ /**
+ * Property: styles
+ * Hash of {}, keyed by names of well known
+ * rendering intents (e.g. "default", "temporary", "select").
+ */
+ styles: null,
+
+ /**
+ * Property: extendDefault
+ * {Boolean} if true, every render intent will extend the symbolizers
+ * specified for the "default" intent. Otherwise, every rendering intent
+ * is treated as a completely independent symbolizer.
+ */
+ extendDefault: true,
+
+ /**
+ * Constructor: OpenLayers.StyleMap
+ *
+ * Parameters:
+ * style - {Object} Optional. Either a style hash, or a style object, or
+ * a hash of style objects (style hashes) keyed by rendering
+ * intent
+ * options - {Object} optional hash of additional options for this
+ * instance
+ */
+ initialize: function (style, options) {
+ this.styles = {
+ "default": new OpenLayers.Style(
+ OpenLayers.Feature.Vector.style["default"]),
+ "select": new OpenLayers.Style(
+ OpenLayers.Feature.Vector.style["select"]),
+ "temporary": new OpenLayers.Style(
+ OpenLayers.Feature.Vector.style["temporary"])
+ };
+
+ // take whatever the user passed as style parameter and convert it
+ // into parts of stylemap.
+ if(style instanceof OpenLayers.Style) {
+ // user passed a style object
+ this.styles["default"] = style;
+ } else if(typeof style == "object") {
+ for(var key in style) {
+ if(style[key] instanceof OpenLayers.Style) {
+ // user passed a hash of style objects
+ this.styles[key] = style[key];
+ } else if(typeof style[key] == "object") {
+ // user passsed a hash of style hashes
+ this.styles[key] = new OpenLayers.Style(style[key]);
+ } else {
+ // user passed a style hash (i.e. symbolizer)
+ this.styles["default"] = new OpenLayers.Style(style);
+ break;
+ }
+ }
+ }
+ OpenLayers.Util.extend(this, options);
+ },
+
+ /**
+ * Method: destroy
+ */
+ destroy: function() {
+ for(var key in this.styles) {
+ this.styles[key].destroy();
+ }
+ this.styles = null;
+ },
+
+ /**
+ * Method: createSymbolizer
+ * Creates the symbolizer for a feature for a render intent.
+ *
+ * Parameters:
+ * feature - {} The feature to evaluate the rules
+ * of the intended style against.
+ * intent - {String} The intent determines the symbolizer that will be
+ * used to draw the feature. Well known intents are "default"
+ * (for just drawing the features), "select" (for selected
+ * features) and "temporary" (for drawing features).
+ *
+ * Returns:
+ * {Object} symbolizer hash
+ */
+ createSymbolizer: function(feature, intent) {
+ if(!feature) {
+ feature = new OpenLayers.Feature.Vector();
+ }
+ if(!this.styles[intent]) {
+ intent = "default";
+ }
+ feature.renderIntent = intent;
+ var defaultSymbolizer = {};
+ if(this.extendDefault && intent != "default") {
+ defaultSymbolizer = this.styles["default"].createSymbolizer(feature);
+ }
+ return OpenLayers.Util.extend(defaultSymbolizer,
+ this.styles[intent].createSymbolizer(feature));
+ },
+
+ CLASS_NAME: "OpenLayers.StyleMap"
+});
diff --git a/tests/Control/test_ModifyFeature.html b/tests/Control/test_ModifyFeature.html
index 855011d4e1..268ce26424 100644
--- a/tests/Control/test_ModifyFeature.html
+++ b/tests/Control/test_ModifyFeature.html
@@ -6,6 +6,7 @@
function test_ModifyFeature_constructor(t) {
t.plan(3);
var layer = {
+ styleMap: {createSymbolizer: function(){}},
events: {
on: function() {}
}
@@ -77,7 +78,7 @@
*/
var control = new OpenLayers.Control.ModifyFeature({
- style: null,
+ styleMap: {createSymbolizer: function(){}},
events: {
on: function() {}
}
diff --git a/tests/Control/test_SelectFeature.html b/tests/Control/test_SelectFeature.html
index 6ba8573c1f..f6cf6e2cd0 100644
--- a/tests/Control/test_SelectFeature.html
+++ b/tests/Control/test_SelectFeature.html
@@ -33,44 +33,20 @@
}
function test_Control_SelectFeature_select(t) {
- t.plan(7);
+ t.plan(2);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector();
map.addLayer(layer);
var control = new OpenLayers.Control.SelectFeature(layer);
var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0));
layer.addFeatures(feature);
- layer.drawFeature = function() { }
+ layer.drawFeature = function(feature, style) {
+ layer.styleMap.createSymbolizer(feature, style);
+ }
control.select(feature);
- t.eq(feature.style.strokeColor, OpenLayers.Feature.Vector.style['select'].strokeColor, "feature style is set to select style");
+ t.eq(feature.renderIntent, "select", "render intent is set to select");
control.unselect(feature);
- t.eq(feature.style.strokeColor, OpenLayers.Feature.Vector.style['default'].strokeColor, "feature style is set back to old style");
-
- // Don't ever overwrite my feature style with undefined properties from the selectStyle
- feature.style = {externalGraphic: "foo.png", pointRadius: 39};
- control.selectStyle.pointRadius = undefined;
- control.select(feature);
- t.eq(feature.style.pointRadius, 39, "undefined style property inherited from original feature style");
- control.unselect(feature);
-
- // Ok, that one went well. But I'm sure you cannot handle OL.Style.
- feature.style = new OpenLayers.Style({externalGraphic: "foo.png", pointRadius: 39});
- control.select(feature);
- t.eq(feature.style.pointRadius, 39, "undefined style property inherited from original feature style object");
- control.unselect(feature);
-
- // Wow, but using OL.Style as selectStyle will break you.
- control.selectStyle = new OpenLayers.Style({strokeColor: "green"});
- control.select(feature);
- t.eq(feature.style.strokeColor, "green", "style correct if both feature.style and selectStyle are OL.Style");
- control.unselect(feature);
-
- // Not bad, not bad. And what if I set feature.style back to a style hash?
- feature.style = layer.style;
- control.select(feature);
- t.eq(feature.style.strokeColor, "green", "style still correct with only selectStyle being OL.Style");
- control.unselect(feature);
- t.eq(feature.style.strokeColor, OpenLayers.Feature.Vector.style["default"].strokeColor, "style set back to original correctly");
+ t.eq(feature.renderIntent, "default", "render intent is set back to default");
}
function test_Control_SelectFeature_clickFeature(t) {
diff --git a/tests/Layer/test_Vector.html b/tests/Layer/test_Vector.html
index 45d7834bcb..b2c6a1697c 100644
--- a/tests/Layer/test_Vector.html
+++ b/tests/Layer/test_Vector.html
@@ -69,18 +69,6 @@
"OpenLayers.Layer.Vector.removeFeatures(layer.features) removes all feature from the features array");
}
- function test_Layer_Vector_addStyle (t) {
- t.plan(2);
- var layer = new OpenLayers.Layer.Vector(name);
- var map = new OpenLayers.Map('map');
- map.addLayer(layer);
- var g = new OpenLayers.Geometry.Point(0, 0);
- var f = new OpenLayers.Feature.Vector(g);
- t.eq( f.style, null, "Feature style is null by default.");
- layer.addFeatures(f);
- t.ok( f.style != null, "Feature style is set by layer.");
- }
-
function test_Layer_Vector_drawFeature(t) {
t.plan(4);
var layer = new OpenLayers.Layer.Vector("Test Layer");
@@ -106,22 +94,22 @@
t.ok(geometry.equals(f.geometry),
"calls layer.renderer.drawFeature() with feature.geometry");
- feature.style = 'exists';
+ feature.style = {foo: "bar"};
layer.drawFeature(feature);
t.eq(feature.style, s,
"calls layer.renderer.drawFeature() with feature.style");
feature.style = null;
- layer.style = 'exists';
+ layer.style = {foo: "bar"};
layer.drawFeature(feature);
- t.eq(layer.style, s,
+ t.eq(layer.style.foo, s.foo,
"given null feature style, uses layer style");
- feature.style = 'exists';
- layer.style = 'exists';
- var customStyle = 'custom';
+ feature.style = {foo1: "bar1"};
+ layer.style = {foo2: "bar2"};
+ var customStyle = {foo: "bar"};
layer.drawFeature(feature, customStyle);
- t.eq(customStyle, s,
+ t.eq(customStyle.foo, s.foo,
"given a custom style, renders with that");
}
diff --git a/tests/list-tests.html b/tests/list-tests.html
index 158c2ddb4e..89bdc61e98 100644
--- a/tests/list-tests.html
+++ b/tests/list-tests.html
@@ -42,6 +42,7 @@
test_Feature.html
Feature/test_Vector.html
test_Style.html
+ test_StyleMap.html
test_Rule.html
Rule/test_Comparison.html
Rule/test_FeatureId.html
diff --git a/tests/test_Style.html b/tests/test_Style.html
index 8523c11ca7..c0a5762ab8 100644
--- a/tests/test_Style.html
+++ b/tests/test_Style.html
@@ -11,7 +11,7 @@
t.ok(style instanceof OpenLayers.Style,
"new OpenLayers.Style returns object" );
t.eq(style.foo, "bar", "constructor sets options correctly");
- t.eq(typeof style.createStyle, "function", "style has a createStyle function");
+ t.eq(typeof style.createSymbolizer, "function", "style has a createSymbolizer function");
}
function test_Style_create(t) {
@@ -45,11 +45,12 @@
var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(3,5),
- {"foo": "bar"},
- style);
+ {"foo": "bar"});
feature.fid = "1";
// for this fid, the above rule should apply
+
+ layer.styleMap = new OpenLayers.StyleMap(style);
layer.addFeatures([feature]);
map.addLayer(layer);
@@ -58,37 +59,37 @@
map.setCenter(new OpenLayers.LonLat(3,5), 10);
// at this scale, the feature should be green
- var createdStyle = style.createStyle(feature);
+ var createdStyle = style.createSymbolizer(feature);
t.eq(createdStyle.externalGraphic, "barbar.png", "Calculated property style correctly.");
t.eq(createdStyle.display, "", "Feature is visible at scale "+map.getScale());
t.eq(createdStyle.fillColor, "green", "Point symbolizer from rule applied correctly.");
map.setCenter(new OpenLayers.LonLat(3,5), 9);
// at this scale, the feature should be red
- createdStyle = style.createStyle(feature);
+ createdStyle = style.createSymbolizer(feature);
t.eq(createdStyle.display, "", "Feature is visible at scale "+map.getScale());
t.eq(createdStyle.fillColor, "yellow", "Point symbolizer from rule applied correctly.");
map.setCenter(new OpenLayers.LonLat(3,5), 8);
// at this scale, the feature should be yellow
- createdStyle = style.createStyle(feature);
+ createdStyle = style.createSymbolizer(feature);
t.eq(createdStyle.display, "", "Feature is visible at scale "+map.getScale());
t.eq(createdStyle.fillColor, "red", "Point symbolizer from rule applied correctly.");
map.setCenter(new OpenLayers.LonLat(3,5), 7);
// at this scale, the feature should be invisible
- createdStyle = style.createStyle(feature);
+ createdStyle = style.createSymbolizer(feature);
t.eq(createdStyle.display, "none", "Feature is invisible at scale "+map.getScale());
t.eq(createdStyle.fillColor, baseStyle.fillColor, "Point symbolizer from base style applied correctly.");
feature.fid = "2";
// now the rule should not apply
- createdStyle = style.createStyle(feature);
+ createdStyle = style.createSymbolizer(feature);
t.eq(createdStyle.fillColor, baseStyle.fillColor, "Correct style for rule that does not apply to fid=\"2\".");
}
- function test_Style_createStyle(t) {
+ function test_Style_createSymbolizer(t) {
t.plan(2);
var style = new OpenLayers.Style();
var rule = new OpenLayers.Rule({
@@ -104,13 +105,13 @@
style.applySymbolizer = function(r) {
t.eq(r.id, rule.id, "(plain) applySymbolizer called with correct rule");
}
- style.createStyle(new OpenLayers.Feature.Vector());
+ style.createSymbolizer(new OpenLayers.Feature.Vector());
rule.evaluate = function() {return false;};
style.applySymbolizer = function(r) {
t.eq(r.id, elseRule.id, "(else) applySymbolizer called with correct rule");
}
- style.createStyle(new OpenLayers.Feature.Vector());
+ style.createSymbolizer(new OpenLayers.Feature.Vector());
}
function test_Style_context(t) {
@@ -126,7 +127,7 @@
symbolizer: {"Point": {externalGraphic: "${foo}.png"}}});
var style = new OpenLayers.Style();
style.addRules([rule]);
- var styleHash = style.createStyle(new OpenLayers.Feature.Vector());
+ var styleHash = style.createSymbolizer(new OpenLayers.Feature.Vector());
t.eq(styleHash.externalGraphic, "bar.png", "correctly evaluated rule against a custom context");
}
diff --git a/tests/test_StyleMap.html b/tests/test_StyleMap.html
new file mode 100644
index 0000000000..221335221a
--- /dev/null
+++ b/tests/test_StyleMap.html
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+