mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-10-03 10:04:44 -04:00
95 lines
2.8 KiB
Vue
95 lines
2.8 KiB
Vue
<template>
|
|
<component :is="Array.isArray(txt) ? 'div' : 'span'" :class="[translationMode ? 't-translation-mode' : '', modified ? 't-modified' : '']" @click="clicked">
|
|
<template v-if="Array.isArray(txt)">
|
|
<p v-for="p in txt">
|
|
<Icon v-if="icon" :v="icon" /><LinkedText :text="p" />
|
|
</p>
|
|
</template><template v-else>
|
|
<Icon v-if="icon" :v="icon" /><LinkedText :text="txt" />
|
|
</template>
|
|
</component>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapState } from 'vuex';
|
|
import { sessionCookieSetting } from '../src/cookieSettings.ts';
|
|
|
|
export default {
|
|
props: {
|
|
params: {},
|
|
icon: {},
|
|
},
|
|
data() {
|
|
return {
|
|
key: (this.$slots.default[0].text || '').trim(),
|
|
};
|
|
},
|
|
computed: {
|
|
...mapState([
|
|
'translationMode',
|
|
'translationChanges',
|
|
]),
|
|
modified() {
|
|
return this.translationMode && this.translationChanges.hasOwnProperty(this.key);
|
|
},
|
|
txt() {
|
|
return this.modified
|
|
? this.$translator.applyParams(this.translationChanges[this.key], this.params || {})
|
|
: this.$translator.translate(this.key, this.params || {});
|
|
},
|
|
},
|
|
methods: {
|
|
async clicked(e) {
|
|
if (!this.translationMode) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
const base = this.$translator.get(this.key, false, true);
|
|
|
|
const newValue = await this.$editor(
|
|
this.modified
|
|
? this.translationChanges[this.key]
|
|
: this.$translator.get(this.key),
|
|
{
|
|
icon: 'language',
|
|
header: this.key,
|
|
message: base
|
|
? `<div class="small alert alert-info">${
|
|
Array.isArray(base)
|
|
? `<ul>${base.map((el) => `<li>${el}</el>`)}</ul>`
|
|
: base
|
|
}</div>`
|
|
: undefined,
|
|
margin: false,
|
|
},
|
|
'info',
|
|
);
|
|
|
|
if (newValue !== undefined) {
|
|
this.$store.commit('translate', { translator: this.$translator, key: this.key, newValue });
|
|
this.$cookies.set('translations', this.$store.state.translationChanges, sessionCookieSetting);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import "assets/variables";
|
|
|
|
.t-translation-mode {
|
|
border: 1px solid rgba($primary, 50%);
|
|
cursor: alias;
|
|
&:hover {
|
|
border: 1px solid $primary;
|
|
}
|
|
}
|
|
|
|
.t-modified {
|
|
background-color: rgba($primary, 30%);
|
|
}
|
|
</style>
|