file2link/lib/upload.js
2019-11-18 01:19:13 +01:00

164 lines
5.3 KiB
JavaScript

$(function () {
function checkMimeTypes(mimeTypesTest) {
var mimeDetect=false;
Config_mimeTypes.forEach(function(item, index, array) {
var regex = item.replace(/\//g, "\\\/");
if (mimeTypesTest.match(regex) != undefined) {
mimeDetect=true;
}
});
if ((Config_mimeTypesConduct == 'allow' && mimeDetect)
|| (Config_mimeTypesConduct == 'deny' && !mimeDetect)) {
return true;
} else {
return false;
}
}
/**
* Function called to upload one file.
* @param file
* @param item
*/
function uploadFile(item, file, expire, random, resize, key) {
// Add progress bar
$('.progress').show();
$('.progress').append('<span class="file-' + item + '">' + file.name + '</span><br /><progress class="progress-' + item + '" value="0" max="100"></progress>');
// Create object XMLHttpRequest
var request = new XMLHttpRequest();
// Event progress to change value of progress bar
request.upload.addEventListener('progress', function (e) {
$('.progress-' + item).css('display', 'block');
var value = Math.round((e.loaded / e.total) * 100);
$('.progress-' + item).attr("value", value);
}, false);
// Create object FormData
var formData = new FormData();
// Add file to FormData
formData.append('random', random);
formData.append('item', item);
formData.append('file', file);
formData.append('expire', expire);
formData.append('resize', resize);
formData.append('key', key);
// File to call
request.open('post', 'upload.php');
// Function called when request ended
request.onload = function (e) {
$('#result').append(request.response);
};
// Send request
request.send(formData);
}
/**
* Function called to upload files.
*/
function upload() {
// Vide les messages si jamais il y en avait
$( "#preUpload" ).html( "" );
var upload = true;
// Get files
var files = $('#files')[0].files;
var expire = Math.floor(Date.now() / 1000 + $('#expire').val() * 86400);
var random = Math.floor(Math.random() * Math.floor(99));
// Check size and mime
var fileAlreadyUploadSizeTotal = 0;
for (var i = 0; i < files.length; i++) {
// Size
fileAlreadyUploadSizeTotal = fileAlreadyUploadSizeTotal + document.getElementById("files").files[i].size;
if (document.getElementById("files").files[i].size > Config_maxUploadPerFile) {
$('#preUpload').append('<div class="highlight-1">' + document.getElementById("files").files[i].name + ' : ' + Msg_errorFileSize + '</div>');
upload = false;
}
// Mime
if (!checkMimeTypes(document.getElementById("files").files[i].type)) {
$('#preUpload').append('<div class="highlight-1">' + document.getElementById("files").files[i].name + ' : ' + Msg_errorFileType + '</div>');
upload = false;
}
}
if (fileAlreadyUploadSizeTotal > Config_maxUploadTotal) {
$('#preUpload').append('<div class="highlight-1">' + Msg_errorTotalSize + '</div>');
upload = false;
}
if (files.length > Config_maxUploadNb) {
$('#preUpload').append('<div class="highlight-1">' + Msg_errorUploadNb + '</div>');
upload = false;
}
if (files.length == 0) {
upload = false;
}
// Upload file by file
if (upload == true) {
// Session pour compter le nombre de fichier en cours de download
sessionStorage.setItem('uploadWait', files.length);
$( ".uploadArea" ).hide();
// On lance l'upload fichier par fichier:
for (var i = 0; i < files.length; i++) {
if (i == 0) {
// On mémorise l'upload dans le localStorage
if (localStorage.getItem('myFiles')) {
var data = JSON.parse(localStorage.getItem('myFiles'));
} else {
var data = {items: []};
}
var keyGen = Math.floor(Math.random() * (999999999999 - 100000000000) + 100000000000);
data.items.push(
{id: expire + '-' + random, key: keyGen}
);
localStorage.setItem('myFiles', JSON.stringify(data));
}
uploadFile(i, files[i], expire, random, $('#resize').val(), keyGen);
}
}
}
// Copy on clipart : https://stackoverflow.com/questions/44888884/copying-to-clipboard-textbox-value-using-jquery-javascript
function copyToClipboard(text) {
var textArea = document.createElement( "textarea" );
textArea.value = text;
document.body.appendChild( textArea );
textArea.select();
try {
var successful = document.execCommand( 'copy' );
var msg = successful ? 'successful' : 'unsuccessful';
} catch (err) {
console.log('Oops, unable to copy');
}
document.body.removeChild( textArea );
}
$('.btn-upload').on('click', upload);
$( "#similarServices" ).click(function() {
$('.similarHref').hide();
$('.similarLink').show();
});
$(document).on('click', '.copy', function(e){
e.preventDefault();
copyToClipboard($(this).val());
});
$("input[type=file]").on('change',function(){
$('#resizeForm').hide();
for (var i = 0; i < this.files.length; i++) {
var mime = this.files[i].type;
if (mime.match('^image\/(png|jpeg|gif)$')) {
$('#resizeForm').show();
}
}
});
});