Adding more complete style parsing to the WMC format. The format now has support for named, linked (SLD), and inline (SLD_BODY) styles. r=ahocevar (closes #1313)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@6358 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -122,9 +122,7 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
for(var i=0; i<children.length; ++i) {
|
||||
childNode = children[i];
|
||||
if(childNode.nodeType == 1) {
|
||||
prefix = (childNode.prefix == this.rootPrefix) ?
|
||||
this.defaultPrefix :
|
||||
this.getNamespacePrefix(childNode.namespaceURI);
|
||||
prefix = this.getNamespacePrefix(childNode.namespaceURI);
|
||||
local = childNode.nodeName.split(":").pop();
|
||||
processor = this["read_" + prefix + "_" + local];
|
||||
if(processor) {
|
||||
@@ -312,10 +310,37 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
var style = {};
|
||||
this.runChildNodes(style, node);
|
||||
if(node.getAttribute("current") == "1") {
|
||||
layerInfo.params.style = style.name;
|
||||
// three style types to consider
|
||||
// 1) linked SLD
|
||||
// 2) inline SLD
|
||||
// 3) named style
|
||||
// running child nodes always gets name, optionally gets href or body
|
||||
if(style.href) {
|
||||
layerInfo.params.sld = style.href;
|
||||
} else if(style.body) {
|
||||
layerInfo.params.sld_body = style.body;
|
||||
} else {
|
||||
layerInfo.params.styles = style.name;
|
||||
}
|
||||
}
|
||||
layerInfo.styles.push(style);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: read_wmc_SLD
|
||||
*/
|
||||
read_wmc_SLD: function(style, node) {
|
||||
this.runChildNodes(style, node);
|
||||
// style either comes back with an href or a body property
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: read_sld_StyledLayerDescriptor
|
||||
*/
|
||||
read_sld_StyledLayerDescriptor: function(sld, node) {
|
||||
var xml = OpenLayers.Format.XML.prototype.write.apply(this, [node]);
|
||||
sld.body = xml;
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: read_wmc_OnlineResource
|
||||
@@ -731,13 +756,41 @@ OpenLayers.Format.WMC.v1 = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
var style = this.createElementDefaultNS(
|
||||
"Style", null, {current: "1"}
|
||||
);
|
||||
var name = layer.params["STYLES"] ?
|
||||
layer.params["STYLES"] : this.defaultStyleName;
|
||||
|
||||
style.appendChild(this.createElementDefaultNS("Name", name));
|
||||
style.appendChild(this.createElementDefaultNS(
|
||||
"Title", this.defaultStyleTitle
|
||||
));
|
||||
// Style can come from one of three places (prioritized as below):
|
||||
// 1) an SLD parameter
|
||||
// 2) and SLD_BODY parameter
|
||||
// 3) the STYLES parameter
|
||||
|
||||
if(layer.params["SLD"]) {
|
||||
// create link from SLD parameter
|
||||
var sld = this.createElementDefaultNS("SLD");
|
||||
var link = this.write_wmc_OnlineResource(layer.params["SLD"]);
|
||||
sld.appendChild(link);
|
||||
style.appendChild(sld);
|
||||
} else if(layer.params["SLD_BODY"]) {
|
||||
// include sld fragment from SLD_BODY parameter
|
||||
var sld = this.createElementDefaultNS("SLD");
|
||||
var body = layer.params["SLD_BODY"];
|
||||
// read in body as xml doc - assume proper namespace declarations
|
||||
var doc = OpenLayers.Format.XML.prototype.read.apply(this, [body]);
|
||||
// append to StyledLayerDescriptor node
|
||||
var imported = doc.documentElement;
|
||||
if(sld.ownerDocument && sld.ownerDocument.importNode) {
|
||||
imported = sld.ownerDocument.importNode(imported, true);
|
||||
}
|
||||
sld.appendChild(imported);
|
||||
style.appendChild(sld);
|
||||
} else {
|
||||
// use name(s) from STYLES parameter
|
||||
var name = layer.params["STYLES"] ?
|
||||
layer.params["STYLES"] : this.defaultStyleName;
|
||||
|
||||
style.appendChild(this.createElementDefaultNS("Name", name));
|
||||
style.appendChild(this.createElementDefaultNS(
|
||||
"Title", this.defaultStyleTitle
|
||||
));
|
||||
}
|
||||
node.appendChild(style);
|
||||
return node;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user