From 068f0971d8aca2c7a08ccc0aec3c6463452782be Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Tue, 25 Oct 2022 13:01:28 +0000 Subject: [PATCH] fix I18NTextarea vue component, fixes #1704 Closes #1704 Merge request studip/studip!1111 --- resources/vue/components/I18nTextarea.vue | 68 +++++++++++------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/resources/vue/components/I18nTextarea.vue b/resources/vue/components/I18nTextarea.vue index 76a025c9aee..c012629b146 100644 --- a/resources/vue/components/I18nTextarea.vue +++ b/resources/vue/components/I18nTextarea.vue @@ -1,50 +1,51 @@ <template> <div class="i18n_group" v-if="languages.length > 1"> <div class="i18n" - :data-lang="primaryLanguage.name" - :data-icon="'url(' + assetsURL + 'images/languages/' + primaryLanguage.picture + ')'"> + v-if="selectedLanguage !== null" + :data-lang="selectedLanguage.name" + :data-icon="'url(' + assetsURL + 'images/languages/' + selectedLanguage.picture + ')'"> <input type=text ref="inputfield" - :name="nameOfInput(language.id)" - v-model="values[primaryLanguage.id]" - :required="required && defaultLanguage === primaryLanguage.id" + :name="nameOfInput(selectedLanguage.id)" + v-model="values[selectedLanguage.id]" + :required="required && defaultLanguage === selectedLanguage.id" v-bind="$attrs" v-on="$listeners" v-if="type === 'text'"> - <textarea :name="nameOfInput(language.id)" + <textarea :name="nameOfInput(selectedLanguage.id)" ref="inputfield" v-bind="$attrs" v-on="$listeners" - v-model="values[language.id]" + v-model="values[selectedLanguage.id]" :required="required && defaultLanguage === language.id" v-else-if="type === 'textarea'"></textarea> - <studip-wysiwyg :name="nameOfInput(language.id)" + <studip-wysiwyg :name="nameOfInput(selectedLanguage.id)" ref="inputfield" v-model="values[selectedLanguage.id]" v-bind="$attrs" v-on="$listeners" - :required="required && defaultLanguage === primaryLanguage.id" + :required="required && defaultLanguage === selectedLanguage.id" v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg> - <textarea-with-toolbar :name="nameOfInput(language.id)" - ref="inputfield" - v-else - v-model="values[primaryLanguage.id]" - v-bind="$attrs" - :required="required && defaultLanguage === primaryLanguage.id" - v-on="$listeners"></textarea-with-toolbar> + <textarea-with-toolbar :name="nameOfInput(selectedLanguage.id)" + ref="inputfield" + v-else + v-model="values[selectedLanguage.id]" + v-bind="$attrs" + :required="required && defaultLanguage === selectedLanguage.id" + v-on="$listeners"></textarea-with-toolbar> </div> <input type="hidden" - v-for="language in secondaryLanguages" + v-for="language in otherLanguages" + :key="`hidden-${language.id}`" v-model="values[language.id]" :required="required && defaultLanguage === language.id" - :name="nameOfInput(language.id)" - :key="language.id"> + :name="nameOfInput(language.id)"> <select class="i18n" 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" :key="language.id"> + <option v-for="language in languages" :value="language.id" :key="`option-${language.id}`"> {{language.name}} </option> </select> @@ -73,12 +74,12 @@ :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" - :required="required" - v-on="$listeners"></textarea-with-toolbar> + ref="inputfield" + v-else + v-model="values[selectedLanguage.id]" + v-bind="$attrs" + :required="required" + v-on="$listeners"></textarea-with-toolbar> </div> </template> @@ -130,11 +131,11 @@ export default { this.selectedLanguage = this.languages[i]; break; } - let jsonvalue; + let jsonvalue = false; try { jsonvalue = JSON.parse(this.value); } catch (except) { - jsonvalue = false; + // No fallback } if (jsonvalue !== false) { this.values = jsonvalue; @@ -150,8 +151,10 @@ export default { 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(); + if (typeof this.$refs.inputfield.focus === "function") { + this.$refs.inputfield.focus(); + } else if (typeof this.$refs.inputfield.prefill === 'function') { + this.$refs.inputfield.prefill(); } }); break; @@ -181,10 +184,7 @@ export default { } return languages; }, - primaryLanguage () { - return this.languages.find(language => language.id === this.selectedLanguage.id); - }, - secondaryLanguages () { + otherLanguages () { return this.languages.filter(language => language.id !== this.selectedLanguage.id); } }, -- GitLab