codedropz-uploader-min.js 12.3 KB
/**
 * CodeDropz Uploader v2.10.9
 * Copyright 2019 Glen Mongaya
 * CodeDropz - Drag & Drop Uploader
 * @version 2.10.9
 * @author CodeDropz, Glen Don L. Mongaya
 * @license The MIT License (MIT)
 */

!function(e){var a=[],r=[];e.fn.CodeDropz_Uploader=function(n){this.each(function(){var s=e(this),o=e.extend({handler:s,color:"#000",background:"",upload_dir:s.parents("form").find("[name='upload_dir']"),server_max_error:"Uploaded file exceeds the maximum upload size of your server.",max_file:s.data("max")?s.data("max"):5,max_upload_size:s.data("limit")?s.data("limit"):"10485760",supported_type:s.data("type")?s.data("type"):"jpg|jpeg|JPG|png|gif|pdf|doc|docx|ppt|pptx|odt|avi|ogg|m4a|mov|mp3|mp4|mpg|wav|wmv|xls",max_total_size:"100MB",parallel_uploads:2,chunks:!1,chunk_size:1e4,text:"Drag & Drop Files Here",separator:"or",button_text:"Browse Files",err_message:{maxNumFiles:"You have reached the maximum number of files ( Only %s files allowed )",maxUploadLimit:"Note : Some of the files could not be uploaded ( Only %s files allowed )",maxTotalSize:"The total file(s) size exceeding the max size limit of %s."},on_success:"",in_progress:"",completed:""},n),t=o.parallel_uploads,d=o.chunks,i=o.chunk_size,l="codedropz--results",p=1048576*parseInt(o.max_total_size.replace("[^0-9]/g","")),u=s.attr("data-name"),c='<div class="codedropz-upload-handler"><div class="codedropz-upload-container"><div class="codedropz-upload-inner"><'+dnd_cf7_uploader.heading_tag+">"+o.text+"</"+dnd_cf7_uploader.heading_tag+"><span>"+o.separator+'</span><div class="codedropz-btn-wrap"><a class="cd-upload-btn" href="javascript:void(0)">'+o.button_text+'</a></div></div></div><span class="dnd-upload-counter"><span>0</span> '+dnd_cf7_uploader.dnd_text_counter+" "+parseInt(o.max_file)+"</span></div>";o.handler.wrapAll('<div class="codedropz-upload-wrapper"></div>');var m=o.handler.parents("form"),f=o.handler.parents(".codedropz-upload-wrapper");o.handler.after(c),"column"==dnd_cf7_uploader.preview_layout&&!e(".codedropz--preview",f).length>0&&f.append('<div class="codedropz--preview"></div>');var h={init:function(){var n=this;u=this.getFieldName(u),r[u]=[],a[u]={total:0,uploaded:0,uploading:!0,maxTotalSize:0,maxSize:o.max_upload_size,maxFile:o.max_file},e(".codedropz-upload-handler",f).on("drag dragstart dragend dragover dragenter dragleave drop",function(e){e.preventDefault(),e.stopPropagation()}),e(".codedropz-upload-handler",f).on("dragover dragenter",function(a){e(this).addClass("codedropz-dragover")}),e(".codedropz-upload-handler",f).on("dragleave dragend drop",function(a){e(this).removeClass("codedropz-dragover")}),this.getUploadFiles(),e("body").on("click","a.remove-file",function(a){e(this).hasClass("deleting")||n.deleteFiles(e(this).data("index"),e(this),e(this).data("name"))}),/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)&&s.removeAttr("accept")},previewThumbnail:function(a){if(a.file){if(-1===e.inArray(a.file.type,["image/png","image/jpg","image/jpeg","image/gif","image/tiff","image/xheic"]))return!1;var r=new FileReader;r.onload=function(r){e("#"+a.progressbar).find(".dnd-upload-image").addClass("has-bg").append('<img title="'+a.name+'" src="'+r.target.result+'">')},r.readAsDataURL(a.file)}},getFieldName:function(e){return e.replace(/[^a-zA-Z0-9_-]/g,"")},deleteFiles:function(a,n,s){var t,d=r[s],i=this;n.addClass("deleting").text(dnd_cf7_uploader.delete_text);for(var l=0;l<d.length;l++)if(t=d[l],d[l].hasOwnProperty("file")&&("undefined"===e.type(a)||t.index===a))if(t.queued&&0==t.complete&&!t.error)n.addClass("deleting").text("aborting..."),this.abortFile(t),this.removeFile(t,l,s);else if(t.complete){var p={_file:t,_index:l,_name:s};data={security:dnd_cf7_uploader.nonce,action:"dnd_codedropz_upload_delete",path:e("#"+t.progressbar).find('input[type="hidden"]').val()},e.post(o.ajax_url,data,function(e){e.success&&(i.removeFile(p._file,p._index,p._name),console.log(p._file.name+" - file deleted."))})}else this.removeFile(t,l,s)},abortFile:function(e){d?e.chunkTransfer&&e.chunkTransfer.abort():e.transfer.abort()},removeFile:function(r,n,s){var t=e("#"+r.progressbar).parents(".codedropz-upload-wrapper");r&&r.hasOwnProperty("file")&&null!=r.progressbar&&(progressBar=t.find("#"+r.progressbar),progressBar.length>0?(r.deleted=!0,a[s].total--,a[s].maxTotalSize=a[s].maxTotalSize-r.size,r.complete&&a[s].uploaded>0&&a[s].uploaded--,progressBar.remove(),this.resetQueue(s)):console.log("Progress Bar not exists!"),a[s].uploaded<a[s].maxFile&&t.find("span.has-error-msg").remove(),a[s].maxTotalSize>p&&(f=t,this.validateFiles.setError(o.err_message.maxTotalSize,!1,o.max_total_size)),e(".dnd-upload-counter span",e('input[data-name="'+s+'"]').parents(".codedropz-upload-wrapper")).text(a[s].total))},getUploadFiles:function(){var a=this;e(".codedropz-upload-handler",f).on("drop",function(e){a.handleFiles(e.originalEvent.dataTransfer.files)}),e("a.cd-upload-btn",f).on("click",function(e){e.preventDefault(),o.handler.val(null),o.handler.click()}),o.handler.on("change",function(e){a.handleFiles(this.files)})},handleFiles:function(n){var s=n.length,t=[];if(a[u].maxFile){var d=a[u].maxFile-a[u].uploaded;d>=0&&n.length>d&&(s=d),0==a[u].uploaded&&a[u].total>0&&(s=a[u].maxFile-a[u].total)}if(e("span.has-error-msg",f).remove(),a[u].total>=a[u].maxFile)return this.validateFiles.setError(o.err_message.maxNumFiles,!0,o.max_file);if(s>0)for(var i=0;i<s;i++)n[i]&&($unique_index="index-"+Date.now().toString(36)+Math.random().toString(36).substr(2,5),t={index:$unique_index,file:n[i],name:n[i].name,size:n[i].size,queued:!1,complete:!1,error:!1,pause:!1,transfer:null,progressbar:null,deleted:!1},(newName=this.validateFiles.checkValidName(t.name))&&(t.name=newName),n.length-s>0&&this.validateFiles.setError(o.err_message.maxUploadLimit,!1,o.max_file),a[u].total++,a[u].maxTotalSize+=t.size,t.progressbar=this.progressBar.make(t),!1===this.validateFiles.check(t,u)&&(t.error=!0),a[u].maxTotalSize>p&&(this.validateFiles.setError(o.err_message.maxTotalSize,!0,o.max_total_size),t.pause=!0),r[u].push(t));a[u].uploading=!0,this.processQueue(r[u],u)},validateFiles:{setError:function(a,r,n){if(e("span.has-error-msg",f).remove(),e("."+l,f).after('<span class="has-error-msg">'+a.replace("%s",n)+"</span>"),r)return!1},check:function(r,n){if(!r)return!0;if(r.progressbar){var s=e("#"+r.progressbar).find(".dnd-upload-details");if(e("#"+r.progressbar).find(".has-error").remove(),r.size>a[n].maxSize&&!d)return s.append('<span class="has-error">'+dnd_cf7_uploader.drag_n_drop_upload.large_file+"</span>"),!1;if(0===r.size)return s.append('<span class="has-error">File is empty. Please upload something more substantial.</span>'),!1;if(regex_type=new RegExp("(.*?).("+o.supported_type+")$"),!regex_type.test(r.name.toLowerCase()))return s.append('<span class="has-error">'+dnd_cf7_uploader.drag_n_drop_upload.invalid_type+"</span>"),!1}return r},checkValidName:function(e){return!!new RegExp(/[{>="'<:;/\}]+/g).test(e)&&encodeURIComponent(e.replace(/[{>="'<:;/\} ]/g,"_"))}},resetQueue:function(e){var n=[];if(a[e].uploading=!0,r[e].length>0)for(var s in r[e])1==!r[e][s].deleted&&n.push(r[e][s]),1==r[e][s].pause&&a[e].maxTotalSize<p&&(r[e][s].pause=!1);n.length>0&&(r[e]=n),this.processQueue(r[e],e),console.log(r[e]),console.log(a[e]),console.log(h.bytesToSize(a[e].maxTotalSize)+" of "+o.max_total_size)},processQueue:function(n,s){var d=0,i=[];if(a[s].uploading){for(var l in n)0==n[l].complete&&0==n[l].error&&0==n[l].pause&&i.push(n[l]);e.isFunction(o.in_progress)&&o.in_progress.call(this,m,i,r[s]);for(l=0;l<i.length;l++)if(i[l].hasOwnProperty("file")&&(0==i[l].queued&&this.uploadFile(r[s],i[l],s),++d>=t))return;0==d&&(a[s].uploading=!1,e.isFunction(o.completed)&&o.completed.call(this,m,a[s],r[s]))}},progressBar:{make:function(a){var r="dnd-file-"+Math.random().toString(36).substr(2,9),n=!1;1==dnd_cf7_uploader.image_preview&&(n=h.previewThumbnail(a));var s='<div class="dnd-upload-image">'+(!1===n?'<span class="dnd-icon-blank-file"></span>':"")+'</div><div class="dnd-upload-details"><span class="name"><span title="'+decodeURIComponent(a.name)+'">'+decodeURIComponent(a.name)+"</span> <em>("+h.bytesToSize(a.size)+')</em></span><a href="javascript:void(0)" title="'+dnd_cf7_uploader.remove_text+'" class="remove-file" data-name="'+u+'" data-index="'+a.index+'"><span class="dnd-icon-remove"></span></a><span class="dnd-progress-bar"><span></span></span></div>';return!e("."+l,f).length>0&&f.append('<div class="'+l+'"></div>'),e("."+l,f).append('<div id="'+r+'" class="dnd-upload-status _uploading">'+s+"</div>"),r},setProgress:function(a,r){var n=e(".dnd-progress-bar",e("#"+a));return n.length>0&&(progress_width=r*n.width()/100,e("span",n).addClass("in-progress").animate({width:progress_width},10).text(r+"% "),100==r&&(e("span",n).addClass("complete").removeClass("in-progress"),e("#"+a).removeClass("_uploading"))),!1}},uploadFile:function(r,n,t){var l=this,p=new FormData,u=1024*i;p.append("supported_type",o.supported_type),p.append("size_limit",o.max_upload_size),p.append("action","dnd_codedropz_upload"),p.append("upload_dir",o.upload_dir.val()),p.append("post_id",m.find("[name='_wpcf7_container_post']").val()),p.append("security",dnd_cf7_uploader.nonce),p.append("form_id",s.data("id")),p.append("upload_name",s.data("name")),(newName=this.validateFiles.checkValidName(n.file.name))&&p.append("orig-name",decodeURIComponent(newName)),d&&n.size>u?(n.queued=!0,n.chunkSize=u,n.totalChunks=Math.ceil(n.size/n.chunkSize),n.currentChunk=0,this.uploadChunks(r,n,t)):(n.queued=!0,p.append("upload-file",n.file),n.transfer=e.ajax({url:o.ajax_url,type:m.attr("method"),data:p,dataType:"json",cache:!1,contentType:!1,processData:!1,xhr:function(){var e=new window.XMLHttpRequest;return e.upload.onprogress=function(e){if(e.lengthComputable){var a=parseInt(e.loaded/e.total*100);l.progressBar.setProgress(n.progressbar,a-1)}},e},success:function(s){s.success?(l.progressBar.setProgress(n.progressbar,100),n.complete=!0,a[t].uploaded++,l.processQueue(r,t),e.isFunction(o.on_success)&&o.on_success.call(this,n.progressbar,s,t,a[t])):(e("#"+n.progressbar).find(".dnd-upload-details").append('<span class="has-error">'+s.data+"</span>"),n.error=!0,l.processQueue(r,t))},error:function(a,s,o){e("#"+n.progressbar).find(".dnd-upload-details").append('<span class="has-error">'+o+"</span>"),n.error=!0,l.processQueue(r,t)}}))},uploadChunks:function(r,n,t){var d=n.chunkSize*n.currentChunk,i=d+n.chunkSize,l=this;i>n.size&&(i=n.size);var p=this.sliceFile(n.file,d,i),u=new FormData;u.append("security",dnd_cf7_uploader.nonce),u.append("start",d),u.append("end",i),u.append("total_chunks",n.totalChunks),u.append("chunk_size",n.chunkSize),u.append("upload_dir",o.upload_dir.val()),u.append("chunk",n.currentChunk),u.append("chunks-file",p,n.file.name),u.append("unique",n.progressbar),u.append("post_id",m.find("[name='_wpcf7_container_post']").val()),u.append("action","dnd_codedropz_upload_chunks"),u.append("form_id",s.data("id")),u.append("upload_name",s.data("name")),n.chunkTransfer=e.ajax({url:o.ajax_url,type:m.attr("method"),dataType:"json",data:u,type:"POST",contentType:!1,processData:!1,cache:!1,success:function(s,d,i){s&&void 0!==s&&(n.currentChunk++,s.data.partial_chunks&&n.currentChunk<n.totalChunks&&l.uploadChunks(r,n,t),console.log(n.name+" [chunk -"+n.currentChunk+" of "+n.totalChunks+"]"),s.data.file&&(n.currentChunk==n.totalChunks&&l.progressBar.setProgress(n.progressbar,100),n.complete=!0,a[t].uploaded++,l.processQueue(r,t),e.isFunction(o.on_success)&&o.on_success.call(this,n.progressbar,s,t,a[t])))},error:function(a,s,o){e("#"+n.progressbar).find(".dnd-upload-details").append('<span class="has-error">'+o+"</span>"),n.error=!0,l.processQueue(r,t)},xhr:function(){var e=new window.XMLHttpRequest;return e.upload.onprogress=function(e){if(e.lengthComputable){var a=e.loaded/e.total,r=Math.ceil(1/n.totalChunks*99),s=n.currentChunk/n.totalChunks*99,o=0==n.currentChunk?r*a:r*a+s;l.progressBar.setProgress(n.progressbar,parseInt(o))}},e}})},sliceFile:function(e,a,r){return(e.mozSlice?e.mozSlice:e.webkitSlice?e.webkitSlice:e.slice?e.slice:{}).bind(e)(a,r)},bytesToSize:function(e){return 0===e?"0":(kBytes=e/1024,fileSize=kBytes>=1024?(kBytes/1024).toFixed(2)+"MB":kBytes.toFixed(2)+"KB",fileSize)}};h.init();var g=["wpcf7mailsent","wpcf7spam","wpcf7mailfailed"];for(var _ in g)document.addEventListener(g[_],function(e){name=h.getFieldName(u),r[name]=[],a[name]={total:0,uploaded:0,uploading:!0,maxTotalSize:0,maxSize:o.max_upload_size,maxFile:o.max_file}},!1)})}}(jQuery);