dist/geolocation.js

File

			(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'geolocation', version:'1.1.0', obj:(function(){
			
				var
					// dictonary
					_dict = {
						fr: {
							search:      'Recherche de votre positionnement',
							position:    'Votre position',
							unavailable: 'Service de localisation non-disponible',
							deactivated: 'Service de localisation désactivé',
							notFound:    'Position indisponible',
							timeout:     'Délai expiré',
							error:       'Il y a eu un problème'
						},
						en: {
							search:      'Searching your location',
							position:    'Your position',
							unavailable: 'Location service unavailable',
							deactivated: 'Location service deactivated',
							notFound:    'Position not found',
							timeout:     'Timeout',
							error:       'There has been a problem'
						}
					},
			
					// get a valid lang
					_lang = function(lang) {
						return kafe.fn.lang(_dict,lang);
					}
				;
			
			
			
				/**
				* ### Version 1.1.0
				* Methods to access geolocalization information about the client.
				*
				* @module kafe
				* @class kafe.geolocation
				*/
				var geolocation = {};
			
				/**
				* Get the current geolocalization information of the client.
				*
				* @method locate
				* @param {Object} parameters Parameters for the current request.
				* 	@param {String|jQueryObject|DOMElement} [parameters.selector] Element used to show status messages.
				* 	@param {String} [parameters.lang=CURRENT_ENV_LANG] A two character language code.
				* 	@param {Function} [parameters.success] Callback triggered when geolocalization informations have been successful retrieved. An object containing the informations is passed as the first argument.
				* 	@param {Function} [parameters.error] Callback triggered on geolocalization errors. The error message is passed as the first argument.
				* 	@param {Object} [parameters.options] Options given to optimize getCurrentPosition.
				* @example
				*	kafe.geolocation.locate({
				*		selector: '#GeoLocStatus', lang: 'en',
				*		success: function(coords) {
				*			console.log('latitude: ' + coords.latitude);
				*			console.log('longitude: ' + coords.longitude);
				*		}
				*		error: function(msg) {
				*			console.log('Cannot geoloc: ' + msg);
				*		},
				*		options: {
				*			enableHighAccuracy: false,
				*			timeout: 5000,
				*			maximumAge: 0
				*		}
				*	});
				* @example
				*	$('#GeoLocStatus').kafe('geolocation.locate', {});
				*/
				geolocation.locate = function(parameters) {
					var
						d               = _dict[_lang(parameters.lang)],
						$msg            = $(parameters.selector),
						options         = (parameters.options) ? parameters.options : {},
						errorCallback   = parameters.error,
						successCallback = parameters.success
					;
			
					// if service available
					if (Modernizr.geolocation) {
						$msg.html('... '+d.search+' ...');
			
						// try to get coords
						navigator.geolocation.getCurrentPosition(
			
							// success
							function(position) {
								$msg.html(d.position + ': ' + position.coords.latitude + ', ' +  position.coords.longitude);
								if (!!successCallback) {
									successCallback({coords:position.coords});
								}
							},
			
							// failure
							function(error) {
								var msg = '';
								switch (error.code) {
									case 1:	msg = d.deactivated; break;
									case 2:	msg = d.notFound; break;
									case 3:	msg = d.timeout; break;
								}
			
								$msg.html(msg);
								if (!!errorCallback) {
									errorCallback({message:msg});
								}
							},
			
							// Options to use
							options
						);
			
					// if service unavailable
					} else {
						var msg = d.unavailable;
						$msg.html(msg);
						if (!!errorCallback) {
							errorCallback({message:msg});
						}
					}
				};
			
			
				// Add as jQuery plugin
				kafe.fn.plugIntojQuery('', {
					'geolocation.locate': function(obj, parameters) {
						geolocation.locate($.extend({}, parameters[0], {selector:obj}));
					}
				});
			
			
				return geolocation;
			
			})()}); })(typeof window !== 'undefined' ? window : this);