A11y: reset zoom (chromium-browsers only) when getting back to the map or when opening a picture

This commit is contained in:
Pieter Vander Vennet 2024-01-11 04:00:56 +01:00
parent 41e7108b2e
commit 9655f8a092
10 changed files with 145 additions and 21 deletions

View file

@ -3,6 +3,7 @@ import { UIEventSource } from "../Logic/UIEventSource"
import UserRelatedState from "../Logic/State/UserRelatedState"
import { Utils } from "../Utils"
import { LocalStorageSource } from "../Logic/Web/LocalStorageSource"
import Zoomcontrol from "../UI/Zoomcontrol"
export type ThemeViewTabStates = (typeof MenuState._themeviewTabs)[number]
export type MenuViewTabStates = (typeof MenuState._menuviewTabs)[number]
@ -114,7 +115,36 @@ export class MenuState {
name: "background",
showOverOthers: true,
},
{
toggle: this.communityIndexPanelIsOpened,
name: "community",
showOverOthers: true,
},
{
toggle: this.privacyPanelIsOpened,
name: "privacy",
showOverOthers: true,
},
{
toggle: this.filtersPanelIsOpened,
name: "filters",
showOverOthers: true,
},
]
for (const toggle of this.allToggles) {
toggle.toggle.addCallback((isOpen) => {
if (!isOpen) {
this.resetZoomIfAllClosed()
}
})
}
}
private resetZoomIfAllClosed() {
if (this.isSomethingOpen()) {
return
}
Zoomcontrol.resetzoom()
}
public openFilterView(highlightLayer?: LayerConfig | string) {
@ -146,27 +176,23 @@ export class MenuState {
this.highlightedUserSetting.setData(highlightTagRendering)
}
public isSomethingOpen(): boolean {
return this.allToggles.some((t) => t.toggle.data)
}
/**
* Close all floatOvers.
* Returns 'true' if at least one menu was opened
*/
public closeAll(): boolean {
const toggles = [
this.communityIndexPanelIsOpened,
this.privacyPanelIsOpened,
this.backgroundLayerSelectionIsOpened,
this.filtersPanelIsOpened,
this.menuIsOpened,
this.themeIsOpened,
]
let somethingIsOpen = false
for (const t of toggles) {
somethingIsOpen = t.data
t.setData(false)
if (somethingIsOpen) {
let somethingWasOpen = false
for (const t of this.allToggles) {
somethingWasOpen = t.toggle.data
t.toggle.setData(false)
if (somethingWasOpen) {
break
}
}
return somethingIsOpen
return somethingWasOpen
}
}

View file

@ -61,6 +61,7 @@ import NearbyFeatureSource from "../Logic/FeatureSource/Sources/NearbyFeatureSou
import FavouritesFeatureSource from "../Logic/FeatureSource/Sources/FavouritesFeatureSource"
import { ProvidedImage } from "../Logic/ImageProviders/ImageProvider"
import { GeolocationControlState } from "../UI/BigComponents/GeolocationControl"
import Zoomcontrol from "../UI/Zoomcontrol"
/**
*
@ -481,6 +482,12 @@ export default class ThemeViewState implements SpecialVisualizationState {
this.lastClickObject.features.setData([])
})
this.selectedElement.addCallback((selected) => {
if (selected === undefined) {
Zoomcontrol.resetzoom()
}
})
if (this.layout.customCss !== undefined && window.location.pathname.indexOf("theme") >= 0) {
Utils.LoadCustomCss(this.layout.customCss)
}
@ -524,7 +531,10 @@ export default class ThemeViewState implements SpecialVisualizationState {
}
this.selectedElement.setData(undefined)
this.guistate.closeAll()
this.focusOnMap()
if (!this.guistate.isSomethingOpen()) {
Zoomcontrol.resetzoom()
this.focusOnMap()
}
})
Hotkeys.RegisterHotkey({ nomod: "f" }, docs.selectFavourites, () => {