From 3059d2ed26e65b8280a10c1c0a176f4852eb2ca7 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sun, 31 Dec 2023 20:57:45 +0100 Subject: [PATCH] A11y: more screenreader a11y tweaks, UX tweaks --- .../mapcomplete-changes.json | 87 +++-- langs/layers/en.json | 12 + langs/nl.json | 3 +- src/Models/ThemeConfig/TagRenderingConfig.ts | 5 +- src/UI/Base/ToSvelte.svelte | 1 + src/UI/Popup/DeleteFlow/DeleteWizard.svelte | 7 - src/UI/Popup/ShareLinkViz.ts | 5 +- src/UI/Popup/TagRendering/Questionbox.svelte | 5 +- .../TagRendering/TagRenderingAnswer.svelte | 4 +- .../TagRendering/TagRenderingEditable.svelte | 10 - .../TagRendering/TagRenderingMapping.svelte | 3 +- .../TagRenderingMappingInput.svelte | 2 +- .../TagRendering/TagRenderingQuestion.svelte | 320 +++++++++--------- src/UI/SpecialVisualization.ts | 2 +- src/UI/SpecialVisualizations.ts | 67 ++-- src/Utils.ts | 6 +- 16 files changed, 291 insertions(+), 248 deletions(-) diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 6c7376596..5c67882b0 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -1,13 +1,16 @@ { "id": "mapcomplete-changes", "title": { - "en": "Changes made with MapComplete" + "en": "Changes made with MapComplete", + "de": "Mit MapComplete vorgenommene Änderungen" }, "shortDescription": { - "en": "Shows changes made by MapComplete" + "en": "Shows changes made by MapComplete", + "de": "Zeigt die von MapComplete vorgenommenen Änderungen an" }, "description": { - "en": "This maps shows all the changes made with MapComplete" + "en": "This maps shows all the changes made with MapComplete", + "de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen" }, "icon": "./assets/svg/logo.svg", "hideFromOverview": true, @@ -20,7 +23,8 @@ { "id": "mapcomplete-changes", "name": { - "en": "Changeset centers" + "en": "Changeset centers", + "de": "Zentrum der Änderungssätze" }, "minzoom": 0, "source": { @@ -31,41 +35,48 @@ }, "title": { "render": { - "en": "Changeset for {theme}" + "en": "Changeset for {theme}", + "de": "Änderungssatz für {theme}" } }, "description": { - "en": "Shows all MapComplete changes" + "en": "Shows all MapComplete changes", + "de": "Zeigt alle MapComplete-Änderungen" }, "tagRenderings": [ { "id": "show_changeset_id", "render": { - "en": "Changeset {id}" + "en": "Changeset {id}", + "de": "Änderungssatz {id}" } }, { "id": "contributor", "question": { - "en": "What contributor did make this change?" + "en": "What contributor did make this change?", + "de": "Wer hat diese Änderung vorgenommen?" }, "freeform": { "key": "user" }, "render": { - "en": "Change made by {user}" + "en": "Change made by {user}", + "de": "Änderung von {user}" } }, { "id": "theme-id", "question": { - "en": "What theme was used to make this change?" + "en": "What theme was used to make this change?", + "de": "Welches Theme wurde für diese Änderung verwendet?" }, "freeform": { "key": "theme" }, "render": { - "en": "Change with theme {theme}" + "en": "Change with theme {theme}", + "de": "Geändert mit Thema {theme}" } }, { @@ -74,19 +85,23 @@ "key": "locale" }, "question": { - "en": "What locale (language) was this change made in?" + "en": "What locale (language) was this change made in?", + "de": "In welcher Benutzersprache wurde diese Änderung vorgenommen?" }, "render": { - "en": "User locale is {locale}" + "en": "User locale is {locale}", + "de": "Benutzersprache {locale}" } }, { "id": "host", "render": { - "en": "Change with with {host}" + "en": "Change with with {host}", + "de": "Geändert über {host}" }, "question": { - "en": "What host (website) was this change made with?" + "en": "What host (website) was this change made with?", + "de": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?" }, "freeform": { "key": "host" @@ -107,10 +122,12 @@ { "id": "version", "question": { - "en": "What version of MapComplete was used to make this change?" + "en": "What version of MapComplete was used to make this change?", + "de": "Welche Version von MapComplete wurde verwendet, um diese Änderung vorzunehmen?" }, "render": { - "en": "Made with {editor}" + "en": "Made with {editor}", + "de": "Erstellt mit {editor}" }, "freeform": { "key": "editor" @@ -460,7 +477,8 @@ } ], "question": { - "en": "Themename contains {search}" + "en": "Themename contains {search}", + "de": "Themename enthält {search}" } } ] @@ -476,7 +494,8 @@ } ], "question": { - "en": "Themename does not contain {search}" + "en": "Themename does not contain {search}", + "de": "Der Name enthält nicht {search}" } } ] @@ -492,7 +511,8 @@ } ], "question": { - "en": "Made by contributor {search}" + "en": "Made by contributor {search}", + "de": "Der Name enthält nicht {search}" } } ] @@ -508,7 +528,8 @@ } ], "question": { - "en": "Not made by contributor {search}" + "en": "Not made by contributor {search}", + "de": "Nicht erstellt von {search}" } } ] @@ -525,7 +546,8 @@ } ], "question": { - "en": "Made before {search}" + "en": "Made before {search}", + "de": "Erstellt vor {search}" } } ] @@ -542,7 +564,8 @@ } ], "question": { - "en": "Made after {search}" + "en": "Made after {search}", + "de": "Erstellt nach {search}" } } ] @@ -558,7 +581,8 @@ } ], "question": { - "en": "User language (iso-code) {search}" + "en": "User language (iso-code) {search}", + "de": "Benutzersprache (ISO-Code) {search}" } } ] @@ -574,7 +598,8 @@ } ], "question": { - "en": "Made with host {search}" + "en": "Made with host {search}", + "de": "Erstellt mit Host {search}" } } ] @@ -585,7 +610,8 @@ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image" + "en": "Changeset added at least one image", + "de": "Änderungssatz hat mindestens ein Bild hinzugefügt" } } ] @@ -596,7 +622,8 @@ { "osmTags": "theme!=grb", "question": { - "en": "Exclude GRB theme" + "en": "Exclude GRB theme", + "de": "GRB-Theme ausschließen" } } ] @@ -607,7 +634,8 @@ { "osmTags": "theme!=etymology", "question": { - "en": "Exclude etymology theme" + "en": "Exclude etymology theme", + "de": "Etymologie-Thema ausschließen" } } ] @@ -622,7 +650,8 @@ { "id": "link_to_more", "render": { - "en": "More statistics can be found here" + "en": "More statistics can be found here", + "de": "Mehr Statistiken gibt es hier" } }, { diff --git a/langs/layers/en.json b/langs/layers/en.json index 63cee6865..c3252a08e 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -8543,6 +8543,18 @@ }, "question": "Does this stair have a handrail?" }, + "incline": { + "mappings": { + "0": { + "then": "The upward direction is {direction_absolute()}" + }, + "1": { + "then": "The downward direction is {direction_absolute()}" + } + }, + "question": "What is the incline of these stairs?", + "render": "These stairs have an incline of {incline}" + }, "multilevels": { "override": { "question": "Between which levels are these stairs?", diff --git a/langs/nl.json b/langs/nl.json index 420480c66..f0b614ee6 100644 --- a/langs/nl.json +++ b/langs/nl.json @@ -370,7 +370,7 @@ "useSearch": "Gebruik de zoekfunctie hierboven om meer opties te zien", "useSearchForMore": "Gebruik de zoekfunctie om {total} meer waarden te vinden…", "visualFeedback": { - "closestFeaturesAre": "{n} object in beeld.", + "closestFeaturesAre": "{n} objecten in beeld.", "east": "Naar het oosten", "in": "Aan het inzoomen naar zoomlevel {z}", "islocked": "Bewegen vergrendeld rond je huidige locatie. Duw op de geolocatie-knop om te ontgrendelen.", @@ -378,6 +378,7 @@ "navigation": "Gebruik de pijltjestoetsen om te bewegen. Druk op spatie om het meest centrale punt te selecteren. Druk op een cijfertoets om andere items te selecteren.", "noCloseFeatures": "Niet in beeld", "north": "Naar het noorden", + "oneFeatureInView": "Eén object in beeld.", "out": "Aan het uitzoomen naar zoomlevel {z}", "south": "Naar het zuiden", "unlocked": "Bewegen ontgrendeld", diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts index cc0027d2b..fa63ac9b5 100644 --- a/src/Models/ThemeConfig/TagRenderingConfig.ts +++ b/src/Models/ThemeConfig/TagRenderingConfig.ts @@ -79,7 +79,7 @@ export default class TagRenderingConfig { public readonly mappings?: Mapping[] public readonly editButtonAriaLabel?: Translation public readonly labels: string[] - public readonly classes: string[] + public readonly classes: string[] | undefined constructor( config: string | TagRenderingConfigJson | QuestionableTagRenderingConfigJson, @@ -131,6 +131,9 @@ export default class TagRenderingConfig { this.classes = json.classes ?? [] } this.classes = [].concat(...this.classes.map((cl) => cl.split(" "))) + if (this.classes.length === 0) { + this.classes = undefined + } this.render = Translations.T(json.render, translationKey + ".render") this.question = Translations.T(json.question, translationKey + ".question") diff --git a/src/UI/Base/ToSvelte.svelte b/src/UI/Base/ToSvelte.svelte index 88428eb2d..063e16ad7 100644 --- a/src/UI/Base/ToSvelte.svelte +++ b/src/UI/Base/ToSvelte.svelte @@ -8,6 +8,7 @@ onMount(() => { const uiElem = typeof construct === "function" ? construct() : construct html = uiElem?.ConstructElement() + if (html !== undefined) { elem?.replaceWith(html) } diff --git a/src/UI/Popup/DeleteFlow/DeleteWizard.svelte b/src/UI/Popup/DeleteFlow/DeleteWizard.svelte index 421e6c299..566e6da47 100644 --- a/src/UI/Popup/DeleteFlow/DeleteWizard.svelte +++ b/src/UI/Popup/DeleteFlow/DeleteWizard.svelte @@ -127,13 +127,6 @@ - { - currentState = "start" - }} - />
{#if selectedTags !== undefined} diff --git a/src/UI/Popup/ShareLinkViz.ts b/src/UI/Popup/ShareLinkViz.ts index 2a054c6c4..a0b67a423 100644 --- a/src/UI/Popup/ShareLinkViz.ts +++ b/src/UI/Popup/ShareLinkViz.ts @@ -20,6 +20,7 @@ export class ShareLinkViz implements SpecialVisualization { }, ] needsUrls = [] + svelteBased = true public constr( state: SpecialVisualizationState, @@ -52,6 +53,8 @@ export class ShareLinkViz implements SpecialVisualization { } } - return new SvelteUIElement(ShareButton, { generateShareData, text }) + return new SvelteUIElement(ShareButton, { generateShareData, text }).SetClass( + "w-full h-full" + ) } } diff --git a/src/UI/Popup/TagRendering/Questionbox.svelte b/src/UI/Popup/TagRendering/Questionbox.svelte index 408b4e93d..5724d872a 100644 --- a/src/UI/Popup/TagRendering/Questionbox.svelte +++ b/src/UI/Popup/TagRendering/Questionbox.svelte @@ -41,7 +41,7 @@ } let skippedQuestions = new UIEventSource>(new Set()) - let questionboxElem: HTMLBaseElement + let questionboxElem: HTMLDivElement let questionsToAsk = tags.map( (tags) => { const baseQuestions = (layer.tagRenderings ?? [])?.filter( @@ -49,7 +49,7 @@ ) const questionsToAsk: TagRenderingConfig[] = [] for (const baseQuestion of baseQuestions) { - if (skippedQuestions.data.has(baseQuestion.id) > 0) { + if (skippedQuestions.data.has(baseQuestion.id)) { continue } if ( @@ -88,6 +88,7 @@
diff --git a/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte b/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte index d888abb00..1ca9bfc80 100644 --- a/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte +++ b/src/UI/Popup/TagRendering/TagRenderingAnswer.svelte @@ -29,9 +29,9 @@ {#if config !== undefined && (config?.condition === undefined || config.condition.matchesProperties($tags))} -