| 
									
										
										
										
											2020-10-02 19:00:24 +02:00
										 |  |  | import * as L from "leaflet"; | 
					
						
							| 
									
										
										
										
											2020-08-17 17:23:15 +02:00
										 |  |  | import {UIEventSource} from "../UIEventSource"; | 
					
						
							| 
									
										
										
										
											2020-07-30 00:59:08 +02:00
										 |  |  | import {UIElement} from "../../UI/UIElement"; | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  | import {Utils} from "../../Utils"; | 
					
						
							| 
									
										
										
										
											2020-11-05 12:28:02 +01:00
										 |  |  | import Svg from "../../Svg"; | 
					
						
							| 
									
										
										
										
											2021-01-03 00:19:42 +01:00
										 |  |  | import Img from "../../UI/Base/Img"; | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  | import {LocalStorageSource} from "../Web/LocalStorageSource"; | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  | import LayoutConfig from "../../Customizations/JSON/LayoutConfig"; | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | export default class GeoLocationHandler extends UIElement { | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Wether or not the geolocation is active, aka the user requested the current location | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |     private readonly _isActive: UIEventSource<boolean> = new UIEventSource<boolean>(false); | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The callback over the permission API | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |     private readonly _permission: UIEventSource<string> = new UIEventSource<string>(""); | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     /*** | 
					
						
							|  |  |  |      * The marker on the map, in order to update it | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     private _marker: L.Marker; | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Literally: _currentGPSLocation.data != undefined | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |     private readonly _hasLocation: UIEventSource<boolean>; | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     private readonly _currentGPSLocation: UIEventSource<{ latlng: any; accuracy: number }>; | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Kept in order to update the marker | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     private readonly _leafletMap: UIEventSource<L.Map>; | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * The date when the user requested the geolocation. If we have a location, it'll autozoom to it the first 30 secs | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |     private _lastUserRequest: Date; | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * A small flag on localstorage. If the user previously granted the geolocation, it will be set. | 
					
						
							|  |  |  |      * On firefox, the permissions api is broken (probably fingerprint resistiance) and "granted + don't ask again" doesn't stick between sessions. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * Instead, we set this flag. If this flag is set upon loading the page, we start geolocating immediately. | 
					
						
							|  |  |  |      * If the user denies the geolocation this time, we unset this flag | 
					
						
							|  |  |  |      * @private | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |     private readonly _previousLocationGrant: UIEventSource<string> = LocalStorageSource.Get("geolocation-permissions"); | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |     private readonly _layoutToUse: UIEventSource<LayoutConfig>; | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |     constructor(currentGPSLocation: UIEventSource<{ latlng: any; accuracy: number }>, | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |                 leafletMap: UIEventSource<L.Map>, | 
					
						
							|  |  |  |                 layoutToUse: UIEventSource<LayoutConfig>) { | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         super(undefined); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         this._currentGPSLocation = currentGPSLocation; | 
					
						
							|  |  |  |         this._leafletMap = leafletMap; | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |         this._layoutToUse = layoutToUse; | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         this._hasLocation = currentGPSLocation.map((location) => location !== undefined); | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |         this.dumbMode = false; | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  |         const self = this; | 
					
						
							| 
									
										
										
										
											2020-11-20 11:29:57 +01:00
										 |  |  |         import("../../vendor/Leaflet.AccuratePosition.js").then(() => { | 
					
						
							|  |  |  |             self.init(); | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |         const currentPointer = this._isActive.map(isActive => { | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |             if (isActive && !self._hasLocation.data) { | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |                 return "cursor-wait" | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return "cursor-pointer" | 
					
						
							|  |  |  |         }, [this._hasLocation]) | 
					
						
							|  |  |  |         currentPointer.addCallbackAndRun(pointerClass => { | 
					
						
							|  |  |  |             self.SetClass(pointerClass); | 
					
						
							|  |  |  |             self.Update() | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2020-11-20 11:29:57 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |     InnerRender(): string { | 
					
						
							|  |  |  |         if (this._hasLocation.data) { | 
					
						
							|  |  |  |             return Svg.crosshair_blue_img; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (this._isActive.data) { | 
					
						
							|  |  |  |             return Svg.crosshair_blue_center_img; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return Svg.crosshair_img; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     InnerUpdate(htmlElement: HTMLElement) { | 
					
						
							|  |  |  |         super.InnerUpdate(htmlElement); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const self = this; | 
					
						
							|  |  |  |         htmlElement.onclick = function () { | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |             self.StartGeolocating(); | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         htmlElement.oncontextmenu = function (e) { | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |             self.StartGeolocating(); | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |             e.preventDefault(); | 
					
						
							|  |  |  |             return false; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |     private init() { | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |         this.ListenTo(this._hasLocation); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         this.ListenTo(this._isActive); | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |         this.ListenTo(this._permission); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const self = this; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         function onAccuratePositionProgress(e) { | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |             self._currentGPSLocation.setData({latlng: e.latlng, accuracy: e.accuracy}); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         function onAccuratePositionFound(e) { | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |             self._currentGPSLocation.setData({latlng: e.latlng, accuracy: e.accuracy}); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         function onAccuratePositionError(e) { | 
					
						
							|  |  |  |             console.log("onerror", e.message); | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         const map = this._leafletMap.data; | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |         map.on('accuratepositionprogress', onAccuratePositionProgress); | 
					
						
							|  |  |  |         map.on('accuratepositionfound', onAccuratePositionFound); | 
					
						
							|  |  |  |         map.on('accuratepositionerror', onAccuratePositionError); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         this._currentGPSLocation.addCallback((location) => { | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |             self._previousLocationGrant.setData("granted"); | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |             const timeSinceRequest = (new Date().getTime() - (self._lastUserRequest?.getTime() ?? 0)) / 1000; | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |             if (timeSinceRequest < 30) { | 
					
						
							| 
									
										
										
										
											2021-05-29 20:30:36 +02:00
										 |  |  |                 self.MoveToCurrentLoction(16) | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |             let color = "#1111cc"; | 
					
						
							|  |  |  |             try { | 
					
						
							|  |  |  |                 color = getComputedStyle(document.body).getPropertyValue("--catch-detail-color") | 
					
						
							|  |  |  |             } catch (e) { | 
					
						
							|  |  |  |                 console.error(e) | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2020-11-17 02:22:48 +01:00
										 |  |  |             const icon = L.icon( | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     iconUrl: Img.AsData(Svg.crosshair.replace(/#000000/g, color)), | 
					
						
							|  |  |  |                     iconSize: [40, 40], // size of the icon
 | 
					
						
							|  |  |  |                     iconAnchor: [20, 20], // point of the icon which will correspond to marker's location
 | 
					
						
							|  |  |  |                 }) | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |             const newMarker = L.marker(location.latlng, {icon: icon}); | 
					
						
							| 
									
										
										
										
											2020-08-08 02:16:42 +02:00
										 |  |  |             newMarker.addTo(map); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if (self._marker !== undefined) { | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  |                 map.removeLayer(self._marker); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |             self._marker = newMarker; | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         try { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             navigator?.permissions?.query({name: 'geolocation'}) | 
					
						
							|  |  |  |                 ?.then(function (status) { | 
					
						
							|  |  |  |                     console.log("Geolocation is already", status) | 
					
						
							|  |  |  |                     if (status.state === "granted") { | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |                         self.StartGeolocating(false); | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |                     } | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |                     self._permission.setData(status.state); | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |                     status.onchange = function () { | 
					
						
							|  |  |  |                         self._permission.setData(status.state); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 }); | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         } catch (e) { | 
					
						
							| 
									
										
										
										
											2021-05-19 12:31:09 +02:00
										 |  |  |             console.error(e) | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         if (this._previousLocationGrant.data === "granted") { | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |             this._previousLocationGrant.setData(""); | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |             self.StartGeolocating(false); | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         this.HideOnEmpty(true); | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |     private locate() { | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         const self = this; | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         const map: any = this._leafletMap.data; | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         if (navigator.geolocation) { | 
					
						
							|  |  |  |             navigator.geolocation.getCurrentPosition(function (position) { | 
					
						
							|  |  |  |                 self._currentGPSLocation.setData({ | 
					
						
							|  |  |  |                     latlng: [position.coords.latitude, position.coords.longitude], | 
					
						
							|  |  |  |                     accuracy: position.coords.accuracy | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             }, function () { | 
					
						
							|  |  |  |                 console.warn("Could not get location with navigator.geolocation") | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             map.findAccuratePosition({ | 
					
						
							|  |  |  |                 maxWait: 10000, // defaults to 10000
 | 
					
						
							|  |  |  |                 desiredAccuracy: 50 // defaults to 20
 | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-29 20:30:36 +02:00
										 |  |  |     private MoveToCurrentLoction(targetZoom = 16) { | 
					
						
							|  |  |  |         const location = this._currentGPSLocation.data; | 
					
						
							|  |  |  |         this._lastUserRequest = undefined; | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (this._currentGPSLocation.data.latlng[0] === 0 && this._currentGPSLocation.data.latlng[1] === 0) { | 
					
						
							|  |  |  |             console.debug("Not moving to GPS-location: it is null island") | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // We check that the GPS location is not out of bounds
 | 
					
						
							|  |  |  |         const b = this._layoutToUse.data.lockLocation | 
					
						
							|  |  |  |         let inRange = true; | 
					
						
							|  |  |  |         if (b) { | 
					
						
							|  |  |  |             if (b !== true) { | 
					
						
							|  |  |  |                 // B is an array with our locklocation
 | 
					
						
							|  |  |  |                 inRange = b[0][0] <= location.latlng[0] && location.latlng[0] <= b[1][0] && | 
					
						
							|  |  |  |                     b[0][1] <= location.latlng[1] && location.latlng[1] <= b[1][1]; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (!inRange) { | 
					
						
							|  |  |  |             console.log("Not zooming to GPS location: out of bounds", b, location.latlng) | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             this._leafletMap.data.setView( | 
					
						
							|  |  |  |                 location.latlng, targetZoom | 
					
						
							|  |  |  |             ); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-27 18:55:37 +02:00
										 |  |  |     private StartGeolocating(zoomToGPS = true) { | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         const self = this; | 
					
						
							| 
									
										
										
										
											2021-02-21 03:38:12 +01:00
										 |  |  |         console.log("Starting geolocation") | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-25 02:23:26 +01:00
										 |  |  |         this._lastUserRequest = zoomToGPS ? new Date() : new Date(0); | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |         if (self._permission.data === "denied") { | 
					
						
							| 
									
										
										
										
											2021-02-21 04:04:39 +01:00
										 |  |  |             self._previousLocationGrant.setData(""); | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |             return ""; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  |         if (this._currentGPSLocation.data !== undefined) { | 
					
						
							| 
									
										
										
										
											2021-05-29 20:30:36 +02:00
										 |  |  |             this.MoveToCurrentLoction(16) | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         console.log("Searching location using GPS") | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |         this.locate(); | 
					
						
							| 
									
										
										
										
											2021-01-02 21:03:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |         if (!self._isActive.data) { | 
					
						
							|  |  |  |             self._isActive.setData(true); | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |             Utils.DoEvery(60000, () => { | 
					
						
							| 
									
										
										
										
											2020-07-31 01:45:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 if (document.visibilityState !== "visible") { | 
					
						
							| 
									
										
										
										
											2020-07-26 02:01:34 +02:00
										 |  |  |                     console.log("Not starting gps: document not visible") | 
					
						
							|  |  |  |                     return; | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2021-05-18 19:48:20 +02:00
										 |  |  |                 this.locate(); | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |             }) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-06-28 02:42:22 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |