waud.js
API Docs for v0.0.4
Show:

File: src/Location.hx

import js.Browser;
import js.html.PositionError;
import js.html.PositionOptions;
import js.html.Position;
import js.html.Navigator;

@:expose @:keep class Location {

	/**
	* Support check.
	*
	* @property isSupported
	* @type {Bool}
	*/
	public var isSupported:Bool;

	/**
	* Locaion options.
	*
	* @property options
	* @type {PositionOptions}
	*/
	var options:PositionOptions;

	var _navigator:Navigator;
	var _monitorId:Int;

	/**
	* Class to get user location.
	*
	* @class Location
	* @constructor
	* @example
	* 		var location = new Location();
	*       location.getCurrentPosition(onLocation, onError);
	*
	*       function onLocation(position:Position) {
	*           trace(position.coords.latitude, position.coords.longitude);
	*       }
	*
	*       function onError(msg) {
	*           trace(msg);
	*       }
	*/
	public function new(?enableHighAccuracy:Bool = false, ?timeout:Int = 5000, ?maximumAge:Int = 0) {
		options = { enableHighAccuracy: enableHighAccuracy, timeout: timeout, maximumAge: maximumAge };
		_navigator = Browser.navigator;
		isSupported = (Browser.window != null && _navigator.geolocation != null);
	}

	/**
	* Function to get current position.
	*
	* @method getCurrentPosition
	* @param {Function} callback
	* @param {Function} [errorCallback]
	*/
	public function getCurrentPosition(callback:Position -> Void, ?errorCallback:String -> Void) {
		_navigator.geolocation.getCurrentPosition(callback, function(error:PositionError) {
			if (errorCallback != null) _error(error.code, errorCallback);
		}, options);
	}

	/**
	* Function to monitor position updates.
	*
	* @method monitor
	* @param {Function} updateCallback
	* @param {Function} [errorCallback]
	*/
	public function monitor(updateCallback:Position -> Void, ?errorCallback:String -> Void) {
		if (_monitorId != null) _navigator.geolocation.clearWatch(_monitorId);
		_monitorId = _navigator.geolocation.watchPosition(updateCallback, function(error:PositionError) {
			if (errorCallback != null) _error(error.code, errorCallback);
		}, options);
	}

	/**
	* Function to clear position monitoring.
	*
	* @method clearMonitor
	*/
	public function clearMonitor() {
		if (_monitorId != null) _navigator.geolocation.clearWatch(_monitorId);
		_monitorId = null;
	}

	inline function _error(code:Int, errorCallback:String -> Void) {
		switch(code) {
			case PositionError.PERMISSION_DENIED: errorCallback("User denied location request.");
			case PositionError.POSITION_UNAVAILABLE: errorCallback("Location information is unavailable.");
			case PositionError.TIMEOUT: errorCallback("The request to get user location timed out.");
			default: errorCallback("An unknown error occurred.");
		}
	}
}