forked from MapComplete/MapComplete
UX: add possibility to select map features by only using the keyboard, see #1181
This commit is contained in:
parent
7469a0d607
commit
48171d30f5
9 changed files with 304 additions and 104 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 { draw } from "svelte/transition"
|
||||
|
||||
/**
|
||||
* The 'MapLibreAdaptor' bridges 'MapLibre' with the various properties of the `MapProperties`
|
||||
|
@ -41,6 +40,12 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
readonly lastClickLocation: Store<undefined | { lon: number; lat: number }>
|
||||
readonly minzoom: UIEventSource<number>
|
||||
readonly maxzoom: UIEventSource<number>
|
||||
/**
|
||||
* When was the last navigation by arrow keys?
|
||||
* If set, this is a hint to use arrow compatibility
|
||||
* Number of _seconds_ since epoch
|
||||
*/
|
||||
readonly lastKeyNavigation: UIEventSource<number> = new UIEventSource<number>(undefined)
|
||||
private readonly _maplibreMap: Store<MLMap>
|
||||
/**
|
||||
* Used for internal bookkeeping (to remove a rasterLayer when done loading)
|
||||
|
@ -128,6 +133,16 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
map.on("dblclick", (e) => {
|
||||
handleClick(e)
|
||||
})
|
||||
map.getContainer().addEventListener("keydown", (event) => {
|
||||
if (
|
||||
event.key === "ArrowRight" ||
|
||||
event.key === "ArrowLeft" ||
|
||||
event.key === "ArrowUp" ||
|
||||
event.key === "ArrowDown"
|
||||
) {
|
||||
this.lastKeyNavigation.setData(Date.now() / 1000)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
this.rasterLayer.addCallbackAndRun((_) =>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue