forked from MapComplete/MapComplete
A11y: various improvements
This commit is contained in:
parent
0d4f2c9c36
commit
5fa2ddd9c1
23 changed files with 327 additions and 98 deletions
|
@ -9,7 +9,6 @@ import SvelteUIElement from "../Base/SvelteUIElement"
|
|||
import MaplibreMap from "./MaplibreMap.svelte"
|
||||
import { RasterLayerProperties } from "../../Models/RasterLayerProperties"
|
||||
import * as htmltoimage from "html-to-image"
|
||||
import { ALL } from "node:dns"
|
||||
|
||||
/**
|
||||
* The 'MapLibreAdaptor' bridges 'MapLibre' with the various properties of the `MapProperties`
|
||||
|
@ -41,6 +40,8 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
readonly lastClickLocation: Store<undefined | { lon: number; lat: number }>
|
||||
readonly minzoom: UIEventSource<number>
|
||||
readonly maxzoom: UIEventSource<number>
|
||||
readonly rotation: UIEventSource<number>
|
||||
readonly animationRunning = new UIEventSource(false)
|
||||
|
||||
/**
|
||||
* Functions that are called when one of those actions has happened
|
||||
|
@ -81,6 +82,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
this.allowRotating = state?.allowRotating ?? new UIEventSource<boolean>(true)
|
||||
this.allowZooming = state?.allowZooming ?? new UIEventSource(true)
|
||||
this.bounds = state?.bounds ?? new UIEventSource(undefined)
|
||||
this.rotation = state?.rotation ?? new UIEventSource<number>(0)
|
||||
this.rasterLayer =
|
||||
state?.rasterLayer ?? new UIEventSource<RasterLayerPolygon | undefined>(undefined)
|
||||
|
||||
|
@ -121,6 +123,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
self.setMinzoom(self.minzoom.data)
|
||||
self.setMaxzoom(self.maxzoom.data)
|
||||
self.setBounds(self.bounds.data)
|
||||
self.SetRotation(self.rotation.data)
|
||||
self.setBackground()
|
||||
this.updateStores(true)
|
||||
map.on("moveend", () => this.updateStores())
|
||||
|
@ -133,6 +136,9 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
map.on("dblclick", (e) => {
|
||||
handleClick(e)
|
||||
})
|
||||
map.on("rotateend", (e) => {
|
||||
this.updateStores()
|
||||
})
|
||||
map.getContainer().addEventListener("keydown", (event) => {
|
||||
let locked: "islocked" = undefined
|
||||
if (!this.allowMoving.data) {
|
||||
|
@ -169,12 +175,12 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
console.error("Could not set background")
|
||||
})
|
||||
)
|
||||
|
||||
this.location.addCallbackAndRunD((loc) => {
|
||||
self.MoveMapToCurrentLoc(loc)
|
||||
})
|
||||
this.zoom.addCallbackAndRunD((z) => self.SetZoom(z))
|
||||
this.maxbounds.addCallbackAndRun((bbox) => self.setMaxBounds(bbox))
|
||||
this.rotation.addCallbackAndRunD((bearing) => self.SetRotation(bearing))
|
||||
this.allowMoving.addCallbackAndRun((allowMoving) => {
|
||||
self.setAllowMoving(allowMoving)
|
||||
self.pingKeycodeEvent(allowMoving ? "unlocked" : "locked")
|
||||
|
@ -459,6 +465,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
if (this.bounds.data === undefined || !isSetup) {
|
||||
this.bounds.setData(bbox)
|
||||
}
|
||||
this.rotation.setData(map.getBearing())
|
||||
}
|
||||
|
||||
private SetZoom(z: number): void {
|
||||
|
@ -471,6 +478,14 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
}
|
||||
}
|
||||
|
||||
private SetRotation(bearing: number): void {
|
||||
const map = this._maplibreMap.data
|
||||
if (!map || bearing === undefined) {
|
||||
return
|
||||
}
|
||||
map.rotateTo(bearing, { duration: 0 })
|
||||
}
|
||||
|
||||
private MoveMapToCurrentLoc(loc: { lat: number; lon: number }): void {
|
||||
const map = this._maplibreMap.data
|
||||
if (!map || loc === undefined) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue