MapComplete/src/UI/Base/OpenJosm.svelte

49 lines
1.6 KiB
Svelte
Raw Normal View History

<script lang="ts">
2023-12-01 15:23:28 +01:00
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"
2023-12-01 15:23:28 +01:00
export let state: SpecialVisualizationState
const t = Translations.t.general.attribution
const josmState = new UIEventSource<"OK" | string>(undefined)
// Reset after 15s
2023-12-01 15:23:28 +01:00
josmState.stabilized(15000).addCallbackD(() => josmState.setData(undefined))
const showButton = state.osmConnection.userDetails.map(
(ud) => ud.loggedIn && ud.csCount >= Constants.userJourney.historyLinkVisible
2023-12-01 15:23:28 +01:00
)
function openJosm() {
2023-12-01 15:23:28 +01:00
const bbox = state.mapProperties.bounds.data
if (bbox === undefined) {
2023-12-01 15:23:28 +01:00
return
}
2023-12-01 15:23:28 +01:00
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()))
2023-12-01 15:23:28 +01:00
.catch(() => josmState.setData("ERROR"))
}
</script>
2023-12-01 15:23:28 +01:00
{#if $showButton}
{#if $josmState === undefined}
<!-- empty -->
{:else if state === "OK"}
<Tr cls="thanks" t={t.josmOpened} />
{:else}
<Tr cls="alert" t={t.josmNotOpened} />
{/if}
<button class="flex items-center" on:click={openJosm}>
<Josm_logo class="h-12 w-12 p-2 pr-4" />
<Tr t={t.editJosm} />
</button>
{/if}