Pullup changes to trunk for RC2. Includes drag-fires click changes

(Closes #982), comment/documentation/requires changes (Closes #983, #993, #988),
Fixing post support in proxy.cgi (Closes #991), baseLayer zoom level change 
(Closes #990), typo in Layer.Image.setURL (Closes #985), and a fix or the
Layer.Google bug caused by Google's changing internals (#994). RC2, here we 
come.


git-svn-id: http://svn.openlayers.org/branches/openlayers/2.5@4390 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
crschmidt
2007-09-19 11:36:13 +00:00
parent f5eb0517ef
commit 995ef95dba
31 changed files with 408 additions and 285 deletions

View File

@@ -6,22 +6,31 @@ restrictions that prevent the Javascript from loading pages not on the
same server as the Javascript. This has several problems: it's less
efficient, it might break some sites, and it's a security risk because
people can use this proxy to browse the web and possibly do bad stuff
with it. If you can get your code signed (see:
http://trac.openlayers.org/wiki/HowToSignJavascript), then you should
modify Parameters.js so that this isn't used. Otherwise, you're stuck
with it. It only loads pages via http and https, but it can load any
content type. XML and HTML are both currently used by Openlayers."""
content type. It supports GET and POST requests."""
import urllib
import urllib2
import cgi
fs = cgi.FieldStorage()
url = fs.getvalue('url', "http://openlayers.org")
import sys, os
# Designed to prevent Open Proxy type stuff.
allowedHosts = ['www.openlayers.org', 'openlayers.org', 'octo.metacarta.com', 'merrimack.metacarta.com', 'labs.metacarta.com', 'world.freemap.in',
'prototype.openmnnd.org']
allowedHosts = ['www.openlayers.org', 'openlayers.org',
'labs.metacarta.com', 'world.freemap.in',
'prototype.openmnnd.org', 'geo.openplans.org']
method = os.environ["REQUEST_METHOD"]
if method == "POST":
qs = os.environ["QUERY_STRING"]
d = cgi.parse_qs(qs)
if d.has_key("url"):
url = d["url"][0]
else:
url = "http://www.openlayers.org"
else:
fs = cgi.FieldStorage()
url = fs.getvalue('url', "http://www.openlayers.org")
try:
host = url.split("/")[2]
@@ -30,24 +39,36 @@ try:
print "Content-Type: text/plain"
print
print "This proxy does not allow you to access that location."
print
print os.environ
elif url.startswith("http://") or url.startswith("https://"):
y = urllib.urlopen(url)
if method == "POST":
length = int(os.environ["CONTENT_LENGTH"])
headers = {"Content-Type": os.environ["CONTENT_TYPE"]}
body = sys.stdin.read(length)
r = urllib2.Request(url, body, headers)
y = urllib2.urlopen(r)
else:
y = urllib2.urlopen(url)
headers = str(y.info()).split('\n')
for h in headers:
if h.startswith("Content-Type:"):
print h
# print content type header
i = y.info()
if i.has_key("Content-Type"):
print "Content-Type: %s" % (i["Content-Type"])
else:
print "Content-Type: text/plain"
print
print y.read()
y.close()
else:
print """Content-Type: text/plain
Illegal request."""
print "Content-Type: text/plain"
print
print "Illegal request."
except Exception, E:
print "Status: 500 Unexpected Error"
print "Content-Type: text/plain"

View File

@@ -3,6 +3,13 @@
* for the full text of the license. */
/**
* @requires OpenLayers/BaseTypes/Class.js
* @requires OpenLayers/BaseTypes/LonLat.js
* @requires OpenLayers/BaseTypes/Size.js
* @requires OpenLayers/BaseTypes/Pixel.js
* @requires OpenLayers/BaseTypes/Bounds.js
* @requires OpenLayers/BaseTypes/Element.js
*
* Header: OpenLayers Base Types
* OpenLayers custom string, number and function functions are described here.
*/
@@ -16,7 +23,7 @@
OpenLayers.String = {
/**
* APIMethod: OpenLayers.String.startsWith
* Whether or not a string starts with another string.
* Test whether a string starts with another string.
*
* Parameters:
* str - {String} The string to test.
@@ -31,7 +38,7 @@ OpenLayers.String = {
/**
* APIMethod: OpenLayers.String.contains
* Whether or not a string contains another string.
* Test whether a string contains another string.
*
* Parameters:
* str - {String} The string to test.
@@ -53,7 +60,7 @@ OpenLayers.String = {
* modified.
*
* Returns:
* {String} A trimmed version of the string - all leading and
* {String} A trimmed version of the string with all leading and
* trailing spaces removed.
*/
trim: function(str) {
@@ -86,7 +93,7 @@ OpenLayers.String = {
if (!String.prototype.startsWith) {
/**
* APIMethod: String.startsWith
* Deprecated. Whether or not a string starts with another string.
* *Deprecated*. Whether or not a string starts with another string.
*
* Parameters:
* sStart - {Sring} The string we're testing for.
@@ -106,7 +113,7 @@ if (!String.prototype.startsWith) {
if (!String.prototype.contains) {
/**
* APIMethod: String.contains
* Deprecated. Whether or not a string contains another string.
* *Deprecated*. Whether or not a string contains another string.
*
* Parameters:
* str - {String} The string that we're testing for.
@@ -126,7 +133,7 @@ if (!String.prototype.contains) {
if (!String.prototype.trim) {
/**
* APIMethod: String.trim
* Deprecated. Removes leading and trailing whitespace characters from a string.
* *Deprecated*. Removes leading and trailing whitespace characters from a string.
*
* Returns:
* {String} A trimmed version of the string - all leading and
@@ -143,8 +150,8 @@ if (!String.prototype.trim) {
if (!String.prototype.camelize) {
/**
* APIMethod: camelize
* Deprecated. Camel-case a hyphenated string.
* APIMethod: String.camelize
* *Deprecated*. Camel-case a hyphenated string.
* Ex. "chicken-head" becomes "chickenHead", and
* "-chicken-head" becomes "ChickenHead".
*
@@ -193,7 +200,7 @@ OpenLayers.Number = {
if (!Number.prototype.limitSigDigs) {
/**
* APIMethod: Number.limitSigDigs
* Deprecated. Limit the number of significant digits on an integer. Does *not*
* *Deprecated*. Limit the number of significant digits on an integer. Does *not*
* work with floats!
*
* Parameters:
@@ -266,7 +273,7 @@ OpenLayers.Function = {
if (!Function.prototype.bind) {
/**
* APIMethod: Function.bind
* Deprecated. Bind a function to an object.
* *Deprecated*. Bind a function to an object.
* Method to easily create closures with 'this' altered.
*
* Parameters:
@@ -290,7 +297,7 @@ if (!Function.prototype.bind) {
if (!Function.prototype.bindAsEventListener) {
/**
* APIMethod: Function.bindAsEventListener
* Deprecated. Bind a function to an object, and configure it to receive the
* *Deprecated*. Bind a function to an object, and configure it to receive the
* event object as first parameter when called.
*
* Parameters:

View File

@@ -7,12 +7,12 @@
* Instances of this class represent bounding boxes. Data stored as left,
* bottom, right, top floats. All values are initialized to null, however,
* you should make sure you set them before using the bounds for anything.
*
* Possible use case:
*
* > bounds = new OpenLayers.Bounds();
* > bounds.extend(new OpenLayers.LonLat(4,5));
* > bounds.extend(new OpenLayers.LonLat(5,6));
* > bounds.toBBOX() // returns 4,5,5,6
* > bounds.toBBOX(); // returns 4,5,5,6
*/
OpenLayers.Bounds = OpenLayers.Class({
@@ -81,13 +81,13 @@ OpenLayers.Bounds = OpenLayers.Class({
/**
* Method: equals
* Test a two bounds for equivalence
* Test a two bounds for equivalence.
*
* Parameters:
* bounds - {<OpenLayers.Bounds>}
*
* Returns:
* {Boolean} The passed-in OpenLayers.Bounds object has the same left,
* {Boolean} The passed-in bounds object has the same left,
* right, top, bottom components as this. Note that if bounds
* passed in is null, returns false.
*/
@@ -106,7 +106,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* APIMethod: toString
*
* Returns:
* {String} String representation of OpenLayers.Bounds object.
* {String} String representation of bounds object.
* (ex.<i>"left-bottom=(5,42) right-top=(10,45)"</i>)
*/
toString:function() {
@@ -132,7 +132,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* Default is 6
*
* Returns:
* {String} Simple String representation of OpenLayers.Bounds object.
* {String} Simple String representation of bounds object.
* (ex. <i>"5,42,10,45"</i>)
*/
toBBOX:function(decimal) {
@@ -162,7 +162,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* APIMethod: getHeight
*
* Returns:
* {Float} The height of the bounds
* {Float} The height of the bounds (top minus bottom).
*/
getHeight:function() {
return (this.top - this.bottom);
@@ -172,7 +172,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* APIMethod: getSize
*
* Returns:
* {<OpenLayers.Size>} An <OpenLayers.Size> which represents the size of the box
* {<OpenLayers.Size>} The size of the box.
*/
getSize:function() {
return new OpenLayers.Size(this.getWidth(), this.getHeight());
@@ -182,8 +182,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* APIMethod: getCenterPixel
*
* Returns:
* {<OpenLayers.Pixel>} An <OpenLayers.Pixel> which represents the center
* of the bounds
* {<OpenLayers.Pixel>} The center of the bounds in pixel space.
*/
getCenterPixel:function() {
return new OpenLayers.Pixel( (this.left + this.right) / 2,
@@ -194,8 +193,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* APIMethod: getCenterLonLat
*
* Returns:
* {<OpenLayers.LonLat>} An <OpenLayers.LonLat> which represents the center
* of the bounds
* {<OpenLayers.LonLat>} The center of the bounds in map space.
*/
getCenterLonLat:function() {
return new OpenLayers.LonLat( (this.left + this.right) / 2,
@@ -210,9 +208,8 @@ OpenLayers.Bounds = OpenLayers.Class({
* y - {Float}
*
* Returns:
* {<OpenLayers.Bounds>} A new <OpenLayers.Bounds> whose coordinates are
* the same as this, but shifted by the passed-in
* x and y values
* {<OpenLayers.Bounds>} A new bounds whose coordinates are the same as
* this, but shifted by the passed-in x and y values.
*/
add:function(x, y) {
if ( (x == null) || (y == null) ) {
@@ -227,8 +224,7 @@ OpenLayers.Bounds = OpenLayers.Class({
/**
* APIMethod: extend
* Extend the bounds to include the point, lonlat, or bounds specified.
* Note: This function assumes that left<right and bottom<top.
*
* Note, this function assumes that left < right and bottom < top.
*
* Parameters:
* object - {Object} Can be LonLat, Point, or Bounds
@@ -273,11 +269,11 @@ OpenLayers.Bounds = OpenLayers.Class({
*
* Parameters:
* ll - {<OpenLayers.LonLat>}
* inclusive - {Boolean} Whether or not to include the border.
* Default is true.
* inclusive - {Boolean} Whether or not to include the border.
* Default is true.
*
* Returns:
* {Boolean} Whether or not the passed-in lonlat is within this bounds.
* {Boolean} The passed-in lonlat is within this bounds.
*/
containsLonLat:function(ll, inclusive) {
return this.contains(ll.lon, ll.lat, inclusive);
@@ -288,11 +284,11 @@ OpenLayers.Bounds = OpenLayers.Class({
*
* Parameters:
* px - {<OpenLayers.Pixel>}
* inclusive - {Boolean} Whether or not to include the border.
* Default is true.
* inclusive - {Boolean} Whether or not to include the border. Default is
* true.
*
* Returns:
* {Boolean} Whether or not the passed-in pixel is within this bounds.
* {Boolean} The passed-in pixel is within this bounds.
*/
containsPixel:function(px, inclusive) {
return this.contains(px.x, px.y, inclusive);
@@ -304,12 +300,12 @@ OpenLayers.Bounds = OpenLayers.Class({
* Parameters:
* x - {Float}
* y - {Float}
* inclusive - {Boolean} Whether or not to include the border.
* Default is true.
* inclusive - {Boolean} Whether or not to include the border. Default is
* true.
*
* Returns:
* {Boolean} Whether or not the passed-in coordinates are within this
* bounds.
* bounds.
*/
contains:function(x, y, inclusive) {
@@ -334,13 +330,13 @@ OpenLayers.Bounds = OpenLayers.Class({
*
* Parameters:
* bounds - {<OpenLayers.Bounds>}
* inclusive - {<Boolean>} Whether or not to include the border.
* Default is true.
* inclusive - {<Boolean>} Whether or not to include the border. Default
* is true.
*
* Returns:
* {Boolean} Whether or not the passed-in OpenLayers.Bounds object
* intersects this bounds. Simple math just check if either
* contains the other, allowing for partial.
* {Boolean} The passed-in OpenLayers.Bounds object intersects this bounds.
* Simple math just check if either contains the other, allowing for
* partial.
*/
intersectsBounds:function(bounds, inclusive) {
@@ -369,16 +365,14 @@ OpenLayers.Bounds = OpenLayers.Class({
* APIMethod: containsBounds
*
* bounds - {<OpenLayers.Bounds>}
* partial - {<Boolean>} If true, only part of passed-in
* <OpenLayers.Bounds> needs be within this bounds.
* If false, the entire passed-in bounds must be
* within. Default is false
* inclusive - {<Boolean>} Whether or not to include the border.
* Default is true.
* partial - {<Boolean>} If true, only part of passed-in bounds needs be
* within this bounds. If false, the entire passed-in bounds must be
* within. Default is false
* inclusive - {<Boolean>} Whether or not to include the border. Default is
* true.
*
* Returns:
* {Boolean} Whether or not the passed-in OpenLayers.Bounds object is
* contained within this bounds.
* {Boolean} The passed-in bounds object is contained within this bounds.
*/
containsBounds:function(bounds, partial, inclusive) {
@@ -418,8 +412,8 @@ OpenLayers.Bounds = OpenLayers.Class({
* lonlat - {<OpenLayers.LonLat>}
*
* Returns:
* {String} The quadrant ("br" "tr" "tl" "bl") of the bounds in which
* the coordinate lies.
* {String} The quadrant ("br" "tr" "tl" "bl") of the bounds in which the
* coordinate lies.
*/
determineQuadrant: function(lonlat) {
@@ -495,7 +489,7 @@ OpenLayers.Bounds = OpenLayers.Class({
* str - {String}Comma-separated bounds string. (ex. <i>"5,42,10,45"</i>)
*
* Returns:
* {<OpenLayers.Bounds>} New <OpenLayers.Bounds> object built from the
* {<OpenLayers.Bounds>} New bounds object built from the
* passed-in String.
*/
OpenLayers.Bounds.fromString = function(str) {
@@ -512,8 +506,7 @@ OpenLayers.Bounds.fromString = function(str) {
* bbox - {Array(Float)} Array of bounds values (ex. <i>[5,42,10,45]</i>)
*
* Returns:
* {<OpenLayers.Bounds>} New <OpenLayers.Bounds> object built from the
* passed-in Array.
* {<OpenLayers.Bounds>} New bounds object built from the passed-in Array.
*/
OpenLayers.Bounds.fromArray = function(bbox) {
return new OpenLayers.Bounds(parseFloat(bbox[0]),
@@ -531,8 +524,7 @@ OpenLayers.Bounds.fromArray = function(bbox) {
* size - {<OpenLayers.Size>}
*
* Returns:
* {<OpenLayers.Bounds>} New <OpenLayers.Bounds> object built from the
* passed-in size.
* {<OpenLayers.Bounds>} New bounds object built from the passed-in size.
*/
OpenLayers.Bounds.fromSize = function(size) {
return new OpenLayers.Bounds(0,

View File

@@ -93,7 +93,7 @@ OpenLayers.Control = OpenLayers.Class({
/**
* Property: handler
* {<OpenLayers.Handler}> null
* {<OpenLayers.Handler>} null
*/
handler: null,

View File

@@ -31,9 +31,9 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* that is about to be dragged and the pixel location of the mouse.
*
* Parameters:
* feature - {OpenLayers.Feature.Vector} The feature that is about to be
* feature - {<OpenLayers.Feature.Vector>} The feature that is about to be
* dragged.
* pixel - {OpenLayers.Pixel} The pixel location of the mouse.
* pixel - {<OpenLayers.Pixel>} The pixel location of the mouse.
*/
onStart: function(feature, pixel) {},
@@ -44,8 +44,8 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* feature that is being dragged and the pixel location of the mouse.
*
* Parameters:
* feature - {OpenLayers.Feature.Vector} The feature that was dragged.
* pixel - {OpenLayers.Pixel} The pixel location of the mouse.
* feature - {<OpenLayers.Feature.Vector>} The feature that was dragged.
* pixel - {<OpenLayers.Pixel>} The pixel location of the mouse.
*/
onDrag: function(feature, pixel) {},
@@ -57,26 +57,26 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* mouse.
*
* Parameters:
* feature - {OpenLayers.Feature.Vector} The feature that was dragged.
* pixel - {OpenLayers.Pixel} The pixel location of the mouse.
* feature - {<OpenLayers.Feature.Vector>} The feature that was dragged.
* pixel - {<OpenLayers.Pixel>} The pixel location of the mouse.
*/
onComplete: function(feature, pixel) {},
/**
* Property: layer
* {OpenLayers.Layer.Vector}
* {<OpenLayers.Layer.Vector>}
*/
layer: null,
/**
* Property: feature
* {OpenLayers.Feature.Vector}
* {<OpenLayers.Feature.Vector>}
*/
feature: null,
/**
* Property: dragHandler
* {OpenLayers.Handler.Drag}
* {<OpenLayers.Handler.Drag>}
*/
dragHandler: null,
@@ -88,7 +88,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
/**
* Property: featureHandler
* {OpenLayers.Handler.Feature}
* {<OpenLayers.Handler.Feature>}
*/
featureHandler: null,
@@ -100,7 +100,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
/**
* Property: lastPixel
* {OpenLayers.Pixel}
* {<OpenLayers.Pixel>}
*/
lastPixel: null,
@@ -109,7 +109,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* Create a new control to drag features.
*
* Parameters:
* layer - {OpenLayers.Layer.Vector} The layer containing features to be
* layer - {<OpenLayers.Layer.Vector>} The layer containing features to be
* dragged.
* options - {Object} Optional object whose properties will be set on the
* control.
@@ -179,7 +179,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* This activates the drag handler.
*
* Parameters:
* feature - {OpenLayers.Feature.Vector} The selected feature.
* feature - {<OpenLayers.Feature.Vector>} The selected feature.
*/
overFeature: function(feature) {
if(!this.dragHandler.dragging) {
@@ -202,7 +202,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* Called when the drag handler detects a mouse-down.
*
* Parameters:
* pixel - {OpenLayers.Pixel} Location of the mouse event.
* pixel - {<OpenLayers.Pixel>} Location of the mouse event.
*/
downFeature: function(pixel) {
this.lastPixel = pixel;
@@ -215,7 +215,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* optional onDrag method.
*
* Parameters:
* pixel - {OpenLayers.Pixel} Location of the mouse event.
* pixel - {<OpenLayers.Pixel>} Location of the mouse event.
*/
moveFeature: function(pixel) {
var res = this.map.getResolution();
@@ -232,7 +232,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* optional onComplete method.
*
* Parameters:
* pixel - {OpenLayers.Pixel} Location of the mouse event.
* pixel - {<OpenLayers.Pixel>} Location of the mouse event.
*/
upFeature: function(pixel) {
if(!this.over) {
@@ -248,7 +248,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* Called when the drag handler is done dragging.
*
* Parameters:
* pixel - {OpenLayers.Pixel} The last event pixel location. If this event
* pixel - {<OpenLayers.Pixel>} The last event pixel location. If this event
* came from a mouseout, this may not be in the map viewport.
*/
doneDragging: function(pixel) {
@@ -260,7 +260,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* Called when the feature handler detects a mouse-out on a feature.
*
* Parameters:
* feature - {OpenLayers.Feature.Vector} The feature that the mouse left.
* feature - {<OpenLayers.Feature.Vector>} The feature that the mouse left.
*/
outFeature: function(feature) {
if(!this.dragHandler.dragging) {
@@ -290,7 +290,7 @@ OpenLayers.Control.DragFeature = OpenLayers.Class(OpenLayers.Control, {
* Set the map property for the control and all handlers.
*
* Parameters:
* map - {OpenLayers.Map} The control's map.
* map - {<OpenLayers.Map>} The control's map.
*/
setMap: function(map) {
this.dragHandler.setMap(map);

View File

@@ -30,7 +30,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
/**
* Property: layer
* {OpenLayers.Layer.Vector}
* {<OpenLayers.Layer.Vector>}
*/
layer: null,
@@ -116,7 +116,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
* Create a new modify feature control.
*
* Parameters:
* layer - {OpenLayers.Layer.Vector} Layer that contains features that
* layer - {<OpenLayers.Layer.Vector>} Layer that contains features that
* will be modified.
* options - {Object} Optional object whose properties will be set on the
* control.
@@ -450,7 +450,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
* Set the map property for the control and all handlers.
*
* Parameters:
* map - {OpenLayers.Map} The control's map.
* map - {<OpenLayers.Map>} The control's map.
*/
setMap: function(map) {
this.selectControl.setMap(map);

View File

@@ -53,7 +53,7 @@ OpenLayers.Control.OverviewMap = OpenLayers.Class(OpenLayers.Control, {
/**
* APIProperty: minRatio
* {Numver} The ratio of the overview map resolution to the main map
* {Float} The ratio of the overview map resolution to the main map
* resolution at which to zoom farther out on the overview map.
*/
minRatio: 8,

View File

@@ -15,13 +15,13 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
/**
* APIProperty: slideFactor
* {Float}
* {Integer}
*/
slideFactor: 50,
/**
* Property: buttons
* Array of Button Divs
* {Array(DOMElement)} Array of Button Divs
*/
buttons: null,
@@ -32,9 +32,12 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
position: null,
/**
* Constructor: OpenLayers.PanZoom
* Constructor: OpenLayers.Control.PanZoom
*
* Parameters:
* options - {Object}
*/
initialize: function() {
initialize: function(options) {
this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X,
OpenLayers.Control.PanZoom.Y);
OpenLayers.Control.prototype.initialize.apply(this, arguments);
@@ -61,7 +64,7 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
* px - {<OpenLayers.Pixel>}
*
* Returns:
* {DOMElement} A reference to the container div for the PanZoom control
* {DOMElement} A reference to the container div for the PanZoom control.
*/
draw: function(px) {
// initialize our internal div
@@ -100,7 +103,7 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
*
* Returns:
* {DOMElement} A Div (an alphaImageDiv, to be precise) that contains the
* image of the button, and has all the proper event handlers set.
* image of the button, and has all the proper event handlers set.
*/
_addButton:function(id, img, xy, sz) {
var imgLocation = OpenLayers.Util.getImagesLocation() + img;
@@ -179,5 +182,14 @@ OpenLayers.Control.PanZoom = OpenLayers.Class(OpenLayers.Control, {
CLASS_NAME: "OpenLayers.Control.PanZoom"
});
/**
* Constant: X
* {Integer}
*/
OpenLayers.Control.PanZoom.X = 4;
/**
* Constant: Y
* {Integer}
*/
OpenLayers.Control.PanZoom.Y = 4;

View File

@@ -5,7 +5,12 @@
/**
* @requires OpenLayers/Format/XML.js
* @requires OpenLayers/Feature/Vector.js
* @requires OpenLayers/Geometry.js
* @requires OpenLayers/Geometry/Point.js
* @requires OpenLayers/Geometry/MultiPoint.js
* @requires OpenLayers/Geometry/LineString.js
* @requires OpenLayers/Geometry/MultiLineString.js
* @requires OpenLayers/Geometry/Polygon.js
* @requires OpenLayers/Geometry/MultiPolygon.js
*
* Class: OpenLayers.Format.GML
* Read/Wite GML. Create a new instance with the <OpenLayers.Format.GML>

View File

@@ -4,6 +4,13 @@
/**
* @requires OpenLayers/Format/JSON.js
* @requires OpenLayers/Feature/Vector.js
* @requires OpenLayers/Geometry/Point.js
* @requires OpenLayers/Geometry/MultiPoint.js
* @requires OpenLayers/Geometry/LineString.js
* @requires OpenLayers/Geometry/MultiLineString.js
* @requires OpenLayers/Geometry/Polygon.js
* @requires OpenLayers/Geometry/MultiPolygon.js
*
* Class: OpenLayers.Format.GeoJSON
* Read and write GeoJSON. Create a new parser with the

View File

@@ -3,8 +3,11 @@
* for the full text of the license. */
/**
* @requires OpenLayers/Format.js
* @requires OpenLayers/Format/XML.js
* @requires OpenLayers/Feature/Vector.js
* @requires OpenLayers/Geometry/Point.js
* @requires OpenLayers/Geometry/LineString.js
* @requires OpenLayers/Geometry/Polygon.js
*
* Class: OpenLayers.Format.GeoRSS
* Read/write GeoRSS parser. Create a new instance with the

View File

@@ -3,8 +3,12 @@
* for the full text of the license. */
/**
* @requires OpenLayers/Format.js
* @requires OpenLayers/Format/XML.js
* @requires OpenLayers/Feature/Vector.js
* @requires OpenLayers/Geometry/Point.js
* @requires OpenLayers/Geometry/LineString.js
* @requires OpenLayers/Geometry/Polygon.js
* @requires OpenLayers/Geometry/Collection.js
*
* Class: OpenLayers.Format.KML
* Read/Wite KML. Create a new instance with the <OpenLayers.Format.KML>
@@ -279,7 +283,7 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
* node - {DOMElement} A KML MultiGeometry node.
*
* Returns:
* {<OpenLayers.Geometry.Polygon>} A geometry collection.
* {<OpenLayers.Geometry.Collection>} A geometry collection.
*/
multigeometry: function(node) {
var child, parser;

View File

@@ -4,6 +4,7 @@
/**
* @requires OpenLayers/Format.js
* @requires OpenLayers/Feature/Vector.js
*
* Class: OpenLayers.Format.WKT
* Class for reading and writing Well-Known Text. Create a new instance
@@ -38,8 +39,8 @@ OpenLayers.Format.WKT = OpenLayers.Class(OpenLayers.Format, {
/**
* Method: read
* Deserialize a WKT string and return an OpenLayers.Feature.Vector or an
* array of OpenLayers.Feature.Vector. Supports WKT for POINT, MULTIPOINT,
* Deserialize a WKT string and return a vector feature or an
* array of vector features. Supports WKT for POINT, MULTIPOINT,
* LINESTRING, MULTILINESTRING, POLYGON, MULTIPOLYGON, and
* GEOMETRYCOLLECTION.
*

View File

@@ -253,13 +253,8 @@ OpenLayers.Handler.Drag = OpenLayers.Class(OpenLayers.Handler, {
* {Boolean} Let the event propagate.
*/
click: function (evt) {
// throw away the first left click event that happens after a mouse up
if (this.dragging) {
this.dragging = false;
return false;
}
this.started = false;
return true;
// let the click event propagate only if the mouse moved
return (this.start == this.last);
},
/**

View File

@@ -284,7 +284,7 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, {
* Calculate the angle based on settings.
*
* Parameters:
* point - {OpenLayers.Geometry.Point}
* point - {<OpenLayers.Geometry.Point>}
* evt - {Event}
*/
calculateAngle: function(point, evt) {

View File

@@ -736,8 +736,7 @@ OpenLayers.Layer = OpenLayers.Class({
* {Integer} The index of the zoomLevel (entry in the resolutions array)
* that still contains the passed-in extent. We do this by calculating
* the ideal resolution for the given exteng (based on the map size)
* and then find the smallest resolution that is greater than this
* ideal resolution.
* and then find the closest resolution to this ideal resolution.
*/
getZoomForExtent: function(extent) {
var viewSize = this.map.getSize();
@@ -761,23 +760,28 @@ OpenLayers.Layer = OpenLayers.Class({
/**
* APIMethod: getZoomForResolution
* Get the index for the closest resolution in the layers resolutions array.
*
* Parameters:
* resolution - {Float}
* resolution - {Float} Map units per pixel.
*
* Returns:
* {Integer} The index of the zoomLevel (entry in the resolutions array)
* that is the smallest resolution that is greater than the passed-in
* resolution.
* that is the closest to the passed-in resolution.
*/
getZoomForResolution: function(resolution) {
for(var i=1; i < this.resolutions.length; i++) {
if ( this.resolutions[i] < resolution) {
var zoom, diff;
var minDiff = Number.POSITIVE_INFINITY;
for(var i=0; i < this.resolutions.length; i++) {
diff = Math.abs(this.resolutions[i] - resolution);
if(diff < minDiff) {
zoom = i;
minDiff = diff;
} else if(diff > minDiff) {
break;
}
}
return (i - 1);
return zoom;
},
/**

View File

@@ -264,18 +264,18 @@ OpenLayers.Layer.Google = OpenLayers.Class(
* {GPoint} A GPoint specifying gLatLng translated into "Container" coords
*/
addContainerPxFunction: function() {
if (typeof GMap2 != "undefined" && !GMap2.fromLatLngToContainerPixel) {
if ( (typeof GMap2 != "undefined") &&
!GMap2.prototype.fromLatLngToContainerPixel) {
GMap2.prototype.fromLatLngToContainerPixel = function(gLatLng) {
// first we translate into "DivPixel"
var gPoint = this.fromLatLngToDivPixel(gLatLng);
var gPoint = this.fromLatLngToDivPixel(gLatLng);
// locate the sliding "Div" div
// it seems like "b" is the main div
var div = this.b.firstChild.firstChild;
// adjust by the offset of "Div" and voila!
// locate the sliding "Div" div
var div = this.getContainer().firstChild.firstChild;
// adjust by the offset of "Div" and voila!
gPoint.x += div.offsetLeft;
gPoint.y += div.offsetTop;

View File

@@ -186,7 +186,7 @@ OpenLayers.Layer.Image = OpenLayers.Class(OpenLayers.Layer, {
*/
setUrl: function(newUrl) {
this.url = newUrl;
this.draw();
this.tile.draw();
},
/**

View File

@@ -1352,7 +1352,7 @@ OpenLayers.Map = OpenLayers.Class({
/**
* APIMethod: getZoomForExteng
* APIMethod: getZoomForExtent
*
* Parameters:
* bounds - {<OpenLayers.Bounds>}

View File

@@ -43,21 +43,33 @@
var overviewZoom = control.ovmap.getZoom();
t.eq(overviewCenter.lon, -71, "Overviewmap center lon correct");
t.eq(overviewCenter.lat, 42, "Overviewmap center lat correct");
t.eq(overviewZoom, 8, "Overviewmap zoomcorrect");
t.eq(overviewZoom, 9, "Overviewmap zoomcorrect");
control.mapDivClick({'xy':new OpenLayers.Pixel(5,5)});
// There are box model issues that keep browsers from giving us
// identical results here. Test the normalized difference against
// a tolerance instead of testing equality.
function normalizedDiff(a, b) {
return Math.abs((a - b) / (a + b));
}
var tolerance = 1e-4;
var cent = map.getCenter();
t.eq(cent.lon, -71.3515625, "Clicking on the Overview Map has the correct effect on map lon");
t.eq(cent.lat, 42.17578125, "Clicking on the Overview Map has the correct effect on map lat");
t.ok(normalizedDiff(cent.lon, -71.00390625) < tolerance,
"Clicking on the Overview Map has the correct effect on map lon");
t.ok(normalizedDiff(cent.lat, 42.00390625) < tolerance,
"Clicking on the Overview Map has the correct effect on map lat");
control.rectMouseDown({'xy':new OpenLayers.Pixel(5,5), 'which':1});
control.rectMouseMove({'xy':new OpenLayers.Pixel(15,15), 'which':1});
control.rectMouseUp({'xy':new OpenLayers.Pixel(15,15), 'which':1});
var cent = map.getCenter();
t.eq(cent.lon, -71.2734375, "Dragging on the Overview Map has the correct effect on map lon");
t.eq(cent.lat, 42.09765625, "Dragging on the Overview Map has the correct effect on map lat");
t.ok(normalizedDiff(cent.lon, -70.83984375) < tolerance,
"Dragging on the Overview Map has the correct effect on map lon");
t.ok(normalizedDiff(cent.lat, 41.84765625) < tolerance,
"Dragging on the Overview Map has the correct effect on map lat");
map.setCenter(new OpenLayers.LonLat(0,0), 0);
var overviewCenter = control.ovmap.getCenter();

View File

@@ -87,7 +87,7 @@
}
function test_Handler_Drag_callbacks(t) {
t.plan(30);
t.plan(27);
var map = new OpenLayers.Map('map', {controls: []});
@@ -227,24 +227,25 @@
t.ok(!handler.dragging, "mouseout sets dragging flag to false");
OpenLayers.Util.mouseLeft = oldMouseLeft;
// test click
handler.dragging = true;
handler.started = "foo";
map.events.triggerEvent("click", null);
t.ok(!handler.dragging,
"click while dragging sets dragging to false");
t.eq(handler.started, "foo",
"click while dragging doesn't mess with started");
handler.dragging = null;
handler.started = true;
map.events.triggerEvent("click", null);
t.ok(handler.dragging == null,
"click while not dragging doesn't mess with dragging flag");
t.ok(!handler.started,
"click while not dragging sets started to false");
// test click with the click.html example - the click method on the
// drag handler returns (handler.start == handler.last), stopping
// propagation of the click event if the mouse moved during a drag.
// regression tests will assure that the drag handler doesn't mess
// with anything else on a click
function getProperties(obj) {
var props = {};
for(key in obj) {
if(typeof obj[key] != "function" && typeof obj[key] != "object") {
props[key] = obj[key];
}
}
return props;
}
var before = getProperties(handler);
map.events.triggerEvent("click", null);
var after = getProperties(handler);
t.eq(before, after, "click doesn't mess with handler");
}

View File

@@ -140,25 +140,25 @@
});
}
function test_04_Layer_GeoRSS_icon(t) {
t.plan( 3 );
layer = new OpenLayers.Layer.GeoRSS('Test Layer', georss_txt);
function test_04_Layer_GeoRSS_icon(t) {
t.plan( 3 );
layer = new OpenLayers.Layer.GeoRSS('Test Layer', georss_txt);
var the_icon = new OpenLayers.Icon('http://boston.openguides.org/markers/AQUA.png');
var otherLayer = new OpenLayers.Layer.GeoRSS('Test Layer', georss_txt,{icon:the_icon});
var map = new OpenLayers.Map('map');
var otherLayer = new OpenLayers.Layer.GeoRSS('Test Layer', georss_txt,{icon:the_icon});
var map = new OpenLayers.Map('map');
var baseLayer = new OpenLayers.Layer.WMS("Test Layer",
"http://octo.metacarta.com/cgi-bin/mapserv?",
{map: "/mapdata/vmap_wms.map", layers: "basic"});
map.addLayer(baseLayer);
map.addLayers([layer,otherLayer]);
map.setCenter(new OpenLayers.LonLat(0,0),0);
var defaultIcon = OpenLayers.Marker.defaultIcon();
t.delay_call( 1, function() {
t.ok(layer.markers[0].icon, "The layer has a icon");
t.eq(layer.markers[0].icon.url, defaultIcon.url, "The layer without icon has the default icon.");
t.eq(otherLayer.markers[0].icon.url, the_icon.url,"The layer with an icon has that icon.");
});
}
var defaultIcon = OpenLayers.Marker.defaultIcon();
t.delay_call( 1, function() {
t.ok(layer.markers[0].icon, "The layer has a icon");
t.eq(layer.markers[0].icon.url, defaultIcon.url, "The layer without icon has the default icon.");
t.eq(otherLayer.markers[0].icon.url, the_icon.url,"The layer with an icon has that icon.");
});
}
function test_Layer_GeoRSS_loadend_Event(t) {
var browserCode = OpenLayers.Util.getBrowserName();
if (browserCode == "msie") {

View File

@@ -150,12 +150,26 @@
bounds = new OpenLayers.Bounds(10,10,12,12);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 8, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 2 map units / 500px = 0.004
* layer.resolutions = [1.40625, 0.703125, 0.3515625, 0.17578125,
* 0.087890625, 0.0439453125, 0.02197265625,
* 0.010986328125, 0.0054931640625, 0.00274658203125,
* 0.001373291015625, 0.0006866455078125, 0.00034332275390625,
* 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125]
*
* So, we expect a zoom of 9 because it is the closest resolution.
*/
t.eq( zoom, 9, "getZoomForExtent() returns correct value");
bounds = new OpenLayers.Bounds(10,10,100,100);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 2, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 90 map units / 500px = 0.18
* So, we expect a zoom of 3 because it is the closest.
*/
t.eq( zoom, 3, "getZoomForExtent() returns correct value");
}
function test_07_Layer_Grid_moveTo(t) {
@@ -515,10 +529,10 @@
}
function test_16_Layer_Grid_tileSizeIsInteger(t) {
t.plan(1);
t.plan(1);
var map = new OpenLayers.Map('map');
var layer = new OpenLayers.Layer.Grid(name, url, params, {
var layer = new OpenLayers.Layer.Grid(name, url, params, {
singleTile: true,
ratio: 1.5
});
@@ -541,10 +555,10 @@
map.zoomToMaxExtent();
map.zoomIn();
var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200));
t.eq(bounds.toBBOX(), "-180,-90,0,90", "get tile bounds returns correct bounds");
t.eq(bounds.toBBOX(), "-90,0,0,90", "get tile bounds returns correct bounds");
map.pan(200,0);
var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200));
t.eq(bounds.toBBOX(), "0,-90,180,90", "get tile bounds returns correct bounds after pan");
t.eq(bounds.toBBOX(), "0,0,90,90", "get tile bounds returns correct bounds after pan");
}
function test_Layer_Grid_moveTo_buffer_calculation (t) {

View File

@@ -39,7 +39,7 @@
}
function test_50_Layer_Image_tileTests (t) {
t.plan(6);
t.plan(7);
var map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.Image('Test Layer',
@@ -63,6 +63,8 @@
t.eq(layer.tile.imgDiv.src, "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", "URL is correct");
map.zoomIn();
t.eq(layer.tile.imgDiv.src, "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", "URL is correct");
layer.setUrl('http://labs.metacarta.com/wms/vmap0?LAYERS=basic&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fjpeg&SRS=EPSG%3A4326&BBOX=-180,-90,0,90&WIDTH=256&HEIGHT=256');
t.eq(layer.tile.imgDiv.src, "http://labs.metacarta.com/wms/vmap0?LAYERS=basic&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&FORMAT=image%2Fjpeg&SRS=EPSG%3A4326&BBOX=-180,-90,0,90&WIDTH=256&HEIGHT=256", "URL is correct after setURL");
}
/******
*

View File

@@ -128,12 +128,26 @@
bounds = new OpenLayers.Bounds(10,10,12,12);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 8, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 2 map units / 500px = 0.004
* layer.resolutions = [1.40625, 0.703125, 0.3515625, 0.17578125,
* 0.087890625, 0.0439453125, 0.02197265625,
* 0.010986328125, 0.0054931640625, 0.00274658203125,
* 0.001373291015625, 0.0006866455078125, 0.00034332275390625,
* 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125]
*
* So, we expect a zoom of 9 because it is the closest resolution.
*/
t.eq( zoom, 9, "getZoomForExtent() returns correct value");
bounds = new OpenLayers.Bounds(10,10,100,100);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 2, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 90 map units / 500px = 0.18
* So, we expect a zoom of 3 because it is the closest.
*/
t.eq( zoom, 3, "getZoomForExtent() returns correct value");
}
function test_06_Layer_kaMap_mergeNewParams (t) {
@@ -236,10 +250,10 @@
map.zoomToMaxExtent();
map.zoomIn();
var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200));
t.eq(bounds.toBBOX(), "-180,0,0,180", "get tile bounds returns correct bounds");
t.eq(bounds.toBBOX(), "-90,0,0,90", "get tile bounds returns correct bounds");
map.pan(200,0);
var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200));
t.eq(bounds.toBBOX(), "0,0,180,180", "get tile bounds returns correct bounds after pan");
t.eq(bounds.toBBOX(), "0,0,90,90", "get tile bounds returns correct bounds after pan");
}
function test_99_Layer_KaMap_destroy (t) {

View File

@@ -77,13 +77,26 @@
bounds = new OpenLayers.Bounds(10,10,12,12);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 8, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 2 map units / 500px = 0.004
* layer.resolutions = [1.40625, 0.703125, 0.3515625, 0.17578125,
* 0.087890625, 0.0439453125, 0.02197265625,
* 0.010986328125, 0.0054931640625, 0.00274658203125,
* 0.001373291015625, 0.0006866455078125, 0.00034332275390625,
* 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125]
*
* So, we expect a zoom of 9 because it is the closest resolution.
*/
t.eq( zoom, 9, "getZoomForExtent() returns correct value");
bounds = new OpenLayers.Bounds(10,10,100,100);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 2, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 90 map units / 500px = 0.18
* So, we expect a zoom of 3 because it is the closest.
*/
t.eq( zoom, 3, "getZoomForExtent() returns correct value");
}

View File

@@ -120,7 +120,7 @@
}
function test_Layer_Text_loadend_Event(t) {
t.plan(2);
layer = new OpenLayers.Layer.Text('Test Layer', {location:datafile});
layer = new OpenLayers.Layer.Text('Test Layer', {location:datafile});
t.delay_call(2, function() {
layer.events.register('loadend', layer, function() {
t.ok(true, "Loadend event fired");

View File

@@ -78,13 +78,27 @@
bounds = new OpenLayers.Bounds(10,10,12,12);
zoom = layer.getZoomForExtent(bounds);
t.eq( zoom, 7, "getZoomForExtent() returns correct value");
/**
* ideal resolution: 2 map units / 500px = 0.004
* layer.resolutions = [0.703125, 0.3515625, 0.17578125,
* 0.087890625, 0.0439453125, 0.02197265625,
* 0.010986328125, 0.0054931640625, 0.00274658203125,
* 0.001373291015625, 0.0006866455078125, 0.00034332275390625,
* 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125,
* 0.000021457672119140625]
*
* So, we expect a zoom of 8 because it is the closest resolution.
*/
t.eq( zoom, 8, "getZoomForExtent() returns correct value");
bounds = new OpenLayers.Bounds(10,10,100,100);
zoom = layer.getZoomForExtent(bounds);
/**
* ideal resolution: 90 map units / 500px = 0.18
* So, we expect a zoom of 2 because it is the closest.
*/
t.eq( zoom, 1, "getZoomForExtent() returns correct value");
t.eq( zoom, 2, "getZoomForExtent() returns correct value");
}

View File

@@ -165,9 +165,9 @@
var baseLayer = new OpenLayers.Layer.WMS("Base Layer",
"http://octo.metacarta.com/cgi-bin/mapserv",
{ map: '/mapdata/vmap_wms.map',
layers: 'basic',
format: 'image/png'});
layers: 'basic',
format: 'image/png'});
var layer = new OpenLayers.Layer.Vector("Test Layer");
var renderer = layer.renderer;
var map = new OpenLayers.Map('map');
@@ -181,25 +181,25 @@
map.zoomToMaxExtent();
var customStyle1 = new Object({
externalGraphic: 'test.png',
pointRadius: 10
externalGraphic: 'test.png',
pointRadius: 10
});
var customStyle2 = new Object({
externalGraphic: 'test.png',
graphicWidth: 12
externalGraphic: 'test.png',
graphicWidth: 12
});
var customStyle3 = new Object({
externalGraphic: 'test.png',
graphicHeight: 14
externalGraphic: 'test.png',
graphicHeight: 14
});
var customStyle4 = new Object({
externalGraphic: 'test.png',
graphicWidth: 24,
graphicHeight: 16
externalGraphic: 'test.png',
graphicWidth: 24,
graphicHeight: 16
});
var customStyle5 = new Object({
externalGraphic: 'test.png',
graphicWidth: 24,
graphicWidth: 24,
graphicOpacity: 1
});
var customStyle6 = new Object({
@@ -212,43 +212,43 @@
var root = renderer.root;
if (layer.renderer.CLASS_NAME == 'OpenLayers.Renderer.SVG') {
feature.style = customStyle1;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'width'),
(2*customStyle1.pointRadius).toString(),
"given a pointRadius, width equals 2*pointRadius");
t.eq(root.firstChild.getAttributeNS(null, 'height'),
(2*customStyle1.pointRadius).toString(),
"given a pointRadius, height equals 2*pointRadius");
feature.style = customStyle2;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'width'),
root.firstChild.getAttributeNS(null, 'height'),
"given a graphicWidth, width equals height");
t.eq(root.firstChild.getAttributeNS(null, 'width'),
customStyle2.graphicWidth.toString(),
"width is set correctly");
feature.style = customStyle3;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'height'),
root.firstChild.getAttributeNS(null, 'width'),
"given a graphicHeight, height equals width");
t.eq(root.firstChild.getAttributeNS(null, 'height'),
customStyle3.graphicHeight.toString(),
"height is set correctly");
feature.style = customStyle4;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'height'),
customStyle4.graphicHeight.toString(),
"given graphicHeight and graphicWidth, both are set: height");
t.eq(root.firstChild.getAttributeNS(null, 'width'),
customStyle4.graphicWidth.toString(),
"given graphicHeight and graphicWidth, both are set: width");
feature.style = customStyle1;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'width'),
(2*customStyle1.pointRadius).toString(),
"given a pointRadius, width equals 2*pointRadius");
t.eq(root.firstChild.getAttributeNS(null, 'height'),
(2*customStyle1.pointRadius).toString(),
"given a pointRadius, height equals 2*pointRadius");
feature.style = customStyle2;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'width'),
root.firstChild.getAttributeNS(null, 'height'),
"given a graphicWidth, width equals height");
t.eq(root.firstChild.getAttributeNS(null, 'width'),
customStyle2.graphicWidth.toString(),
"width is set correctly");
feature.style = customStyle3;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'height'),
root.firstChild.getAttributeNS(null, 'width'),
"given a graphicHeight, height equals width");
t.eq(root.firstChild.getAttributeNS(null, 'height'),
customStyle3.graphicHeight.toString(),
"height is set correctly");
feature.style = customStyle4;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'height'),
customStyle4.graphicHeight.toString(),
"given graphicHeight and graphicWidth, both are set: height");
t.eq(root.firstChild.getAttributeNS(null, 'width'),
customStyle4.graphicWidth.toString(),
"given graphicHeight and graphicWidth, both are set: width");
feature.style = customStyle5;
layer.drawFeature(feature);
t.eq(root.firstChild.getAttributeNS(null, 'style'),
'opacity: '+customStyle5.graphicOpacity.toString()+';',
"graphicOpacity correctly set");
t.eq(root.firstChild.getAttributeNS(null, 'style'),
'opacity: '+customStyle5.graphicOpacity.toString()+';',
"graphicOpacity correctly set");
feature.style = customStyle6;
layer.drawFeature(feature);
var x = geometryX / renderer.getResolution() + renderer.left;
@@ -268,46 +268,46 @@
"graphicYOffset correctly set");
}
if (layer.renderer.CLASS_NAME == 'OpenLayers.Renderer.VML') {
feature.style = customStyle1;
layer.drawFeature(feature);
t.eq(root.firstChild.style.width,
(2*customStyle1.pointRadius).toString()+'px',
"given a pointRadius, width equals 2*pointRadius");
t.eq(root.firstChild.style.height,
(2*customStyle1.pointRadius).toString()+'px',
"given a pointRadius, height equals 2*pointRadius");
feature.style = customStyle2;
layer.drawFeature(feature);
t.eq(root.firstChild.style.width,
root.firstChild.style.height,
"given a graphicWidth, width equals height");
t.eq(root.firstChild.style.width,
customStyle2.graphicWidth.toString()+'px',
"width is set correctly");
feature.style = customStyle3;
layer.drawFeature(feature);
t.eq(root.firstChild.style.height,
root.firstChild.style.width,
"given a graphicHeight, height equals width");
t.eq(root.firstChild.style.height,
customStyle3.graphicHeight.toString()+'px',
"height is set correctly");
feature.style = customStyle4;
layer.drawFeature(feature);
t.eq(root.firstChild.style.height,
customStyle4.graphicHeight.toString()+'px',
"given graphicHeight and graphicWidth, both are set: height");
t.eq(root.firstChild.style.width,
customStyle4.graphicWidth.toString()+'px',
"given graphicHeight and graphicWidth, both are set: width");
feature.style = customStyle1;
layer.drawFeature(feature);
t.eq(root.firstChild.style.width,
(2*customStyle1.pointRadius).toString()+'px',
"given a pointRadius, width equals 2*pointRadius");
t.eq(root.firstChild.style.height,
(2*customStyle1.pointRadius).toString()+'px',
"given a pointRadius, height equals 2*pointRadius");
feature.style = customStyle2;
layer.drawFeature(feature);
t.eq(root.firstChild.style.width,
root.firstChild.style.height,
"given a graphicWidth, width equals height");
t.eq(root.firstChild.style.width,
customStyle2.graphicWidth.toString()+'px',
"width is set correctly");
feature.style = customStyle3;
layer.drawFeature(feature);
t.eq(root.firstChild.style.height,
root.firstChild.style.width,
"given a graphicHeight, height equals width");
t.eq(root.firstChild.style.height,
customStyle3.graphicHeight.toString()+'px',
"height is set correctly");
feature.style = customStyle4;
layer.drawFeature(feature);
t.eq(root.firstChild.style.height,
customStyle4.graphicHeight.toString()+'px',
"given graphicHeight and graphicWidth, both are set: height");
t.eq(root.firstChild.style.width,
customStyle4.graphicWidth.toString()+'px',
"given graphicHeight and graphicWidth, both are set: width");
feature.style = customStyle5;
layer.drawFeature(feature);
var fill = root.firstChild.getElementsByTagName("fill")[0];
if (fill == null) fill = root.firstChild.getElementsByTagName("v:fill");
var opacity = fill.getAttribute('opacity');
t.eq(opacity,
customStyle5.graphicOpacity,
"graphicOpacity correctly set");
customStyle5.graphicOpacity,
"graphicOpacity correctly set");
feature.style = customStyle6;
layer.drawFeature(feature);
var x = geometryX / renderer.getResolution();

View File

@@ -131,9 +131,9 @@
var m = new OpenLayers.Map('map');
m.addLayer(layer);
m.zoomToMaxExtent();
t.eq(layer.grid[3][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "cell [3][0] is wrapped around the world.");
t.eq(layer.grid[0][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C450%2C180%2C630&WIDTH=256&HEIGHT=256", "cell [0][0] is wrapped around the world lon, but not lat");
t.eq(layer.grid[0][3].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-180%2C450%2C0%2C630&WIDTH=256&HEIGHT=256", "cell [3][0] is not wrapped at all.");
t.eq(layer.grid[3][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C0%2C90%2C90&WIDTH=256&HEIGHT=256", "cell [3][0] is wrapped around the world.");
t.eq(layer.grid[0][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C270%2C90%2C360&WIDTH=256&HEIGHT=256", "cell [0][0] is wrapped around the world lon, but not lat");
t.eq(layer.grid[0][3].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-90%2C270%2C0%2C360&WIDTH=256&HEIGHT=256", "cell [3][0] is not wrapped at all.");
}
function test_Layer_WrapDateLine_KaMap (t) {
@@ -146,9 +146,9 @@
var m = new OpenLayers.Map('map');
m.addLayer(layer);
m.zoomToMaxExtent();
t.eq(layer.grid[0][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=0&s=221471921.25", "grid[0][0] kamap is okay");
t.eq(layer.grid[0][3].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=-256&s=221471921.25", "grid[0][3] kamap is okay");
t.eq(layer.grid[3][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-512&l=0&s=221471921.25", "grid[3][0] is okay");
t.eq(layer.grid[0][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=0&s=110735960.625", "grid[0][0] kamap is okay");
t.eq(layer.grid[0][3].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=-256&s=110735960.625", "grid[0][3] kamap is okay");
t.eq(layer.grid[3][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-512&l=0&s=110735960.625", "grid[3][0] is okay");
}
function test_Layer_WrapDateLine_WMS_Overlay (t) {
t.plan( 3 );
@@ -163,9 +163,9 @@
var m = new OpenLayers.Map('map');
m.addLayers([baselayer,layer]);
m.zoomToMaxExtent();
t.eq(layer.grid[0][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C450%2C180%2C630&WIDTH=256&HEIGHT=256", "grid[0][0] wms overlay is okay");
t.eq(layer.grid[0][3].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-180%2C450%2C0%2C630&WIDTH=256&HEIGHT=256", "grid[0][3] wms overlay is okay");
t.eq(layer.grid[3][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "grid[3][0] wms overlay okay");
t.eq(layer.grid[0][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C270%2C90%2C360&WIDTH=256&HEIGHT=256", "grid[0][0] wms overlay is okay");
t.eq(layer.grid[0][3].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-90%2C270%2C0%2C360&WIDTH=256&HEIGHT=256", "grid[0][3] wms overlay is okay");
t.eq(layer.grid[3][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C0%2C90%2C90&WIDTH=256&HEIGHT=256", "grid[3][0] wms overlay okay");
}
</script>

View File

@@ -155,7 +155,7 @@
function test_06_Layer_getZoomForResolution(t) {
t.plan(4);
t.plan(6);
var layer = new OpenLayers.Layer('Test Layer');
@@ -163,6 +163,8 @@
layer.resolutions = [128, 64, 32, 16, 8, 4, 2];
t.eq(layer.getZoomForResolution(200), 0, "zoom all the way out");
t.eq(layer.getZoomForResolution(65), 1, "index closest to 65");
t.eq(layer.getZoomForResolution(63), 1, "index closest to 63");
t.eq(layer.getZoomForResolution(25), 2, "zoom in middle");
t.eq(layer.getZoomForResolution(3), 5, "zoom allmost all the way in");
t.eq(layer.getZoomForResolution(1), 6, "zoom all the way in");