Legg til TalkBack-støtte og nordindikator på kompasset
Tilgjengelegheit (Android + PWA): - Semantiske landemerke (header, main, aside, role=dialog) - aria-live-regionar for statusoppdateringar og lasteoverlegg - Fokusindikatorar (:focus-visible) og prefers-reduced-motion - Auka trykkmål til 48dp (infoknapp, oppdater, del, widget) - contentDescription på kart, kompass og framdriftsindikator - aria-current og role=listitem på tilfluktsromliste - Fokusfangst og fokusgjenoppretting i lasteoverlegg - Ikkje-farge-indikator (▶) for valt tilfluktsrom - Dynamisk lang-attributt basert på oppdaga språk - Lokaliserte aria-label (en/nb/nn) Nordindikator: - DirectionArrowView teiknar diskret «N»-markør på omkrinsen - Roterer uavhengig av hovudpila for kompasskalibrering - Berre på stor kompassvisning, ikkje minipila Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f9f8ac3d60
commit
6ba35add2f
17 changed files with 240 additions and 36 deletions
|
|
@ -36,6 +36,7 @@ let firstLocationFix = true;
|
|||
let userSelectedShelter = false;
|
||||
|
||||
export async function init(): Promise<void> {
|
||||
applyA11yLabels();
|
||||
setupMap();
|
||||
setupCompass();
|
||||
setupShelterList();
|
||||
|
|
@ -43,6 +44,16 @@ export async function init(): Promise<void> {
|
|||
await loadData();
|
||||
}
|
||||
|
||||
/** Set localized aria-labels on landmark elements. */
|
||||
function applyA11yLabels(): void {
|
||||
document.getElementById('map-container')?.setAttribute('aria-label', t('a11y_map'));
|
||||
document.getElementById('compass-container')?.setAttribute('aria-label', t('a11y_compass'));
|
||||
document.getElementById('bottom-sheet')?.setAttribute('aria-label', t('a11y_shelter_info'));
|
||||
document.getElementById('shelter-list')?.setAttribute('aria-label', t('a11y_nearest_shelters'));
|
||||
document.getElementById('refresh-btn')?.setAttribute('aria-label', t('action_refresh'));
|
||||
document.getElementById('toggle-fab')?.setAttribute('aria-label', t('action_toggle_view'));
|
||||
}
|
||||
|
||||
function setupMap(): void {
|
||||
const container = document.getElementById('map-container')!;
|
||||
mapView.initMap(container, (shelter: Shelter) => {
|
||||
|
|
@ -268,6 +279,7 @@ function updateSelectedShelter(isUserAction: boolean): void {
|
|||
document.getElementById('compass-address')!.textContent =
|
||||
selected.shelter.adresse;
|
||||
compassView.setDirection(selected.bearingDegrees - deviceHeading);
|
||||
compassView.setNorthAngle(-deviceHeading);
|
||||
|
||||
// Update shelter list selection
|
||||
shelterList.updateList(nearestShelters, selectedShelterIndex);
|
||||
|
|
@ -290,6 +302,7 @@ function onHeadingUpdate(heading: number): void {
|
|||
const angle = selected.bearingDegrees - heading;
|
||||
|
||||
compassView.setDirection(angle);
|
||||
compassView.setNorthAngle(-heading);
|
||||
updateMiniArrow(angle);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue