diff --git a/lib/OpenLayers.js b/lib/OpenLayers.js index 2426ff0fc8..93a5e8c4d3 100644 --- a/lib/OpenLayers.js +++ b/lib/OpenLayers.js @@ -214,14 +214,14 @@ "OpenLayers/Format/WKT.js", "OpenLayers/Format/OSM.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/v1.js", "OpenLayers/Format/Filter/v1_0_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/JSON.js", "OpenLayers/Format/GeoJSON.js", diff --git a/lib/OpenLayers/Format/SLD/v1.js b/lib/OpenLayers/Format/SLD/v1.js index caa90126f8..8b841afbad 100644 --- a/lib/OpenLayers/Format/SLD/v1.js +++ b/lib/OpenLayers/Format/SLD/v1.js @@ -4,12 +4,8 @@ /** * @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/Filter/v1.js + * @requires OpenLayers/Format/Filter/v1_0_0.js */ /** @@ -17,9 +13,9 @@ * Superclass for SLD version 1 parsers. * * Inherits from: - * - + * - */ -OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { +OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.Filter.v1_0_0, { /** * Property: namespaces @@ -68,14 +64,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { * this instance. */ initialize: function(options) { - // extend with ogc:Filter readers and writers - 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]); + OpenLayers.Format.Filter.v1_0_0.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 * from the parent. */ - readers: { + readers: OpenLayers.Util.applyDefaults({ "sld": { "StyledLayerDescriptor": function(node, sld) { sld.version = node.getAttribute("version"); @@ -280,7 +269,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { graphic.graphicFormat = this.getChildValue(node); } } - }, + }, OpenLayers.Format.Filter.v1_0_0.prototype.readers), /** * 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 * node names they produce. */ - writers: { + writers: OpenLayers.Util.applyDefaults({ "sld": { "StyledLayerDescriptor": function(sld) { var root = this.createElementNSPlus( @@ -394,19 +383,19 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { ); // add in optional name if(sld.name) { - this.writeNode(root, "Name", sld.name); + this.writeNode("Name", sld.name, root); } // add in optional title if(sld.title) { - this.writeNode(root, "Title", sld.title); + this.writeNode("Title", sld.title, root); } // add in optional description if(sld.description) { - this.writeNode(root, "Abstract", sld.description); + this.writeNode("Abstract", sld.description, root); } // add in named layers for(var name in sld.namedLayers) { - this.writeNode(root, "NamedLayer", sld.namedLayers[name]); + this.writeNode("NamedLayer", sld.namedLayers[name], root); } return root; }, @@ -425,7 +414,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { var node = this.createElementNSPlus("NamedLayer"); // add in required name - this.writeNode(node, "Name", layer.name); + this.writeNode("Name", layer.name, node); // optional sld:LayerFeatureConstraints here @@ -433,7 +422,7 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { if(layer.namedStyles) { for(var i=0, len=layer.namedStyles.length; i 0) { this.writeNode( - node, "ogc:PropertyName", - {property: item.substring(0, last)} + "ogc:PropertyName", + {property: item.substring(0, last)}, + node ); node.appendChild( this.createTextNode(item.substring(++last)) @@ -668,14 +663,14 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { "PolygonSymbolizer": function(symbolizer) { var node = this.createElementNSPlus("PolygonSymbolizer"); if(symbolizer.fillColor != undefined || - symbolizer.fillOpacity != undefined) { - this.writeNode(node, "Fill", symbolizer); + symbolizer.fillOpacity != undefined) { + this.writeNode("Fill", symbolizer, node); } if(symbolizer.strokeWidth != undefined || - symbolizer.strokeColor != undefined || - symbolizer.strokeOpacity != undefined || - symbolizer.strokeDashstyle != undefined) { - this.writeNode(node, "Stroke", symbolizer); + symbolizer.strokeColor != undefined || + symbolizer.strokeOpacity != undefined || + symbolizer.strokeDashstyle != undefined) { + this.writeNode("Stroke", symbolizer, node); } return node; }, @@ -687,57 +682,59 @@ OpenLayers.Format.SLD.v1 = OpenLayers.Class(OpenLayers.Format.XML, { // add in CssParameters if(symbolizer.fillColor) { this.writeNode( - node, "CssParameter", - {symbolizer: symbolizer, key: "fillColor"} + "CssParameter", + {symbolizer: symbolizer, key: "fillColor"}, + node ); } if(symbolizer.fillOpacity != null) { this.writeNode( - node, "CssParameter", - {symbolizer: symbolizer, key: "fillOpacity"} + "CssParameter", + {symbolizer: symbolizer, key: "fillOpacity"}, + node ); } return node; }, "PointSymbolizer": function(symbolizer) { var node = this.createElementNSPlus("PointSymbolizer"); - this.writeNode(node, "Graphic", symbolizer); + this.writeNode("Graphic", symbolizer, node); return node; }, "Graphic": function(symbolizer) { var node = this.createElementNSPlus("Graphic"); if(symbolizer.externalGraphic != undefined) { - this.writeNode(node, "ExternalGraphic", symbolizer); + this.writeNode("ExternalGraphic", symbolizer, node); } else if(symbolizer.graphicName) { - this.writeNode(node, "Mark", symbolizer); + this.writeNode("Mark", symbolizer, node); } if(symbolizer.graphicOpacity != undefined) { - this.writeNode(node, "Opacity", symbolizer.graphicOpacity); + this.writeNode("Opacity", symbolizer.graphicOpacity, node); } if(symbolizer.pointRadius != undefined) { - this.writeNode(node, "Size", symbolizer.pointRadius * 2); + this.writeNode("Size", symbolizer.pointRadius * 2, node); } if(symbolizer.rotation != undefined) { - this.writeNode(node, "Rotation", symbolizer.rotation); + this.writeNode("Rotation", symbolizer.rotation, node); } return node; }, "ExternalGraphic": function(symbolizer) { var node = this.createElementNSPlus("ExternalGraphic"); this.writeNode( - node, "OnlineResource", symbolizer.externalGraphic + "OnlineResource", symbolizer.externalGraphic, node ); var format = symbolizer.graphicFormat || this.getGraphicFormat(symbolizer.externalGraphic); - this.writeNode(node, "Format", format); + this.writeNode("Format", format, node); return node; }, "Mark": function(symbolizer) { var node = this.createElementNSPlus("Mark"); - this.writeNode(node, "WellKnownName", symbolizer.graphicName); - this.writeNode(node, "Fill", symbolizer); - this.writeNode(node, "Stroke", symbolizer); + this.writeNode("WellKnownName", symbolizer.graphicName, node); + this.writeNode("Fill", symbolizer, node); + this.writeNode("Stroke", symbolizer, node); return node; }, "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 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 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" }); diff --git a/tests/Format/SLD/v1_0_0.html b/tests/Format/SLD/v1_0_0.html index 7139b3e32a..6503e7de75 100644 --- a/tests/Format/SLD/v1_0_0.html +++ b/tests/Format/SLD/v1_0_0.html @@ -154,7 +154,7 @@ fillOpacity: 0 }; var root = parser.createElementNSPlus("PolygonSymbolizer"); - var got = parser.writeNode(root, "Fill", symbolizer); + var got = parser.writeNode("Fill", symbolizer, root); var expect = '' + 'red' +