From 61452e28211a2b24b4c99ef28d6b4d314569ca1d Mon Sep 17 00:00:00 2001 From: pgiraud Date: Wed, 23 Feb 2011 13:33:14 +0000 Subject: [PATCH] Adding getCurrentLocation API method so that application can get the location anytime, p=aabt, r=elemoine, (Closes #3090) git-svn-id: http://svn.openlayers.org/trunk/openlayers@11315 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Control/Geolocate.js | 32 +++++++++++++++++++++-------- tests/Control/Geolocate.html | 25 ++++++++++++++++++++++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/lib/OpenLayers/Control/Geolocate.js b/lib/OpenLayers/Control/Geolocate.js index d9c0a9ebea..7fb7f534f2 100644 --- a/lib/OpenLayers/Control/Geolocate.js +++ b/lib/OpenLayers/Control/Geolocate.js @@ -85,7 +85,7 @@ OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, { this.events.triggerEvent("locationuncapable"); return false; } - if (!this.active) { + if (OpenLayers.Control.prototype.activate.apply(this, arguments)) { if (this.watch) { this.watchId = this.geolocation.watchPosition( OpenLayers.Function.bind(this.geolocate, this), @@ -93,16 +93,11 @@ OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, { this.geolocationOptions ); } else { - this.geolocation.getCurrentPosition( - OpenLayers.Function.bind(this.geolocate, this), - OpenLayers.Function.bind(this.failure, this), - this.geolocationOptions - ); + this.getCurrentLocation(); } + return true; } - return OpenLayers.Control.prototype.activate.apply( - this, arguments - ); + return false; }, /** @@ -145,6 +140,25 @@ OpenLayers.Control.Geolocate = OpenLayers.Class(OpenLayers.Control, { }); }, + /** + * APIMethod: getCurrentLocation + * + * Returns: + * {Boolean} Returns true if a event will be fired (successfull + * registration) + */ + getCurrentLocation: function() { + if (!this.active || this.watch) { + return false; + } + this.geolocation.getCurrentPosition( + OpenLayers.Function.bind(this.geolocate, this), + OpenLayers.Function.bind(this.failure, this), + this.geolocationOptions + ); + return true; + }, + /** * Method: failure * method called on browser's geolocation failure diff --git a/tests/Control/Geolocate.html b/tests/Control/Geolocate.html index 0c2f433507..d65bbdd3d2 100644 --- a/tests/Control/Geolocate.html +++ b/tests/Control/Geolocate.html @@ -62,6 +62,31 @@ map.removeControl(control); map.setCenter(centerLL); } + function test_getCurrentLocation(t) { + t.plan(5); + var control = new OpenLayers.Control.Geolocate({ + geolocation: geolocation + }); + map.addControl(control); + t.eq(control.getCurrentLocation(), false, 'getCurrentLocation return false if control hasnt been activated'); + control.activate(); + map.setCenter(centerLL); + t.eq(control.getCurrentLocation(), true, 'getCurrentLocation return true if control has been activated'); + var center = map.getCenter(); + t.eq(center.lon, 10, 'bound control sets the map lon when calling getCurrentLocation'); + t.eq(center.lat, 10, 'bound control sets the map lat when calling getCurrentLocation'); + control.deactivate(); + map.removeControl(control); + map.setCenter(centerLL); + var control2 = new OpenLayers.Control.Geolocate({ + geolocation: geolocation + }); + map.addControl(control2); + t.eq(control2.getCurrentLocation(), false, 'getCurrentLocation return false if control is in watch mode'); + control2.deactivate(); + map.removeControl(control2); + map.setCenter(centerLL); + } function test_watch(t) { t.plan(2); var control = new OpenLayers.Control.Geolocate({