Skip to content
Snippets Groups Projects
Commit 068f0971 authored by Jan-Hendrik Willms's avatar Jan-Hendrik Willms
Browse files

fix I18NTextarea vue component, fixes #1704

Closes #1704

Merge request studip/studip!1111
parent a8eaba45
No related branches found
No related tags found
No related merge requests found
<template> <template>
<div class="i18n_group" v-if="languages.length > 1"> <div class="i18n_group" v-if="languages.length > 1">
<div class="i18n" <div class="i18n"
:data-lang="primaryLanguage.name" v-if="selectedLanguage !== null"
:data-icon="'url(' + assetsURL + 'images/languages/' + primaryLanguage.picture + ')'"> :data-lang="selectedLanguage.name"
:data-icon="'url(' + assetsURL + 'images/languages/' + selectedLanguage.picture + ')'">
<input type=text <input type=text
ref="inputfield" ref="inputfield"
:name="nameOfInput(language.id)" :name="nameOfInput(selectedLanguage.id)"
v-model="values[primaryLanguage.id]" v-model="values[selectedLanguage.id]"
:required="required && defaultLanguage === primaryLanguage.id" :required="required && defaultLanguage === selectedLanguage.id"
v-bind="$attrs" v-bind="$attrs"
v-on="$listeners" v-on="$listeners"
v-if="type === 'text'"> v-if="type === 'text'">
<textarea :name="nameOfInput(language.id)" <textarea :name="nameOfInput(selectedLanguage.id)"
ref="inputfield" ref="inputfield"
v-bind="$attrs" v-bind="$attrs"
v-on="$listeners" v-on="$listeners"
v-model="values[language.id]" v-model="values[selectedLanguage.id]"
:required="required && defaultLanguage === language.id" :required="required && defaultLanguage === language.id"
v-else-if="type === 'textarea'"></textarea> v-else-if="type === 'textarea'"></textarea>
<studip-wysiwyg :name="nameOfInput(language.id)" <studip-wysiwyg :name="nameOfInput(selectedLanguage.id)"
ref="inputfield" ref="inputfield"
v-model="values[selectedLanguage.id]" v-model="values[selectedLanguage.id]"
v-bind="$attrs" v-bind="$attrs"
v-on="$listeners" v-on="$listeners"
:required="required && defaultLanguage === primaryLanguage.id" :required="required && defaultLanguage === selectedLanguage.id"
v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg> v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg>
<textarea-with-toolbar :name="nameOfInput(language.id)" <textarea-with-toolbar :name="nameOfInput(selectedLanguage.id)"
ref="inputfield" ref="inputfield"
v-else v-else
v-model="values[primaryLanguage.id]" v-model="values[selectedLanguage.id]"
v-bind="$attrs" v-bind="$attrs"
:required="required && defaultLanguage === primaryLanguage.id" :required="required && defaultLanguage === selectedLanguage.id"
v-on="$listeners"></textarea-with-toolbar> v-on="$listeners"></textarea-with-toolbar>
</div> </div>
<input type="hidden" <input type="hidden"
v-for="language in secondaryLanguages" v-for="language in otherLanguages"
:key="`hidden-${language.id}`"
v-model="values[language.id]" v-model="values[language.id]"
:required="required && defaultLanguage === language.id" :required="required && defaultLanguage === language.id"
:name="nameOfInput(language.id)" :name="nameOfInput(language.id)">
:key="language.id">
<select class="i18n" <select class="i18n"
tabindex="0" tabindex="0"
@change="selectLanguage" @change="selectLanguage"
:aria-label="$gettext('Sprache des Textfeldes auswählen.')" :aria-label="$gettext('Sprache des Textfeldes auswählen.')"
:style="'background-image: url(' + assetsURL + 'images/languages/' + selectedLanguage.picture + ')'"> :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}} {{language.name}}
</option> </option>
</select> </select>
...@@ -73,12 +74,12 @@ ...@@ -73,12 +74,12 @@
:required="required" :required="required"
v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg> v-else-if="type === 'wysiwyg' && !wysiwyg_disabled"></studip-wysiwyg>
<textarea-with-toolbar :name="name" <textarea-with-toolbar :name="name"
ref="inputfield" ref="inputfield"
v-else v-else
v-model="values[selectedLanguage.id]" v-model="values[selectedLanguage.id]"
v-bind="$attrs" v-bind="$attrs"
:required="required" :required="required"
v-on="$listeners"></textarea-with-toolbar> v-on="$listeners"></textarea-with-toolbar>
</div> </div>
</template> </template>
...@@ -130,11 +131,11 @@ export default { ...@@ -130,11 +131,11 @@ export default {
this.selectedLanguage = this.languages[i]; this.selectedLanguage = this.languages[i];
break; break;
} }
let jsonvalue; let jsonvalue = false;
try { try {
jsonvalue = JSON.parse(this.value); jsonvalue = JSON.parse(this.value);
} catch (except) { } catch (except) {
jsonvalue = false; // No fallback
} }
if (jsonvalue !== false) { if (jsonvalue !== false) {
this.values = jsonvalue; this.values = jsonvalue;
...@@ -150,8 +151,10 @@ export default { ...@@ -150,8 +151,10 @@ export default {
if (e.target.value === this.languages[i].id) { if (e.target.value === this.languages[i].id) {
this.selectedLanguage = this.languages[i]; this.selectedLanguage = this.languages[i];
this.$nextTick(() => { this.$nextTick(() => {
if (typeof this.$refs.inputfield[0].focus === "function") { if (typeof this.$refs.inputfield.focus === "function") {
this.$refs.inputfield[0].focus(); this.$refs.inputfield.focus();
} else if (typeof this.$refs.inputfield.prefill === 'function') {
this.$refs.inputfield.prefill();
} }
}); });
break; break;
...@@ -181,10 +184,7 @@ export default { ...@@ -181,10 +184,7 @@ export default {
} }
return languages; return languages;
}, },
primaryLanguage () { otherLanguages () {
return this.languages.find(language => language.id === this.selectedLanguage.id);
},
secondaryLanguages () {
return this.languages.filter(language => language.id !== this.selectedLanguage.id); return this.languages.filter(language => language.id !== this.selectedLanguage.id);
} }
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment