-
Notifications
You must be signed in to change notification settings - Fork 153
/
Copy pathjquery.uploadifive.min.js
6 lines (6 loc) · 12.2 KB
/
jquery.uploadifive.min.js
1
2
3
4
5
6
/*
UploadiFive 1.2.3
Copyright (c) 2012 Reactive Apps, Ronnie Garcia
Released under the UploadiFive Standard License <http://www.uploadify.com/uploadifive-standard-license>
*/
!function(e){var t={init:function(i){return this.each(function(){var n=e(this);n.data("uploadifive",{inputs:{},inputCount:0,fileID:0,queue:{count:0,selected:0,replaced:0,errors:0,queued:0,cancelled:0},uploads:{current:0,attempts:0,successful:0,errors:0,count:0}});var o,r=n.data("uploadifive"),u=r.settings=e.extend({auto:!0,buttonClass:!1,buttonText:"Select Files",checkScript:!1,dnd:!0,dropTarget:!1,fileObjName:"Filedata",fileSizeLimit:0,fileType:!1,formData:{},height:30,itemTemplate:!1,method:"post",multi:!0,overrideEvents:[],queueID:!1,queueSizeLimit:0,removeCompleted:!1,simUploadLimit:0,truncateLength:0,uploadLimit:0,uploadScript:"uploadifive.php",width:100},i);if(u.fileType&&(o=u.fileType.split(",")),isNaN(u.fileSizeLimit)){var a=1.024*parseInt(u.fileSizeLimit);u.fileSizeLimit.indexOf("KB")>-1?u.fileSizeLimit=1e3*a:u.fileSizeLimit.indexOf("MB")>-1?u.fileSizeLimit=1e6*a:u.fileSizeLimit.indexOf("GB")>-1&&(u.fileSizeLimit=1e9*a)}else u.fileSizeLimit=1024*u.fileSizeLimit;if(r.inputTemplate=e('<input type="file">').css({"font-size":u.height+"px",opacity:0,position:"absolute",right:"-3px",top:"-3px","z-index":999}),r.createInput=function(){var i=r.inputTemplate.clone(),o=i.name="input"+r.inputCount++;u.multi&&i.attr("multiple",!0),u.fileType&&i.attr("accept",u.fileType),i.bind("change",function(){r.queue.selected=0,r.queue.replaced=0,r.queue.errors=0,r.queue.queued=0;var i=this.files.length;if(r.queue.selected=i,r.queue.count+i>u.queueSizeLimit&&0!==u.queueSizeLimit)e.inArray("onError",u.overrideEvents)<0&&alert("The maximum number of queue items has been reached ("+u.queueSizeLimit+"). Please select fewer files."),"function"==typeof u.onError&&u.onError.call(n,"QUEUE_LIMIT_EXCEEDED");else{for(var a=0;a<i;a++)file=this.files[a],r.addQueueItem(file);r.inputs[o]=this,r.createInput()}u.auto&&t.upload.call(n),"function"==typeof u.onSelect&&u.onSelect.call(n,r.queue)}),r.currentInput&&r.currentInput.hide(),r.button.append(i),r.currentInput=i},r.destroyInput=function(t){e(r.inputs[t]).remove(),delete r.inputs[t],r.inputCount--},r.drop=function(i){i.preventDefault(),i.stopPropagation(),r.queue.selected=0,r.queue.replaced=0,r.queue.errors=0,r.queue.queued=0;var a=i.dataTransfer,l=a.name="input"+r.inputCount++,s=a.files.length;if(r.queue.selected=s,r.queue.count+s>u.queueSizeLimit&&0!==u.queueSizeLimit)e.inArray("onError",u.overrideEvents)<0&&alert("The maximum number of queue items has been reached ("+u.queueSizeLimit+"). Please select fewer files."),"function"==typeof u.onError&&u.onError.call(n,"QUEUE_LIMIT_EXCEEDED");else{for(var p=0;p<s;p++)file=a.files[p],r.addQueueItem(file),o&&o.indexOf(file.name.substring(file.name.lastIndexOf(".")))<0&&r.error("FORBIDDEN_FILE_TYPE",file);r.inputs[l]=a}u.auto&&t.upload.call(n),"function"==typeof u.onDrop&&u.onDrop.call(n,a.files,a.files.length)},r.fileExistsInQueue=function(e){for(var t in r.inputs){input=r.inputs[t],limit=input.files.length;for(var i=0;i<limit;i++)if(existingFile=input.files[i],existingFile.name==e.name&&!existingFile.complete)return!0}return!1},r.removeExistingFile=function(e){for(var i in r.inputs){input=r.inputs[i],limit=input.files.length;for(var o=0;o<limit;o++)existingFile=input.files[o],existingFile.name!=e.name||existingFile.complete||(r.queue.replaced++,t.cancel.call(n,existingFile,!0))}},!1===u.itemTemplate?r.queueItem=e('<div class="uploadifive-queue-item"><a class="close" href="#">X</a><div><span class="filename"></span><span class="fileinfo"></span></div><div class="progress"><div class="progress-bar"></div></div></div>'):r.queueItem=e(u.itemTemplate),r.addQueueItem=function(i){if(e.inArray("onAddQueueItem",u.overrideEvents)<0){r.removeExistingFile(i),i.queueItem=r.queueItem.clone(),i.queueItem.attr("id",u.id+"-file-"+r.fileID++),i.queueItem.find(".close").bind("click",function(){return t.cancel.call(n,i),!1});var a=i.name;a.length>u.truncateLength&&0!==u.truncateLength&&(a=a.substring(0,u.truncateLength)+"..."),i.queueItem.find(".filename").html(a),i.queueItem.data("file",i),r.queueEl.append(i.queueItem)}"function"==typeof u.onAddQueueItem&&u.onAddQueueItem.call(n,i),o&&o.indexOf(i.name.substring(i.name.lastIndexOf(".")))<0&&r.error("FORBIDDEN_FILE_TYPE",i),i.size>u.fileSizeLimit&&0!==u.fileSizeLimit?r.error("FILE_SIZE_LIMIT_EXCEEDED",i):(r.queue.queued++,r.queue.count++)},r.removeQueueItem=function(t,i,n){n||(n=0);var o=i?0:500;t.queueItem&&(" - Completed"!=t.queueItem.find(".fileinfo").html()&&t.queueItem.find(".fileinfo").html(" - Cancelled"),t.queueItem.find(".progress-bar").width(0),t.queueItem.delay(n).fadeOut(o,function(){e(this).remove()}),delete t.queueItem,r.queue.count--)},r.filesToUpload=function(){var e=0;for(var t in r.inputs){input=r.inputs[t],limit=input.files.length;for(var i=0;i<limit;i++)file=input.files[i],file.skip||file.complete||e++}return e},r.checkExists=function(i){if(e.inArray("onCheck",u.overrideEvents)<0){e.ajaxSetup({async:!1});var o=e.extend(u.formData,{filename:i.name});if(e.post(u.checkScript,o,function(e){i.exists=parseInt(e)}),i.exists&&!confirm("A file named "+i.name+" already exists in the upload folder.\nWould you like to replace it?"))return t.cancel.call(n,i),!0}return"function"==typeof u.onCheck&&u.onCheck.call(n,i,i.exists),!1},r.uploadFile=function(t,i){if(!t.skip&&!t.complete&&!t.uploading)if(t.uploading=!0,r.uploads.current++,r.uploads.attempted++,xhr=t.xhr=new XMLHttpRequest,"function"==typeof FormData||"object"==typeof FormData){var o=new FormData;for(var a in o.append(u.fileObjName,t),u.formData)o.append(a,u.formData[a]);xhr.open(u.method,u.uploadScript,!0),xhr.upload.addEventListener("progress",function(e){e.lengthComputable&&r.progress(e,t)},!1),xhr.addEventListener("load",function(e){4==this.readyState&&(t.uploading=!1,200==this.status?"Invalid file type."!==t.xhr.responseText?r.uploadComplete(e,t,i):r.error(t.xhr.responseText,t,i):404==this.status?r.error("404_FILE_NOT_FOUND",t,i):403==this.status?r.error("403_FORBIDDEN",t,i):r.error("Unknown Error",t,i))}),xhr.send(o)}else{var l=new FileReader;l.onload=function(o){var a="-------------------------"+(new Date).getTime(),l="\r\n",s="";for(var p in s+="--"+a+l,s+='Content-Disposition: form-data; name="'+u.fileObjName+'"',t.name&&(s+='; filename="'+t.name+'"'),s+=l,s+="Content-Type: application/octet-stream\r\n\r\n",s+=o.target.result+l,u.formData)s+="--"+a+l,s+='Content-Disposition: form-data; name="'+p+'"'+l+l,s+=u.formData[p]+l;s+="--"+a+"--"+l,xhr.upload.addEventListener("progress",function(e){r.progress(e,t)},!1),xhr.addEventListener("load",function(e){t.uploading=!1,404==this.status?r.error("404_FILE_NOT_FOUND",t,i):"Invalid file type."!=t.xhr.responseText?r.uploadComplete(e,t,i):r.error(t.xhr.responseText,t,i)},!1);u.uploadScript;"get"==u.method&&e(u.formData).param();xhr.open(u.method,u.uploadScript,!0),xhr.setRequestHeader("Content-Type","multipart/form-data; boundary="+a),"function"==typeof u.onUploadFile&&u.onUploadFile.call(n,t),xhr.sendAsBinary(s)},l.readAsBinaryString(t)}},r.progress=function(t,i){var o;e.inArray("onProgress",u.overrideEvents)<0&&(t.lengthComputable&&(o=Math.round(t.loaded/t.total*100)),i.queueItem.find(".fileinfo").html(" - "+o+"%"),i.queueItem.find(".progress-bar").css("width",o+"%")),"function"==typeof u.onProgress&&u.onProgress.call(n,i,t)},r.error=function(i,o,a){if(e.inArray("onError",u.overrideEvents)<0){switch(i){case"404_FILE_NOT_FOUND":errorMsg="404 Error";break;case"403_FORBIDDEN":errorMsg="403 Forbidden";break;case"FORBIDDEN_FILE_TYPE":errorMsg="Forbidden File Type";break;case"FILE_SIZE_LIMIT_EXCEEDED":errorMsg="File Too Large";break;default:errorMsg="Unknown Error"}o.queueItem.addClass("error").find(".fileinfo").html(" - "+errorMsg),o.queueItem.find(".progress").remove()}"function"==typeof u.onError&&u.onError.call(n,i,o),o.skip=!0,"404_FILE_NOT_FOUND"==i?r.uploads.errors++:r.queue.errors++,a&&t.upload.call(n,null,!0)},r.uploadComplete=function(i,o,a){e.inArray("onUploadComplete",u.overrideEvents)<0&&(o.queueItem.find(".progress-bar").css("width","100%"),o.queueItem.find(".fileinfo").html(" - Completed"),o.queueItem.find(".progress").slideUp(250),o.queueItem.addClass("complete")),"function"==typeof u.onUploadComplete&&u.onUploadComplete.call(n,o,o.xhr.responseText),u.removeCompleted&&setTimeout(function(){t.cancel.call(n,o)},3e3),o.complete=!0,r.uploads.successful++,r.uploads.count++,r.uploads.current--,delete o.xhr,a&&t.upload.call(n,null,!0)},r.queueComplete=function(){"function"==typeof u.onQueueComplete&&u.onQueueComplete.call(n,r.uploads)},!(window.File&&window.FileList&&window.Blob&&(window.FileReader||window.FormData)))return"function"==typeof u.onFallback&&u.onFallback.call(n),!1;if(u.id="uploadifive-"+n.attr("id"),r.button=e('<div id="'+u.id+'" class="uploadifive-button">'+u.buttonText+"</div>"),u.buttonClass&&r.button.addClass(u.buttonClass),r.button.css({height:u.height,"line-height":u.height+"px",overflow:"hidden",position:"relative","text-align":"center",width:u.width}),n.before(r.button).appendTo(r.button).hide(),r.createInput.call(n),u.queueID?r.queueEl=e("#"+u.queueID):(u.queueID=u.id+"-queue",r.queueEl=e('<div id="'+u.queueID+'" class="uploadifive-queue" />'),r.button.after(r.queueEl)),u.dnd){var l=u.dropTarget?e(u.dropTarget):r.queueEl.get(0);l.addEventListener("dragleave",function(e){e.preventDefault(),e.stopPropagation()},!1),l.addEventListener("dragenter",function(e){e.preventDefault(),e.stopPropagation()},!1),l.addEventListener("dragover",function(e){e.preventDefault(),e.stopPropagation()},!1),l.addEventListener("drop",r.drop,!1)}XMLHttpRequest.prototype.sendAsBinary||(XMLHttpRequest.prototype.sendAsBinary=function(e){var t=Array.prototype.map.call(e,function(e){return 255&e.charCodeAt(0)}),i=new Uint8Array(t);this.send(i.buffer)}),"function"==typeof u.onInit&&u.onInit.call(n)})},debug:function(){return this.each(function(){console.log(e(this).data("uploadifive"))})},clearQueue:function(){this.each(function(){var n=e(this),o=n.data("uploadifive"),r=o.settings;for(var u in o.inputs)for(input=o.inputs[u],limit=input.files.length,i=0;i<limit;i++)file=input.files[i],t.cancel.call(n,file);"function"==typeof r.onClearQueue&&r.onClearQueue.call(n,e("#"+o.settings.queueID))})},cancel:function(i,n){this.each(function(){var o=e(this),r=o.data("uploadifive"),u=r.settings;"string"==typeof i&&(isNaN(i)||(fileID="uploadifive-"+e(this).attr("id")+"-file-"+i),i=e("#"+fileID).data("file")),i.skip=!0,r.filesCancelled++,i.uploading&&(r.uploads.current--,i.uploading=!1,i.xhr.abort(),delete i.xhr,t.upload.call(o)),e.inArray("onCancel",u.overrideEvents)<0&&r.removeQueueItem(i,n),"function"==typeof u.onCancel&&u.onCancel.call(o,i)})},upload:function(t,i){this.each(function(){var n=e(this),o=n.data("uploadifive"),r=o.settings;if(t)o.uploadFile.call(n,t);else if(o.uploads.count+o.uploads.current<r.uploadLimit||0===r.uploadLimit){if(!i){o.uploads.attempted=0,o.uploads.successsful=0,o.uploads.errors=0;var u=o.filesToUpload();"function"==typeof r.onUpload&&r.onUpload.call(n,u)}e("#"+r.queueID).find(".uploadifive-queue-item").not(".error, .complete").each(function(){if(_file=e(this).data("file"),o.uploads.current>=r.simUploadLimit&&0!==r.simUploadLimit||o.uploads.current>=r.uploadLimit&&0!==r.uploadLimit||o.uploads.count>=r.uploadLimit&&0!==r.uploadLimit)return!1;r.checkScript?(_file.checking=!0,skipFile=o.checkExists(_file),_file.checking=!1,skipFile||o.uploadFile(_file,!0)):o.uploadFile(_file,!0)}),0===e("#"+r.queueID).find(".uploadifive-queue-item").not(".error, .complete").size()&&o.queueComplete()}else 0===o.uploads.current&&(e.inArray("onError",r.overrideEvents)<0&&o.filesToUpload()>0&&0!==r.uploadLimit&&alert("The maximum upload limit has been reached."),"function"==typeof r.onError&&r.onError.call(n,"UPLOAD_LIMIT_EXCEEDED",o.filesToUpload()))})},destroy:function(){this.each(function(){var i=e(this),n=i.data("uploadifive"),o=n.settings;t.clearQueue.call(i),o.queueID||e("#"+o.queueID).remove(),i.siblings("input").remove(),i.show().insertBefore(n.button),n.button.remove(),"function"==typeof o.onDestroy&&o.onDestroy.call(i)})}};e.fn.uploadifive=function(i){return t[i]?t[i].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof i&&i?void e.error("The method "+i+" does not exist in $.uploadify"):t.init.apply(this,arguments)}}(jQuery);