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 @@ + + + + + + +
    + +