forked from MapComplete/MapComplete
Chore: regenerate docs, lint
This commit is contained in:
parent
7b41b617f6
commit
bad0edd4b0
201 changed files with 6044 additions and 1750 deletions
|
@ -1,5 +1,4 @@
|
|||
<script lang="ts">
|
||||
|
||||
/**
|
||||
* An A11Y feature which indicates how far away and in what direction the feature lies.
|
||||
*
|
||||
|
@ -30,9 +29,9 @@
|
|||
let bearing = Math.round(GeoOperations.bearing(mapCenter, fcenter))
|
||||
let dist = Math.round(GeoOperations.distanceBetween(fcenter, mapCenter))
|
||||
return { bearing, dist }
|
||||
},
|
||||
}
|
||||
)
|
||||
let bearingFromGps = state.geolocation.geolocationState.currentGPSLocation.mapD(coordinate => {
|
||||
let bearingFromGps = state.geolocation.geolocationState.currentGPSLocation.mapD((coordinate) => {
|
||||
return GeoOperations.bearing([coordinate.longitude, coordinate.latitude], fcenter)
|
||||
})
|
||||
let compass = Orientation.singleton.alpha
|
||||
|
@ -40,7 +39,8 @@
|
|||
let relativeDirections = Translations.t.general.visualFeedback.directionsRelative
|
||||
let absoluteDirections = Translations.t.general.visualFeedback.directionsAbsolute
|
||||
|
||||
let closeToCurrentLocation = state.geolocation.geolocationState.currentGPSLocation.map(gps => {
|
||||
let closeToCurrentLocation = state.geolocation.geolocationState.currentGPSLocation.map(
|
||||
(gps) => {
|
||||
if (!gps) {
|
||||
return false
|
||||
}
|
||||
|
@ -49,60 +49,69 @@
|
|||
const dist = GeoOperations.distanceBetween([gps.longitude, gps.latitude], mapCenter)
|
||||
return dist < Constants.viewportCenterCloseToGpsCutoff
|
||||
},
|
||||
[state.mapProperties.location],
|
||||
[state.mapProperties.location]
|
||||
)
|
||||
let labelFromCenter: Store<string> = bearingAndDist.mapD(
|
||||
({ bearing, dist }) => {
|
||||
const distHuman = GeoOperations.distanceToHuman(dist)
|
||||
const lang = Locale.language.data
|
||||
const t = absoluteDirections[GeoOperations.bearingToHuman(bearing)]
|
||||
const mainTr = Translations.t.general.visualFeedback.fromMapCenter.Subs({
|
||||
distance: distHuman,
|
||||
direction: t.textFor(lang),
|
||||
})
|
||||
return mainTr.textFor(lang)
|
||||
},
|
||||
[compass, Locale.language]
|
||||
)
|
||||
let labelFromCenter: Store<string> = bearingAndDist.mapD(({ bearing, dist }) => {
|
||||
const distHuman = GeoOperations.distanceToHuman(dist)
|
||||
const lang = Locale.language.data
|
||||
const t = absoluteDirections[GeoOperations.bearingToHuman(bearing)]
|
||||
const mainTr = Translations.t.general.visualFeedback.fromMapCenter.Subs({
|
||||
distance: distHuman,
|
||||
direction: t.textFor(lang),
|
||||
})
|
||||
return mainTr.textFor(lang)
|
||||
}, [compass, Locale.language])
|
||||
|
||||
|
||||
// Bearing and distance relative to the map center
|
||||
let bearingAndDistGps: Store<{
|
||||
bearing: number;
|
||||
dist: number
|
||||
} | undefined> = state.geolocation.geolocationState.currentGPSLocation.mapD(
|
||||
({ longitude, latitude }) => {
|
||||
let gps = [longitude, latitude]
|
||||
let bearing = Math.round(GeoOperations.bearing(gps, fcenter))
|
||||
let dist = Math.round(GeoOperations.distanceBetween(fcenter, gps))
|
||||
return { bearing, dist }
|
||||
},
|
||||
)
|
||||
let labelFromGps: Store<string | undefined> = bearingAndDistGps.mapD(({ bearing, dist }) => {
|
||||
const distHuman = GeoOperations.distanceToHuman(dist)
|
||||
const lang = Locale.language.data
|
||||
let bearingHuman: string
|
||||
if (compass.data !== undefined) {
|
||||
console.log("compass:", compass.data)
|
||||
const bearingRelative = bearing - compass.data
|
||||
const t = relativeDirections[GeoOperations.bearingToHumanRelative(bearingRelative)]
|
||||
bearingHuman = t.textFor(lang)
|
||||
} else {
|
||||
bearingHuman = absoluteDirections[GeoOperations.bearingToHuman(bearing)].textFor(lang)
|
||||
}
|
||||
const mainTr = Translations.t.general.visualFeedback.fromGps.Subs({
|
||||
distance: distHuman,
|
||||
direction: bearingHuman,
|
||||
})
|
||||
return mainTr.textFor(lang)
|
||||
}, [compass, Locale.language])
|
||||
|
||||
let label = labelFromCenter.map(labelFromCenter => {
|
||||
if (labelFromGps.data !== undefined) {
|
||||
if (closeToCurrentLocation.data) {
|
||||
return labelFromGps.data
|
||||
let bearingAndDistGps: Store<
|
||||
| {
|
||||
bearing: number
|
||||
dist: number
|
||||
}
|
||||
return labelFromCenter + ", " + labelFromGps.data
|
||||
}
|
||||
return labelFromCenter
|
||||
}, [labelFromGps])
|
||||
| undefined
|
||||
> = state.geolocation.geolocationState.currentGPSLocation.mapD(({ longitude, latitude }) => {
|
||||
let gps = [longitude, latitude]
|
||||
let bearing = Math.round(GeoOperations.bearing(gps, fcenter))
|
||||
let dist = Math.round(GeoOperations.distanceBetween(fcenter, gps))
|
||||
return { bearing, dist }
|
||||
})
|
||||
let labelFromGps: Store<string | undefined> = bearingAndDistGps.mapD(
|
||||
({ bearing, dist }) => {
|
||||
const distHuman = GeoOperations.distanceToHuman(dist)
|
||||
const lang = Locale.language.data
|
||||
let bearingHuman: string
|
||||
if (compass.data !== undefined) {
|
||||
console.log("compass:", compass.data)
|
||||
const bearingRelative = bearing - compass.data
|
||||
const t = relativeDirections[GeoOperations.bearingToHumanRelative(bearingRelative)]
|
||||
bearingHuman = t.textFor(lang)
|
||||
} else {
|
||||
bearingHuman = absoluteDirections[GeoOperations.bearingToHuman(bearing)].textFor(lang)
|
||||
}
|
||||
const mainTr = Translations.t.general.visualFeedback.fromGps.Subs({
|
||||
distance: distHuman,
|
||||
direction: bearingHuman,
|
||||
})
|
||||
return mainTr.textFor(lang)
|
||||
},
|
||||
[compass, Locale.language]
|
||||
)
|
||||
|
||||
let label = labelFromCenter.map(
|
||||
(labelFromCenter) => {
|
||||
if (labelFromGps.data !== undefined) {
|
||||
if (closeToCurrentLocation.data) {
|
||||
return labelFromGps.data
|
||||
}
|
||||
return labelFromCenter + ", " + labelFromGps.data
|
||||
}
|
||||
return labelFromCenter
|
||||
},
|
||||
[labelFromGps]
|
||||
)
|
||||
|
||||
function focusMap() {
|
||||
state.mapProperties.location.setData({ lon: fcenter[0], lat: fcenter[1] })
|
||||
|
@ -110,19 +119,33 @@
|
|||
</script>
|
||||
|
||||
{#if $bearingAndDistGps === undefined}
|
||||
<button class={twMerge("relative rounded-full soft p-1", size)} on:click={() => focusMap()}
|
||||
use:ariaLabelStore={label}>
|
||||
<Center class="w-7 h-7"/>
|
||||
<button
|
||||
class={twMerge("soft relative rounded-full p-1", size)}
|
||||
on:click={() => focusMap()}
|
||||
use:ariaLabelStore={label}
|
||||
>
|
||||
<Center class="h-7 w-7" />
|
||||
</button>
|
||||
{:else}
|
||||
<button class={twMerge("relative rounded-full soft", size)} on:click={() => focusMap()} use:ariaLabelStore={label}>
|
||||
<div class={twMerge("absolute top-0 left-0 flex items-center justify-center text-sm break-words",size)}>
|
||||
<button
|
||||
class={twMerge("soft relative rounded-full", size)}
|
||||
on:click={() => focusMap()}
|
||||
use:ariaLabelStore={label}
|
||||
>
|
||||
<div
|
||||
class={twMerge(
|
||||
"absolute top-0 left-0 flex items-center justify-center break-words text-sm",
|
||||
size
|
||||
)}
|
||||
>
|
||||
{GeoOperations.distanceToHuman($bearingAndDistGps?.dist)}
|
||||
</div>
|
||||
{#if $bearingFromGps !== undefined}
|
||||
<div class={twMerge("absolute top-0 left-0 rounded-full", size)}>
|
||||
<Compass_arrow class={size}
|
||||
style={`transform: rotate( calc( 45deg + ${$bearingFromGps - ($compass ?? 0)}deg) );`} />
|
||||
<Compass_arrow
|
||||
class={size}
|
||||
style={`transform: rotate( calc( 45deg + ${$bearingFromGps - ($compass ?? 0)}deg) );`}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
</button>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue