| 
						
						
							
								
							
						
						
					 | 
					@ -62,6 +62,42 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      </ul> | 
					 | 
					 | 
					      </ul> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    </div> | 
					 | 
					 | 
					    </div> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    <div v-if="isLocalActive"> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      <div v-if="!isChoosingSearchBox"> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        <button | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          class="ml-2 px-4 py-2 rounded-md bg-blue-200 text-blue-500" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          @click="isChoosingSearchBox = true" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Select a {{ searchBox ? "Different" : "" }} Location for Nearby Search | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      </div> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      <div v-else> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        <button v-if="!searchBox && !isMarkerSet" class="m-4 px-4 py-2"> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Choose Location Below for Nearby Search | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        <button | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          v-if="!searchBox && isMarkerSet" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          @click="storeSearchBox" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Save Location for Nearby Search | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        <button | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          v-if="searchBox" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          class="m-4 px-4 py-2 rounded-md bg-blue-200 text-blue-500" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          @click="forgetSearchBox" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Delete Location for Nearby Search | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        <button | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          class="ml-2 px-4 py-2 rounded-md bg-blue-200 text-blue-500" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          @click="cancelSearchBoxSelect" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          Cancel | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      </div> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    </div> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    <!-- Loading Animation --> | 
					 | 
					 | 
					    <!-- Loading Animation --> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    <div | 
					 | 
					 | 
					    <div | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" | 
					 | 
					 | 
					      class="fixed left-6 bottom-24 text-center text-4xl leading-none bg-slate-400 text-white w-14 py-2.5 rounded-full" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -104,20 +140,12 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      </ul> | 
					 | 
					 | 
					      </ul> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    </InfiniteScroll> | 
					 | 
					 | 
					    </InfiniteScroll> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    <div | 
					 | 
					 | 
					    <div v-if="isChoosingSearchBox" style="height: 600px; width: 800px"> | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					      v-if="isLocalActive && searchBoxes.length === 0" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      style="height: 600px; width: 800px" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    > | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      <l-map | 
					 | 
					 | 
					      <l-map | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        ref="map" | 
					 | 
					 | 
					        ref="map" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        :center="[localCenterLat, localCenterLong]" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        v-model:zoom="localZoom" | 
					 | 
					 | 
					        v-model:zoom="localZoom" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        :center="[0, 0]" | 
					 | 
					 | 
					        @click="setMapPoint" | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					        @click=" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          (event) => { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            localLatitude = event.latlng.lat; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            localLongitude = event.latlng.lng; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        " | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					      > | 
					 | 
					 | 
					      > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        <l-tile-layer | 
					 | 
					 | 
					        <l-tile-layer | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" | 
					 | 
					 | 
					          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -125,15 +153,16 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          name="OpenStreetMap" | 
					 | 
					 | 
					          name="OpenStreetMap" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        /> | 
					 | 
					 | 
					        /> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        <l-marker | 
					 | 
					 | 
					        <l-marker | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          v-if="localLatitude || localLongitude" | 
					 | 
					 | 
					          v-if="isMarkerSet" | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					          :lat-lng="[localLatitude, localLongitude]" | 
					 | 
					 | 
					          :lat-lng="[localCenterLat, localCenterLong]" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          @click="resetLatLong()" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        /> | 
					 | 
					 | 
					        /> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        <l-rectangle | 
					 | 
					 | 
					        <l-rectangle | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          v-if="isMarkerSet" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          :bounds="[ | 
					 | 
					 | 
					          :bounds="[ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            [localLatitude - 0.1, localLongitude - 0.1], | 
					 | 
					 | 
					            [localCenterLat - localLatDiff, localCenterLong - localLongDiff], | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					            [localLatitude + 0.1, localLongitude + 0.1], | 
					 | 
					 | 
					            [localCenterLat + localLatDiff, localCenterLong + localLongDiff], | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					          ]" | 
					 | 
					 | 
					          ]" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          :color="ff7800" | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          :weight="1" | 
					 | 
					 | 
					          :weight="1" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        /> | 
					 | 
					 | 
					        /> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      </l-map> | 
					 | 
					 | 
					      </l-map> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -155,14 +184,18 @@ import { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import { accountsDB, db } from "@/db"; | 
					 | 
					 | 
					import { accountsDB, db } from "@/db"; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import { Contact } from "@/db/tables/contacts"; | 
					 | 
					 | 
					import { Contact } from "@/db/tables/contacts"; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					import { MASTER_SETTINGS_KEY } from "@/db/tables/settings"; | 
					 | 
					 | 
					import { BoundingBox, MASTER_SETTINGS_KEY } from "@/db/tables/settings"; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					import { accessToken } from "@/libs/crypto"; | 
					 | 
					 | 
					import { accessToken } from "@/libs/crypto"; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					import { didInfo } from "@/libs/endorserServer"; | 
					 | 
					 | 
					import { didInfo, ProjectData } from "@/libs/endorserServer"; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					import AlertMessage from "@/components/AlertMessage"; | 
					 | 
					 | 
					import AlertMessage from "@/components/AlertMessage"; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import QuickNav from "@/components/QuickNav"; | 
					 | 
					 | 
					import QuickNav from "@/components/QuickNav"; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import InfiniteScroll from "@/components/InfiniteScroll"; | 
					 | 
					 | 
					import InfiniteScroll from "@/components/InfiniteScroll"; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import EntityIcon from "@/components/EntityIcon"; | 
					 | 
					 | 
					import EntityIcon from "@/components/EntityIcon"; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					const DEFAULT_LAT_LONG_DIFF = 0.01; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					const WORLD_ZOOM = 2; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					const DEFAULT_ZOOM = 2; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					@Component({ | 
					 | 
					 | 
					@Component({ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  components: { | 
					 | 
					 | 
					  components: { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    LRectangle, | 
					 | 
					 | 
					    LRectangle, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -184,14 +217,18 @@ export default class DiscoverView extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  alertMessage = ""; | 
					 | 
					 | 
					  alertMessage = ""; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  alertTitle = ""; | 
					 | 
					 | 
					  alertTitle = ""; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  projects: ProjectData[] = []; | 
					 | 
					 | 
					  projects: ProjectData[] = []; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  isChoosingSearchBox = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  isLocalActive = true; | 
					 | 
					 | 
					  isLocalActive = true; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  isRemoteActive = false; | 
					 | 
					 | 
					  isRemoteActive = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  isMarkerSet = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  localCenterLat = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  localCenterLong = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  localLatDiff = DEFAULT_LAT_LONG_DIFF; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  localLongDiff = DEFAULT_LAT_LONG_DIFF; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  localCount = 0; | 
					 | 
					 | 
					  localCount = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  localLatitude = 0; | 
					 | 
					 | 
					  localZoom = DEFAULT_ZOOM; | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					  localLongitude = 0; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  localZoom = 2; | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  remoteCount = 0; | 
					 | 
					 | 
					  remoteCount = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					  searchBoxes = []; | 
					 | 
					 | 
					  searchBox: BoundingBox | null = null; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					  isLoading = false; | 
					 | 
					 | 
					  isLoading = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  // make this function available to the Vue template | 
					 | 
					 | 
					  // make this function available to the Vue template | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -202,7 +239,8 @@ export default class DiscoverView extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    const settings = await db.settings.get(MASTER_SETTINGS_KEY); | 
					 | 
					 | 
					    const settings = await db.settings.get(MASTER_SETTINGS_KEY); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    this.activeDid = settings?.activeDid || ""; | 
					 | 
					 | 
					    this.activeDid = settings?.activeDid || ""; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    this.apiServer = settings?.apiServer || ""; | 
					 | 
					 | 
					    this.apiServer = settings?.apiServer || ""; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    this.searchBoxes = settings?.searchBoxes || []; | 
					 | 
					 | 
					    this.searchBox = settings?.searchBoxes?.[0]; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.resetLatLong(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    this.allContacts = await db.contacts.toArray(); | 
					 | 
					 | 
					    this.allContacts = await db.contacts.toArray(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    await accountsDB.open(); | 
					 | 
					 | 
					    await accountsDB.open(); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -399,6 +437,130 @@ export default class DiscoverView extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    this.$router.push(route); | 
					 | 
					 | 
					    this.$router.push(route); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  setMapPoint(event) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (this.isMarkerSet) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLatDiff = Math.abs(event.latlng.lat - this.localCenterLat); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLongDiff = Math.abs(event.latlng.lng - this.localCenterLong); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } else { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      // marker is not set | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localCenterLat = event.latlng.lat; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localCenterLong = event.latlng.lng; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      let latDiff = DEFAULT_LAT_LONG_DIFF; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      let longDiff = DEFAULT_LAT_LONG_DIFF; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      // Guess at a size for the bounding box. | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      // This doesn't seem like the right approach but it's the only way I can find to get the screen bounds. | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      const bounds = event.target.boxZoom?._map?.getBounds(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (bounds) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        latDiff = Math.abs(bounds._northEast.lat - bounds._southWest.lat) / 8; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        longDiff = Math.abs(bounds._northEast.lng - bounds._southWest.lng) / 8; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLatDiff = latDiff; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLongDiff = longDiff; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.isMarkerSet = true; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  public resetLatLong() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (this.searchBox) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localCenterLat = (this.searchBox.maxLat + this.searchBox.minLat) / 2; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localCenterLong = | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        (this.searchBox.eastLong + this.searchBox.westLong) / 2; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLatDiff = (this.searchBox.maxLat - this.searchBox.minLat) / 2; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLongDiff = | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        (this.searchBox.eastLong - this.searchBox.westLong) / 2; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localZoom = WORLD_ZOOM; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    // otherwise, don't change their viewport | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.isMarkerSet = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  public async storeSearchBox() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (this.localCenterLong || this.localCenterLat) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      try { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        await db.open(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        db.settings.update(MASTER_SETTINGS_KEY, { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          searchBoxes: [ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              name: "Local", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              bbox: { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                eastLong: this.localCenterLong + this.localLongDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                maxLat: this.localCenterLat + this.localLatDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                minLat: this.localCenterLat - this.localLatDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                westLong: this.localCenterLong - this.localLongDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          ], | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.searchBox = { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          eastLong: this.localCenterLong + this.localLongDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          maxLat: this.localCenterLat + this.localLatDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          minLat: this.localCenterLat - this.localLatDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          westLong: this.localCenterLong - this.localLongDiff, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        }; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.localZoom = WORLD_ZOOM; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      } catch (err) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        this.$notify( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            group: "alert", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            type: "danger", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            title: "Error Updating Search Settings", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            text: "Try going to a different page and then coming back.", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          -1, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        console.error( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          "Telling user to retry the location search setting because:", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          err, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } else { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.$notify( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          group: "alert", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          type: "warning", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          title: "No Location Selected", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          text: "Select a location on the map.", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        -1, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  public async forgetSearchBox() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    try { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      await db.open(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      db.settings.update(MASTER_SETTINGS_KEY, { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        searchBoxes: [], | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.searchBox = null; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localCenterLat = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localCenterLong = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLatDiff = DEFAULT_LAT_LONG_DIFF; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localLongDiff = DEFAULT_LAT_LONG_DIFF; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.localZoom = DEFAULT_ZOOM; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } catch (err) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.$notify( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          group: "alert", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          type: "danger", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          title: "Error Updating Search Settings", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          text: "Try going to a different page and then coming back.", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        }, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        -1, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      console.error( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        "Telling user to retry the location search setting because:", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        err, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  public cancelSearchBoxSelect() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.isChoosingSearchBox = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.localZoom = WORLD_ZOOM; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  public computedLocalTabClassNames() { | 
					 | 
					 | 
					  public computedLocalTabClassNames() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    return { | 
					 | 
					 | 
					    return { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      "inline-block": true, | 
					 | 
					 | 
					      "inline-block": true, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |