aboutsummaryrefslogtreecommitdiffstats
path: root/www/js/views/locator.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/js/views/locator.js')
-rw-r--r--www/js/views/locator.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/www/js/views/locator.js b/www/js/views/locator.js
new file mode 100644
index 0000000..8e067a9
--- /dev/null
+++ b/www/js/views/locator.js
@@ -0,0 +1,69 @@
+(function (FMS, Backbone, _, $) {
+ _.extend( FMS, {
+ LocatorView: FMS.FMSView.extend({
+ skipLocationCheck: false,
+
+ locate: function() {
+ $(document).delegate('.ui-content', 'touchmove', false);
+ $('#locating').show();
+ this.listenTo(FMS.locator, 'gps_located', this.gotLocation);
+ this.listenTo(FMS.locator, 'gps_failed', this.failedLocation);
+ this.listenTo(FMS.locator, 'gps_locating', this.locationUpdate);
+
+ FMS.locator.geolocate(CONFIG.ACCURACY, this.skipLocationCheck);
+ this.startLocateProgress();
+ },
+
+ startLocateProgress: function() {
+ this.located = false;
+ this.locateCount = 1;
+ var that = this;
+ window.setTimeout( function() {that.showLocateProgress();}, 1000);
+ },
+
+ locationUpdate: function( accuracy ) {
+ if ( accuracy && accuracy < 500 ) {
+ $('#progress-bar').css( 'background-color', 'orange' );
+ } else if ( accuracy && accuracy < 250 ) {
+ $('#progress-bar').css( 'background-color', 'yellow' );
+ } else {
+ $('#progress-bar').css( 'background-color', 'grey' );
+ }
+
+ $('#accuracy').text(parseInt(accuracy, 10) + 'm');
+ },
+
+ showLocateProgress: function() {
+ if ( $('#locating').css('display') == 'none' ) {
+ return;
+ }
+ if ( !this.located && this.locateCount > 20 ) {
+ var details = { msg: FMS.strings.geolocation_failed };
+ this.failedLocation(details);
+ return;
+ }
+ var percent = ( this.locateCount / 20 ) * 100;
+ $('#progress-bar').css( 'width', percent + '%' );
+ this.locateCount++;
+ var that = this;
+ window.setTimeout( function() {that.showLocateProgress();}, 1000);
+ },
+
+ finishedLocating: function() {
+ this.stopListening(FMS.locator, 'gps_locating');
+ this.stopListening(FMS.locator, 'gps_located');
+ this.stopListening(FMS.locator, 'gps_failed');
+ $(document).undelegate('.ui-content', 'touchmove', false);
+ $('#locating').hide();
+ },
+
+ failedLocation: function(details) {
+ this.finishedLocating();
+ },
+
+ gotLocation: function(info) {
+ this.finishedLocating();
+ }
+ })
+ });
+})(FMS, Backbone, _, $);