Refactor SLD format a bit to use methods from XML format. The SLD format (v1.0) now inherits from the filter format (v1.0.0). r=ahocevar (closes #1843)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@8817 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
+4
-4
@@ -214,14 +214,14 @@
|
|||||||
"OpenLayers/Format/WKT.js",
|
"OpenLayers/Format/WKT.js",
|
||||||
"OpenLayers/Format/OSM.js",
|
"OpenLayers/Format/OSM.js",
|
||||||
"OpenLayers/Format/GPX.js",
|
"OpenLayers/Format/GPX.js",
|
||||||
"OpenLayers/Format/SLD.js",
|
|
||||||
"OpenLayers/Format/SLD/v1.js",
|
|
||||||
"OpenLayers/Format/SLD/v1_0_0.js",
|
|
||||||
"OpenLayers/Format/SLD/v1.js",
|
|
||||||
"OpenLayers/Format/Filter.js",
|
"OpenLayers/Format/Filter.js",
|
||||||
"OpenLayers/Format/Filter/v1.js",
|
"OpenLayers/Format/Filter/v1.js",
|
||||||
"OpenLayers/Format/Filter/v1_0_0.js",
|
"OpenLayers/Format/Filter/v1_0_0.js",
|
||||||
"OpenLayers/Format/Filter/v1_1_0.js",
|
"OpenLayers/Format/Filter/v1_1_0.js",
|
||||||
|
"OpenLayers/Format/SLD.js",
|
||||||
|
"OpenLayers/Format/SLD/v1.js",
|
||||||
|
"OpenLayers/Format/SLD/v1_0_0.js",
|
||||||
|
"OpenLayers/Format/SLD/v1.js",
|
||||||
"OpenLayers/Format/Text.js",
|
"OpenLayers/Format/Text.js",
|
||||||
"OpenLayers/Format/JSON.js",
|
"OpenLayers/Format/JSON.js",
|
||||||
"OpenLayers/Format/GeoJSON.js",
|
"OpenLayers/Format/GeoJSON.js",
|
||||||
|
|||||||
+75
-225
@@ -4,12 +4,8 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @requires OpenLayers/Rule.js
|
* @requires OpenLayers/Rule.js
|
||||||
* @requires OpenLayers/Filter.js
|
|
||||||
* @requires OpenLayers/Filter/FeatureId.js
|
|
||||||
* @requires OpenLayers/Filter/Logical.js
|
|
||||||
* @requires OpenLayers/Filter/Comparison.js
|
|
||||||
* @requires OpenLayers/Format/SLD.js
|
* @requires OpenLayers/Format/SLD.js
|
||||||
* @requires OpenLayers/Format/Filter/v1.js
|
* @requires OpenLayers/Format/Filter/v1_0_0.js
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -17,9 +13,9 @@
|
|||||||
* Superclass for SLD version 1 parsers.
|
* Superclass for SLD version 1 parsers.
|
||||||
*
|
*
|
||||||
* Inherits from:
|
* Inherits from:
|
||||||
* - <OpenLayers.Format.XML>
|
* - <OpenLayers.Format.Filter.v1_0_0>
|
||||||
*/
|
*/
|
||||||
OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property: namespaces
|
* Property: namespaces
|
||||||
@@ -68,14 +64,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
* this instance.
|
* this instance.
|
||||||
*/
|
*/
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
// extend with ogc:Filter readers and writers
|
OpenLayers.Format.Filter.v1_0_0.prototype.initialize.apply(this, [options]);
|
||||||
this.readers["ogc"] = OpenLayers.Format.Filter.v1.prototype.readers["ogc"];
|
|
||||||
this.writers["ogc"] = OpenLayers.Format.Filter.v1.prototype.writers["ogc"];
|
|
||||||
// extend with custom filter methods that may get changed
|
|
||||||
this.readOgcExpression = OpenLayers.Format.Filter.v1.prototype.readOgcExpression;
|
|
||||||
this.getFilterType = OpenLayers.Format.Filter.v1.prototype.getFilterType;
|
|
||||||
this.filterMap = OpenLayers.Format.Filter.v1.prototype.filterMap;
|
|
||||||
OpenLayers.Format.XML.prototype.initialize.apply(this, [options]);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,7 +92,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
* with two arguments: the node being read and a context object passed
|
* with two arguments: the node being read and a context object passed
|
||||||
* from the parent.
|
* from the parent.
|
||||||
*/
|
*/
|
||||||
readers: {
|
readers: OpenLayers.Util.applyDefaults({
|
||||||
"sld": {
|
"sld": {
|
||||||
"StyledLayerDescriptor": function(node, sld) {
|
"StyledLayerDescriptor": function(node, sld) {
|
||||||
sld.version = node.getAttribute("version");
|
sld.version = node.getAttribute("version");
|
||||||
@@ -280,7 +269,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
graphic.graphicFormat = this.getChildValue(node);
|
graphic.graphicFormat = this.getChildValue(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}, OpenLayers.Format.Filter.v1_0_0.prototype.readers),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property: cssMap
|
* Property: cssMap
|
||||||
@@ -382,7 +371,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
* writing functions grouped by namespace alias and named like the
|
* writing functions grouped by namespace alias and named like the
|
||||||
* node names they produce.
|
* node names they produce.
|
||||||
*/
|
*/
|
||||||
writers: {
|
writers: OpenLayers.Util.applyDefaults({
|
||||||
"sld": {
|
"sld": {
|
||||||
"StyledLayerDescriptor": function(sld) {
|
"StyledLayerDescriptor": function(sld) {
|
||||||
var root = this.createElementNSPlus(
|
var root = this.createElementNSPlus(
|
||||||
@@ -394,19 +383,19 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
);
|
);
|
||||||
// add in optional name
|
// add in optional name
|
||||||
if(sld.name) {
|
if(sld.name) {
|
||||||
this.writeNode(root, "Name", sld.name);
|
this.writeNode("Name", sld.name, root);
|
||||||
}
|
}
|
||||||
// add in optional title
|
// add in optional title
|
||||||
if(sld.title) {
|
if(sld.title) {
|
||||||
this.writeNode(root, "Title", sld.title);
|
this.writeNode("Title", sld.title, root);
|
||||||
}
|
}
|
||||||
// add in optional description
|
// add in optional description
|
||||||
if(sld.description) {
|
if(sld.description) {
|
||||||
this.writeNode(root, "Abstract", sld.description);
|
this.writeNode("Abstract", sld.description, root);
|
||||||
}
|
}
|
||||||
// add in named layers
|
// add in named layers
|
||||||
for(var name in sld.namedLayers) {
|
for(var name in sld.namedLayers) {
|
||||||
this.writeNode(root, "NamedLayer", sld.namedLayers[name]);
|
this.writeNode("NamedLayer", sld.namedLayers[name], root);
|
||||||
}
|
}
|
||||||
return root;
|
return root;
|
||||||
},
|
},
|
||||||
@@ -425,7 +414,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
var node = this.createElementNSPlus("NamedLayer");
|
var node = this.createElementNSPlus("NamedLayer");
|
||||||
|
|
||||||
// add in required name
|
// add in required name
|
||||||
this.writeNode(node, "Name", layer.name);
|
this.writeNode("Name", layer.name, node);
|
||||||
|
|
||||||
// optional sld:LayerFeatureConstraints here
|
// optional sld:LayerFeatureConstraints here
|
||||||
|
|
||||||
@@ -433,7 +422,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
if(layer.namedStyles) {
|
if(layer.namedStyles) {
|
||||||
for(var i=0, len=layer.namedStyles.length; i<len; ++i) {
|
for(var i=0, len=layer.namedStyles.length; i<len; ++i) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "NamedStyle", layer.namedStyles[i]
|
"NamedStyle", layer.namedStyles[i], node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -442,7 +431,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
if(layer.userStyles) {
|
if(layer.userStyles) {
|
||||||
for(var i=0, len=layer.userStyles.length; i<len; ++i) {
|
for(var i=0, len=layer.userStyles.length; i<len; ++i) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "UserStyle", layer.userStyles[i]
|
"UserStyle", layer.userStyles[i], node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -451,7 +440,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"NamedStyle": function(name) {
|
"NamedStyle": function(name) {
|
||||||
var node = this.createElementNSPlus("NamedStyle");
|
var node = this.createElementNSPlus("NamedStyle");
|
||||||
this.writeNode(node, "Name", name);
|
this.writeNode("Name", name, node);
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"UserStyle": function(style) {
|
"UserStyle": function(style) {
|
||||||
@@ -459,24 +448,24 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
|
|
||||||
// add in optional name
|
// add in optional name
|
||||||
if(style.name) {
|
if(style.name) {
|
||||||
this.writeNode(node, "Name", style.name);
|
this.writeNode("Name", style.name, node);
|
||||||
}
|
}
|
||||||
// add in optional title
|
// add in optional title
|
||||||
if(style.title) {
|
if(style.title) {
|
||||||
this.writeNode(node, "Title", style.title);
|
this.writeNode("Title", style.title, node);
|
||||||
}
|
}
|
||||||
// add in optional description
|
// add in optional description
|
||||||
if(style.description) {
|
if(style.description) {
|
||||||
this.writeNode(node, "Abstract", style.description);
|
this.writeNode("Abstract", style.description, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add isdefault
|
// add isdefault
|
||||||
if(style.isDefault) {
|
if(style.isDefault) {
|
||||||
this.writeNode(node, "IsDefault", style.isDefault);
|
this.writeNode("IsDefault", style.isDefault, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add FeatureTypeStyles
|
// add FeatureTypeStyles
|
||||||
this.writeNode(node, "FeatureTypeStyle", style);
|
this.writeNode("FeatureTypeStyle", style, node);
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
@@ -494,7 +483,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
|
|
||||||
// add in rules
|
// add in rules
|
||||||
for(var i=0, len=style.rules.length; i<len; ++i) {
|
for(var i=0, len=style.rules.length; i<len; ++i) {
|
||||||
this.writeNode(node, "Rule", style.rules[i]);
|
this.writeNode("Rule", style.rules[i], node);
|
||||||
}
|
}
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
@@ -504,35 +493,35 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
|
|
||||||
// add in optional name
|
// add in optional name
|
||||||
if(rule.name) {
|
if(rule.name) {
|
||||||
this.writeNode(node, "Name", rule.name);
|
this.writeNode("Name", rule.name, node);
|
||||||
}
|
}
|
||||||
// add in optional title
|
// add in optional title
|
||||||
if(rule.title) {
|
if(rule.title) {
|
||||||
this.writeNode(node, "Title", rule.title);
|
this.writeNode("Title", rule.title, node);
|
||||||
}
|
}
|
||||||
// add in optional description
|
// add in optional description
|
||||||
if(rule.description) {
|
if(rule.description) {
|
||||||
this.writeNode(node, "Abstract", rule.description);
|
this.writeNode("Abstract", rule.description, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add in LegendGraphic here
|
// add in LegendGraphic here
|
||||||
|
|
||||||
// add in optional filters
|
// add in optional filters
|
||||||
if(rule.elseFilter) {
|
if(rule.elseFilter) {
|
||||||
this.writeNode(node, "ElseFilter");
|
this.writeNode("ElseFilter", null, node);
|
||||||
} else if(rule.filter) {
|
} else if(rule.filter) {
|
||||||
this.writeNode(node, "ogc:Filter", rule.filter);
|
this.writeNode("ogc:Filter", rule.filter, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add in scale limits
|
// add in scale limits
|
||||||
if(rule.minScaleDenominator != undefined) {
|
if(rule.minScaleDenominator != undefined) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "MinScaleDenominator", rule.minScaleDenominator
|
"MinScaleDenominator", rule.minScaleDenominator, node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(rule.maxScaleDenominator != undefined) {
|
if(rule.maxScaleDenominator != undefined) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "MaxScaleDenominator", rule.maxScaleDenominator
|
"MaxScaleDenominator", rule.maxScaleDenominator, node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,7 +533,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
symbolizer = rule.symbolizer[type];
|
symbolizer = rule.symbolizer[type];
|
||||||
if(symbolizer) {
|
if(symbolizer) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, type + "Symbolizer", symbolizer
|
type + "Symbolizer", symbolizer, node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +555,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
},
|
},
|
||||||
"LineSymbolizer": function(symbolizer) {
|
"LineSymbolizer": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("LineSymbolizer");
|
var node = this.createElementNSPlus("LineSymbolizer");
|
||||||
this.writeNode(node, "Stroke", symbolizer);
|
this.writeNode("Stroke", symbolizer, node);
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"Stroke": function(symbolizer) {
|
"Stroke": function(symbolizer) {
|
||||||
@@ -578,20 +567,23 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
// add in CssParameters
|
// add in CssParameters
|
||||||
if(symbolizer.strokeColor != undefined) {
|
if(symbolizer.strokeColor != undefined) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "strokeColor"}
|
{symbolizer: symbolizer, key: "strokeColor"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(symbolizer.strokeOpacity != undefined) {
|
if(symbolizer.strokeOpacity != undefined) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "strokeOpacity"}
|
{symbolizer: symbolizer, key: "strokeOpacity"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(symbolizer.strokeWidth != undefined) {
|
if(symbolizer.strokeWidth != undefined) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "strokeWidth"}
|
{symbolizer: symbolizer, key: "strokeWidth"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
@@ -607,17 +599,17 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
var node = this.createElementNSPlus("TextSymbolizer");
|
var node = this.createElementNSPlus("TextSymbolizer");
|
||||||
// add in optional Label
|
// add in optional Label
|
||||||
if(symbolizer.label != null) {
|
if(symbolizer.label != null) {
|
||||||
this.writeNode(node, "Label", symbolizer.label);
|
this.writeNode("Label", symbolizer.label, node);
|
||||||
}
|
}
|
||||||
// add in optional Font
|
// add in optional Font
|
||||||
if(symbolizer.fontFamily != null ||
|
if(symbolizer.fontFamily != null ||
|
||||||
symbolizer.fontSize != null) {
|
symbolizer.fontSize != null) {
|
||||||
this.writeNode(node, "Font", symbolizer);
|
this.writeNode("Font", symbolizer, node);
|
||||||
}
|
}
|
||||||
// add in optional Fill
|
// add in optional Fill
|
||||||
if(symbolizer.fillColor != null ||
|
if(symbolizer.fillColor != null ||
|
||||||
symbolizer.fillOpacity != null) {
|
symbolizer.fillOpacity != null) {
|
||||||
this.writeNode(node, "Fill", symbolizer);
|
this.writeNode("Fill", symbolizer, node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
@@ -626,14 +618,16 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
// add in CssParameters
|
// add in CssParameters
|
||||||
if(symbolizer.fontFamily) {
|
if(symbolizer.fontFamily) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "fontFamily"}
|
{symbolizer: symbolizer, key: "fontFamily"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(symbolizer.fontSize) {
|
if(symbolizer.fontSize) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "fontSize"}
|
{symbolizer: symbolizer, key: "fontSize"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
@@ -650,8 +644,9 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
last = item.indexOf("}");
|
last = item.indexOf("}");
|
||||||
if(last > 0) {
|
if(last > 0) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "ogc:PropertyName",
|
"ogc:PropertyName",
|
||||||
{property: item.substring(0, last)}
|
{property: item.substring(0, last)},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
node.appendChild(
|
node.appendChild(
|
||||||
this.createTextNode(item.substring(++last))
|
this.createTextNode(item.substring(++last))
|
||||||
@@ -668,14 +663,14 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
"PolygonSymbolizer": function(symbolizer) {
|
"PolygonSymbolizer": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("PolygonSymbolizer");
|
var node = this.createElementNSPlus("PolygonSymbolizer");
|
||||||
if(symbolizer.fillColor != undefined ||
|
if(symbolizer.fillColor != undefined ||
|
||||||
symbolizer.fillOpacity != undefined) {
|
symbolizer.fillOpacity != undefined) {
|
||||||
this.writeNode(node, "Fill", symbolizer);
|
this.writeNode("Fill", symbolizer, node);
|
||||||
}
|
}
|
||||||
if(symbolizer.strokeWidth != undefined ||
|
if(symbolizer.strokeWidth != undefined ||
|
||||||
symbolizer.strokeColor != undefined ||
|
symbolizer.strokeColor != undefined ||
|
||||||
symbolizer.strokeOpacity != undefined ||
|
symbolizer.strokeOpacity != undefined ||
|
||||||
symbolizer.strokeDashstyle != undefined) {
|
symbolizer.strokeDashstyle != undefined) {
|
||||||
this.writeNode(node, "Stroke", symbolizer);
|
this.writeNode("Stroke", symbolizer, node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
@@ -687,57 +682,59 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
// add in CssParameters
|
// add in CssParameters
|
||||||
if(symbolizer.fillColor) {
|
if(symbolizer.fillColor) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "fillColor"}
|
{symbolizer: symbolizer, key: "fillColor"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if(symbolizer.fillOpacity != null) {
|
if(symbolizer.fillOpacity != null) {
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "CssParameter",
|
"CssParameter",
|
||||||
{symbolizer: symbolizer, key: "fillOpacity"}
|
{symbolizer: symbolizer, key: "fillOpacity"},
|
||||||
|
node
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"PointSymbolizer": function(symbolizer) {
|
"PointSymbolizer": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("PointSymbolizer");
|
var node = this.createElementNSPlus("PointSymbolizer");
|
||||||
this.writeNode(node, "Graphic", symbolizer);
|
this.writeNode("Graphic", symbolizer, node);
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"Graphic": function(symbolizer) {
|
"Graphic": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("Graphic");
|
var node = this.createElementNSPlus("Graphic");
|
||||||
if(symbolizer.externalGraphic != undefined) {
|
if(symbolizer.externalGraphic != undefined) {
|
||||||
this.writeNode(node, "ExternalGraphic", symbolizer);
|
this.writeNode("ExternalGraphic", symbolizer, node);
|
||||||
} else if(symbolizer.graphicName) {
|
} else if(symbolizer.graphicName) {
|
||||||
this.writeNode(node, "Mark", symbolizer);
|
this.writeNode("Mark", symbolizer, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(symbolizer.graphicOpacity != undefined) {
|
if(symbolizer.graphicOpacity != undefined) {
|
||||||
this.writeNode(node, "Opacity", symbolizer.graphicOpacity);
|
this.writeNode("Opacity", symbolizer.graphicOpacity, node);
|
||||||
}
|
}
|
||||||
if(symbolizer.pointRadius != undefined) {
|
if(symbolizer.pointRadius != undefined) {
|
||||||
this.writeNode(node, "Size", symbolizer.pointRadius * 2);
|
this.writeNode("Size", symbolizer.pointRadius * 2, node);
|
||||||
}
|
}
|
||||||
if(symbolizer.rotation != undefined) {
|
if(symbolizer.rotation != undefined) {
|
||||||
this.writeNode(node, "Rotation", symbolizer.rotation);
|
this.writeNode("Rotation", symbolizer.rotation, node);
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"ExternalGraphic": function(symbolizer) {
|
"ExternalGraphic": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("ExternalGraphic");
|
var node = this.createElementNSPlus("ExternalGraphic");
|
||||||
this.writeNode(
|
this.writeNode(
|
||||||
node, "OnlineResource", symbolizer.externalGraphic
|
"OnlineResource", symbolizer.externalGraphic, node
|
||||||
);
|
);
|
||||||
var format = symbolizer.graphicFormat ||
|
var format = symbolizer.graphicFormat ||
|
||||||
this.getGraphicFormat(symbolizer.externalGraphic);
|
this.getGraphicFormat(symbolizer.externalGraphic);
|
||||||
this.writeNode(node, "Format", format);
|
this.writeNode("Format", format, node);
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"Mark": function(symbolizer) {
|
"Mark": function(symbolizer) {
|
||||||
var node = this.createElementNSPlus("Mark");
|
var node = this.createElementNSPlus("Mark");
|
||||||
this.writeNode(node, "WellKnownName", symbolizer.graphicName);
|
this.writeNode("WellKnownName", symbolizer.graphicName, node);
|
||||||
this.writeNode(node, "Fill", symbolizer);
|
this.writeNode("Fill", symbolizer, node);
|
||||||
this.writeNode(node, "Stroke", symbolizer);
|
this.writeNode("Stroke", symbolizer, node);
|
||||||
return node;
|
return node;
|
||||||
},
|
},
|
||||||
"WellKnownName": function(name) {
|
"WellKnownName": function(name) {
|
||||||
@@ -774,155 +771,8 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}, OpenLayers.Format.Filter.v1_0_0.prototype.writers),
|
||||||
|
|
||||||
/**
|
|
||||||
* Methods below this point are of general use for versioned XML parsers.
|
|
||||||
* These are candidates for an abstract class.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method: getNamespacePrefix
|
|
||||||
* Get the namespace prefix for a given uri from the <namespaces> object.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* {String} A namespace prefix or null if none found.
|
|
||||||
*/
|
|
||||||
getNamespacePrefix: function(uri) {
|
|
||||||
var prefix = null;
|
|
||||||
if(uri == null) {
|
|
||||||
prefix = this.namespaces[this.defaultPrefix];
|
|
||||||
} else {
|
|
||||||
var gotPrefix = false;
|
|
||||||
for(prefix in this.namespaces) {
|
|
||||||
if(this.namespaces[prefix] == uri) {
|
|
||||||
gotPrefix = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!gotPrefix) {
|
|
||||||
prefix = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return prefix;
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method: readChildNodes
|
|
||||||
*/
|
|
||||||
readChildNodes: function(node, obj) {
|
|
||||||
var children = node.childNodes;
|
|
||||||
var child, group, reader, prefix, local;
|
|
||||||
for(var i=0, len=children.length; i<len; ++i) {
|
|
||||||
child = children[i];
|
|
||||||
if(child.nodeType == 1) {
|
|
||||||
prefix = this.getNamespacePrefix(child.namespaceURI);
|
|
||||||
local = child.nodeName.split(":").pop();
|
|
||||||
group = this.readers[prefix];
|
|
||||||
if(group) {
|
|
||||||
reader = group[local];
|
|
||||||
if(reader) {
|
|
||||||
reader.apply(this, [child, obj]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method: writeNode
|
|
||||||
* Shorthand for applying one of the named writers and appending the
|
|
||||||
* results to a node. If a qualified name is not provided for the
|
|
||||||
* second argument (and a local name is used instead), the namespace
|
|
||||||
* of the parent node will be assumed.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* parent - {DOMElement} Result will be appended to this node.
|
|
||||||
* name - {String} The name of a node to generate. If a qualified name
|
|
||||||
* (e.g. "pre:Name") is used, the namespace prefix is assumed to be
|
|
||||||
* in the <writers> group. If a local name is used (e.g. "Name") then
|
|
||||||
* the namespace of the parent is assumed.
|
|
||||||
* obj - {Object} Structure containing data for the writer.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* {DOMElement} The child node.
|
|
||||||
*/
|
|
||||||
writeNode: function(parent, name, obj) {
|
|
||||||
var prefix, local;
|
|
||||||
var split = name.indexOf(":");
|
|
||||||
if(split > 0) {
|
|
||||||
prefix = name.substring(0, split);
|
|
||||||
local = name.substring(split + 1);
|
|
||||||
} else {
|
|
||||||
prefix = this.getNamespacePrefix(parent.namespaceURI);
|
|
||||||
local = name;
|
|
||||||
}
|
|
||||||
var child = this.writers[prefix][local].apply(this, [obj]);
|
|
||||||
parent.appendChild(child);
|
|
||||||
return child;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method: createElementNSPlus
|
|
||||||
* Shorthand for creating namespaced elements with optional attributes and
|
|
||||||
* child text nodes.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* name - {String} The qualified node name.
|
|
||||||
* options - {Object} Optional object for node configuration.
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* {Element} An element node.
|
|
||||||
*/
|
|
||||||
createElementNSPlus: function(name, options) {
|
|
||||||
options = options || {};
|
|
||||||
var loc = name.indexOf(":");
|
|
||||||
// order of prefix preference
|
|
||||||
// 1. in the uri option
|
|
||||||
// 2. in the prefix option
|
|
||||||
// 3. in the qualified name
|
|
||||||
// 4. from the defaultPrefix
|
|
||||||
var uri = options.uri || this.namespaces[options.prefix];
|
|
||||||
if(!uri) {
|
|
||||||
loc = name.indexOf(":");
|
|
||||||
uri = this.namespaces[name.substring(0, loc)];
|
|
||||||
}
|
|
||||||
if(!uri) {
|
|
||||||
uri = this.namespaces[this.defaultPrefix];
|
|
||||||
}
|
|
||||||
var node = this.createElementNS(uri, name);
|
|
||||||
if(options.attributes) {
|
|
||||||
this.setAttributes(node, options.attributes);
|
|
||||||
}
|
|
||||||
if(options.value != null) {
|
|
||||||
node.appendChild(this.createTextNode(options.value));
|
|
||||||
}
|
|
||||||
return node;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method: setAttributes
|
|
||||||
* Set multiple attributes given key value pairs from an object.
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
* node - {Element} An element node.
|
|
||||||
* obj - {Object || Array} An object whose properties represent attribute
|
|
||||||
* names and values represent attribute values. If an attribute name
|
|
||||||
* is a qualified name ("prefix:local"), the prefix will be looked up
|
|
||||||
* in the parsers {namespaces} object. If the prefix is found,
|
|
||||||
* setAttributeNS will be used instead of setAttribute.
|
|
||||||
*/
|
|
||||||
setAttributes: function(node, obj) {
|
|
||||||
var value, loc, alias, uri;
|
|
||||||
for(var name in obj) {
|
|
||||||
value = obj[name].toString();
|
|
||||||
// check for qualified attribute name ("prefix:local")
|
|
||||||
uri = this.namespaces[name.substring(0, name.indexOf(":"))] || null;
|
|
||||||
this.setAttributeNS(node, uri, name, value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
CLASS_NAME: "OpenLayers.Format.SLD.v1"
|
CLASS_NAME: "OpenLayers.Format.SLD.v1"
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
fillOpacity: 0
|
fillOpacity: 0
|
||||||
};
|
};
|
||||||
var root = parser.createElementNSPlus("PolygonSymbolizer");
|
var root = parser.createElementNSPlus("PolygonSymbolizer");
|
||||||
var got = parser.writeNode(root, "Fill", symbolizer);
|
var got = parser.writeNode("Fill", symbolizer, root);
|
||||||
var expect =
|
var expect =
|
||||||
'<Fill xmlns="http://www.opengis.net/sld">' +
|
'<Fill xmlns="http://www.opengis.net/sld">' +
|
||||||
'<CssParameter name="fill">red</CssParameter>' +
|
'<CssParameter name="fill">red</CssParameter>' +
|
||||||
|
|||||||
Reference in New Issue
Block a user