2020-01-06 07:21:52 -05:00

147 lines
4.4 KiB
JavaScript

let tcdrop_files = {};
function tcdropValidateFilesLength(files, el){
let max_files = el.find(".tcdrop-form").attr('data-max-files');
if(max_files === -1){
tcdropValidateFilesType(files, el);
} else {
if (files.length > max_files) {
el.find('.tcdrop-form').trigger("reset");
el.find(".tcdrop-error-msg").removeClass('hide');
el.find(".tcdrop-error-msg-txt").text('Only ' + max_files + ' file(s) are allowed');
} else {
tcdropValidateFilesType(files, el);
}
}
}
function tcdropValidateFilesType(files, el){
let allowed_types_str = el.find(".tcdrop-form").attr('data-allowed-types');
if(allowed_types_str === 'all'){
tcdropCacheFile(files, el);
return;
}
let allowed_types = allowed_types_str.split(',');
let x = 0;
$.each(files, function(){
let file_ext = this.name.split('.');
if(allowed_types.includes(file_ext[1])){
x= x + 1;
}
});
if(x > 0){
tcdropCacheFile(files, el);
} else {
el.find('.tcdrop-form').trigger("reset");
el.find(".tcdrop-error-msg").removeClass('hide');
el.find(".tcdrop-error-msg-txt").text('Only ' + allowed_types.toString() + ' files are allowed');
}
}
function tcdropCacheFile(files, el){
el.find(".tcdrop-loading-upload").removeClass('hide');
let url = el.find(".tcdrop-form").attr('data-cache-url');
let fd = new FormData();
$.each(files, function(){
fd.set('file', this);
$.ajax({
url: url,
type: 'POST',
data: fd,
cache: false,
contentType: false,
processData: false,
success: function(data){
tcdrop_files[el.attr("id")].push(data.data.cached);
el.find(".tcdrop-error-msg").addClass('hide');
el.find(".tcdrop-files-ul").append(data.data.html);
el.find('.tcdrop-form').trigger("reset");
console.log(tcdrop_files);
}
}).done(function(){
tcdropHideDropArea(el);
el.find(".tcdrop-loading-upload").addClass('hide');
});
});
}
function tcdropHideDropArea(el){
let max_files = el.find(".tcdrop-form").attr('data-max-files');
if(tcdrop_files[el.attr("id")].length >= max_files){
el.find(".tcdrop-label").addClass('hide');
} else {
el.find(".tcdrop-label").removeClass('hide');
}
}
function tcdropClearCache(){
let url = $(".tcdrop-form").attr('data-clear-cache-url');
$(".tcdrop-form").each(function(e) {
tcdrop_files[$(this).parent().attr("id")] = [];
});
$('.tcdrop-form').trigger("reset");
$.ajax({
url: url,
type: 'GET'
});
}
function tcdropResetAll(){
$('.tcdrop-form').trigger("reset");
$(".tcdrop-error-msg").addClass('hide');
$(".tcdrop-label").removeClass('hide');
$(".tcdrop-file-li").addClass('hide');
tcdropClearCache();
}
function tcdropAddLocalFile(file, url, email_cache="false", el){
el = $(el);
el.find(".tcdrop-loading-upload").removeClass('hide');
$.ajax({
url: url,
type: 'GET',
data: {file: file, email_cache},
success: function(data){
tcdrop_files[el.attr("id")].push(data.data.file)
el.find(".tcdrop-error-msg").addClass('hide');
el.find(".tcdrop-files-ul").append(data.data.html)
el.find('.tcdrop-form').trigger("reset");
}
}).done(function(){
tcdropHideDropArea(el);
el.find(".tcdrop-loading-upload").addClass('hide');
});
}
let droppedFiles = false;
function initTCdrop(el){
el = $(el);
tcdrop_files[el.attr("id")] = [];
tcdropClearCache();
el.find('.tcdrop-form').unbind();
el.find(".tcdrop-input").unbind();
el.find(".tcdrop-error-msg-btn").unbind();
el.find('.tcdrop-form').on('drag dragstart dragend dragover dragenter dragleave drop', function(e) {
e.preventDefault();
e.stopPropagation();
})
.on('dragover dragenter', function() {
el.find(".tcdrop-label").addClass('tcdrop-file-hover');
})
.on('dragleave dragend drop', function() {
el.find(".tcdrop-label").removeClass('tcdrop-file-hover');
})
.on('drop', function(e) {
droppedFiles = e.originalEvent.dataTransfer.files;
el.find(".tcdrop-input").prop("files", e.originalEvent.dataTransfer.files);
tcdropValidateFilesLength(droppedFiles, el)
});
el.find(".tcdrop-input").on('change', function(e){
let files = this.files;
tcdropValidateFilesLength(files, el);
});
el.find(".tcdrop-error-msg-btn").on('click', function(){
el.find(".tcdrop-error-msg").addClass('hide');
});
}