60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								const DropZone = require("dropzone");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const template = `
							 | 
						||
| 
								 | 
							
								    <div class="dropzone-container">
							 | 
						||
| 
								 | 
							
								        <div class="dz-message">{{placeholder}}</div>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								`;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const props = ['placeholder', 'uploadUrl', 'uploadedTo'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// TODO - Remove jQuery usage
							 | 
						||
| 
								 | 
							
								function mounted() {
							 | 
						||
| 
								 | 
							
								   let container = this.$el;
							 | 
						||
| 
								 | 
							
								   let _this = this;
							 | 
						||
| 
								 | 
							
								   new DropZone(container, {
							 | 
						||
| 
								 | 
							
								        url: function() {
							 | 
						||
| 
								 | 
							
								            return _this.uploadUrl;
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        init: function () {
							 | 
						||
| 
								 | 
							
								            let dz = this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dz.on('sending', function (file, xhr, data) {
							 | 
						||
| 
								 | 
							
								                let token = window.document.querySelector('meta[name=token]').getAttribute('content');
							 | 
						||
| 
								 | 
							
								                data.append('_token', token);
							 | 
						||
| 
								 | 
							
								                let uploadedTo = typeof _this.uploadedTo === 'undefined' ? 0 : _this.uploadedTo;
							 | 
						||
| 
								 | 
							
								                data.append('uploaded_to', uploadedTo);
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dz.on('success', function (file, data) {
							 | 
						||
| 
								 | 
							
								                _this.$emit('success', {file, data});
							 | 
						||
| 
								 | 
							
								                $(file.previewElement).fadeOut(400, function () {
							 | 
						||
| 
								 | 
							
								                    dz.removeFile(file);
							 | 
						||
| 
								 | 
							
								                });
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            dz.on('error', function (file, errorMessage, xhr) {
							 | 
						||
| 
								 | 
							
								                _this.$emit('error', {file, errorMessage, xhr});
							 | 
						||
| 
								 | 
							
								                console.log(errorMessage);
							 | 
						||
| 
								 | 
							
								                console.log(xhr);
							 | 
						||
| 
								 | 
							
								                function setMessage(message) {
							 | 
						||
| 
								 | 
							
								                    $(file.previewElement).find('[data-dz-errormessage]').text(message);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                if (xhr.status === 413) setMessage(trans('errors.server_upload_limit'));
							 | 
						||
| 
								 | 
							
								                if (errorMessage.file) setMessage(errorMessage.file[0]);
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								   });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function data() {
							 | 
						||
| 
								 | 
							
								    return {}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = {
							 | 
						||
| 
								 | 
							
								    template,
							 | 
						||
| 
								 | 
							
								    props,
							 | 
						||
| 
								 | 
							
								    mounted,
							 | 
						||
| 
								 | 
							
								    data,
							 | 
						||
| 
								 | 
							
								};
							 |