forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import Combine from "../Base/Combine";
 | 
						|
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
 | 
						|
import {Store, UIEventSource} from "../../Logic/UIEventSource";
 | 
						|
import {BBox} from "../../Logic/BBox";
 | 
						|
import Translations from "../i18n/Translations";
 | 
						|
import {VariableUiElement} from "../Base/VariableUIElement";
 | 
						|
import Toggle from "../Input/Toggle";
 | 
						|
import {SubtleButton} from "../Base/SubtleButton";
 | 
						|
import Svg from "../../Svg";
 | 
						|
import {Utils} from "../../Utils";
 | 
						|
import Constants from "../../Models/Constants";
 | 
						|
 | 
						|
export class OpenJosm extends Combine {
 | 
						|
    constructor(osmConnection: OsmConnection, bounds: Store<BBox>, iconStyle?: string) {
 | 
						|
        const t = Translations.t.general.attribution
 | 
						|
 | 
						|
        const josmState = new UIEventSource<string>(undefined)
 | 
						|
        // Reset after 15s
 | 
						|
        josmState.stabilized(15000).addCallbackD((_) => josmState.setData(undefined))
 | 
						|
 | 
						|
        const stateIndication = new VariableUiElement(
 | 
						|
            josmState.map((state) => {
 | 
						|
                if (state === undefined) {
 | 
						|
                    return undefined
 | 
						|
                }
 | 
						|
                state = state.toUpperCase()
 | 
						|
                if (state === "OK") {
 | 
						|
                    return t.josmOpened.SetClass("thanks")
 | 
						|
                }
 | 
						|
                return t.josmNotOpened.SetClass("alert")
 | 
						|
            })
 | 
						|
        )
 | 
						|
 | 
						|
        const toggle = new Toggle(
 | 
						|
            new SubtleButton(Svg.josm_logo_svg().SetStyle(iconStyle), t.editJosm).onClick(() => {
 | 
						|
                const bbox = 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"))
 | 
						|
            }).SetClass("w-full"),
 | 
						|
            undefined,
 | 
						|
            osmConnection.userDetails.map(
 | 
						|
                (ud) => ud.loggedIn && ud.csCount >= Constants.userJourney.historyLinkVisible
 | 
						|
            )
 | 
						|
        )
 | 
						|
 | 
						|
        super([stateIndication, toggle])
 | 
						|
    }
 | 
						|
}
 |