forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| <script lang="ts">
 | |
|   import { UIEventSource } from "../../Logic/UIEventSource"
 | |
|   import Translations from "../i18n/Translations"
 | |
|   import Tr from "./Tr.svelte"
 | |
|   import Josm_logo from "../../assets/svg/Josm_logo.svelte"
 | |
|   import Constants from "../../Models/Constants"
 | |
|   import type { SpecialVisualizationState } from "../SpecialVisualization"
 | |
|   import { Utils } from "../../Utils"
 | |
| 
 | |
|   export let state: SpecialVisualizationState
 | |
|   const t = Translations.t.general.attribution
 | |
|   const josmState = new UIEventSource<"OK" | string>(undefined)
 | |
|   // Reset after 15s
 | |
|   josmState.stabilized(15000).addCallbackD(() => josmState.setData(undefined))
 | |
| 
 | |
|   const showButton = state.osmConnection.userDetails.map(
 | |
|     (ud) => ud.loggedIn && ud.csCount >= Constants.userJourney.historyLinkVisible
 | |
|   )
 | |
| 
 | |
|   function openJosm() {
 | |
|     const bbox = state.mapProperties.bounds.data
 | |
|     if (bbox === undefined) {
 | |
|       return
 | |
|     }
 | |
|     const top = bbox.getNorth()
 | |
|     const bottom = bbox.getSouth()
 | |
|     const right = bbox.getEast()
 | |
|     const left = bbox.getWest()
 | |
|     const josmLink = `http://127.0.0.1:8111/load_and_zoom?left=${left}&right=${right}&top=${top}&bottom=${bottom}`
 | |
|     Utils.download(josmLink)
 | |
|       .then((answer) => josmState.setData(answer.replace(/\n/g, "").trim()))
 | |
|       .catch(() => josmState.setData("ERROR"))
 | |
|   }
 | |
| </script>
 | |
| 
 | |
| {#if $showButton}
 | |
|   <div class="flex flex-col">
 | |
|     <button class="as-link sidebar-button" on:click={openJosm}>
 | |
|       <Josm_logo class="h-6 w-6" />
 | |
|       <Tr t={t.editJosm} />
 | |
|     </button>
 | |
| 
 | |
|     {#if $josmState === undefined}
 | |
|       <!-- empty -->
 | |
|     {:else if $josmState === "OK"}
 | |
|       <Tr cls="thanks shrink-0 w-fit" t={t.josmOpened} />
 | |
|     {:else}
 | |
|       <Tr cls="alert shrink-0 w-fit" t={t.josmNotOpened} />
 | |
|     {/if}
 | |
|   </div>
 | |
| {/if}
 |