mapcomplete/UI/BigComponents/Attribution.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

93 lines
3.4 KiB
TypeScript
Raw Normal View History

import Link from "../Base/Link"
import Svg from "../../Svg"
import Combine from "../Base/Combine"
import { UIEventSource } from "../../Logic/UIEventSource"
2021-01-04 04:36:21 +01:00
import UserDetails from "../../Logic/Osm/OsmConnection"
import Constants from "../../Models/Constants"
import Loc from "../../Models/Loc"
2021-06-12 02:58:32 +02:00
import { VariableUiElement } from "../Base/VariableUIElement"
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
import { BBox } from "../../Logic/BBox"
2021-10-16 18:30:24 +02:00
import { Utils } from "../../Utils"
import Translations from "../i18n/Translations"
/**
* The bottom right attribution panel in the leaflet map
*/
2021-06-12 02:58:32 +02:00
export default class Attribution extends Combine {
2021-11-07 16:34:51 +01:00
constructor(
location: UIEventSource<Loc>,
userDetails: UIEventSource<UserDetails>,
layoutToUse: LayoutConfig,
currentBounds: UIEventSource<BBox>
2022-09-08 21:40:48 +02:00
) {
const mapComplete = new Link(
`Mapcomplete ${Constants.vNumber}`,
2021-06-12 02:58:32 +02:00
"https://github.com/pietervdvn/MapComplete",
2022-09-08 21:40:48 +02:00
true
)
2021-06-12 02:58:32 +02:00
const reportBug = new Link(
Svg.bug_ui().SetClass("small-image"),
"https://github.com/pietervdvn/MapComplete/issues",
2022-09-08 21:40:48 +02:00
true
)
const layoutId = layoutToUse?.id
2021-10-16 18:30:24 +02:00
const stats = new Link(
Svg.statistics_ui().SetClass("small-image"),
Utils.OsmChaLinkFor(31, layoutId),
true
)
2021-06-12 02:58:32 +02:00
const idLink = location.map(
(location) =>
`https://www.openstreetmap.org/edit?editor=id#map=${location?.zoom ?? 0}/${
location?.lat ?? 0
}/${location?.lon ?? 0}`
2022-09-08 21:40:48 +02:00
)
2021-06-12 02:58:32 +02:00
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)}`
2022-09-08 21:40:48 +02:00
)
2021-06-12 02:58:32 +02:00
const mapillary = new Link(
Svg.mapillary_black_ui().SetClass("small-image"),
mapillaryLink,
true
2022-09-08 21:40:48 +02:00
)
const mapDataByOsm = new Link(
Translations.t.general.attribution.mapDataByOsm,
"https://openstreetmap.org/copyright",
true
)
const editWithJosm = new VariableUiElement(
2021-06-12 02:58:32 +02:00
userDetails.map(
(userDetails) => {
2021-06-28 00:59:30 +02:00
if (userDetails.csCount < Constants.userJourney.tagsVisibleAndWikiLinked) {
2021-06-12 02:58:32 +02:00
return undefined
}
const bounds: any = currentBounds.data
if (bounds === undefined) {
2021-06-12 02:58:32 +02:00
return undefined
}
const top = bounds.getNorth()
const bottom = bounds.getSouth()
const right = bounds.getEast()
const left = bounds.getWest()
2021-06-12 02:58:32 +02:00
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]
2021-06-12 02:58:32 +02:00
)
)
super([mapComplete, reportBug, stats, editHere, editWithJosm, mapillary, mapDataByOsm])
this.SetClass("flex")
}
}