Merge branch 'master' of https://github.com/openlayers/openlayers into vendor-prefixes
This commit is contained in:
@@ -261,8 +261,11 @@ OpenLayers.Control.Navigation = OpenLayers.Class(OpenLayers.Control, {
|
||||
* deltaZ - {Integer}
|
||||
*/
|
||||
wheelChange: function(evt, deltaZ) {
|
||||
if (!this.map.fractionalZoom) {
|
||||
deltaZ = Math.round(deltaZ);
|
||||
}
|
||||
var currentZoom = this.map.getZoom();
|
||||
var newZoom = this.map.getZoom() + Math.round(deltaZ);
|
||||
var newZoom = this.map.getZoom() + deltaZ;
|
||||
newZoom = Math.max(newZoom, 0);
|
||||
newZoom = Math.min(newZoom, this.map.getNumZoomLevels());
|
||||
if (newZoom === currentZoom) {
|
||||
|
||||
@@ -127,6 +127,20 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
*/
|
||||
maximized: false,
|
||||
|
||||
/**
|
||||
* APIProperty: maximizeTitle
|
||||
* {String} This property is used for showing a tooltip over the
|
||||
* maximize div. Defaults to "" (no title).
|
||||
*/
|
||||
maximizeTitle: "",
|
||||
|
||||
/**
|
||||
* APIProperty: minimizeTitle
|
||||
* {String} This property is used for showing a tooltip over the
|
||||
* minimize div. Defaults to "" (no title).
|
||||
*/
|
||||
minimizeTitle: "",
|
||||
|
||||
/**
|
||||
* Constructor: OpenLayers.Control.OverviewMap
|
||||
* Create a new overview map
|
||||
@@ -247,6 +261,9 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
'absolute');
|
||||
this.maximizeDiv.style.display = 'none';
|
||||
this.maximizeDiv.className = this.displayClass + 'MaximizeButton olButton';
|
||||
if (this.maximizeTitle) {
|
||||
this.maximizeDiv.title = this.maximizeTitle;
|
||||
}
|
||||
this.div.appendChild(this.maximizeDiv);
|
||||
|
||||
// minimize button div
|
||||
@@ -259,6 +276,9 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
|
||||
'absolute');
|
||||
this.minimizeDiv.style.display = 'none';
|
||||
this.minimizeDiv.className = this.displayClass + 'MinimizeButton olButton';
|
||||
if (this.minimizeTitle) {
|
||||
this.minimizeDiv.title = this.minimizeTitle;
|
||||
}
|
||||
this.div.appendChild(this.minimizeDiv);
|
||||
this.minimizeControl();
|
||||
} else {
|
||||
|
||||
@@ -99,6 +99,7 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
|
||||
this.map.events.un({
|
||||
"changebaselayer": this.redraw,
|
||||
"updatesize": this.redraw,
|
||||
scope: this
|
||||
});
|
||||
|
||||
@@ -116,7 +117,11 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
*/
|
||||
setMap: function(map) {
|
||||
OpenLayers.Control.PanZoom.prototype.setMap.apply(this, arguments);
|
||||
this.map.events.register("changebaselayer", this, this.redraw);
|
||||
this.map.events.on({
|
||||
"changebaselayer": this.redraw,
|
||||
"updatesize": this.redraw,
|
||||
scope: this
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -189,6 +194,7 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
_addZoomBar:function(centered) {
|
||||
var imgLocation = OpenLayers.Util.getImageLocation("slider.png");
|
||||
var id = this.id + "_" + this.map.id;
|
||||
var minZoom = this.map.getMinZoom();
|
||||
var zoomsToEnd = this.map.getNumZoomLevels() - 1 - this.map.getZoom();
|
||||
var slider = OpenLayers.Util.createAlphaImageDiv(id,
|
||||
centered.add(-1, zoomsToEnd * this.zoomStopHeight),
|
||||
@@ -211,7 +217,7 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
|
||||
var sz = {
|
||||
w: this.zoomStopWidth,
|
||||
h: this.zoomStopHeight * this.map.getNumZoomLevels()
|
||||
h: this.zoomStopHeight * (this.map.getNumZoomLevels() - minZoom)
|
||||
};
|
||||
var imgLocation = OpenLayers.Util.getImageLocation("zoombar.png");
|
||||
var div = null;
|
||||
@@ -242,7 +248,7 @@ OpenLayers.Control.PanZoomBar = OpenLayers.Class(OpenLayers.Control.PanZoom, {
|
||||
this.map.events.register("zoomend", this, this.moveZoomBar);
|
||||
|
||||
centered = centered.add(0,
|
||||
this.zoomStopHeight * this.map.getNumZoomLevels());
|
||||
this.zoomStopHeight * (this.map.getNumZoomLevels() - minZoom));
|
||||
return centered;
|
||||
},
|
||||
|
||||
|
||||
@@ -300,14 +300,17 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
|
||||
*/
|
||||
unselectAll: function(options) {
|
||||
// we'll want an option to supress notification here
|
||||
var layers = this.layers || [this.layer];
|
||||
var layer, feature;
|
||||
for(var l=0; l<layers.length; ++l) {
|
||||
var layers = this.layers || [this.layer],
|
||||
layer, feature, l, numExcept;
|
||||
for(l=0; l<layers.length; ++l) {
|
||||
layer = layers[l];
|
||||
for(var i=layer.selectedFeatures.length-1; i>=0; --i) {
|
||||
feature = layer.selectedFeatures[i];
|
||||
numExcept = 0;
|
||||
while(layer.selectedFeatures.length > numExcept) {
|
||||
feature = layer.selectedFeatures[numExcept];
|
||||
if(!options || options.except != feature) {
|
||||
this.unselect(feature);
|
||||
} else {
|
||||
++numExcept;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ OpenLayers.Control.Split = OpenLayers.Class(OpenLayers.Control, {
|
||||
var deactivated = OpenLayers.Control.prototype.deactivate.call(this);
|
||||
if(deactivated) {
|
||||
if(this.source && this.source.events) {
|
||||
this.layer.events.un({
|
||||
this.source.events.un({
|
||||
sketchcomplete: this.onSketchComplete,
|
||||
afterfeaturemodified: this.afterFeatureModified,
|
||||
scope: this
|
||||
|
||||
@@ -41,9 +41,17 @@ OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
|
||||
|
||||
/**
|
||||
* APIProperty: alwaysZoom
|
||||
* {Boolean} Always zoom in/out, when box drawed
|
||||
* {Boolean} Always zoom in/out when box drawn, even if the zoom level does
|
||||
* not change.
|
||||
*/
|
||||
alwaysZoom: false,
|
||||
|
||||
/**
|
||||
* APIProperty: zoomOnClick
|
||||
* {Boolean} Should we zoom when no box was dragged, i.e. the user only
|
||||
* clicked? Default is true.
|
||||
*/
|
||||
zoomOnClick: true,
|
||||
|
||||
/**
|
||||
* Method: draw
|
||||
@@ -93,7 +101,7 @@ OpenLayers.Control.ZoomBox = OpenLayers.Class(OpenLayers.Control, {
|
||||
if (lastZoom == this.map.getZoom() && this.alwaysZoom == true){
|
||||
this.map.zoomTo(lastZoom + (this.out ? -1 : 1));
|
||||
}
|
||||
} else { // it's a pixel
|
||||
} else if (this.zoomOnClick) { // it's a pixel
|
||||
if (!this.out) {
|
||||
this.map.setCenter(this.map.getLonLatFromPixel(position),
|
||||
this.map.getZoom() + 1);
|
||||
|
||||
@@ -285,11 +285,9 @@ OpenLayers.Event = {
|
||||
if (elementObservers) {
|
||||
for(var i = elementObservers.length-1; i >= 0; i--) {
|
||||
var entry = elementObservers[i];
|
||||
var args = new Array(entry.element,
|
||||
entry.name,
|
||||
entry.observer,
|
||||
entry.useCapture);
|
||||
var removed = OpenLayers.Event.stopObserving.apply(this, args);
|
||||
OpenLayers.Event.stopObserving.apply(this, [
|
||||
entry.element, entry.name, entry.observer, entry.useCapture
|
||||
]);
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -824,7 +822,7 @@ OpenLayers.Events = OpenLayers.Class({
|
||||
*
|
||||
* Parameters:
|
||||
* type - {String}
|
||||
* evt - {Event}
|
||||
* evt - {Event || Object} will be passed to the listeners.
|
||||
*
|
||||
* Returns:
|
||||
* {Boolean} The last listener return. If a listener returns false, the
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Format.ArcXML
|
||||
* Read/Wite ArcXML. Create a new instance with the <OpenLayers.Format.ArcXML>
|
||||
* Read/Write ArcXML. Create a new instance with the <OpenLayers.Format.ArcXML>
|
||||
* constructor.
|
||||
*
|
||||
* Inherits from:
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Format.ArcXML.Features
|
||||
* Read/Wite ArcXML features. Create a new instance with the
|
||||
* Read/Write ArcXML features. Create a new instance with the
|
||||
* <OpenLayers.Format.ArcXML.Features> constructor.
|
||||
*
|
||||
* Inherits from:
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Format.Filter
|
||||
* Read/Wite ogc:Filter. Create a new instance with the <OpenLayers.Format.Filter>
|
||||
* Read/Write ogc:Filter. Create a new instance with the <OpenLayers.Format.Filter>
|
||||
* constructor.
|
||||
*
|
||||
* Inherits from:
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Format.GML
|
||||
* Read/Wite GML. Create a new instance with the <OpenLayers.Format.GML>
|
||||
* Read/Write GML. Create a new instance with the <OpenLayers.Format.GML>
|
||||
* constructor. Supports the GML simple features profile.
|
||||
*
|
||||
* Inherits from:
|
||||
|
||||
@@ -230,7 +230,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
}
|
||||
return OpenLayers.Format.XML.prototype.readNode.apply(this, [node, obj]);
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Property: readers
|
||||
* Contains public functions, grouped by namespace prefix, that will
|
||||
@@ -241,6 +241,9 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
*/
|
||||
readers: {
|
||||
"gml": {
|
||||
"_inherit": function(node, obj, container) {
|
||||
// To be implemented by version specific parsers
|
||||
},
|
||||
"featureMember": function(node, obj) {
|
||||
this.readChildNodes(node, obj);
|
||||
},
|
||||
@@ -309,6 +312,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"MultiPoint": function(node, container) {
|
||||
var obj = {components: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
container.components = [
|
||||
new OpenLayers.Geometry.MultiPoint(obj.components)
|
||||
@@ -319,6 +323,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"LineString": function(node, container) {
|
||||
var obj = {};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
if(!container.components) {
|
||||
container.components = [];
|
||||
@@ -329,6 +334,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"MultiLineString": function(node, container) {
|
||||
var obj = {components: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
container.components = [
|
||||
new OpenLayers.Geometry.MultiLineString(obj.components)
|
||||
@@ -339,6 +345,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"Polygon": function(node, container) {
|
||||
var obj = {outer: null, inner: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
obj.inner.unshift(obj.outer);
|
||||
if(!container.components) {
|
||||
@@ -350,6 +357,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"LinearRing": function(node, obj) {
|
||||
var container = {};
|
||||
this.readers.gml._inherit.apply(this, [node, container]);
|
||||
this.readChildNodes(node, container);
|
||||
obj.components = [new OpenLayers.Geometry.LinearRing(
|
||||
container.points
|
||||
@@ -357,6 +365,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"MultiPolygon": function(node, container) {
|
||||
var obj = {components: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
container.components = [
|
||||
new OpenLayers.Geometry.MultiPolygon(obj.components)
|
||||
@@ -367,6 +376,7 @@ OpenLayers.Format.GML.Base = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
},
|
||||
"GeometryCollection": function(node, container) {
|
||||
var obj = {components: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
container.components = [
|
||||
new OpenLayers.Geometry.Collection(obj.components)
|
||||
|
||||
@@ -90,11 +90,20 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
||||
*/
|
||||
readers: {
|
||||
"gml": OpenLayers.Util.applyDefaults({
|
||||
"_inherit": function(node, obj, container) {
|
||||
// SRSReferenceGroup attributes
|
||||
var dim = parseInt(node.getAttribute("srsDimension"), 10) ||
|
||||
(container && container.srsDimension);
|
||||
if (dim) {
|
||||
obj.srsDimension = dim;
|
||||
}
|
||||
},
|
||||
"featureMembers": function(node, obj) {
|
||||
this.readChildNodes(node, obj);
|
||||
},
|
||||
"Curve": function(node, container) {
|
||||
var obj = {points: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
if(!container.components) {
|
||||
container.components = [];
|
||||
@@ -135,7 +144,9 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
||||
this.regExes.trimSpace, ""
|
||||
);
|
||||
var coords = str.split(this.regExes.splitSpace);
|
||||
var dim = parseInt(node.getAttribute("dimension")) || 2;
|
||||
// The "dimension" attribute is from the GML 3.0.1 spec.
|
||||
var dim = obj.srsDimension ||
|
||||
parseInt(node.getAttribute("srsDimension") || node.getAttribute("dimension"), 10) || 2;
|
||||
var j, x, y, z;
|
||||
var numPoints = coords.length / dim;
|
||||
var points = new Array(numPoints);
|
||||
@@ -172,6 +183,7 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
||||
},
|
||||
"MultiCurve": function(node, container) {
|
||||
var obj = {components: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
if(obj.components.length > 0) {
|
||||
container.components = [
|
||||
@@ -184,6 +196,7 @@ OpenLayers.Format.GML.v3 = OpenLayers.Class(OpenLayers.Format.GML.Base, {
|
||||
},
|
||||
"MultiSurface": function(node, container) {
|
||||
var obj = {components: []};
|
||||
this.readers.gml._inherit.apply(this, [node, obj, container]);
|
||||
this.readChildNodes(node, obj);
|
||||
if(obj.components.length > 0) {
|
||||
container.components = [
|
||||
|
||||
@@ -311,8 +311,7 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
|
||||
/**
|
||||
* Method: parseStyles
|
||||
* Looks for <Style> nodes in the data and parses them
|
||||
* Also parses <StyleMap> nodes, but only uses the 'normal' key
|
||||
* Parses <Style> nodes
|
||||
*
|
||||
* Parameters:
|
||||
* nodes - {Array} of {DOMElement} data to read/parse.
|
||||
@@ -558,8 +557,7 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
|
||||
/**
|
||||
* Method: parseStyleMaps
|
||||
* Looks for <Style> nodes in the data and parses them
|
||||
* Also parses <StyleMap> nodes, but only uses the 'normal' key
|
||||
* Parses <StyleMap> nodes, but only uses the 'normal' key
|
||||
*
|
||||
* Parameters:
|
||||
* nodes - {Array} of {DOMElement} data to read/parse.
|
||||
@@ -1212,8 +1210,8 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
createPlacemarkXML: function(feature) {
|
||||
// Placemark name
|
||||
var placemarkName = this.createElementNS(this.kmlns, "name");
|
||||
var name = feature.style && feature.style.label ? feature.style.label :
|
||||
feature.attributes.name || feature.id;
|
||||
var label = (feature.style && feature.style.label) ? feature.style.label : feature.id;
|
||||
var name = feature.attributes.name || label;
|
||||
placemarkName.appendChild(this.createTextNode(name));
|
||||
|
||||
// Placemark description
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Format.SLD
|
||||
* Read/Wite SLD. Create a new instance with the <OpenLayers.Format.SLD>
|
||||
* Read/Write SLD. Create a new instance with the <OpenLayers.Format.SLD>
|
||||
* constructor.
|
||||
*
|
||||
* Inherits from:
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
/**
|
||||
* @requires OpenLayers/Format/XML.js
|
||||
* @requires OpenLayers/Format/OGCExceptionReport.js
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -187,8 +188,13 @@ OpenLayers.Format.WFSDescribeFeatureType = OpenLayers.Class(
|
||||
data = data.documentElement;
|
||||
}
|
||||
var schema = {};
|
||||
this.readNode(data, schema);
|
||||
|
||||
if (data.nodeName.split(":").pop() === 'ExceptionReport') {
|
||||
// an exception must have occurred, so parse it
|
||||
var parser = new OpenLayers.Format.OGCExceptionReport();
|
||||
schema.error = parser.read(data);
|
||||
} else {
|
||||
this.readNode(data, schema);
|
||||
}
|
||||
return schema;
|
||||
},
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
/**
|
||||
* @requires OpenLayers/Format/XML.js
|
||||
* @requires OpenLayers/Format/WFST.js
|
||||
* @requires OpenLayers/Filter/Spatial.js
|
||||
* @requires OpenLayers/Filter/FeatureId.js
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -127,6 +127,10 @@ OpenLayers.Format.WPSDescribeProcess = OpenLayers.Class(
|
||||
output.complexOutput = {};
|
||||
this.readChildNodes(node, output.complexOutput);
|
||||
},
|
||||
"LiteralOutput": function(node, output) {
|
||||
output.literalOutput = {};
|
||||
this.readChildNodes(node, output.literalOutput);
|
||||
},
|
||||
"Input": function(node, dataInputs) {
|
||||
var input = {
|
||||
maxOccurs: parseInt(node.getAttribute("maxOccurs")),
|
||||
|
||||
@@ -93,6 +93,28 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
return OpenLayers.Format.XML.prototype.write.apply(this, [node]);
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: read
|
||||
* Parse a WPS Execute and return an object with its information.
|
||||
*
|
||||
* Parameters:
|
||||
* data - {String} or {DOMElement} data to read/parse.
|
||||
*
|
||||
* Returns:
|
||||
* {Object}
|
||||
*/
|
||||
read: function(data) {
|
||||
if(typeof data == "string") {
|
||||
data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
|
||||
}
|
||||
if(data && data.nodeType == 9) {
|
||||
data = data.documentElement;
|
||||
}
|
||||
var info = {};
|
||||
this.readNode(data, info);
|
||||
return info;
|
||||
},
|
||||
|
||||
/**
|
||||
* Property: writers
|
||||
* As a compliment to the readers property, this structure contains public
|
||||
@@ -131,15 +153,20 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
status: responseDocument.status
|
||||
}
|
||||
});
|
||||
if (responseDocument.output) {
|
||||
this.writeNode("wps:Output", responseDocument.output, node);
|
||||
if (responseDocument.outputs) {
|
||||
for (var i = 0, len = responseDocument.outputs.length; i < len; i++) {
|
||||
this.writeNode("wps:Output", responseDocument.outputs[i], node);
|
||||
}
|
||||
}
|
||||
return node;
|
||||
},
|
||||
"Output": function(output) {
|
||||
var node = this.createElementNSPlus("wps:Output", {
|
||||
attributes: {
|
||||
asReference: output.asReference
|
||||
asReference: output.asReference,
|
||||
mimeType: output.mimeType,
|
||||
encoding: output.encoding,
|
||||
schema: output.schema
|
||||
}
|
||||
});
|
||||
this.writeNode("ows:Identifier", output.identifier, node);
|
||||
@@ -150,7 +177,9 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"RawDataOutput": function(rawDataOutput) {
|
||||
var node = this.createElementNSPlus("wps:RawDataOutput", {
|
||||
attributes: {
|
||||
mimeType: rawDataOutput.mimeType
|
||||
mimeType: rawDataOutput.mimeType,
|
||||
encoding: rawDataOutput.encoding,
|
||||
schema: rawDataOutput.schema
|
||||
}
|
||||
});
|
||||
this.writeNode("ows:Identifier", rawDataOutput.identifier, node);
|
||||
@@ -186,6 +215,8 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
this.writeNode("wps:LiteralData", data.literalData, node);
|
||||
} else if (data.complexData) {
|
||||
this.writeNode("wps:ComplexData", data.complexData, node);
|
||||
} else if (data.boundingBoxData) {
|
||||
this.writeNode("ows:BoundingBox", data.boundingBoxData, node);
|
||||
}
|
||||
return node;
|
||||
},
|
||||
@@ -256,6 +287,107 @@ OpenLayers.Format.WPSExecute = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
"ogc": OpenLayers.Format.Filter.v1_1_0.prototype.writers.ogc,
|
||||
"ows": OpenLayers.Format.OWSCommon.v1_1_0.prototype.writers.ows
|
||||
},
|
||||
|
||||
/**
|
||||
* Property: readers
|
||||
* Contains public functions, grouped by namespace prefix, that will
|
||||
* be applied when a namespaced node is found matching the function
|
||||
* name. The function will be applied in the scope of this parser
|
||||
* with two arguments: the node being read and a context object passed
|
||||
* from the parent.
|
||||
*/
|
||||
readers: {
|
||||
"wps": {
|
||||
"ExecuteResponse": function(node, obj) {
|
||||
obj.executeResponse = {
|
||||
lang: node.getAttribute("lang"),
|
||||
statusLocation: node.getAttribute("statusLocation"),
|
||||
serviceInstance: node.getAttribute("serviceInstance"),
|
||||
service: node.getAttribute("service")
|
||||
};
|
||||
this.readChildNodes(node, obj.executeResponse);
|
||||
},
|
||||
"Process":function(node,obj) {
|
||||
obj.process = {};
|
||||
this.readChildNodes(node, obj.process);
|
||||
},
|
||||
"Status":function(node,obj) {
|
||||
obj.status = {
|
||||
creationTime: node.getAttribute("creationTime")
|
||||
};
|
||||
this.readChildNodes(node, obj.status);
|
||||
},
|
||||
"ProcessSucceeded": function(node,obj) {
|
||||
obj.processSucceeded = true;
|
||||
},
|
||||
"ProcessOutputs": function(node, processDescription) {
|
||||
processDescription.processOutputs = [];
|
||||
this.readChildNodes(node, processDescription.processOutputs);
|
||||
},
|
||||
"Output": function(node, processOutputs) {
|
||||
var output = {};
|
||||
this.readChildNodes(node, output);
|
||||
processOutputs.push(output);
|
||||
},
|
||||
"Reference": function(node, output) {
|
||||
output.reference = {
|
||||
href: node.getAttribute("href"),
|
||||
mimeType: node.getAttribute("mimeType"),
|
||||
encoding: node.getAttribute("encoding"),
|
||||
schema: node.getAttribute("schema")
|
||||
};
|
||||
},
|
||||
"Data": function(node, output) {
|
||||
output.data = {};
|
||||
this.readChildNodes(node, output);
|
||||
},
|
||||
"LiteralData": function(node, output) {
|
||||
output.literalData = {
|
||||
dataType: node.getAttribute("dataType"),
|
||||
uom: node.getAttribute("uom"),
|
||||
value: this.getChildValue(node)
|
||||
};
|
||||
},
|
||||
"ComplexData": function(node, output) {
|
||||
output.complexData = {
|
||||
mimeType: node.getAttribute("mimeType"),
|
||||
schema: node.getAttribute("schema"),
|
||||
encoding: node.getAttribute("encoding"),
|
||||
value: ""
|
||||
};
|
||||
|
||||
// try to get *some* value, ignore the empty text values
|
||||
if (this.isSimpleContent(node)) {
|
||||
var child;
|
||||
for(child=node.firstChild; child; child=child.nextSibling) {
|
||||
switch(child.nodeType) {
|
||||
case 3: // text node
|
||||
case 4: // cdata section
|
||||
output.complexData.value += child.nodeValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(child=node.firstChild; child; child=child.nextSibling) {
|
||||
if (child.nodeType == 1) {
|
||||
output.complexData.value = child;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
"BoundingBox": function(node, output) {
|
||||
output.boundingBoxData = {
|
||||
dimensions: node.getAttribute("dimensions"),
|
||||
crs: node.getAttribute("crs")
|
||||
};
|
||||
this.readChildNodes(node, output.boundingBoxData);
|
||||
}
|
||||
},
|
||||
|
||||
// TODO: we should add Exception parsing here
|
||||
"ows": OpenLayers.Format.OWSCommon.v1_1_0.prototype.readers["ows"]
|
||||
},
|
||||
|
||||
CLASS_NAME: "OpenLayers.Format.WPSExecute"
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Format.XLS
|
||||
* Read/Wite XLS (OpenLS). Create a new instance with the <OpenLayers.Format.XLS>
|
||||
* Read/Write XLS (OpenLS). Create a new instance with the <OpenLayers.Format.XLS>
|
||||
* constructor. Currently only implemented for Location Utility Services, more
|
||||
* specifically only for Geocoding. No support for Reverse Geocoding as yet.
|
||||
*
|
||||
|
||||
@@ -139,7 +139,8 @@ OpenLayers.Handler = OpenLayers.Class({
|
||||
var keyModifiers =
|
||||
(evt.shiftKey ? OpenLayers.Handler.MOD_SHIFT : 0) |
|
||||
(evt.ctrlKey ? OpenLayers.Handler.MOD_CTRL : 0) |
|
||||
(evt.altKey ? OpenLayers.Handler.MOD_ALT : 0);
|
||||
(evt.altKey ? OpenLayers.Handler.MOD_ALT : 0) |
|
||||
(evt.metaKey ? OpenLayers.Handler.MOD_META : 0);
|
||||
|
||||
/* if it differs from the handler object's key mask,
|
||||
bail out of the event handler */
|
||||
@@ -232,12 +233,12 @@ OpenLayers.Handler = OpenLayers.Class({
|
||||
* to get more information about the event that the handler is
|
||||
* processing.
|
||||
*
|
||||
* This allows modifier keys on the event to be checked (alt, shift,
|
||||
* and ctrl cannot be checked with the keyboard handler). For a
|
||||
* This allows modifier keys on the event to be checked (alt, shift, ctrl,
|
||||
* and meta cannot be checked with the keyboard handler). For a
|
||||
* control to determine which modifier keys are associated with the
|
||||
* event that a handler is currently processing, it should access
|
||||
* (code)handler.evt.altKey || handler.evt.shiftKey ||
|
||||
* handler.evt.ctrlKey(end).
|
||||
* handler.evt.ctrlKey || handler.evt.metaKey(end).
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {Event} The browser event.
|
||||
@@ -285,4 +286,10 @@ OpenLayers.Handler.MOD_CTRL = 2;
|
||||
*/
|
||||
OpenLayers.Handler.MOD_ALT = 4;
|
||||
|
||||
/**
|
||||
* Constant: OpenLayers.Handler.MOD_META
|
||||
* If set as the <keyMask>, <checkModifiers> returns false if Cmd is down.
|
||||
*/
|
||||
OpenLayers.Handler.MOD_META = 8;
|
||||
|
||||
|
||||
|
||||
@@ -21,14 +21,6 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
*/
|
||||
wheelListener: null,
|
||||
|
||||
/**
|
||||
* Property: mousePosition
|
||||
* {<OpenLayers.Pixel>} mousePosition is necessary because
|
||||
* evt.clientX/Y is buggy in Moz on wheel events, so we cache and use the
|
||||
* value from the last mousemove.
|
||||
*/
|
||||
mousePosition: null,
|
||||
|
||||
/**
|
||||
* Property: interval
|
||||
* {Integer} In order to increase server performance, an interval (in
|
||||
@@ -54,7 +46,7 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
* negative)
|
||||
*/
|
||||
cumulative: true,
|
||||
|
||||
|
||||
/**
|
||||
* Constructor: OpenLayers.Handler.MouseWheel
|
||||
*
|
||||
@@ -101,12 +93,13 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
|
||||
// Ride up the element's DOM hierarchy to determine if it or any of
|
||||
// its ancestors was:
|
||||
// * specifically marked as scrollable
|
||||
// * one of our layer divs
|
||||
// * specifically marked as scrollable (CSS overflow property)
|
||||
// * one of our layer divs or a div marked as scrollable
|
||||
// ('olScrollable' CSS class)
|
||||
// * the map div
|
||||
//
|
||||
var overScrollableDiv = false;
|
||||
var overLayerDiv = false;
|
||||
var allowScroll = false;
|
||||
var overMapDiv = false;
|
||||
|
||||
var elem = OpenLayers.Event.element(e);
|
||||
@@ -114,12 +107,13 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
|
||||
if (!overScrollableDiv) {
|
||||
try {
|
||||
var overflow;
|
||||
if (elem.currentStyle) {
|
||||
overflow = elem.currentStyle["overflow"];
|
||||
} else {
|
||||
var style =
|
||||
document.defaultView.getComputedStyle(elem, null);
|
||||
var overflow = style.getPropertyValue("overflow");
|
||||
overflow = style.getPropertyValue("overflow");
|
||||
}
|
||||
overScrollableDiv = ( overflow &&
|
||||
(overflow == "auto") || (overflow == "scroll") );
|
||||
@@ -129,15 +123,18 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
}
|
||||
}
|
||||
|
||||
if (!overLayerDiv) {
|
||||
for(var i=0, len=this.map.layers.length; i<len; i++) {
|
||||
// Are we in the layer div? Note that we have two cases
|
||||
// here: one is to catch EventPane layers, which have a
|
||||
// pane above the layer (layer.pane)
|
||||
if (elem == this.map.layers[i].div
|
||||
|| elem == this.map.layers[i].pane) {
|
||||
overLayerDiv = true;
|
||||
break;
|
||||
if (!allowScroll) {
|
||||
allowScroll = OpenLayers.Element.hasClass(elem, 'olScrollable');
|
||||
if (!allowScroll) {
|
||||
for (var i = 0, len = this.map.layers.length; i < len; i++) {
|
||||
// Are we in the layer div? Note that we have two cases
|
||||
// here: one is to catch EventPane layers, which have a
|
||||
// pane above the layer (layer.pane)
|
||||
var layer = this.map.layers[i];
|
||||
if (elem == layer.div || elem == layer.pane) {
|
||||
allowScroll = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -153,7 +150,7 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
//
|
||||
// otherwise
|
||||
//
|
||||
// If we are over the layer div:
|
||||
// If we are over the layer div or a 'olScrollable' div:
|
||||
// * zoom/in out
|
||||
// then
|
||||
// * kill event (so as not to also scroll the page after zooming)
|
||||
@@ -164,18 +161,23 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
// layerswitcher or the pan/zoom control)
|
||||
//
|
||||
if (!overScrollableDiv && overMapDiv) {
|
||||
if (overLayerDiv) {
|
||||
if (allowScroll) {
|
||||
var delta = 0;
|
||||
if (!e) {
|
||||
e = window.event;
|
||||
}
|
||||
|
||||
if (e.wheelDelta) {
|
||||
delta = e.wheelDelta/120;
|
||||
if (window.opera && window.opera.version() < 9.2) {
|
||||
delta = -delta;
|
||||
delta = e.wheelDelta;
|
||||
if (delta % 160 === 0) {
|
||||
// opera have steps of 160 instead of 120
|
||||
delta = delta * 0.75;
|
||||
}
|
||||
delta = delta / 120;
|
||||
} else if (e.detail) {
|
||||
delta = -e.detail / 3;
|
||||
// detail in Firefox on OS X is 1/3 of Windows
|
||||
// so force delta 1 / -1
|
||||
delta = - (e.detail / Math.abs(e.detail));
|
||||
}
|
||||
this.delta = this.delta + delta;
|
||||
|
||||
@@ -208,23 +210,7 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
this.delta = 0;
|
||||
|
||||
if (delta) {
|
||||
// add the mouse position to the event because mozilla has
|
||||
// a bug with clientX and clientY (see
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=352179)
|
||||
// getLonLatFromViewPortPx(e) returns wrong values
|
||||
if (this.mousePosition) {
|
||||
e.xy = this.mousePosition;
|
||||
}
|
||||
if (!e.xy) {
|
||||
// If the mouse hasn't moved over the map yet, then
|
||||
// we don't have a mouse position (in FF), so we just
|
||||
// act as if the mouse was at the center of the map.
|
||||
// Note that we can tell we are in the map -- and
|
||||
// this.map is ensured to be true above.
|
||||
e.xy = this.map.getPixelFromLonLat(
|
||||
this.map.getCenter()
|
||||
);
|
||||
}
|
||||
e.xy = this.map.events.getMousePosition(e);
|
||||
if (delta < 0) {
|
||||
this.callback("down", [e, this.cumulative ? delta : -1]);
|
||||
} else {
|
||||
@@ -233,20 +219,6 @@ OpenLayers.Handler.MouseWheel = OpenLayers.Class(OpenLayers.Handler, {
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: mousemove
|
||||
* Update the stored mousePosition on every move.
|
||||
*
|
||||
* Parameters:
|
||||
* evt - {Event} The browser event
|
||||
*
|
||||
* Returns:
|
||||
* {Boolean} Allow event propagation
|
||||
*/
|
||||
mousemove: function (evt) {
|
||||
this.mousePosition = evt.xy;
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: activate
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,13 @@
|
||||
|
||||
/**
|
||||
* Class: OpenLayers.Layer.EventPane
|
||||
* Base class for 3rd party layers. Create a new event pane layer with the
|
||||
* Base class for 3rd party layers, providing a DOM element which isolates
|
||||
* the 3rd-party layer from mouse events.
|
||||
* Only used by Google layers.
|
||||
*
|
||||
* Automatically instantiated by the Google constructor, and not usually instantiated directly.
|
||||
*
|
||||
* Create a new event pane layer with the
|
||||
* <OpenLayers.Layer.EventPane> constructor.
|
||||
*
|
||||
* Inherits from:
|
||||
|
||||
@@ -14,6 +14,11 @@
|
||||
/**
|
||||
* Class: OpenLayers.Layer.Google
|
||||
*
|
||||
* Provides a wrapper for Google's Maps API
|
||||
* Normally the Terms of Use for this API do not allow wrapping, but Google
|
||||
* have provided written consent to OpenLayers for this - see email in
|
||||
* http://osgeo-org.1560.n6.nabble.com/Google-Maps-API-Terms-of-Use-changes-tp4910013p4911981.html
|
||||
*
|
||||
* Inherits from:
|
||||
* - <OpenLayers.Layer.SphericalMercator>
|
||||
* - <OpenLayers.Layer.EventPane>
|
||||
@@ -462,6 +467,10 @@ OpenLayers.Layer.Google.cache = {};
|
||||
* Constant: OpenLayers.Layer.Google.v2
|
||||
*
|
||||
* Mixin providing functionality specific to the Google Maps API v2.
|
||||
*
|
||||
* This API has been deprecated by Google.
|
||||
* Developers are encouraged to migrate to v3 of the API; support for this
|
||||
* is provided by <OpenLayers.Layer.Google.v3>
|
||||
*/
|
||||
OpenLayers.Layer.Google.v2 = {
|
||||
|
||||
|
||||
@@ -11,15 +11,42 @@
|
||||
/**
|
||||
* Constant: OpenLayers.Layer.Google.v3
|
||||
*
|
||||
* Mixin providing functionality specific to the Google Maps API v3 <= v3.6.
|
||||
* Note that this layer configures the google.maps.map object with the
|
||||
* "disableDefaultUI" option set to true. Using UI controls that the Google
|
||||
* Maps API provides is not supported by the OpenLayers API. To use this layer,
|
||||
* you must include the GMaps API (<= v3.6) in your html:
|
||||
* Mixin providing functionality specific to the Google Maps API v3.
|
||||
*
|
||||
* To use this layer, you must include the GMaps v3 API in your html.
|
||||
*
|
||||
* Because OpenLayers needs to control mouse events, it isolates the GMaps mapObject
|
||||
* (the DOM elements provided by Google) using the EventPane.
|
||||
* However, because the Terms of Use require some of those elements,
|
||||
* such as the links to Google's terms, to be clickable, these elements have
|
||||
* to be moved up to OpenLayers' container div. There is however no easy way
|
||||
* to identify these, and the logic (see the repositionMapElements function
|
||||
* in the source) may need to be changed if Google changes them.
|
||||
* These elements are not part of the published API and can be changed at any time,
|
||||
* so a given OpenLayers release can only guarantee support for the 'frozen'
|
||||
* Google release at the time of the OpenLayers release. See
|
||||
* https://developers.google.com/maps/documentation/javascript/basics#Versioning
|
||||
* for Google's current release cycle.
|
||||
*
|
||||
* For this reason, it's recommended that production code specifically loads
|
||||
* the current frozen version, for example:
|
||||
*
|
||||
* (code)
|
||||
* <script src="http://maps.google.com/maps/api/js?v=3.6&sensor=false"></script>
|
||||
* <script src="http://maps.google.com/maps/api/js?v=3.7&sensor=false"></script>
|
||||
* (end)
|
||||
*
|
||||
* but that development code should use the latest 'nightly' version, so that any
|
||||
* problems can be dealt with as soon as they arise, and before they affect the production, 'frozen', code.
|
||||
*
|
||||
* Note, however, that frozen versions are retired as part of Google's release
|
||||
* cycle, and once this happens, you will get the next version, in the example above, 3.8 once 3.7 is retired.
|
||||
*
|
||||
* This version supports 3.7.
|
||||
*
|
||||
*
|
||||
* Note that this layer configures the google.maps.map object with the
|
||||
* "disableDefaultUI" option set to true. Using UI controls that the Google
|
||||
* Maps API provides is not supported by the OpenLayers API.
|
||||
*/
|
||||
OpenLayers.Layer.Google.v3 = {
|
||||
|
||||
@@ -137,27 +164,31 @@ OpenLayers.Layer.Google.v3 = {
|
||||
var cache = OpenLayers.Layer.Google.cache[this.map.id];
|
||||
var container = this.map.viewPortDiv;
|
||||
|
||||
// move the Map Data popup to the container, if any
|
||||
while (div.lastChild.style.display == "none") {
|
||||
container.appendChild(div.lastChild);
|
||||
}
|
||||
|
||||
// move the ToS and branding stuff up to the container div
|
||||
var termsOfUse = div.lastChild;
|
||||
container.appendChild(termsOfUse);
|
||||
termsOfUse.style.zIndex = "1100";
|
||||
termsOfUse.style.bottom = "";
|
||||
termsOfUse.className = "olLayerGoogleCopyright olLayerGoogleV3";
|
||||
termsOfUse.style.display = "";
|
||||
cache.termsOfUse = termsOfUse;
|
||||
|
||||
var poweredBy = div.lastChild;
|
||||
container.appendChild(poweredBy);
|
||||
poweredBy.style.zIndex = "1100";
|
||||
poweredBy.style.bottom = "";
|
||||
poweredBy.className = "olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint";
|
||||
poweredBy.style.display = "";
|
||||
cache.poweredBy = poweredBy;
|
||||
// depends on value of zIndex, which is not robust
|
||||
for (var i=div.children.length-1; i>=0; --i) {
|
||||
if (div.children[i].style.zIndex == 1000001) {
|
||||
var termsOfUse = div.children[i];
|
||||
container.appendChild(termsOfUse);
|
||||
termsOfUse.style.zIndex = "1100";
|
||||
termsOfUse.style.bottom = "";
|
||||
termsOfUse.className = "olLayerGoogleCopyright olLayerGoogleV3";
|
||||
termsOfUse.style.display = "";
|
||||
cache.termsOfUse = termsOfUse;
|
||||
}
|
||||
if (div.children[i].style.zIndex == 1000000) {
|
||||
var poweredBy = div.children[i];
|
||||
container.appendChild(poweredBy);
|
||||
poweredBy.style.zIndex = "1100";
|
||||
poweredBy.style.bottom = "";
|
||||
poweredBy.className = "olLayerGooglePoweredBy olLayerGoogleV3 gmnoprint";
|
||||
poweredBy.style.display = "";
|
||||
cache.poweredBy = poweredBy;
|
||||
}
|
||||
if (div.children[i].style.zIndex == 10000002) {
|
||||
container.appendChild(div.children[i]);
|
||||
}
|
||||
}
|
||||
|
||||
this.setGMapVisibility(this.visibility);
|
||||
|
||||
|
||||
@@ -1302,19 +1302,20 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
|
||||
* columns - {Integer} Maximum number of columns we want our grid to have.
|
||||
*/
|
||||
removeExcessTiles: function(rows, columns) {
|
||||
var i, l;
|
||||
|
||||
// remove extra rows
|
||||
while (this.grid.length > rows) {
|
||||
var row = this.grid.pop();
|
||||
for (var i=0, l=row.length; i<l; i++) {
|
||||
for (i=0, l=row.length; i<l; i++) {
|
||||
var tile = row[i];
|
||||
this.destroyTile(tile);
|
||||
}
|
||||
}
|
||||
|
||||
// remove extra columns
|
||||
while (this.grid[0].length > columns) {
|
||||
for (var i=0, l=this.grid.length; i<l; i++) {
|
||||
for (i=0, l=this.grid.length; i<l; i++) {
|
||||
while (this.grid[i].length > columns) {
|
||||
var row = this.grid[i];
|
||||
var tile = row.pop();
|
||||
this.destroyTile(tile);
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* This Layer reads from UTFGrid tiled data sources. Since UTFGrids are
|
||||
* essentially JSON-based ASCII art with attached attributes, they are not
|
||||
* visibly rendered. In order to use them in the map, you must add a
|
||||
* <OpenLayers.Control.UTFGrid> ontrol as well.
|
||||
* <OpenLayers.Control.UTFGrid> control as well.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
|
||||
@@ -83,6 +83,7 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
* mouseout - triggered after mouseout the map
|
||||
* mousemove - triggered after mousemove the map
|
||||
* changebaselayer - triggered after the base layer changes
|
||||
* updatesize - triggered after the <updateSize> method was executed
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -662,6 +663,7 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
* be properly set below.
|
||||
*/
|
||||
delete this.center;
|
||||
delete this.zoom;
|
||||
this.addLayers(options.layers);
|
||||
// set center (and optionally zoom)
|
||||
if (options.center && !this.getCenter()) {
|
||||
@@ -1489,6 +1491,7 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
|
||||
}
|
||||
}
|
||||
this.events.triggerEvent("updatesize");
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -1783,18 +1786,42 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
* <baseLayer>'s maxExtent.
|
||||
*/
|
||||
adjustZoom: function(zoom) {
|
||||
var resolution, resolutions = this.baseLayer.resolutions,
|
||||
maxResolution = this.getMaxExtent().getWidth() / this.size.w;
|
||||
if (this.getResolutionForZoom(zoom) > maxResolution) {
|
||||
for (var i=zoom|0, ii=resolutions.length; i<ii; ++i) {
|
||||
if (resolutions[i] <= maxResolution) {
|
||||
zoom = i;
|
||||
break;
|
||||
}
|
||||
if (this.baseLayer && this.baseLayer.wrapDateLine) {
|
||||
var resolution, resolutions = this.baseLayer.resolutions,
|
||||
maxResolution = this.getMaxExtent().getWidth() / this.size.w;
|
||||
if (this.getResolutionForZoom(zoom) > maxResolution) {
|
||||
if (this.fractionalZoom) {
|
||||
zoom = this.getZoomForResolution(maxResolution);
|
||||
} else {
|
||||
for (var i=zoom|0, ii=resolutions.length; i<ii; ++i) {
|
||||
if (resolutions[i] <= maxResolution) {
|
||||
zoom = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return zoom;
|
||||
},
|
||||
|
||||
/**
|
||||
* APIMethod: getMinZoom
|
||||
* Returns the minimum zoom level for the current map view. If the base
|
||||
* layer is configured with <wrapDateLine> set to true, this will be the
|
||||
* first zoom level that shows no more than one world width in the current
|
||||
* map viewport. Components that rely on this value (e.g. zoom sliders)
|
||||
* should also listen to the map's "updatesize" event and call this method
|
||||
* in the "updatesize" listener.
|
||||
*
|
||||
* Returns:
|
||||
* {Number} Minimum zoom level that shows a map not wider than its
|
||||
* <baseLayer>'s maxExtent. This is an Integer value, unless the map is
|
||||
* configured with <fractionalZoom> set to true.
|
||||
*/
|
||||
getMinZoom: function() {
|
||||
return this.adjustZoom(0);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method: moveTo
|
||||
@@ -1817,13 +1844,11 @@ OpenLayers.Map = OpenLayers.Class({
|
||||
zoom = Math.round(zoom);
|
||||
}
|
||||
}
|
||||
if (this.baseLayer.wrapDateLine) {
|
||||
var requestedZoom = zoom;
|
||||
zoom = this.adjustZoom(zoom);
|
||||
if (zoom !== requestedZoom) {
|
||||
// zoom was adjusted, so keep old lonlat to avoid panning
|
||||
lonlat = this.getCenter();
|
||||
}
|
||||
var requestedZoom = zoom;
|
||||
zoom = this.adjustZoom(zoom);
|
||||
if (zoom !== requestedZoom) {
|
||||
// zoom was adjusted, so keep old lonlat to avoid panning
|
||||
lonlat = this.getCenter();
|
||||
}
|
||||
// dragging is false by default
|
||||
var dragging = options.dragging || this.dragging;
|
||||
|
||||
@@ -107,11 +107,8 @@ OpenLayers.Popup.Anchored =
|
||||
moveTo: function(px) {
|
||||
var oldRelativePosition = this.relativePosition;
|
||||
this.relativePosition = this.calculateRelativePosition(px);
|
||||
|
||||
var newPx = this.calculateNewPx(px);
|
||||
|
||||
var newArguments = new Array(newPx);
|
||||
OpenLayers.Popup.prototype.moveTo.apply(this, newArguments);
|
||||
|
||||
OpenLayers.Popup.prototype.moveTo.call(this, this.calculateNewPx(px));
|
||||
|
||||
//if this move has caused the popup to change its relative position,
|
||||
// we need to make the appropriate cosmetic changes.
|
||||
|
||||
@@ -449,7 +449,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, {
|
||||
*/
|
||||
createRenderRoot: function() {
|
||||
var svg = this.nodeFactory(this.container.id + "_svgRoot", "svg");
|
||||
svg.style.position = "absolute";
|
||||
svg.style.display = "block";
|
||||
return svg;
|
||||
},
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ var OpenLayers = {
|
||||
/**
|
||||
* Constant: VERSION_NUMBER
|
||||
*/
|
||||
VERSION_NUMBER: "Release 2.12-rc3",
|
||||
VERSION_NUMBER: "Release 2.12-rc7",
|
||||
|
||||
/**
|
||||
* Constant: singleFile
|
||||
|
||||
@@ -339,9 +339,9 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
|
||||
*/
|
||||
setImgSrc: function(url) {
|
||||
var img = this.imgDiv;
|
||||
img.style.visibility = 'hidden';
|
||||
img.style.opacity = 0;
|
||||
if (url) {
|
||||
img.style.visibility = 'hidden';
|
||||
img.style.opacity = 0;
|
||||
// don't set crossOrigin if the url is a data URL
|
||||
if (this.crossOriginKeyword) {
|
||||
if (url.substr(0, 5) !== 'data:') {
|
||||
@@ -351,6 +351,13 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
|
||||
}
|
||||
}
|
||||
img.src = url;
|
||||
} else {
|
||||
// Remove reference to the image, and leave it to the browser's
|
||||
// caching and garbage collection.
|
||||
this.imgDiv = null;
|
||||
if (img.parentNode) {
|
||||
img.parentNode.removeChild(img);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -74,13 +74,6 @@ OpenLayers.Util.isArray = function(a) {
|
||||
return (Object.prototype.toString.call(a) === '[object Array]');
|
||||
};
|
||||
|
||||
/**
|
||||
* Maintain existing definition of $.
|
||||
*/
|
||||
if(typeof window.$ === "undefined") {
|
||||
window.$ = OpenLayers.Util.getElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function: removeItem
|
||||
* Remove an object from an array. Iterates through the array
|
||||
@@ -1634,6 +1627,33 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
|
||||
|
||||
var containerElement = (options && options.containerElement)
|
||||
? options.containerElement : document.body;
|
||||
|
||||
// Opera and IE7 can't handle a node with position:aboslute if it inherits
|
||||
// position:absolute from a parent.
|
||||
var parentHasPositionAbsolute = false;
|
||||
var superContainer = null;
|
||||
var parent = containerElement;
|
||||
while (parent && parent.tagName.toLowerCase()!="body") {
|
||||
var parentPosition = OpenLayers.Element.getStyle(parent, "position");
|
||||
if(parentPosition == "absolute") {
|
||||
parentHasPositionAbsolute = true;
|
||||
break;
|
||||
} else if (parentPosition && parentPosition != "static") {
|
||||
break;
|
||||
}
|
||||
parent = parent.parentNode;
|
||||
}
|
||||
if(parentHasPositionAbsolute && (containerElement.clientHeight === 0 ||
|
||||
containerElement.clientWidth === 0) ){
|
||||
superContainer = document.createElement("div");
|
||||
superContainer.style.visibility = "hidden";
|
||||
superContainer.style.position = "absolute";
|
||||
superContainer.style.overflow = "visible";
|
||||
superContainer.style.width = document.body.clientWidth + "px";
|
||||
superContainer.style.height = document.body.clientHeight + "px";
|
||||
superContainer.appendChild(container);
|
||||
}
|
||||
container.style.position = "absolute";
|
||||
|
||||
//fix a dimension, if specified.
|
||||
if (size) {
|
||||
@@ -1668,25 +1688,10 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
|
||||
container.appendChild(content);
|
||||
|
||||
// append container to body for rendering
|
||||
containerElement.appendChild(container);
|
||||
|
||||
// Opera and IE7 can't handle a node with position:aboslute if it inherits
|
||||
// position:absolute from a parent.
|
||||
var parentHasPositionAbsolute = false;
|
||||
var parent = container.parentNode;
|
||||
while (parent && parent.tagName.toLowerCase()!="body") {
|
||||
var parentPosition = OpenLayers.Element.getStyle(parent, "position");
|
||||
if(parentPosition == "absolute") {
|
||||
parentHasPositionAbsolute = true;
|
||||
break;
|
||||
} else if (parentPosition && parentPosition != "static") {
|
||||
break;
|
||||
}
|
||||
parent = parent.parentNode;
|
||||
}
|
||||
|
||||
if(!parentHasPositionAbsolute) {
|
||||
container.style.position = "absolute";
|
||||
if (superContainer) {
|
||||
containerElement.appendChild(superContainer);
|
||||
} else {
|
||||
containerElement.appendChild(container);
|
||||
}
|
||||
|
||||
// calculate scroll width of content and add corners and shadow width
|
||||
@@ -1703,7 +1708,12 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) {
|
||||
|
||||
// remove elements
|
||||
container.removeChild(content);
|
||||
containerElement.removeChild(container);
|
||||
if (superContainer) {
|
||||
superContainer.removeChild(container);
|
||||
containerElement.removeChild(superContainer);
|
||||
} else {
|
||||
containerElement.removeChild(container);
|
||||
}
|
||||
|
||||
return new OpenLayers.Size(w, h);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user