No more looping through attributes and complex attributes; set all in the first pass instead.
This commit is contained in:
@@ -238,104 +238,78 @@ OpenLayers.Format.WMSCapabilities.v1 = OpenLayers.Class(
|
|||||||
obj.exception = {formats: []};
|
obj.exception = {formats: []};
|
||||||
this.readChildNodes(node, obj.exception);
|
this.readChildNodes(node, obj.exception);
|
||||||
},
|
},
|
||||||
"Layer": (function() {
|
"Layer": function(node, obj) {
|
||||||
var defaults = {
|
var parentLayer, capability;
|
||||||
cascaded: 0,
|
if (obj.capability) {
|
||||||
fixedWidth: 0,
|
capability = obj.capability;
|
||||||
fixedHeight: 0,
|
parentLayer = obj;
|
||||||
queryable: false,
|
} else {
|
||||||
opaque: false,
|
capability = obj;
|
||||||
noSubsets: false
|
}
|
||||||
},
|
var attrNode = node.getAttributeNode("queryable");
|
||||||
attributes = ["queryable", "cascaded", "fixedWidth",
|
var queryable = (attrNode && attrNode.specified) ?
|
||||||
"fixedHeight", "opaque", "noSubsets", "llbbox",
|
node.getAttribute("queryable") : null;
|
||||||
"minScale", "maxScale", "attribution"],
|
attrNode = node.getAttributeNode("cascaded");
|
||||||
complexAttr = ["srs", "bbox", "dimensions", "authorityURLs"];
|
var cascaded = (attrNode && attrNode.specified) ?
|
||||||
|
node.getAttribute("cascaded") : null;
|
||||||
return function(node, obj) {
|
attrNode = node.getAttributeNode("opaque");
|
||||||
var parentLayer, capability;
|
var opaque = (attrNode && attrNode.specified) ?
|
||||||
if (obj.capability) {
|
node.getAttribute('opaque') : null;
|
||||||
capability = obj.capability;
|
var noSubsets = node.getAttribute('noSubsets');
|
||||||
parentLayer = obj;
|
var fixedWidth = node.getAttribute('fixedWidth');
|
||||||
} else {
|
var fixedHeight = node.getAttribute('fixedHeight');
|
||||||
capability = obj;
|
var parent = parentLayer || {},
|
||||||
|
extend = OpenLayers.Util.extend;
|
||||||
|
var layer = {
|
||||||
|
nestedLayers: [],
|
||||||
|
styles: parentLayer ? [].concat(parentLayer.styles) : [],
|
||||||
|
srs: parentLayer ? extend({}, parent.srs) : {},
|
||||||
|
metadataURLs: [],
|
||||||
|
bbox: parentLayer ? extend({}, parent.bbox) : {},
|
||||||
|
llbbox: parent.llbbox,
|
||||||
|
dimensions: parentLayer ? extend({}, parent.dimensions) : {},
|
||||||
|
authorityURLs: parentLayer ? extend({}, parent.authorityURLs) : {},
|
||||||
|
identifiers: {},
|
||||||
|
keywords: [],
|
||||||
|
queryable: (queryable && queryable !== "") ?
|
||||||
|
(queryable === "1" || queryable === "true" ) :
|
||||||
|
(parent.queryable || false),
|
||||||
|
cascaded: (cascaded !== null) ? parseInt(cascaded) :
|
||||||
|
(parent.cascaded || 0),
|
||||||
|
opaque: opaque ?
|
||||||
|
(opaque === "1" || opaque === "true" ) :
|
||||||
|
(parent.opaque || false),
|
||||||
|
noSubsets: (noSubsets !== null) ?
|
||||||
|
(noSubsets === "1" || noSubsets === "true" ) :
|
||||||
|
(parent.noSubsets || false),
|
||||||
|
fixedWidth: (fixedWidth != null) ?
|
||||||
|
parseInt(fixedWidth) : (parent.fixedWidth || 0),
|
||||||
|
fixedHeight: (fixedHeight != null) ?
|
||||||
|
parseInt(fixedHeight) : (parent.fixedHeight || 0),
|
||||||
|
minScale: parent.minScale,
|
||||||
|
maxScale: parent.maxScale,
|
||||||
|
attribution: parent.attribution,
|
||||||
|
};
|
||||||
|
obj.nestedLayers.push(layer);
|
||||||
|
layer.capability = capability;
|
||||||
|
this.readChildNodes(node, layer);
|
||||||
|
delete layer.capability;
|
||||||
|
if(layer.name) {
|
||||||
|
var parts = layer.name.split(":"),
|
||||||
|
request = capability.request,
|
||||||
|
gfi = request.getfeatureinfo;
|
||||||
|
if(parts.length > 0) {
|
||||||
|
layer.prefix = parts[0];
|
||||||
}
|
}
|
||||||
var attrNode = node.getAttributeNode("queryable");
|
capability.layers.push(layer);
|
||||||
var queryable = (attrNode && attrNode.specified) ?
|
if (layer.formats === undefined) {
|
||||||
node.getAttribute("queryable") : null;
|
layer.formats = request.getmap.formats;
|
||||||
attrNode = node.getAttributeNode("cascaded");
|
}
|
||||||
var cascaded = (attrNode && attrNode.specified) ?
|
if (layer.infoFormats === undefined && gfi) {
|
||||||
node.getAttribute("cascaded") : null;
|
layer.infoFormats = gfi.formats;
|
||||||
attrNode = node.getAttributeNode("opaque");
|
|
||||||
var opaque = (attrNode && attrNode.specified) ?
|
|
||||||
node.getAttribute('opaque') : null;
|
|
||||||
var noSubsets = node.getAttribute('noSubsets');
|
|
||||||
var fixedWidth = node.getAttribute('fixedWidth');
|
|
||||||
var fixedHeight = node.getAttribute('fixedHeight');
|
|
||||||
var layer = {nestedLayers: [], styles: [], srs: {},
|
|
||||||
metadataURLs: [], bbox: {}, dimensions: {},
|
|
||||||
authorityURLs: {}, identifiers: {}, keywords: [],
|
|
||||||
queryable: (queryable && queryable !== "") ?
|
|
||||||
( queryable === "1" || queryable === "true" ) : null,
|
|
||||||
cascaded: (cascaded !== null) ? parseInt(cascaded) : null,
|
|
||||||
opaque: opaque ?
|
|
||||||
(opaque === "1" || opaque === "true" ) : null,
|
|
||||||
noSubsets: (noSubsets !== null) ?
|
|
||||||
( noSubsets === "1" || noSubsets === "true" ) : null,
|
|
||||||
fixedWidth: (fixedWidth != null) ?
|
|
||||||
parseInt(fixedWidth) : null,
|
|
||||||
fixedHeight: (fixedHeight != null) ?
|
|
||||||
parseInt(fixedHeight) : null
|
|
||||||
};
|
|
||||||
obj.nestedLayers.push(layer);
|
|
||||||
layer.capability = capability;
|
|
||||||
this.readChildNodes(node, layer);
|
|
||||||
delete layer.capability;
|
|
||||||
if(layer.name) {
|
|
||||||
var parts = layer.name.split(":"),
|
|
||||||
request = capability.request,
|
|
||||||
gfi = request.getfeatureinfo;
|
|
||||||
if(parts.length > 0) {
|
|
||||||
layer.prefix = parts[0];
|
|
||||||
}
|
|
||||||
capability.layers.push(layer);
|
|
||||||
if (layer.formats === undefined) {
|
|
||||||
layer.formats = request.getmap.formats;
|
|
||||||
}
|
|
||||||
if (layer.infoFormats === undefined && gfi) {
|
|
||||||
layer.infoFormats = gfi.formats;
|
|
||||||
}
|
|
||||||
|
|
||||||
// deal with property inheritance
|
|
||||||
if(parentLayer) {
|
|
||||||
// add style
|
|
||||||
layer.styles = layer.styles.concat(parentLayer.styles);
|
|
||||||
var parentValue, key, i, len;
|
|
||||||
|
|
||||||
for (i=0, len=attributes.length; i<len; i++) {
|
|
||||||
key = attributes[i];
|
|
||||||
if (key in parentLayer) {
|
|
||||||
// only take parent value if not present (null
|
|
||||||
// or undefined)
|
|
||||||
if (layer[key] == null) {
|
|
||||||
parentValue = parentLayer[key];
|
|
||||||
// if we haven't inherited anything from a
|
|
||||||
// parent layer set to default value
|
|
||||||
layer[key] = parentValue == null ?
|
|
||||||
defaults[key] : parentValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0, len=complexAttr.length; i<len; i++) {
|
|
||||||
key = complexAttr[i];
|
|
||||||
OpenLayers.Util.applyDefaults(
|
|
||||||
layer[key], parentLayer[key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})(),
|
},
|
||||||
"Attribution": function(node, obj) {
|
"Attribution": function(node, obj) {
|
||||||
obj.attribution = {};
|
obj.attribution = {};
|
||||||
this.readChildNodes(node, obj.attribution);
|
this.readChildNodes(node, obj.attribution);
|
||||||
|
|||||||
Reference in New Issue
Block a user