From fa3f0c4f772054da2ad1ad91aa0fa9d8aa5a92e6 Mon Sep 17 00:00:00 2001 From: Rasmus Fuhse <fuhse@data-quest.de> Date: Thu, 7 Jul 2022 19:17:13 +0000 Subject: [PATCH] Resolve "StEP #837: Barrierefreiheitsprobleme mit I18N-Feldern und dem Hinweis auf Pflichtfelder" Closes #1206 Merge request studip/studip!788 --- resources/vue/components/I18nTextarea.vue | 16 +++++++++++++++- templates/forms/form.php | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/resources/vue/components/I18nTextarea.vue b/resources/vue/components/I18nTextarea.vue index c4d29768e3d..084cdfb5c71 100644 --- a/resources/vue/components/I18nTextarea.vue +++ b/resources/vue/components/I18nTextarea.vue @@ -6,6 +6,7 @@ :data-lang="language.name" :data-icon="'url(' + assetsURL + 'images/languages/' + language.picture + ')'"> <input type=text + ref="inputfield" :name="nameOfInput(language.id)" v-model="values[selectedLanguage.id]" :required="required && defaultLanguage === language.id" @@ -13,18 +14,21 @@ v-on="$listeners" v-if="type === 'text'"> <textarea :name="nameOfInput(language.id)" + ref="inputfield" v-bind="$attrs" v-on="$listeners" v-model="values[language.id]" :required="required && defaultLanguage === language.id" v-else-if="type === 'textarea'">{{ values[language.id] }}</textarea> <studip-wysiwyg :name="nameOfInput(language.id)" + ref="inputfield" v-model="values[selectedLanguage.id]" v-bind="$attrs" v-on="$listeners" :required="required && defaultLanguage === language.id" v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg> <textarea-with-toolbar :name="nameOfInput(language.id)" + ref="inputfield" v-else v-model="values[selectedLanguage.id]" v-bind="$attrs" @@ -38,14 +42,16 @@ :required="required && defaultLanguage === language.id" :name="nameOfInput(language.id)"> <select class="i18n" - tabindex="-1" + tabindex="0" @change="selectLanguage" + :aria-label="$gettext('Sprache des Textfeldes auswählen.')" :style="'background-image: url(' + assetsURL + 'images/languages/' + selectedLanguage.picture + ')'"> <option v-for="language in languages" :value="language.id">{{language.name}}</option> </select> </div> <div v-else> <input type=text + ref="inputfield" :name="name" v-model="values[selectedLanguage.id]" v-bind="$attrs" @@ -53,18 +59,21 @@ :required="required" v-if="type === 'text'"> <textarea :name="name" + ref="inputfield" v-model="values[selectedLanguage.id]" v-bind="$attrs" v-on="$listeners" :required="required" v-else-if="type === 'textarea'"></textarea> <studip-wysiwyg :name="name" + ref="inputfield" v-model="values[selectedLanguage.id]" v-bind="$attrs" v-on="$listeners" :required="required" v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg> <textarea-with-toolbar :name="name" + ref="inputfield" v-else v-model="values[selectedLanguage.id]" v-bind="$attrs" @@ -139,6 +148,11 @@ export default { for (let i in this.languages) { if (e.target.value === this.languages[i].id) { this.selectedLanguage = this.languages[i]; + this.$nextTick(() => { + if (typeof this.$refs.inputfield[0].focus === "function") { + this.$refs.inputfield[0].focus(); + } + }); break; } } diff --git a/templates/forms/form.php b/templates/forms/form.php index 72a1b25838e..0d00fcb992b 100644 --- a/templates/forms/form.php +++ b/templates/forms/form.php @@ -39,7 +39,7 @@ $form_id = md5(uniqid()); </h1> </header> <div class="required_note" v-if="STUDIPFORM_REQUIRED.length > 0"> - <div aria-hidden> + <div aria-hidden="true"> <?= _('Pflichtfelder sind mit Sternchen gekennzeichnet.') ?> </div> <div class="sr-only"> -- GitLab