aboutsummaryrefslogtreecommitdiff
path: root/src/components/media_upload
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/media_upload')
-rw-r--r--src/components/media_upload/media_upload.js39
-rw-r--r--src/components/media_upload/media_upload.vue34
2 files changed, 38 insertions, 35 deletions
diff --git a/src/components/media_upload/media_upload.js b/src/components/media_upload/media_upload.js
index f457d022..fbb2d03d 100644
--- a/src/components/media_upload/media_upload.js
+++ b/src/components/media_upload/media_upload.js
@@ -5,10 +5,15 @@ import fileSizeFormatService from '../../services/file_size_format/file_size_for
const mediaUpload = {
data () {
return {
- uploading: false,
+ uploadCount: 0,
uploadReady: true
}
},
+ computed: {
+ uploading () {
+ return this.uploadCount > 0
+ }
+ },
methods: {
uploadFile (file) {
const self = this
@@ -23,29 +28,21 @@ const mediaUpload = {
formData.append('file', file)
self.$emit('uploading')
- self.uploading = true
+ self.uploadCount++
statusPosterService.uploadMedia({ store, formData })
.then((fileData) => {
self.$emit('uploaded', fileData)
- self.uploading = false
+ self.decreaseUploadCount()
}, (error) => { // eslint-disable-line handle-callback-err
self.$emit('upload-failed', 'default')
- self.uploading = false
+ self.decreaseUploadCount()
})
},
- fileDrop (e) {
- if (e.dataTransfer.files.length > 0) {
- e.preventDefault() // allow dropping text like before
- this.uploadFile(e.dataTransfer.files[0])
- }
- },
- fileDrag (e) {
- let types = e.dataTransfer.types
- if (types.contains('Files')) {
- e.dataTransfer.dropEffect = 'copy'
- } else {
- e.dataTransfer.dropEffect = 'none'
+ decreaseUploadCount () {
+ this.uploadCount--
+ if (this.uploadCount === 0) {
+ this.$emit('all-uploaded')
}
},
clearFile () {
@@ -54,11 +51,13 @@ const mediaUpload = {
this.uploadReady = true
})
},
- change ({ target }) {
- for (var i = 0; i < target.files.length; i++) {
- let file = target.files[i]
+ multiUpload (files) {
+ for (const file of files) {
this.uploadFile(file)
}
+ },
+ change ({ target }) {
+ this.multiUpload(target.files)
}
},
props: [
@@ -67,7 +66,7 @@ const mediaUpload = {
watch: {
'dropFiles': function (fileInfos) {
if (!this.uploading) {
- this.uploadFile(fileInfos[0])
+ this.multiUpload(fileInfos)
}
}
}
diff --git a/src/components/media_upload/media_upload.vue b/src/components/media_upload/media_upload.vue
index 1dda7bc1..5e31730b 100644
--- a/src/components/media_upload/media_upload.vue
+++ b/src/components/media_upload/media_upload.vue
@@ -1,21 +1,16 @@
<template>
- <div
- class="media-upload"
- @drop.prevent
- @dragover.prevent="fileDrag"
- @drop="fileDrop"
- >
+ <div class="media-upload">
<label
- class="btn btn-default"
+ class="label"
:title="$t('tool_tip.media_upload')"
>
<i
v-if="uploading"
- class="icon-spin4 animate-spin"
+ class="progress-icon icon-spin4 animate-spin"
/>
<i
v-if="!uploading"
- class="icon-upload"
+ class="new-icon icon-upload"
/>
<input
v-if="uploadReady"
@@ -30,15 +25,24 @@
<script src="./media_upload.js" ></script>
-<style>
+<style lang="scss">
.media-upload {
- .icon-upload {
+ .label {
+ display: inline-block;
+ }
+
+ .new-icon {
cursor: pointer;
}
- label {
- display: block;
- width: 100%;
+ .progress-icon {
+ display: inline-block;
+ line-height: 0;
+ &::before {
+ /* Overriding fontello to achieve the perfect speeeen */
+ margin: 0;
+ line-height: 0;
+ }
}
}
-</style>
+ </style>