Changeset 6079
- Timestamp:
- 02/08/08 01:05:43 (1 year ago)
- Files:
-
- sandbox/ahocevar/styleMap/openlayers/examples/georss-flickr.html (modified) (1 diff)
- sandbox/ahocevar/styleMap/openlayers/examples/sld.html (modified) (3 diffs)
- sandbox/ahocevar/styleMap/openlayers/examples/tasmania/sld-tasmania.xml (modified) (1 diff)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers.js (modified) (1 diff)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Control/SelectFeature.js (modified) (3 diffs)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Feature/Vector.js (modified) (1 diff)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Format/SLD.js (modified) (3 diffs)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Layer/Vector.js (modified) (5 diffs)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule.js (modified) (2 diffs)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule/Comparison.js (modified) (6 diffs)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule/FeatureId.js (modified) (1 diff)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule/Logical.js (modified) (6 diffs)
- sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Style.js (modified) (10 diffs)
- sandbox/ahocevar/styleMap/openlayers/tests/Control/test_SelectFeature.html (modified) (2 diffs)
- sandbox/ahocevar/styleMap/openlayers/tests/Layer/test_Vector.html (modified) (3 diffs)
- sandbox/ahocevar/styleMap/openlayers/tests/Rule/test_Logical.html (modified) (2 diffs)
- sandbox/ahocevar/styleMap/openlayers/tests/list-tests.html (modified) (1 diff)
- sandbox/ahocevar/styleMap/openlayers/tests/test_Style.html (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
sandbox/ahocevar/styleMap/openlayers/examples/georss-flickr.html
r5978 r6079 47 47 style.addRules([rule, elseRule]); 48 48 49 markerLayer = new OpenLayers.Layer.Vector("", {style : style});49 markerLayer = new OpenLayers.Layer.Vector("", {styleMap: new OpenLayers.StyleMap(style)}); 50 50 map.addLayer(markerLayer); 51 51 sandbox/ahocevar/styleMap/openlayers/examples/sld.html
r5925 r6079 32 32 styles = sld[1]; 33 33 34 waterStyle = styles["WaterBodies"]; 34 // for the hover style, we do not want to use the SLD default as 35 // base style 36 styles["WaterBodies"]["select"].defaultStyle = OpenLayers.Util.extend({}, 37 OpenLayers.Feature.Vector.style["select"]); 35 38 36 39 gmlLayers = [ … … 38 41 new OpenLayers.Layer.GML("StateBoundaries", 39 42 "tasmania/TasmaniaStateBoundaries.xml", { 40 style : waterStyle["default"]}),43 styleMap: new OpenLayers.StyleMap(styles["WaterBodies"])}), 41 44 new OpenLayers.Layer.GML("Roads", 42 45 "tasmania/TasmaniaRoads.xml", { 43 style : waterStyle["default"]}),46 styleMap: new OpenLayers.StyleMap(styles["Roads"])}), 44 47 new OpenLayers.Layer.GML("WaterBodies", 45 48 "tasmania/TasmaniaWaterBodies.xml", { 46 style : waterStyle["default"]}),49 styleMap: new OpenLayers.StyleMap(styles["WaterBodies"])}), 47 50 new OpenLayers.Layer.GML("Cities", 48 51 "tasmania/TasmaniaCities.xml", { 49 style : waterStyle["default"]})];52 styleMap: new OpenLayers.StyleMap(styles["Cities"])})]; 50 53 51 // add the first layer with the style passed to the constructor 52 map.addLayer(gmlLayers[0]); 53 // add the other layers after setting the style using the 54 // setStyle() method, which will pick the correct default style 55 // from the styles hash we got back from 56 // OpenLayers.Format.SLD.read() 57 for (var i=1; i<gmlLayers.length; i++) { 58 gmlLayers[i].style = styles[gmlLayers[i].name]["default"]; 59 map.addLayer(gmlLayers[i]); 60 gmlLayers[i].redraw(); 54 for (var i=0; i<gmlLayers.length; i++) { 55 map.addLayer(gmlLayers[i]); 61 56 } 62 57 63 // SLD can also be used for the SelectFeature control64 waterStyle["Hover Styler"].defaultStyle =65 OpenLayers.Feature.Vector.style["select"];66 58 hover = new OpenLayers.Control.SelectFeature(gmlLayers[2], { 67 selectStyle: waterStyle["Hover Styler"],68 59 hover: true 69 60 }); … … 74 65 // set a new style when the radio button changes 75 66 function setStyle(styleName) { 67 gmlLayers[2].styleMap.styles["default"] = styles["WaterBodies"][styleName]; 76 68 // change the style of the features of the WaterBodies layer 77 var features = gmlLayers[2].features;78 for (var i=0; i<features.length; i++) {79 features[i].style = waterStyle[styleName];80 }81 69 gmlLayers[2].redraw(); 82 70 } sandbox/ahocevar/styleMap/openlayers/examples/tasmania/sld-tasmania.xml
r5964 r6079 62 62 63 63 <sld:UserStyle> 64 <sld:Name> Hover Styler</sld:Name>64 <sld:Name>select</sld:Name> 65 65 <sld:Title>Hover Styler</sld:Title> 66 66 <sld:Abstract></sld:Abstract> sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers.js
r5921 r6079 175 175 "OpenLayers/Layer/GML.js", 176 176 "OpenLayers/Style.js", 177 "OpenLayers/StyleMap.js", 177 178 "OpenLayers/Rule.js", 178 179 "OpenLayers/Rule/FeatureId.js", sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Control/SelectFeature.js
r5959 r6079 96 96 * {Object} Hash of styles 97 97 */ 98 selectStyle: OpenLayers.Feature.Vector.style['select'],98 selectStyle: null, 99 99 100 100 /** … … 248 248 */ 249 249 select: function(feature) { 250 // Store feature style for restoration later251 if(feature.originalStyle != feature.style) {252 feature.originalStyle = feature.style;253 }254 250 this.layer.selectedFeatures.push(feature); 255 251 256 var selectStyle = this.selectStyle; 257 258 if (feature.style.CLASS_NAME == "OpenLayers.Style") { 259 feature.style = feature.style.createStyle(feature); 260 } else { 261 feature.style = OpenLayers.Util.extend({}, feature.style); 262 } 263 if (selectStyle.CLASS_NAME == "OpenLayers.Style") { 264 selectStyle = selectStyle.createStyle(feature); 265 } 266 OpenLayers.Util.extend(feature.style, selectStyle); 267 268 this.layer.drawFeature(feature); 252 var selectStyle = this.selectStyle || "select"; 253 254 this.layer.drawFeature(feature, selectStyle); 269 255 this.onSelect(feature); 270 256 }, … … 280 266 unselect: function(feature) { 281 267 // Store feature style for restoration later 282 if(feature.originalStyle != null) { 283 feature.style = feature.originalStyle; 284 } 285 this.layer.drawFeature(feature); 268 this.layer.drawFeature(feature, "default"); 286 269 OpenLayers.Util.removeItem(this.layer.selectedFeatures, feature); 287 270 this.onUnselect(feature); sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Feature/Vector.js
r5909 r6079 60 60 style: null, 61 61 62 /** 63 * Property: renderIntent 64 * {String} rendering intent currently being used 65 */ 66 renderIntent: "default", 67 62 68 /** 63 69 * Constructor: OpenLayers.Feature.Vector sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Format/SLD.js
r5978 r6079 344 344 for (var i=0; i<filters.length; i++) { 345 345 if (filters[i].nodeType == 1) { 346 rule. children.push(this.parseFilter(filters[i]));346 rule.rules.push(this.parseFilter(filters[i])); 347 347 } 348 348 } … … 358 358 for (var i=0; i<filters.length; i++) { 359 359 if (filters[i].nodeType == 1) { 360 rule. children.push(this.parseFilter(filters[i]));360 rule.rules.push(this.parseFilter(filters[i])); 361 361 } 362 362 } … … 369 369 var rule = new OpenLayers.Rule.Logical( 370 370 {type: OpenLayers.Rule.Logical.NOT}); 371 rule. children.push(this.parseFilter(filter[0]));371 rule.rules.push(this.parseFilter(filter[0])); 372 372 return rule; 373 373 } sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Layer/Vector.js
r5614 r6079 64 64 */ 65 65 style: null, 66 67 /** 68 * Property: styleMap 69 * {<OpenLayers.StyleMap>} 70 */ 71 styleMap: null, 66 72 67 73 /** … … 107 113 */ 108 114 initialize: function(name, options) { 109 110 var defaultStyle = OpenLayers.Feature.Vector.style['default'];111 this.style = OpenLayers.Util.extend({}, defaultStyle);112 113 115 OpenLayers.Layer.prototype.initialize.apply(this, arguments); 114 116 … … 123 125 this.displayError(); 124 126 } 127 128 if (!this.styleMap) { 129 this.styleMap = new OpenLayers.StyleMap(); 130 } 125 131 126 132 this.features = []; … … 269 275 feature.layer = this; 270 276 271 if (!feature.style) {272 feature.style = OpenLayers.Util.extend({}, this.style);273 }274 275 277 if (notify) { 276 278 this.preFeatureInsert(feature); … … 350 352 * Parameters: 351 353 * feature - {<OpenLayers.Feature.Vector>} 352 * style - {Object} 354 * style - {Object} Symbolizer hash or {String} renderIntent 353 355 */ 354 356 drawFeature: function(feature, style) { 355 if(style == null) { 356 if(feature.style) { 357 style = feature.style; 358 } else { 359 style = this.style; 360 } 361 } 362 363 if (style && style.CLASS_NAME && 364 style.CLASS_NAME == "OpenLayers.Style") { 365 style = style.createStyle(feature); 366 } 357 if (typeof style != "object") { 358 var renderIntent = typeof style == "string" ? 359 style : "default"; 360 style = feature.style || this.style; 361 if (!style) { 362 style = this.styleMap.createSymbolizer(feature, renderIntent); 363 } 364 } 367 365 368 366 this.renderer.drawFeature(feature, style); sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule.js
r5978 r6079 20 20 */ 21 21 name: 'default', 22 23 /** 24 * Property: context 25 * {Object} An optional object with properties that the rule and its 26 * symbolizers' property values should be evaluatad against. If no 27 * context is specified, feature.attributes will be used 28 */ 29 context: null, 22 30 23 31 /** … … 94 102 */ 95 103 evaluate: function(feature) { 96 // Default rule always applies. Subclasses will want to override this. 97 return true; 104 var context = this.getContext(feature); 105 var applies = true; 106 107 if (this.minScaleDenominator || this.maxScaleDenominator) { 108 var scale = feature.layer.map.getScale(); 109 } 110 111 // check if within minScale/maxScale bounds 112 if (this.minScaleDenominator) { 113 applies = scale >= OpenLayers.Style.createLiteral( 114 this.minScaleDenominator, context); 115 } 116 if (applies && this.maxScaleDenominator) { 117 applies = scale < OpenLayers.Style.createLiteral( 118 this.maxScaleDenominator, context); 119 } 120 121 return applies; 98 122 }, 99 123 124 /** 125 * Method: getContext 126 * Gets the context for evaluating this rule 127 * 128 * Paramters: 129 * feature - {<OpenLayers.Feature>} feature to take the context from if 130 * none is specified. 131 */ 132 getContext: function(feature) { 133 var context = this.context; 134 if (!context) { 135 context = feature.attributes || feature.data; 136 } 137 return context; 138 }, 139 100 140 CLASS_NAME: "OpenLayers.Rule" 101 141 }); sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule/Comparison.js
r5614 r6079 34 34 * APIProperty: property 35 35 * {String} 36 * name of the feature attributeto compare36 * name of the context proeprty to compare 37 37 */ 38 38 property: null, … … 85 85 /** 86 86 * APIMethod: evaluate 87 * evaluates this rule for a specific feature88 * 89 * Parameters: 90 * feature - {<OpenLayers.Feature>} featureto apply the rule to.87 * evaluates this rule for a specific context 88 * 89 * Parameters: 90 * context - {Object} context to apply the rule to. 91 91 * 92 92 * Returns: … … 94 94 */ 95 95 evaluate: function(feature) { 96 var attributes = feature.attributes || feature.data; 96 if (!OpenLayers.Rule.prototype.evaluate.apply(this, arguments)) { 97 return false; 98 } 99 var context = this.getContext(feature); 97 100 switch(this.type) { 98 101 case OpenLayers.Rule.Comparison.EQUAL_TO: … … 101 104 case OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO: 102 105 case OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO: 103 return this.binaryCompare( feature, this.property, this.value);106 return this.binaryCompare(context, this.property, this.value); 104 107 105 108 case OpenLayers.Rule.Comparison.BETWEEN: 106 109 var result = 107 attributes[this.property] > this.lowerBoundary;110 context[this.property] > this.lowerBoundary; 108 111 result = result && 109 attributes[this.property] < this.upperBoundary;112 context[this.property] < this.upperBoundary; 110 113 return result; 111 114 case OpenLayers.Rule.Comparison.LIKE: 112 115 var regexp = new RegExp(this.value, 113 116 "gi"); 114 return regexp.test( attributes[this.property]);117 return regexp.test(context[this.property]); 115 118 } 116 119 }, … … 166 169 * 167 170 * Parameters: 168 * feature - {<OpenLayers.Feature>}171 * context - {Object} 169 172 * property - {String} or {Number} 170 173 * value - {String} or {Number}, same as property … … 173 176 * {boolean} 174 177 */ 175 binaryCompare: function(feature, property, value) { 176 var attributes = feature.attributes || feature.data; 178 binaryCompare: function(context, property, value) { 177 179 switch (this.type) { 178 180 case OpenLayers.Rule.Comparison.EQUAL_TO: 179 return attributes[property] == value;181 return context[property] == value; 180 182 case OpenLayers.Rule.Comparison.NOT_EQUAL_TO: 181 return attributes[property] != value;183 return context[property] != value; 182 184 case OpenLayers.Rule.Comparison.LESS_THAN: 183 return attributes[property] < value;185 return context[property] < value; 184 186 case OpenLayers.Rule.Comparison.GREATER_THAN: 185 return attributes[property] > value;187 return context[property] > value; 186 188 case OpenLayers.Rule.Comparison.LESS_THAN_OR_EQUAL_TO: 187 return attributes[property] <= value;189 return context[property] <= value; 188 190 case OpenLayers.Rule.Comparison.GREATER_THAN_OR_EQUAL_TO: 189 return attributes[property] >= value;191 return context[property] >= value; 190 192 } 191 193 }, sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule/FeatureId.js
r5614 r6079 54 54 */ 55 55 evaluate: function(feature) { 56 if (!OpenLayers.Rule.prototype.evaluate.apply(this, arguments)) { 57 return false; 58 } 56 59 for (var i=0; i<this.fids.length; i++) { 57 60 var fid = feature.fid || feature.id; sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Rule/Logical.js
r5614 r6079 21 21 * {Array(<OpenLayers.Rule>)} child rules for this rule 22 22 */ 23 children: null,23 rules: null, 24 24 25 25 /** … … 44 44 */ 45 45 initialize: function(options) { 46 this. children= [];46 this.rules = []; 47 47 OpenLayers.Rule.prototype.initialize.apply(this, [options]); 48 48 }, … … 53 53 */ 54 54 destroy: function() { 55 for (var i=0; i<this. children.length; i++) {56 this. children[i].destroy();55 for (var i=0; i<this.rules.length; i++) { 56 this.rules[i].destroy(); 57 57 } 58 this. children= null;58 this.rules = null; 59 59 OpenLayers.Rule.prototype.destroy.apply(this, arguments); 60 60 }, … … 71 71 */ 72 72 evaluate: function(feature) { 73 if (!OpenLayers.Rule.prototype.evaluate.apply(this, arguments)) { 74 return false; 75 } 73 76 switch(this.type) { 74 77 case OpenLayers.Rule.Logical.AND: 75 for (var i=0; i<this. children.length; i++) {76 if (this. children[i].evaluate(feature) == false) {78 for (var i=0; i<this.rules.length; i++) { 79 if (this.rules[i].evaluate(feature) == false) { 77 80 return false; 78 81 } … … 81 84 82 85 case OpenLayers.Rule.Logical.OR: 83 for (var i=0; i<this. children.length; i++) {84 if (this. children[i].evaluate(feature) == true) {86 for (var i=0; i<this.rules.length; i++) { 87 if (this.rules[i].evaluate(feature) == true) { 85 88 return true; 86 89 } … … 89 92 90 93 case OpenLayers.Rule.Logical.NOT: 91 return (!this. children[0].evaluate(feature));94 return (!this.rules[0].evaluate(feature)); 92 95 } 93 96 }, sandbox/ahocevar/styleMap/openlayers/lib/OpenLayers/Style.js
r5978 r6079 44 44 * Property: defaultStyle 45 45 * {Object} hash of style properties to use as default for merging 46 * rule-based style symbolizers onto. If no rules are defined, createStyle47 * will return this style.46 * rule-based style symbolizers onto. If no rules are defined, 47 * createSymbolizer will return this style. 48 48 */ 49 49 defaultStyle: null, … … 56 56 propertyStyles: null, 57 57 58 59 58 /** 60 59 * Constructor: OpenLayers.Style … … 97 96 98 97 /** 99 * APIMethod: createStyle98 * Method: createSymbolizer 100 99 * creates a style by applying all feature-dependent rules to the base 101 100 * style. … … 103 102 * Parameters: 104 103 * feature - {<OpenLayers.Feature>} feature to evaluate rules for 105 * baseStyle - {Object} hash of styles feature styles to extend106 104 * 107 105 * Returns: 108 * { <OpenLayers.Feature.Vector.style>} hash of feature styles109 */ 110 createS tyle: function(feature) {106 * {Object} symbolizer hash 107 */ 108 createSymbolizer: function(feature) { 111 109 var style = OpenLayers.Util.extend({}, this.defaultStyle); 112 110 113 111 var rules = this.rules; 114 112 115 var rule ;113 var rule, context; 116 114 var elseRules = []; 117 115 var appliedRules = false; 118 116 for(var i=0; i<rules.length; i++) { 119 117 rule = rules[i]; 118 context = rule.context; 119 if (!context) { 120 context = feature.attributes || feature.data; 121 } 120 122 // does the rule apply? 121 123 var applies = rule.evaluate(feature); 122 124 123 if (rule.minScaleDenominator || rule.maxScaleDenominator) {124 var scale = feature.layer.map.getScale();125 }126 127 // check if within minScale/maxScale bounds128 if (rule.minScaleDenominator) {129 applies = scale >= OpenLayers.Style.createLiteral(130 rule.minScaleDenominator, feature);131 }132 if (applies && rule.maxScaleDenominator) {133 applies = scale < OpenLayers.Style.createLiteral(134 rule.maxScaleDenominator, feature);135 }136 137 125 if(applies) { 138 126 if(rule instanceof OpenLayers.Rule && rule.elseFilter) { … … 140 128 } else { 141 129 appliedRules = true; 142 this.applySymbolizer(rule, style, feature );130 this.applySymbolizer(rule, style, feature, context); 143 131 } 144 132 } … … 149 137 appliedRules = true; 150 138 for(var i=0; i<elseRules.length; i++) { 151 this.applySymbolizer(elseRules[i], style, feature); 152 } 153 } 154 155 // calculate literals for all styles in the propertyStyles cache 156 this.createLiterals(style, feature); 139 this.applySymbolizer(elseRules[i], style, feature, context); 140 } 141 } 157 142 158 143 // don't display if there were rules but none applied … … 173 158 * style - {Object} 174 159 * feature - {<OpenLayer.Feature.Vector>} 160 * context - {Object} 175 161 * 176 162 * Returns: 177 163 * {Object} A style with new symbolizer applied. 178 164 */ 179 applySymbolizer: function(rule, style, feature ) {165 applySymbolizer: function(rule, style, feature, context) { 180 166 var symbolizerPrefix = feature.geometry ? 181 167 this.getSymbolizerPrefix(feature.geometry) : 182 168 OpenLayers.Style.SYMBOLIZER_PREFIXES[0]; 183 169 170 var symbolizer = rule.symbolizer[symbolizerPrefix]; 171 184 172 // merge the style with the current style 185 var symbolizer = rule.symbolizer[symbolizerPrefix];186 return OpenLayers.Util.extend(style, symbolizer);173 return this.createLiterals( 174 OpenLayers.Util.extend(style, symbolizer), context); 187 175 }, 188 176 … … 195 183 * style - {Object} style to create literals for. Will be modified 196 184 * inline. 197 * feature - {<OpenLayers.Feature.Vector>} feature to take properties from 185 * context - {Object} context to take property values from. Defaults to 186 * feature.attributes (or feature.data, if attributes are not 187 * available) 198 188 * 199 189 * Returns; 200 190 * {Object} the modified style 201 191 */ 202 createLiterals: function(style, feature) {192 createLiterals: function(style, context) { 203 193 for (var i in this.propertyStyles) { 204 style[i] = OpenLayers.Style.createLiteral(style[i], feature);194 style[i] = OpenLayers.Style.createLiteral(style[i], context); 205 195 } 206 196 return style; … … 303 293 * will be replaced by the value of the "bar" attribute of the passed 304 294 * feature. 305 * feature {<OpenLayers.Feature>} featureto take attribute values from295 * context {Object} context to take attribute values from 306 296 * 307 297 * Returns: … … 310 300 * attribute named "bar" with the value "valueOfBar". 311 301 */ 312 OpenLayers.Style.createLiteral = function(value, feature) {302 OpenLayers.Style.createLiteral = function(value, context) { 313 303 if (typeof value == "string" && value.indexOf("${") != -1) { 314 var attributes = feature.attributes || feature.data; 315 value = OpenLayers.String.format(value, attributes) 304 value = OpenLayers.String.format(value, context) 316 305 value = isNaN(value) ? value : parseFloat(value); 317 306 } sandbox/ahocevar/styleMap/openlayers/tests/Control/test_SelectFeature.html
r5959 r6079 34 34 35 35 function test_Control_SelectFeature_select(t) { 36 t.plan( 7);36 t.plan(2); 37 37 var map = new OpenLayers.Map("map"); 38 38 var layer = new OpenLayers.Layer.Vector(); … … 41 41 var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0)); 42 42 layer.addFeatures(feature); 43 layer.drawFeature = function() { } 43 layer.drawFeature = function(feature, style) { 44 layer.styleMap.createSymbolizer(feature, style); 45 } 44 46 control.select(feature); 45 t.eq(feature. style.strokeColor, OpenLayers.Feature.Vector.style['select'].strokeColor, "feature style is set to select style");47 t.eq(feature.renderIntent, "select", "render intent is set to select"); 46 48 control.unselect(feature); 47 t.eq(feature.style.strokeColor, OpenLayers.Feature.Vector.style['default'].strokeColor, "feature style is set back to old style"); 48 49 // Don't ever overwrite my feature style with undefined properties from the selectStyle 50 feature.style = {externalGraphic: "foo.png", pointRadius: 39}; 51 control.selectStyle.pointRadius = undefined; 52 control.select(feature); 53 t.eq(feature.style.pointRadius, 39, "undefined style property inherited from original feature style"); 54 control.unselect(feature); 55 56 // Ok, that one went well. But I'm sure you cannot handle OL.Style. 57 feature.style = new OpenLayers.Style({externalGraphic: "foo.png", pointRadius: 39}); 58 control.select(feature); 59 t.eq(feature.style.pointRadius, 39, "undefined style property inherited from original feature style object"); 60 control.unselect(feature); 61 62 // Wow, but using OL.Style as selectStyle will break you. 63 control.selectStyle = new OpenLayers.Style({strokeColor: "green"}); 64 control.select(feature); 65 t.eq(feature.style.strokeColor, "green", "style correct if both feature.style and selectStyle are OL.Style"); 66 control.unselect(feature); 67 68 // Not bad, not bad. And what if I set feature.style back to a style hash? 69 feature.style = layer.style; 70 control.select(feature); 71 t.eq(feature.style.strokeColor, "green", "style still correct with only selectStyle being OL.Style"); 72 control.unselect(feature); 73 t.eq(feature.style.strokeColor, OpenLayers.Feature.Vector.style["default"].strokeColor, "style set back to original correctly"); 49 t.eq(feature.renderIntent, "default", "render intent is set back to default"); 74 50 } 75 51 sandbox/ahocevar/styleMap/openlayers/tests/Layer/test_Vector.html
r5476 r6079 68 68 t.ok(layer.features.length == 0, 69 69 "OpenLayers.Layer.Vector.removeFeatures(layer.features) removes all feature from the features array"); 70 }71 72 function test_Layer_Vector_addStyle (t) {73 t.plan(2);74 var layer = new OpenLayers.Layer.Vector(name);75 var map = new OpenLayers.Map('map');76 map.addLayer(layer);77 var g = new OpenLayers.Geometry.Point(0, 0);78 var f = new OpenLayers.Feature.Vector(g);79 t.eq( f.style, null, "Feature style is null by default.");80 layer.addFeatures(f);81 t.ok( f.style != null, "Feature style is set by layer.");82 70 } 83 71 … … 107 95 "calls layer.renderer.drawFeature() with feature.geometry"); 108 96 109 feature.style = 'exists';97 feature.style = {foo: "bar"}; 110 98 layer.drawFeature(feature); 111 99 t.eq(feature.style, s, … … 113 101 114 102 feature.style = null; 115 layer.style = 'exists';103 layer.style = {foo: "bar"}; 116 104 layer.drawFeature(feature); 117 t.eq(layer.style , s,105 t.eq(layer.style.foo, s.foo, 118 106 "given null feature style, uses layer style"); 119 107 120 feature.style = 'exists';121 layer.style = 'exists';122 var customStyle = 'custom';108 feature.style = {foo1: "bar1"}; 109 layer.style = {foo2: "bar2"}; 110 var customStyle = {foo: "bar"}; 123 111 layer.drawFeature(feature, customStyle); 124 t.eq(customStyle , s,112 t.eq(customStyle.foo, s.foo, 125 113 "given a custom style, renders with that"); 126 114 sandbox/ahocevar/styleMap/openlayers/tests/Rule/test_Logical.html
r5429 r6079 20 20 var rule = new OpenLayers.Rule.Logical(); 21 21 rule.destroy(); 22 t.eq(rule. children, null, "childrenarray nulled properly");22 t.eq(rule.rules, null, "rules array nulled properly"); 23 23 } 24 24 … … 28 28 var rule = new OpenLayers.Rule.Logical({ 29 29 type: OpenLayers.Rule.Logical.NOT}); 30 rule. children.push(new OpenLayers.Rule());30 rule.rules.push(new OpenLayers.Rule()); 31 31 32 32 var feature = new OpenLayers.Feature.Vector(); sandbox/ahocevar/styleMap/openlayers/tests/list-tests.html
r5990 r6079 42 42 <li>Feature/test_Vector.html</li> 43 43 <li>test_Style.html</li> 44 <li>test_StyleMap.html</li> 44 45 <li>test_Rule.html</li> 45 46 <li>Rule/test_Comparison.html</li> sandbox/ahocevar/styleMap/openlayers/tests/test_Style.html
r5978 r6079 12 12 "new OpenLayers.Style returns object" ); 13 13 t.eq(style.foo, "bar", "constructor sets options correctly"); 14 t.eq(typeof style.createS tyle, "function", "style has a createStylefunction");14 t.eq(typeof style.createSymbolizer, "function", "style has a createSymbolizer function"); 15 15 } 16 16 … … 46 46 var feature = new OpenLayers.Feature.Vector( 47 47 new OpenLayers.Geometry.Point(3,5), 48 {"foo": "bar"}, 49 style); 48 {"foo": "bar"}); 50 49 51 50 feature.fid = "1"; 52 51 // for this fid, the above rule should apply 52 53 layer.styleMap = new OpenLayers.StyleMap(style); 53 54 54 55 layer.addFeatures([feature]); … … 59 60 60 61 // at this scale, the feature should be green 61 var createdStyle = style.createS tyle(feature);62 var createdStyle = style.createSymbolizer(feature); 62 63 t.eq(createdStyle.externalGraphic, "barbar.png", "Calculated property style correctly."); 63 64 t.eq(createdStyle.display, "", "Feature is visible at scale "+map.getScale()); … … 66 67 map.setCenter(new OpenLayers.LonLat(3,5), 9); 67 68 // at this scale, the feature should be red 68 createdStyle = style.createS tyle(feature);69 createdStyle = style.createSymbolizer(feature); 69 70 t.eq(createdStyle.display, "", "Feature is visible at scale "+map.getScale()); 70 71 t.eq(createdStyle.fillColor, "yellow", "Point symbolizer from rule applied correctly."); … … 72 73 map.setCenter(new OpenLayers.LonLat(3,5), 8); 73 74 // at this scale, the feature should be yellow 74 createdStyle = style.createS tyle(feature);75 createdStyle = style.createSymbolizer(feature); 75 76 t.eq(createdStyle.display, "", "Feature is visible at scale "+map.getScale()); 76 77 t.eq(createdStyle.fillColor, "red", "Point symbolizer from rule applied correctly."); … … 78 79 map.setCenter(new OpenLayers.LonLat(3,5), 7); 79 80 // at this scale, the feature should be invisible 80 createdStyle = style.createS tyle(feature);81 createdStyle = style.createSymbolizer(feature); 81 82 t.eq(createdStyle.display, "none", "Feature is invisible at scale "+map.getScale()); 82 83 t.eq(createdStyle.fillColor, baseStyle.fillColor, "Point symbolizer from base style applied correctly."); … … 85 86 // now the rule should not apply 86 87 87 createdStyle = style.createS tyle(feature);88 createdStyle = style.createSymbolizer(feature); 88 89 t.eq(createdStyle.fillColor, baseStyle.fillColor, "Correct style for rule that does not apply to fid=\"2\"."); 89 90 } 90 91 91 function test_Style_createS tyle(t) {92 function test_Style_createSymbolizer(t) { 92 93 t.plan(2); 93 94 var style = new OpenLayers.Style(); … … 105 106 t.eq(r.id, rule.id, "(plain) applySymbolizer called with correct rule"); 106 107 } 107 style.createS tyle(new OpenLayers.Feature.Vector());
