Newer
Older
<template>
<div class="i18n_group" v-if="languages.length > 1">
<div class="i18n"
v-if="selectedLanguage !== null"
:data-lang="selectedLanguage.name"
:data-icon="'url(' + assetsURL + 'images/languages/' + selectedLanguage.picture + ')'">

Rasmus Fuhse
committed
ref="inputfield"
:name="nameOfInput(selectedLanguage.id)"
:required="required && defaultLanguage === selectedLanguage.id"
v-bind="$attrs"
v-on="$listeners"
v-if="type === 'text'">
<textarea :name="nameOfInput(selectedLanguage.id)"

Rasmus Fuhse
committed
ref="inputfield"
v-bind="$attrs"
v-on="$listeners"
:required="required && defaultLanguage === selectedLanguage.id"
v-else-if="type === 'textarea'"></textarea>
<studip-wysiwyg :name="nameOfInput(selectedLanguage.id)"

Rasmus Fuhse
committed
ref="inputfield"
v-bind="$attrs"
v-on="$listeners"
:required="required && defaultLanguage === selectedLanguage.id"
v-else></studip-wysiwyg>
</div>
<input type="hidden"
v-for="language in otherLanguages"
:key="`hidden-${language.id}`"
:required="required && defaultLanguage === language.id"
:name="nameOfInput(language.id)">
<select class="i18n"

Rasmus Fuhse
committed
tabindex="0"
@change="selectLanguage"

Rasmus Fuhse
committed
: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="`option-${language.id}`">
</select>
</div>
<div v-else>
<input type=text

Rasmus Fuhse
committed
ref="inputfield"
v-bind="$attrs"
v-on="$listeners"
:required="required"
v-if="type === 'text'">
<textarea :name="name"

Rasmus Fuhse
committed
ref="inputfield"
v-bind="$attrs"
v-on="$listeners"
:required="required"
v-else-if="type === 'textarea'"></textarea>
<studip-wysiwyg :name="name"

Rasmus Fuhse
committed
ref="inputfield"
v-bind="$attrs"
v-on="$listeners"
:required="required"
v-else></studip-wysiwyg>
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
</div>
</template>
<script>
import StudipWysiwyg from './StudipWysiwyg.vue';
export default {
name: 'i18n-textarea',
components: {
StudipWysiwyg
},
props: {
name: {
type: String,
required: false
},
wysiwyg: {
type: Boolean,
required: false,
default: false
},
type: {
type: String,
required: false,
default: "text"
},
value: {
required: false,
default: ""
},
required: {
type: Boolean,
required: false,
default: false
}
},
data () {
return {
selectedLanguage: {},
values: {}
};
},
mounted () {
for (let i in this.languages) {
this.selectedLanguage = this.languages[i];
break;
}
try {
jsonvalue = JSON.parse(this.value);
} catch (except) {
}
if (jsonvalue !== false) {
this.values = jsonvalue;
} else {
let values = {};
values[this.selectedLanguage.id] = this.value;
this.values = values;
}
this.$emit('selectlanguage', this.selectedLanguage.id);
},
methods: {
selectLanguage (e) {
for (let i in this.languages) {
if (e.target.value === this.languages[i].id) {
this.selectedLanguage = this.languages[i];
this.$emit('selectlanguage', this.languages[i].id);

Rasmus Fuhse
committed
this.$nextTick(() => {
if (typeof this.$refs.inputfield.focus === "function") {
this.$refs.inputfield.focus();
} else if (typeof this.$refs.inputfield.prefill === 'function') {
this.$refs.inputfield.prefill();

Rasmus Fuhse
committed
}
});
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
break;
}
}
},
nameOfInput (language_id) {
return this.name + (this.defaultLanguage === language_id ? '' : '_i18n[' + language_id + ']')
}
},
computed: {
assetsURL () {
return STUDIP.ASSETS_URL;
},
defaultLanguage () {
return this.languages[0].id;
},
languages () {
let languages = [];
let language = {};
for (let i in STUDIP.CONTENT_LANGUAGES) {
if (STUDIP.INSTALLED_LANGUAGES[STUDIP.CONTENT_LANGUAGES[i]] !== undefined) {
language = STUDIP.INSTALLED_LANGUAGES[STUDIP.CONTENT_LANGUAGES[i]];
language.id = STUDIP.CONTENT_LANGUAGES[i];
languages.push(language);
}
}
return languages;
return this.languages.filter(language => language.id !== this.selectedLanguage.id);
},
currentText: {
get () {
return this.values[this.selectedLanguage.id] ?? '';
},
set (newValue) {
this.values[this.selectedLanguage.id] = newValue;
},
},
},
inheritAttrs: false,
watch: {
values: {
handler(newValue, oldValue) {
this.$emit('input', newValue[this.defaultLanguage]);
let input_all = {};
for (let i in this.languages) {
let name = this.nameOfInput(this.languages[i].id);
let value = newValue[this.languages[i].id];
if (this.type === 'wysiwyg' && value !== null) {
value = STUDIP.wysiwyg.markAsHtml(value);
}
input_all[name] = value;
}
this.$emit('allinputs', input_all);
},
deep: true
}
}
}
</script>