debian-mirror-gitlab/app/assets/javascripts/blob/blob_file_dropzone.js

90 lines
3.1 KiB
JavaScript
Raw Normal View History

2017-08-17 22:00:37 +05:30
/* eslint-disable func-names, object-shorthand, prefer-arrow-callback */
2018-05-09 12:01:36 +05:30
import $ from 'jquery';
2018-03-17 18:26:18 +05:30
import Dropzone from 'dropzone';
import { visitUrl } from '../lib/utils/url_utility';
2017-09-10 17:25:29 +05:30
import { HIDDEN_CLASS } from '../lib/utils/constants';
2018-03-17 18:26:18 +05:30
import csrf from '../lib/utils/csrf';
Dropzone.autoDiscover = false;
2017-09-10 17:25:29 +05:30
function toggleLoading($el, $icon, loading) {
if (loading) {
$el.disable();
$icon.removeClass(HIDDEN_CLASS);
} else {
$el.enable();
$icon.addClass(HIDDEN_CLASS);
}
}
2017-08-17 22:00:37 +05:30
export default class BlobFileDropzone {
constructor(form, method) {
const formDropzone = form.find('.dropzone');
2017-09-10 17:25:29 +05:30
const submitButton = form.find('#submit-all');
const submitButtonLoadingIcon = submitButton.find('.js-loading-icon');
const dropzoneMessage = form.find('.dz-message');
2017-08-17 22:00:37 +05:30
Dropzone.autoDiscover = false;
2016-09-13 17:45:13 +05:30
2017-08-17 22:00:37 +05:30
const dropzone = formDropzone.dropzone({
autoDiscover: false,
autoProcessQueue: false,
url: form.attr('action'),
// Rails uses a hidden input field for PUT
// http://stackoverflow.com/questions/21056482/how-to-set-method-put-in-form-tag-in-rails
method: method,
clickable: true,
uploadMultiple: false,
paramName: 'file',
maxFilesize: gon.max_file_size || 10,
parallelUploads: 1,
maxFiles: 1,
addRemoveLinks: true,
previewsContainer: '.dropzone-previews',
2018-03-17 18:26:18 +05:30
headers: csrf.headers,
2017-08-17 22:00:37 +05:30
init: function () {
this.on('addedfile', function () {
2017-09-10 17:25:29 +05:30
toggleLoading(submitButton, submitButtonLoadingIcon, false);
dropzoneMessage.addClass(HIDDEN_CLASS);
2017-08-17 22:00:37 +05:30
$('.dropzone-alerts').html('').hide();
});
2017-09-10 17:25:29 +05:30
this.on('removedfile', function () {
toggleLoading(submitButton, submitButtonLoadingIcon, false);
dropzoneMessage.removeClass(HIDDEN_CLASS);
});
2017-08-17 22:00:37 +05:30
this.on('success', function (header, response) {
2017-09-10 17:25:29 +05:30
$('#modal-upload-blob').modal('hide');
2018-03-17 18:26:18 +05:30
visitUrl(response.filePath);
2017-08-17 22:00:37 +05:30
});
this.on('maxfilesexceeded', function (file) {
2017-09-10 17:25:29 +05:30
dropzoneMessage.addClass(HIDDEN_CLASS);
2017-08-17 22:00:37 +05:30
this.removeFile(file);
});
this.on('sending', function (file, xhr, formData) {
2017-09-10 17:25:29 +05:30
formData.append('branch_name', form.find('.js-branch-name').val());
2017-08-17 22:00:37 +05:30
formData.append('create_merge_request', form.find('.js-create-merge-request').val());
formData.append('commit_message', form.find('.js-commit-message').val());
});
},
// Override behavior of adding error underneath preview
error: function (file, errorMessage) {
const stripped = $('<div/>').html(errorMessage).text();
$('.dropzone-alerts').html(`Error uploading file: "${stripped}"`).show();
this.removeFile(file);
},
});
2016-09-13 17:45:13 +05:30
2017-09-10 17:25:29 +05:30
submitButton.on('click', (e) => {
2017-08-17 22:00:37 +05:30
e.preventDefault();
e.stopPropagation();
if (dropzone[0].dropzone.getQueuedFiles().length === 0) {
// eslint-disable-next-line no-alert
alert('Please select a file');
2017-09-10 17:25:29 +05:30
return false;
2017-08-17 22:00:37 +05:30
}
2017-09-10 17:25:29 +05:30
toggleLoading(submitButton, submitButtonLoadingIcon, true);
2017-08-17 22:00:37 +05:30
dropzone[0].dropzone.processQueue();
return false;
});
}
}