diff --git a/demo-no-simulation-args.html b/demo-no-simulation-args.html
new file mode 100644
index 00000000..767bcd03
--- /dev/null
+++ b/demo-no-simulation-args.html
@@ -0,0 +1,39 @@
+
+
+ javascript-mobile-desktop-geolocation Demo With No Simulation
+
+
+
+ javascript-mobile-desktop-geolocation With No Simulation
+ Results:
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/js/geoPosition.js b/js/geoPosition.js
index d3041602..894b3199 100644
--- a/js/geoPosition.js
+++ b/js/geoPosition.js
@@ -7,251 +7,281 @@
//
// Based on Stan Wiechers > geo-location-javascript v0.4.8 > http://code.google.com/p/geo-location-javascript/
//
-// Revision: $Rev: 01 $:
+// Revision: $Rev: 01 $:
// Author: $Author: estebanav $:
-// Date: $Date: 2012-09-07 23:03:53 -0300 (Fri, 07 Sep 2012) $:
+// Date: $Date: 2012-09-07 23:03:53 -0300 (Fri, 07 Sep 2012) $:
-var bb = {
- success: 0,
- error: 0,
- blackberryTimeoutId : -1
- };
+var bb = {
+ success: 0,
+ error: 0,
+ blackberryTimeoutId : -1
+};
function handleBlackBerryLocationTimeout()
{
- if(bb.blackberryTimeoutId!=-1) {
- bb.error({ message: "Timeout error",
- code: 3
- });
- }
+ if(bb.blackberryTimeoutId!=-1) {
+ bb.error({ message: "Timeout error",
+ code: 3
+ });
+ }
}
function handleBlackBerryLocation()
{
- clearTimeout(bb.blackberryTimeoutId);
- bb.blackberryTimeoutId=-1;
- if (bb.success && bb.error) {
- if(blackberry.location.latitude==0 && blackberry.location.longitude==0) {
- //http://dev.w3.org/geo/api/spec-source.html#position_unavailable_error
- //POSITION_UNAVAILABLE (numeric value 2)
- bb.error({message:"Position unavailable", code:2});
- }
- else
- {
- var timestamp=null;
- //only available with 4.6 and later
- //http://na.blackberry.com/eng/deliverables/8861/blackberry_location_568404_11.jsp
- if (blackberry.location.timestamp)
- {
- timestamp = new Date( blackberry.location.timestamp );
- }
- bb.success( { timestamp: timestamp ,
- coords: {
- latitude: blackberry.location.latitude,
- longitude: blackberry.location.longitude
- }
- });
+ clearTimeout(bb.blackberryTimeoutId);
+ bb.blackberryTimeoutId=-1;
+ if (bb.success && bb.error) {
+ if(blackberry.location.latitude==0 && blackberry.location.longitude==0) {
+ //http://dev.w3.org/geo/api/spec-source.html#position_unavailable_error
+ //POSITION_UNAVAILABLE (numeric value 2)
+ bb.error({message:"Position unavailable", code:2});
+ }
+ else
+ {
+ var timestamp=null;
+ //only available with 4.6 and later
+ //http://na.blackberry.com/eng/deliverables/8861/blackberry_location_568404_11.jsp
+ if (blackberry.location.timestamp)
+ {
+ timestamp = new Date( blackberry.location.timestamp );
+ }
+ bb.success( { timestamp: timestamp ,
+ coords: {
+ latitude: blackberry.location.latitude,
+ longitude: blackberry.location.longitude
}
- //since blackberry.location.removeLocationUpdate();
- //is not working as described http://na.blackberry.com/eng/deliverables/8861/blackberry_location_removeLocationUpdate_568409_11.jsp
- //the callback are set to null to indicate that the job is done
-
- bb.success = null;
- bb.error = null;
+ });
}
+ //since blackberry.location.removeLocationUpdate();
+ //is not working as described http://na.blackberry.com/eng/deliverables/8861/blackberry_location_removeLocationUpdate_568409_11.jsp
+ //the callback are set to null to indicate that the job is done
+
+ bb.success = null;
+ bb.error = null;
+ }
}
var geoPosition=function() {
- var pub = {};
- var provider=null;
- var u="undefined";
- var ipGeolocationSrv = 'http://freegeoip.net/json/?callback=JSONPCallback';
+ var pub = {};
+ var provider=null;
+ var u="undefined";
+ var ipGeolocationSrv = 'http://freegeoip.net/json/?callback=JSONPCallback';
- pub.getCurrentPosition = function(success,error,opts)
- {
- provider.getCurrentPosition(success, error,opts);
+ var fixArgs = function(success, error, opts){ //make all args optional.
+ var ret = {success: function(){}, error: function(){}, opts:{}};
+ if(arguments.length == 0){
+ throw "You must provide a success callback";
+ }
+ if(arguments.length >= 1){
+ ret.success = success;
+ }
+ if(arguments.length >= 2){
+ if(error === Object(error)){
+ ret.opts = error;
+ } else {
+ ret.error = error;
+ }
}
+ if(arguments.length == 3){
+ ret.opts = opts;
+ }
+ return ret;
+ };
+
+ pub.getCurrentPosition = function(success,error,opts) {
+ var args = fixArgs.apply(null, arguments);
+ success = args.success, error = args.error, opts = args.opts;
- pub.jsonp = {
- callbackCounter: 0,
+ provider.getCurrentPosition(success, error,opts);
+ };
- fetch: function(url, callback) {
- var fn = 'JSONPCallback_' + this.callbackCounter++;
- window[fn] = this.evalJSONP(callback);
- url = url.replace('=JSONPCallback', '=' + fn);
+ pub.jsonp = {
+ callbackCounter: 0,
- var scriptTag = document.createElement('SCRIPT');
- scriptTag.src = url;
- document.getElementsByTagName('HEAD')[0].appendChild(scriptTag);
- },
+ fetch: function(url, callback) {
+ var fn = 'JSONPCallback_' + this.callbackCounter++;
+ window[fn] = this.evalJSONP(callback);
+ url = url.replace('=JSONPCallback', '=' + fn);
- evalJSONP: function(callback) {
- return function(data) {
- callback(data);
- }
+ var scriptTag = document.createElement('SCRIPT');
+ scriptTag.src = url;
+ document.getElementsByTagName('HEAD')[0].appendChild(scriptTag);
+ },
+
+ evalJSONP: function(callback) {
+ return function(data) {
+ callback(data);
}
}
-
+ };
+
- pub.init = function()
- {
- try
- {
- //console.debug(( typeof(geoPositionSimulator)!=u ) && (geoPositionSimulator.length > 0 ) );
- if ( ( typeof(geoPositionSimulator)!=u ) && (geoPositionSimulator.length > 0 ) ){
- provider=geoPositionSimulator;
- } else if (typeof(bondi)!=u && typeof(bondi.geolocation)!=u ) {
- provider=bondi.geolocation;
- } else if (typeof(navigator.geolocation)!=u) {
- provider=navigator.geolocation;
- pub.getCurrentPosition = function(success, error, opts) {
- function _success(p) {
- //for mozilla geode,it returns the coordinates slightly differently
- var params;
- if(typeof(p.latitude)!=u) {
- params = {
- timestamp: p.timestamp,
- coords: {
- latitude: p.latitude,
- longitude: p.longitude
- }
- };
- } else {
- params = p;
- }
- success( params );
- }
- provider.getCurrentPosition(_success,error,opts);
- }
- } else if(typeof(window.blackberry)!=u && blackberry.location.GPSSupported) {
- // set to autonomous mode
- if(typeof(blackberry.location.setAidMode)==u) {
- return false;
- }
- blackberry.location.setAidMode(2);
- //override default method implementation
- pub.getCurrentPosition = function(success,error,opts)
- {
- //alert(parseFloat(navigator.appVersion));
- //passing over callbacks as parameter didn't work consistently
- //in the onLocationUpdate method, thats why they have to be set
- //outside
- bb.success = success;
- bb.error = error;
- //function needs to be a string according to
- //http://www.tonybunce.com/2008/05/08/Blackberry-Browser-Amp-GPS.aspx
- if(opts['timeout']) {
- bb.blackberryTimeoutId = setTimeout("handleBlackBerryLocationTimeout()",opts['timeout']);
- } else {
- //default timeout when none is given to prevent a hanging script
- bb.blackberryTimeoutId = setTimeout("handleBlackBerryLocationTimeout()",60000);
- }
- blackberry.location.onLocationUpdate("handleBlackBerryLocation()");
- blackberry.location.refreshLocation();
- }
- provider = blackberry.location;
-
- } else if ( typeof(Mojo) !=u && typeof(Mojo.Service.Request)!="Mojo.Service.Request") {
- provider = true;
- pub.getCurrentPosition = function(success, error, opts) {
- parameters = {};
- if( opts ) {
- //http://developer.palm.com/index.php?option=com_content&view=article&id=1673#GPS-getCurrentPosition
- if (opts.enableHighAccuracy && opts.enableHighAccuracy == true ){
- parameters.accuracy = 1;
- }
- if ( opts.maximumAge ) {
- parameters.maximumAge = opts.maximumAge;
- }
- if (opts.responseTime) {
- if( opts.responseTime < 5 ) {
- parameters.responseTime = 1;
- } else if ( opts.responseTime < 20 ) {
- parameters.responseTime = 2;
- } else {
- parameters.timeout = 3;
- }
- }
- }
- r = new Mojo.Service.Request( 'palm://com.palm.location' , {
- method:"getCurrentPosition",
- parameters:parameters,
- onSuccess: function( p ){
- success( { timestamp: p.timestamp,
- coords: {
- latitude: p.latitude,
- longitude: p.longitude,
- heading: p.heading
- }
- });
- },
- onFailure: function( e ){
- if (e.errorCode==1) {
- error({ code: 3,
- message: "Timeout"
- });
- } else if (e.errorCode==2){
- error({ code: 2,
- message: "Position unavailable"
- });
- } else {
- error({ code: 0,
- message: "Unknown Error: webOS-code" + errorCode
- });
- }
- }
- });
- }
+ pub.init = function() {
+ try {
+ //console.debug(( typeof(geoPositionSimulator)!=u ) && (geoPositionSimulator.length > 0 ) );
+ if ( ( typeof(geoPositionSimulator)!=u ) && (geoPositionSimulator.length > 0 ) ){
+ provider=geoPositionSimulator;
+ } else if (typeof(bondi)!=u && typeof(bondi.geolocation)!=u ) {
+ provider=bondi.geolocation;
+ } else if (typeof(navigator.geolocation)!=u) {
+ provider=navigator.geolocation;
+ pub.getCurrentPosition = function(success, error, opts) {
+ var args = fixArgs.apply(null, arguments);
+ success = args.success, error = args.error, opts = args.opts;
+ var _success = function(p) {
+ //for mozilla geode,it returns the coordinates slightly differently
+ var params;
+ if(typeof(p.latitude)!=u) {
+ params = {
+ timestamp: p.timestamp,
+ coords: {
+ latitude: p.latitude,
+ longitude: p.longitude
+ }
+ };
+ } else {
+ params = p;
+ }
+ success( params );
+ };
+ provider.getCurrentPosition(_success, error, opts);
+ }
+ } else if(typeof(window.blackberry)!=u && blackberry.location.GPSSupported) {
+ // set to autonomous mode
+ if(typeof(blackberry.location.setAidMode)==u) {
+ return false;
+ }
+ blackberry.location.setAidMode(2);
+ //override default method implementation
+ pub.getCurrentPosition = function(success,error,opts)
+ {
+ var args = fixArgs.apply(null, arguments);
+ success = args.success, error = args.error, opts = args.opts;
+ //alert(parseFloat(navigator.appVersion));
+ //passing over callbacks as parameter didn't work consistently
+ //in the onLocationUpdate method, thats why they have to be set
+ //outside
+ bb.success = success;
+ bb.error = error || function(){};
+ //function needs to be a string according to
+ //http://www.tonybunce.com/2008/05/08/Blackberry-Browser-Amp-GPS.aspx
+ if(opts['timeout']) {
+ bb.blackberryTimeoutId = setTimeout("handleBlackBerryLocationTimeout()",opts['timeout']);
+ } else {
+ //default timeout when none is given to prevent a hanging script
+ bb.blackberryTimeoutId = setTimeout("handleBlackBerryLocationTimeout()",60000);
}
- else if (typeof(device)!=u && typeof(device.getServiceObject)!=u) {
- provider=device.getServiceObject("Service.Location", "ILocation");
+ blackberry.location.onLocationUpdate("handleBlackBerryLocation()");
+ blackberry.location.refreshLocation();
+ };
+ provider = blackberry.location;
- //override default method implementation
- pub.getCurrentPosition = function(success, error, opts){
- function callback(transId, eventCode, result) {
- if (eventCode == 4) {
- error({message:"Position unavailable", code:2});
- } else {
- //no timestamp of location given?
- success( { timestamp:null,
- coords: {
- latitude: result.ReturnValue.Latitude,
- longitude: result.ReturnValue.Longitude,
- altitude: result.ReturnValue.Altitude,
- heading: result.ReturnValue.Heading }
- });
- }
- }
- //location criteria
-
- var criteria = new Object();
- criteria.LocationInformationClass = "BasicLocationInformation";
- //make the call
- provider.ILocation.GetLocation(criteria,callback);
- }
- } else {
- pub.getCurrentPosition = function(success, error, opts) {
- pub.jsonp.fetch(ipGeolocationSrv,
- function( p ){ success( { timestamp: p.timestamp,
- coords: {
- latitude: p.latitude,
- longitude: p.longitude,
- heading: p.heading
- }
- });});
+ } else if ( typeof(Mojo) !=u && typeof(Mojo.Service.Request)!="Mojo.Service.Request") {
+ provider = true;
+ pub.getCurrentPosition = function(success, error, opts) {
+ var args = fixArgs.apply(null, arguments);
+ success = args.success, error = args.error, opts = args.opts;
+ var parameters = {};
+ if( opts ) {
+ //http://developer.palm.com/index.php?option=com_content&view=article&id=1673#GPS-getCurrentPosition
+ if (opts.enableHighAccuracy && opts.enableHighAccuracy == true ){
+ parameters.accuracy = 1;
+ }
+ if ( opts.maximumAge ) {
+ parameters.maximumAge = opts.maximumAge;
+ }
+ if (opts.responseTime) {
+ if( opts.responseTime < 5 ) {
+ parameters.responseTime = 1;
+ } else if ( opts.responseTime < 20 ) {
+ parameters.responseTime = 2;
+ } else {
+ parameters.timeout = 3;
}
- provider = true;
+ }
}
+ var r = new Mojo.Service.Request( 'palm://com.palm.location' , {
+ method:"getCurrentPosition",
+ parameters:parameters,
+ onSuccess: function( p ){
+ success( { timestamp: p.timestamp,
+ coords: {
+ latitude: p.latitude,
+ longitude: p.longitude,
+ heading: p.heading
+ }
+ });
+ },
+ onFailure: function( e ){
+ if (e.errorCode==1) {
+ error({ code: 3,
+ message: "Timeout"
+ });
+ } else if (e.errorCode==2){
+ error({ code: 2,
+ message: "Position unavailable"
+ });
+ } else {
+ error({ code: 0,
+ message: "Unknown Error: webOS-code" + e.errorCode
+ });
+ }
+ }
+ });
+ }
+
+ }
+ else if (typeof(device)!=u && typeof(device.getServiceObject)!=u) {
+ provider=device.getServiceObject("Service.Location", "ILocation");
+
+ //override default method implementation
+ pub.getCurrentPosition = function(success, error, opts){
+ var args = fixArgs.apply(null, arguments);
+ success = args.success, error = args.error, opts = args.opts;
+ function callback(transId, eventCode, result) {
+ if (eventCode == 4) {
+ error({message:"Position unavailable", code:2});
+ } else {
+ //no timestamp of location given?
+ success( { timestamp:null,
+ coords: {
+ latitude: result.ReturnValue.Latitude,
+ longitude: result.ReturnValue.Longitude,
+ altitude: result.ReturnValue.Altitude,
+ heading: result.ReturnValue.Heading }
+ });
+ }
+ }
+ provider.ILocation.GetLocation({'LocationInformationClass': 'BasicLocationInformation'}, callback);
}
- catch (e){
- if( typeof(console) != u ) console.log(e);
- return false;
- }
- return provider!=null;
+ } else {
+ pub.getCurrentPosition = function(success, error, opts) {
+ var args = fixArgs.apply(null, arguments);
+ success = args.success, error = args.error, opts = args.opts;
+ pub.jsonp.fetch(ipGeolocationSrv,
+ function( p ){ success( { timestamp: p.timestamp,
+ coords: {
+ latitude: p.latitude,
+ longitude: p.longitude,
+ heading: p.heading
+ }
+ });
+ });
+ };
+ provider = true;
+ }
+
+
}
- return pub;
-}();
+ catch (e){
+ if( typeof(console) != u ) console.err(e);
+ return false;
+ }
+ return provider!=null;
+ };
+ return pub;
+}();
\ No newline at end of file