From b2f95bd537dca45e52eb0cb6135474eaa01809cc Mon Sep 17 00:00:00 2001 From: Bart van den Eijnden Date: Wed, 22 Feb 2012 11:03:48 +0100 Subject: [PATCH] TextSymbolizer->Fill->CssParameter['fill'] should map to fontColor instead --- lib/OpenLayers/Format/SLD/v1.js | 17 +++++++++++++---- tests/Format/SLD/v1_0_0.html | 4 ++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/OpenLayers/Format/SLD/v1.js b/lib/OpenLayers/Format/SLD/v1.js index be1ce6effd..0780c8d163 100644 --- a/lib/OpenLayers/Format/SLD/v1.js +++ b/lib/OpenLayers/Format/SLD/v1.js @@ -338,6 +338,10 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { "CssParameter": function(node, symbolizer) { var cssProperty = node.getAttribute("name"); var symProperty = this.cssMap[cssProperty]; + // for labels, fill should map to the fontColor + if (symbolizer.label && cssProperty === 'fill') { + symProperty = "fontColor"; + } if(symProperty) { // Limited support for parsing of OGC expressions var value = this.readers.ogc._expression.call(this, node); @@ -862,10 +866,15 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { return node; }, "CssParameter": function(obj) { + var name = this.getCssProperty(obj.key); + var value = obj.symbolizer[obj.key]; + if (obj.symbolizer.label && name === 'fill') { + value = obj.symbolizer.fontColor; + } // not handling ogc:expressions for now return this.createElementNSPlus("sld:CssParameter", { - attributes: {name: this.getCssProperty(obj.key)}, - value: obj.symbolizer[obj.key] + attributes: {name: name}, + value: value }); }, "TextSymbolizer": function(symbolizer) { @@ -888,7 +897,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { this.writeNode("Halo", symbolizer, node); } // add in optional Fill - if(symbolizer.fillColor != null || + if(symbolizer.fontColor != null || symbolizer.fillOpacity != null) { this.writeNode("Fill", symbolizer, node); } @@ -1004,7 +1013,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { // GraphicFill here // add in CssParameters - if(symbolizer.fillColor) { + if(symbolizer.fillColor || (symbolizer.label && symbolizer.fontColor)) { this.writeNode( "CssParameter", {symbolizer: symbolizer, key: "fillColor"}, diff --git a/tests/Format/SLD/v1_0_0.html b/tests/Format/SLD/v1_0_0.html index a31ba6a5f3..98f4cd161b 100644 --- a/tests/Format/SLD/v1_0_0.html +++ b/tests/Format/SLD/v1_0_0.html @@ -177,7 +177,7 @@ t.eq(text.label, "A ${FOO} label", "(AAA161) first rule has proper text label"); t.eq(layer.userStyles[0].propertyStyles["label"], true, "label added to propertyStyles"); t.eq(text.fontFamily, "Arial", "(AAA161) first rule has proper font family"); - t.eq(text.fillColor, "#000000", "(AAA161) first rule has proper text fill"); + t.eq(text.fontColor, "#000000", "(AAA161) first rule has proper text fill"); t.eq(text.haloRadius, "3", "(AAA161) first rule has proper halo radius"); t.eq(text.haloColor, "#ffffff", "(AAA161) first rule has proper halo color"); @@ -347,7 +347,7 @@ "label": "This is the ${city} in ${state}.", "fontFamily": "Arial", "fontSize": 10, - "fillColor": "blue", + "fontColor": "blue", "fontWeight": "bold", "fontStyle": "normal", "haloRadius": 2,