diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js
index 32b615265..afca328e8 100644
--- a/src/components/image_cropper/image_cropper.js
+++ b/src/components/image_cropper/image_cropper.js
@@ -10,19 +10,12 @@ library.add(
const ImageCropper = {
props: {
+ // Mime-types to accept, i.e. which filetypes to accept (.gif, .png, etc.)
mimes: {
type: String,
default: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon'
},
- saveButtonLabel: {
- type: String
- },
- saveWithoutCroppingButtonlabel: {
- type: String
- },
- cancelButtonLabel: {
- type: String
- },
+ // Fixed aspect-ratio for selection box
aspectRatio: {
type: Number
}
@@ -30,11 +23,13 @@ const ImageCropper = {
data () {
return {
dataUrl: undefined,
- filename: undefined,
- submitting: false
+ filename: undefined
}
},
- emits: ['submit'],
+ emits: [
+ 'submit', // cropping complete or uncropped image returned
+ 'close', // cropper is closed
+ ],
methods: {
destroy () {
this.$refs.input.value = ''
@@ -42,8 +37,6 @@ const ImageCropper = {
this.$emit('close')
},
submit (cropping = true) {
- this.submitting = true
-
let cropperPromise
if (cropping) {
cropperPromise = this.$refs.cropperSelection.$toCanvas()
@@ -53,7 +46,6 @@ const ImageCropper = {
cropperPromise.then(canvas => {
this.$emit('submit', { canvas, file: this.file })
- this.submitting = false
})
},
pickImage () {
diff --git a/src/components/interface_language_switcher/interface_language_switcher.js b/src/components/interface_language_switcher/interface_language_switcher.js
new file mode 100644
index 000000000..bd7b641a5
--- /dev/null
+++ b/src/components/interface_language_switcher/interface_language_switcher.js
@@ -0,0 +1,58 @@
+import localeService from '../../services/locale/locale.service.js'
+
+import Select from '../select/select.vue'
+import ProfileSettingIndicator from 'src/components/settings_modal/helpers/profile_setting_indicator.vue'
+
+export default {
+ components: {
+ Select,
+ ProfileSettingIndicator
+ },
+ props: {
+ // List of languages (or just one language)
+ modelValue: {
+ type: [Array, String],
+ required: true
+ },
+ // Is this setting stored in user profile (true) or elsewhere (false)
+ // Doesn't affect storage, just shows an icon if true
+ profile: {
+ type: Boolean,
+ default: false
+ }
+ },
+ emits: ['update:modelValue'],
+ computed: {
+ languages () {
+ return localeService.languages
+ },
+
+ controlledLanguage: {
+ get: function () {
+ return Array.isArray(this.modelValue) ? this.modelValue : [this.modelValue]
+ },
+ set: function (val) {
+ this.$emit('update:modelValue', val)
+ }
+ }
+ },
+
+ methods: {
+ getLanguageName (code) {
+ return localeService.getLanguageName(code)
+ },
+ addLanguage () {
+ this.controlledLanguage = [...this.controlledLanguage, '']
+ },
+ setLanguageAt (index, val) {
+ const lang = [...this.controlledLanguage]
+ lang[index] = val
+ this.controlledLanguage = lang
+ },
+ removeLanguageAt (index) {
+ const lang = [...this.controlledLanguage]
+ lang.splice(index, 1)
+ this.controlledLanguage = lang
+ }
+ }
+}
diff --git a/src/components/interface_language_switcher/interface_language_switcher.vue b/src/components/interface_language_switcher/interface_language_switcher.vue
index 46837b018..8b300d43b 100644
--- a/src/components/interface_language_switcher/interface_language_switcher.vue
+++ b/src/components/interface_language_switcher/interface_language_switcher.vue
@@ -1,7 +1,7 @@
-
+