forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			58 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			58 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]) | ||
|  |     } | ||
|  | } |