/*! * aksfileupload v1.0.0 * File upload tool * (c) 2020 Ahmet Aksungur * MIT License * https://github.com/Ahmetaksungur */ (function ($) { "use strict"; $.fn.aksFileUpload = function (options) { const aks = $(this); var settings = $.extend( { fileUpload: "", input: "#aksfileupload", fileType: [ "pdf", "docx", "rtf", "jpg", "jpeg", "png", "txt", "mpa", "ogg", "aif", "cda", "mid", "midi", "mp3", "wav", "wma", "wpl", "7z", "arj", "deb", "pkg", "rar", "rpm", "tar.gz", "z", "zip", "csv", "dat", "db", "dbf", "log", "mdb", "sav", "sql", "tar", "xml", "apk", "exe", "jar", "py", "fnt", "fon", "otf", "ttf", "ai", "bmp", "gif", "ico", "jpeg", "jpg", "png", "ps", "psd", "svg", "tif", "tiff", "asp", "aspx", "css", "htm", "html", "js", "jsp", "php", "rss", "pps", "ppt", "pptx", "avi", "flv", "mov", "mp4", "mpg", "mpeg", "vob", "wmv", "doc", "rtf", "eps", "opus", "aep", "fig", "sketch" ], multiple: false, dragDrop: true, maxFile: 9999999999999999999, maxSize: "", ajaxUpload: false, ajax: { directlyLoad: false, url: "upload.php", type: "POST", data: "formData", contentType: false, processData: false, cache: false, async: true, enctype: "multipart/form-data" }, maxFileError: "File exceeds upload limit. - Max limit:", maxSizeError: "File exceeds size. - Max limit:", fileTypeError: "Disallowed file format.", label: "Drag & Drop your files or Browse" }, options ); var customInput = settings.input.replace("#", ""); return this.each(function (i) { var aksMultiplte = ""; if (settings.multiple === true) { var aksMultiplte = "multiple"; } const html = '
"; aks.append(html); function content() { var content = aks.find(".aks-file-upload"); content.append('
'); } content(); function label() { var label = aks.find(".aks-file-upload-content"); var labelhtml = '"; label.append(labelhtml); } label(); function error(text) { var error = aks.find(".aks-file-upload"); var errorhtml = '
' + text + "
"; error.append(errorhtml); } function bytesToSize(bytes) { var sizes = ["BYTE", "KB", "MB", "GB", "TB"]; if (bytes == 0) return "0 BYTE"; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return Math.round(bytes / Math.pow(1024, i), 2) + " " + sizes[i]; } Object.size = function (obj) { var size = 0, key; for (key in obj) { if (obj.hasOwnProperty(key)) size++; } return size; }; var data = {}; var dataDifferent = {}; var formData = new FormData(); function isfileUploadInput(fileTarget) { var fileUploadInputType = $(settings.fileUpload).attr("type"); if (fileUploadInputType === "file") { } else if (fileUploadInputType === "json") { $(settings.fileUpload).html(JSON.stringify(dataDifferent)); } else { $(settings.fileUpload).val(JSON.stringify(dataDifferent)); } } function dataAppend(dataAppendFile) { var formAppend = (data["file-" + dataAppendFile.name] = dataAppendFile); var dataDifferentObj = { name: dataAppendFile.name, size: bytesToSize(dataAppendFile.size), type: dataAppendFile.name.split(".").pop().toLowerCase() }; var dataDifferentAppend = (dataDifferent[ "file-" + dataAppendFile.name ] = dataDifferentObj); formData.append("file", formAppend); isfileUploadInput(dataAppendFile); } function dataRemove(dataRemove) { delete data["file-" + dataRemove]; delete dataDifferent["file-" + dataRemove]; formData.append("file", data); isfileUploadInput(); } function file(file) { dataAppend(file); var fileName = file.name; var fileSize = bytesToSize(file.size); var fileType = file.type; var fileTypeExtension = file.name.split(".").pop().toLowerCase(); var fileTypeisExtension = settings.fileType.indexOf(fileTypeExtension) > -1; var fileTypeAdd = ""; function allOkey() { if (fileType === "image/png") { var fileTypeAdd = "png"; } var fileIcon = ""; if (file.type.match("image.*")) { var fileIcon = ''; } else if (fileTypeExtension === "pdf") { var fileIcon = ''; } else if (fileTypeExtension === "docx") { var fileIcon = ''; } else if (fileTypeExtension === "xls") { var fileIcon = ''; } else if (fileTypeExtension === "ppt") { var fileIcon = ''; } else if (fileTypeExtension === "html") { var fileIcon = ''; } else if (fileTypeExtension === "css") { var fileIcon = ''; } else if (fileTypeExtension === "js") { var fileIcon = ''; } else if (fileTypeExtension === "py") { var fileIcon = ''; } else if (fileTypeExtension === "apk") { var fileIcon = ''; } else if (fileTypeExtension === "psd") { var fileIcon = ''; } else if (fileTypeExtension === "sql") { var fileIcon = ''; } else if (fileTypeExtension === "fig") { var fileIcon = ''; } else if (fileTypeExtension === "sketch") { var fileIcon = ''; } else if (fileTypeExtension === "ai") { var fileIcon = ''; } else if (fileTypeExtension === "aep") { var fileIcon = ''; } else if (fileTypeExtension === "php") { var fileIcon = ''; } else if (fileTypeExtension === "csv") { var fileIcon = ''; } else if (file.type.match("video.*")) { var fileIcon = ''; } else if (file.type.match("audio.*")) { var fileIcon = ''; } else { var fileIcon = ''; } function deleteButton() { var deleteButton = '
'; return deleteButton; } function uploadButton() { var uploadButton = '
'; return uploadButton; } var niceButtons = ""; var uploadbars = ""; if (settings.ajaxUpload === true) { if (settings.ajax["directlyLoad"] === true) { var niceButtons = '
' + uploadButton(); +"
" + deleteButton(); var uploadbars = '
'; } else { var niceButtons = uploadButton(); var uploadbars = '
'; } } else { var niceButtons = deleteButton(); } if (!file.type.match("image.*")) { var filehtml = '
' + uploadbars + '
' + fileIcon + '
' + '' + fileName + "" + '' + fileSize + "" + "
" + niceButtons + "
"; var filepreview = aks.find(".aks-file-upload-content"); $(filepreview).append(filehtml); $('[data-file="' + fileName + '"]').animate({ height: 55 }, 200); $('[data-file="' + fileName + '"]').fadeIn(650); } else { var reader = new FileReader(); var image = new Image(); var _URL = window.URL || window.webkitURL; image.onload = function (e) { dataDifferent["file-" + fileName].width = image.naturalWidth; dataDifferent["file-" + fileName].height = image.naturalHeight; }; reader.onload = function (e) { dataDifferent["file-" + fileName].base64 = e.target.result; var imagehtml = '
' + uploadbars + '
' + fileIcon + '
' + '' + fileName + "" + '' + fileSize + "" + "
" + niceButtons + '
' +
                                fileName +
                                '
'; var preview = aks.find(".aks-file-upload-content"); $(preview).append(imagehtml); $('[data-file="' + fileName + '"]').animate({ height: 240 }, 200); $('[data-file="' + fileName + '"]').fadeIn(650); }; image.src = _URL.createObjectURL(file); reader.readAsDataURL(file); } } function CheckFileSize() { var maxSize = settings.maxSize; var maxSizeExtension = maxSize.split(/\s+/); var maxSizeConvert = maxSizeExtension[0]; var maxSizeFormat = maxSizeExtension[1].toLowerCase(); var fileSizeExtension = bytesToSize(file.size).split(/\s+/); var fileSizeConvert = fileSizeExtension[0]; var fileSizeFormat = fileSizeExtension[1].toLowerCase(); var bytes = ""; if (maxSizeFormat === "kb") { var bytes = maxSizeConvert * 1000; } else if (maxSizeFormat === "bytes") { var bytes = maxSizeConvert * 1; } else if (maxSizeFormat === "byte") { var bytes = maxSizeConvert * 1; } else if (maxSizeFormat === "mb") { var bytes = maxSizeConvert * 1000000; } else if (maxSizeFormat === "gb") { var bytes = maxSizeConvert * 1000000000; } else if (maxSizeFormat === "tb") { var bytes = maxSizeConvert * 1000000000000; } else { console.log('There is a problem with "maxSize"'); } return bytes; } if (Object.size(dataDifferent) > settings.maxFile) { error(settings.maxFileError + " " + settings.maxFile); dataRemove(fileName); } else if (!fileTypeisExtension) { error('"' + fileTypeExtension + '" ' + settings.fileTypeError); dataRemove(fileName); } else if (file.size > CheckFileSize()) { error( '"' + fileName + '" ' + settings.maxSizeError + " " + settings.maxSize ); dataRemove(fileName); } else { allOkey(); } } var storedFiles = []; function fileUpload(e) { var files = e.files; var filesArr = Array.prototype.slice.call(files); filesArr.forEach(function (f) { storedFiles.push(f); file(f); }); } function fileDelete() { $(".aks-file-upload-delete").on("click", function () { var deleteBtn = $(this).data("delete"); var deleteElemet = $('[data-file="' + deleteBtn + '"]'); $(deleteElemet).animate({ height: 0 }, 200); $(deleteElemet).fadeIn(650); $(deleteElemet).remove(); dataRemove(deleteBtn); }); } function ajaxUpload() { $(".aks-file-upload-btn").click(function () { var uploadBtn = $(this).data("upload"); formData.append("file", data["file-" + uploadBtn]); $.ajax({ url: settings.ajax["url"], type: settings.ajax["type"], async: settings.ajax["async"], data: formData, contentType: settings.ajax["contentType"], processData: settings.ajax["processData"], cache: settings.ajax["cache"], enctype: settings.ajax["enctype"], xhr: function () { var xhr = $.ajaxSettings.xhr(); if (xhr.upload) { setTimeout(function () { $('[data-upload="' + uploadBtn + '"]').remove(); }, 40); setTimeout(function () { $( '[data-file="' + uploadBtn + '"] .aks-file-upload-p-header' ).append( '
' ); }, 200); xhr.upload.addEventListener( "progress", function (event) { var percent = 0; if (event.lengthComputable) { percent = Math.ceil((event.loaded / event.total) * 100); } $('[data-upload-bar="' + uploadBtn + '"]').css( "width", percent + "%" ); }, false ); } return xhr; }, success: function (response) { if (response != 0) { dataDifferent["file-" + uploadBtn].src = response; isfileUploadInput(); $('[data-upload-bar="' + uploadBtn + '"]').css("width", "100%"); } else { $('[data-upload-bar="' + uploadBtn + '"]').css( "background", "#ff0000" ); } } }); }); if (settings.ajax["directlyLoad"] === true) { $(".aks-file-upload-btn").each(function (ss, ii) { $(ii).click(); }); } } if (settings.dragDrop === true) { var dropbox = aks.find(".aks-file-upload"); $(dropbox).on("dragenter", function (ev) { $(dropbox).addClass("drop-active"); }); $(dropbox).on("dragover", function (ev) { $(dropbox).addClass("drop-active"); ev.preventDefault(); }); $(dropbox).on("dragleave", function (ev) { $(dropbox).removeClass("drop-active"); }); $(dropbox).on("drop", function (ev) { ev.preventDefault(); ev.stopPropagation(); if (ev.originalEvent.dataTransfer) { if (ev.originalEvent.dataTransfer.files.length) { var droppedFiles = ev.originalEvent.dataTransfer.files; for (var i = 0; i < droppedFiles.length; i++) { file(droppedFiles[i]); } } } $(dropbox).removeClass("highlightDropArea"); return false; }); } $(settings.input).on("change", function () { fileUpload(this); }); setInterval(function () { fileDelete(); if (settings.ajaxUpload === true) { ajaxUpload(); } }, 3000); }); }; })(jQuery);