forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import Link from "../Base/Link"
 | 
						|
import Svg from "../../Svg"
 | 
						|
import Combine from "../Base/Combine"
 | 
						|
import { UIEventSource } from "../../Logic/UIEventSource"
 | 
						|
import UserDetails from "../../Logic/Osm/OsmConnection"
 | 
						|
import Constants from "../../Models/Constants"
 | 
						|
import Loc from "../../Models/Loc"
 | 
						|
import { VariableUiElement } from "../Base/VariableUIElement"
 | 
						|
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
 | 
						|
import { BBox } from "../../Logic/BBox"
 | 
						|
import { Utils } from "../../Utils"
 | 
						|
 | 
						|
/**
 | 
						|
 * The bottom right attribution panel in the leaflet map
 | 
						|
 */
 | 
						|
export default class Attribution extends Combine {
 | 
						|
    constructor(
 | 
						|
        location: UIEventSource<Loc>,
 | 
						|
        userDetails: UIEventSource<UserDetails>,
 | 
						|
        layoutToUse: LayoutConfig,
 | 
						|
        currentBounds: UIEventSource<BBox>
 | 
						|
    ) {
 | 
						|
        const mapComplete = new Link(
 | 
						|
            `Mapcomplete ${Constants.vNumber}`,
 | 
						|
            "https://github.com/pietervdvn/MapComplete",
 | 
						|
            true
 | 
						|
        )
 | 
						|
        const reportBug = new Link(
 | 
						|
            Svg.bug_ui().SetClass("small-image"),
 | 
						|
            "https://github.com/pietervdvn/MapComplete/issues",
 | 
						|
            true
 | 
						|
        )
 | 
						|
 | 
						|
        const layoutId = layoutToUse?.id
 | 
						|
        const stats = new Link(
 | 
						|
            Svg.statistics_ui().SetClass("small-image"),
 | 
						|
            Utils.OsmChaLinkFor(31, layoutId),
 | 
						|
            true
 | 
						|
        )
 | 
						|
 | 
						|
        const idLink = location.map(
 | 
						|
            (location) =>
 | 
						|
                `https://www.openstreetmap.org/edit?editor=id#map=${location?.zoom ?? 0}/${
 | 
						|
                    location?.lat ?? 0
 | 
						|
                }/${location?.lon ?? 0}`
 | 
						|
        )
 | 
						|
        const editHere = new Link(Svg.pencil_ui().SetClass("small-image"), idLink, true)
 | 
						|
 | 
						|
        const mapillaryLink = location.map(
 | 
						|
            (location) =>
 | 
						|
                `https://www.mapillary.com/app/?focus=map&lat=${location?.lat ?? 0}&lng=${
 | 
						|
                    location?.lon ?? 0
 | 
						|
                }&z=${Math.max((location?.zoom ?? 2) - 1, 1)}`
 | 
						|
        )
 | 
						|
        const mapillary = new Link(
 | 
						|
            Svg.mapillary_black_ui().SetClass("small-image"),
 | 
						|
            mapillaryLink,
 | 
						|
            true
 | 
						|
        )
 | 
						|
 | 
						|
        let editWithJosm = new VariableUiElement(
 | 
						|
            userDetails.map(
 | 
						|
                (userDetails) => {
 | 
						|
                    if (userDetails.csCount < Constants.userJourney.tagsVisibleAndWikiLinked) {
 | 
						|
                        return undefined
 | 
						|
                    }
 | 
						|
                    const bounds: any = currentBounds.data
 | 
						|
                    if (bounds === undefined) {
 | 
						|
                        return undefined
 | 
						|
                    }
 | 
						|
                    const top = bounds.getNorth()
 | 
						|
                    const bottom = bounds.getSouth()
 | 
						|
                    const right = bounds.getEast()
 | 
						|
                    const left = bounds.getWest()
 | 
						|
 | 
						|
                    const josmLink = `http://127.0.0.1:8111/load_and_zoom?left=${left}&right=${right}&top=${top}&bottom=${bottom}`
 | 
						|
                    return new Link(Svg.josm_logo_ui().SetClass("small-image"), josmLink, true)
 | 
						|
                },
 | 
						|
                [location, currentBounds]
 | 
						|
            )
 | 
						|
        )
 | 
						|
        super([mapComplete, reportBug, stats, editHere, editWithJosm, mapillary])
 | 
						|
        this.SetClass("flex")
 | 
						|
    }
 | 
						|
}
 |