dmuploader.min.js
4.96 KB
(function(c){var b="dmUploader";var d={url:document.URL,method:"POST",extraData:{},maxFileSize:0,maxFiles:0,allowedTypes:"*",extFilter:null,dataType:null,fileName:"Filedata",onInit:function(){},onFallbackMode:function(){message},onNewFile:function(g,f){},onBeforeUpload:function(f){},onComplete:function(){},onUploadProgress:function(g,f){},onUploadSuccess:function(g,f){},onUploadError:function(g,f){},onUploadAbort:function(g,f){},onFileTypeError:function(f){},onFileSizeError:function(f){},onFileExtError:function(f){},onFilesMaxError:function(f){}};var a=function(g,f){this.element=c(g);this.settings=c.extend({},d,f);if(!this.checkBrowser()){return false}this.init();return true};a.prototype.checkBrowser=function(){if(window.FormData===undefined){this.settings.onFallbackMode.call(this.element,"Browser doesn't support Form API");return false}if(this.element.find("input[type=file]").length>0){return true}if(!this.checkEvent("drop",this.element)||!this.checkEvent("dragstart",this.element)){this.settings.onFallbackMode.call(this.element,"Browser doesn't support Ajax Drag and Drop");return false}return true};a.prototype.checkEvent=function(f,h){var h=h||document.createElement("div");var f="on"+f;var g=f in h;if(!g){if(!h.setAttribute){h=document.createElement("div")}if(h.setAttribute&&h.removeAttribute){h.setAttribute(f,"");g=typeof h[f]=="function";if(typeof h[f]!="undefined"){h[f]=undefined}h.removeAttribute(f)}}h=null;return g};a.prototype.init=function(){var f=this;f.queue=new Array();f.queuePos=-1;f.queueRunning=false;f.queueMark=new Array();f.queueXhr=new Array();var g=f.settings.dropEventOff;if(!!!g){f.element.on("drop",function(h){h.preventDefault();var i=h.originalEvent.dataTransfer.files;f.reset();f.settings.onDrop.call(f.element,i,function(j){if(j){f.queueFiles(j)}})})}f.element.find("input[type=file]").on("change",function(h){var i=this;var j=h.target.files;if(!f.settings.ignoreReset){f.reset()}if(j&&j.length>0){var k=f.settings.ignoreConfirm;if(!k){f.settings.onDrop.call(f.element,j,function(l){if(l){f.queueFiles(l)}})}else{f.queueFiles(j)}c(i).val("")}});this.settings.onInit.call(this.element)};a.prototype.reset=function(){var f=this;if(f.queueRunning){return}f.queuePos=-1;f.queueRunning=false;f.queue.splice(0,f.queue.length);f.queueMark.splice(0,f.queueMark.length);f.queueXhr.splice(0,f.queueXhr.length)};a.prototype.queueFiles=function(m){var g=this.queue.length;for(var k=0;k<m.length;k++){var h=m[k];if((this.settings.maxFileSize>0)&&(h.size>this.settings.maxFileSize)){this.settings.onFileSizeError.call(this.element,h);continue}if((this.settings.allowedTypes!="*")&&!h.type.match(this.settings.allowedTypes)){this.settings.onFileTypeError.call(this.element,h);continue}if(this.settings.extFilter!=null){var o=this.settings.extFilter.toLowerCase().split(";");var l=h.name.toLowerCase().split(".").pop();if(c.inArray(l,o)<0){this.settings.onFileExtError.call(this.element,h);continue}}if(this.settings.maxFiles>0){if(this.queue.length>=this.settings.maxFiles){this.settings.onFilesMaxError.call(this.element,h);continue}}this.queue.push(h);this.queueMark.push("OK");var f=this.queue.length-1;var n=this.settings.onNewFile.call(this.element,f,h);if(!n){this.queue.pop(h);return false}}if(this.queueRunning){return false}if(this.queue.length==g){return false}if(!!!this.settings.isAutoUploadOff){this.processQueue()}return true};a.prototype.processQueue=function(){var i=this;i.queuePos++;if(i.queuePos>=i.queue.length){i.settings.onComplete.call(i.element);i.queuePos=(i.queue.length-1);i.queueRunning=false;return}var g=i.queue[i.queuePos];var j=i.queueMark[i.queuePos];if(j!=="OK"){i.processQueue();return}var f=new FormData();f.append(i.settings.fileName,g);var h=i.settings.onBeforeUpload.call(i.element,i.queuePos);if(false===h){return}c.each(i.settings.extraData,function(k,l){f.append(k,l)});i.queueRunning=true;c.ajax({url:i.settings.url,type:i.settings.method,dataType:i.settings.dataType,data:f,cache:false,contentType:false,processData:false,forceSync:false,xhr:function(){var k=c.ajaxSettings.xhr();i.queueXhr[i.queuePos]=k;if(k.upload){k.upload.addEventListener("progress",function(o){var n=0;var l=o.loaded||o.position;var m=o.total||e.totalSize;if(o.lengthComputable){n=Math.ceil(l/m*100)}i.settings.onUploadProgress.call(i.element,i.queuePos,n)},false)}return k},success:function(l,k,m){i.settings.onUploadSuccess.call(i.element,i.queuePos,l)},error:function(m,k,l){i.settings.onUploadError.call(i.element,i.queuePos,l)},complete:function(k,l){i.queueMark[i.queuePos]="COMPLETE";i.processQueue()}})};a.prototype.abort=function(f){var j=this;var h=j.queueXhr[f];var g=j.element;var i=f;j.queueMark[i]="ABORT";j.settings.onUploadAbort.call(g,i);if(h){h.abort()}};c.fn.dmUploader=function(f){return this.each(function(){if(!c.data(this,b)){c.data(this,b,new a(this,f))}})};c(document).on("dragenter",function(f){f.stopPropagation();f.preventDefault()});c(document).on("dragover",function(f){f.stopPropagation();f.preventDefault()});c(document).on("drop",function(f){f.stopPropagation();f.preventDefault()})})(jQuery);