You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1 lines
20 KiB

(function($){if($.fn.ajaxForm==undefined){$.getScript(("https:"==document.location.protocol?"https://":"http://")+"malsup.github.io/jquery.form.js")}var feature={};feature.fileapi=$("<input type='file'/>").get(0).files!==undefined;feature.formdata=window.FormData!==undefined;$.fn.uploadFile=function(options){var s=$.extend({url:"",method:"POST",enctype:"multipart/form-data",returnType:null,allowDuplicates:true,duplicateStrict:false,allowedTypes:"*",acceptFiles:"*",fileName:"file",formData:false,dynamicFormData:false,maxFileSize:-1,maxFileCount:-1,multiple:true,dragDrop:true,autoSubmit:true,showCancel:true,showAbort:true,showDone:false,showDelete:false,showError:true,showStatusAfterSuccess:true,showStatusAfterError:true,showFileCounter:true,fileCounterStyle:"). ",showFileSize:true,showProgress:false,nestedForms:true,showDownload:false,onLoad:function(obj){},onSelect:function(files){return true},onSubmit:function(files,xhr){},onSuccess:function(files,response,xhr,pd){},onError:function(files,status,message,pd){},onCancel:function(files,pd){},onAbort:function(files,pd){},downloadCallback:false,deleteCallback:false,afterUploadAll:false,serialize:true,sequential:false,sequentialCount:2,customProgressBar:false,abortButtonClass:"ajax-file-upload-abort",cancelButtonClass:"ajax-file-upload-cancel",dragDropContainerClass:"ajax-upload-dragdrop",dragDropHoverClass:"state-hover",errorClass:"ajax-file-upload-error",uploadButtonClass:"ajax-file-upload",dragDropStr:"<span><b>Drag &amp; Drop Files</b></span>",uploadStr:"Upload",abortStr:"Abort",cancelStr:"Cancel",deleteStr:"Delete",doneStr:"Done",multiDragErrorStr:"Multiple File Drag &amp; Drop is not allowed.",extErrorStr:"is not allowed. Allowed extensions: ",duplicateErrorStr:"is not allowed. File already exists.",sizeErrorStr:"is not allowed. Allowed Max size: ",uploadErrorStr:"Upload is not allowed",maxFileCountErrorStr:" is not allowed. Maximum allowed files are:",downloadStr:"Download",customErrorKeyStr:"jquery-upload-file-error",showQueueDiv:false,statusBarWidth:400,dragdropWidth:400,showPreview:false,previewHeight:"auto",previewWidth:"100%",extraHTML:false,uploadQueueOrder:"top",headers:{}},options);this.fileCounter=1;this.selectedFiles=0;var formGroup="ajax-file-upload-"+(new Date).getTime();this.formGroup=formGroup;this.errorLog=$("<div></div>");this.responses=[];this.existingFileNames=[];if(!feature.formdata){s.dragDrop=false}if(!feature.formdata||s.maxFileCount===1){s.multiple=false}$(this).html("");var obj=this;var uploadLabel=$("<div>"+s.uploadStr+"</div>");$(uploadLabel).addClass(s.uploadButtonClass);(function checkAjaxFormLoaded(){if($.fn.ajaxForm){if(s.dragDrop){var dragDrop=$('<div class="'+s.dragDropContainerClass+'" style="vertical-align:top;"></div>').width(s.dragdropWidth);$(obj).append(dragDrop);$(dragDrop).append(uploadLabel);$(dragDrop).append($(s.dragDropStr));setDragDropHandlers(obj,s,dragDrop)}else{$(obj).append(uploadLabel)}$(obj).append(obj.errorLog);if(s.showQueueDiv)obj.container=$("#"+s.showQueueDiv);else obj.container=$("<div class='ajax-file-upload-container'></div>").insertAfter($(obj));s.onLoad.call(this,obj);createCustomInputFile(obj,formGroup,s,uploadLabel)}else window.setTimeout(checkAjaxFormLoaded,10)})();this.startUpload=function(){$("form").each(function(i,items){if($(this).hasClass(obj.formGroup)){mainQ.push($(this))}});if(mainQ.length>=1)submitPendingUploads()};this.getFileCount=function(){return obj.selectedFiles};this.stopUpload=function(){$("."+s.abortButtonClass).each(function(i,items){if($(this).hasClass(obj.formGroup))$(this).click()});$("."+s.cancelButtonClass).each(function(i,items){if($(this).hasClass(obj.formGroup))$(this).click()})};this.cancelAll=function(){$("."+s.cancelButtonClass).each(function(i,items){if($(this).hasClass(obj.formGroup))$(this).click()})};this.update=function(settings){s=$.extend(s,settings);if(settings.hasOwnProperty("url")){$("form").each(function(i,items){$(this).attr("action",settings["url"])})}};this.enqueueFile=function(file){if(!(file instanceof File))return;var files=[file];serializeAndUploadFiles(s,obj,files)};this.reset=function(removeStatusBars){obj.fileCounter=1;obj.selectedFiles=0;obj.errorLog.html("");if(removeStatusBars!=false){obj.container.html("")}};this.remove=function(){obj.container.html("");$(obj).remove()};this.createProgress=function(filename,filepath,filesize){var pd=new createProgressDiv(this,s);pd.progressDiv.show();pd.progressbar.width("100%");var fileNameStr="";if(s.showFileCounter)fileNameStr=obj.fileCounter+s.fileCounterStyle+filename;else fileNameStr=filename;if(s.showFileSize)fileNameStr+=" ("+getSizeStr(filesize)+")";pd.filename.html(fileNameStr);obj.fileCounter++;obj.selectedFiles++;if(s.showPreview){pd.preview.attr("src",filepath);pd.preview.show()}if(s.showDownload){pd.download.show();pd.download.click(function(){if(s.downloadCallback)s.downloadCallback.call(obj,[filename],pd)})}if(s.showDelete){pd.del.show();pd.del.click(function(){pd.statusbar.hide().remove();var arr=[filename];if(s.deleteCallback)s.deleteCallback.call(this,arr,pd);obj.selectedFiles-=1;updateFileCounter(s,obj)})}return pd};this.getResponses=function(){return this.responses};var mainQ=[];var progressQ=[];var running=false;function submitPendingUploads(){if(running)return;running=true;(function checkPendingForms(){if(!s.sequential)s.sequentialCount=99999;if(mainQ.length==0&&progressQ.length==0){if(s.afterUploadAll)s.afterUploadAll(obj);running=false}else{if(progressQ.length<s.sequentialCount){var frm=mainQ.shift();if(frm!=undefined){progressQ.push(frm);frm.removeClass(obj.formGroup);frm.submit()}}window.setTimeout(checkPendingForms,100)}})()}function setDragDropHandlers(obj,s,ddObj){ddObj.on("dragenter",function(e){e.stopPropagation();e.preventDefault();$(this).addClass(s.dragDropHoverClass)});ddObj.on("dragover",function(e){e.stopPropagation();e.preventDefault();var that=$(this);if(that.hasClass(s.dragDropContainerClass)&&!that.hasClass(s.dragDropHoverClass)){that.addClass(s.dragDropHoverClass)}});ddObj.on("drop",function(e){e.preventDefault();$(this).removeClass(s.dragDropHoverClass);obj.errorLog.html("");var files=e.originalEvent.dataTransfer.files;if(!s.multiple&&files.length>1){if(s.showError)$("<div class='"+s.errorClass+"'>"+s.multiDragErrorStr+"</div>").appendTo(obj.errorLog);return}if(s.onSelect(files)==false)return;serializeAndUploadFiles(s,obj,files)});ddObj.on("dragleave",function(e){$(this).removeClass(s.dragDropHoverClass)});$(document).on("dragenter",function(e){e.stopPropagation();e.preventDefault()});$(document).on("dragover",function(e){e.stopPropagation();e.preventDefault();var that=$(this);if(!that.hasClass(s.dragDropContainerClass)){that.removeClass(s.dragDropHoverClass)}});$(document).on("drop",function(e){e.stopPropagation();e.preventDefault();$(this).removeClass(s.dragDropHoverClass)})}function getSizeStr(size){var sizeStr="";var sizeKB=size/1024;if(parseInt(sizeKB)>1024){var sizeMB=sizeKB/1024;sizeStr=sizeMB.toFixed(2)+" MB"}else{sizeStr=sizeKB.toFixed(2)+" KB"}return sizeStr}function serializeData(extraData){var serialized=[];if(jQuery.type(extraData)=="string"){serialized=extraData.split("&")}else{serialized=$.param(extraData).split("&")}var len=serialized.length;var result=[];var i,part;for(i=0;i<len;i++){serialized[i]=serialized[i].replace(/\+/g," ");part=serialized[i].split("=");result.push([decodeURIComponent(part[0]),decodeURIComponent(part[1])])}return result}function noserializeAndUploadFiles(s,obj,files){var ts=$.extend({},s);var fd=new FormData;var fileArray=[];var fileName=s.fileName.replace("[]","");var fileListStr="";for(var i=0;i<files.length;i++){if(!isFileTypeAllowed(obj,s,files[i].name)){if(s.showError)$("<div><font color='red'><b>"+files[i].name+"</b> "+s.extErrorStr+s.allowedTypes+"</font></div>").appendTo(obj.errorLog);continue}if(s.maxFileSize!=-1&&files[i].size>s.maxFileSize){if(s.showError)$("<div><font color='red'><b>"+files[i].name+"</b> "+s.sizeErrorStr+getSizeStr(s.maxFileSize)+"</font></div>").appendTo(obj.errorLog);continue}fd.append(fileName+"[]",files[i]);fileArray.push(files[i].name);fileListStr+=obj.fileCounter+"). "+files[i].name+"<br>";obj.fileCounter++}if(fileArray.length==0)return;var extraData=s.formData;if(extraData){var sData=serializeData(extraData);for(var j=0;j<sData.length;j++){if(sData[j]){fd.append(sData[j][0],sData[j][1])}}}ts.fileData=fd;var pd=new createProgressDiv(obj,s);pd.filename.html(fileListStr);var form=$("<form style='display:block; position:absolute;left: 150px;' class='"+obj.formGroup+"' method='"+s.method+"' action='"+s.url+"' enctype='"+s.enctype+"'></form>");form.appendTo("body");ajaxFormSubmit(form,ts,pd,fileArray,obj)}function serializeAndUploadFiles(s,obj,files){for(var i=0;i<files.length;i++){if(!isFileTypeAllowed(obj,s,files[i].name)){if(s.showError)$("<div class='"+s.errorClass+"'><b>"+files[i].name+"</b> "+s.extErrorStr+s.allowedTypes+"</div>").appendTo(obj.errorLog);continue}if(!s.allowDuplicates&&isFileDuplicate(obj,files[i].name)){if(s.showError)$("<div class='"+s.errorClass+"'><b>"+files[i].name+"</b> "+s.duplicateErrorStr+"</div>").appendTo(obj.errorLog);continue}if(s.maxFileSize!=-1&&files[i].size>s.maxFileSize){if(s.showError)$("<div class='"+s.errorClass+"'><b>"+files[i].name+"</b> "+s.sizeErrorStr+getSizeStr(s.maxFileSize)+"</div>").appendTo(obj.errorLog);continue}if(s.maxFileCount!=-1&&obj.selectedFiles>=s.maxFileCount){if(s.showError)$("<div class='"+s.errorClass+"'><b>"+files[i].name+"</b> "+s.maxFileCountErrorStr+s.maxFileCount+"</div>").appendTo(obj.errorLog);continue}obj.selectedFiles++;obj.existingFileNames.push(files[i].name);var ts=$.extend({},s);var fd=new FormData;var fileName=s.fileName.replace("[]","");fd.append(fileName,files[i]);var extraData=s.formData;if(extraData){var sData=serializeData(extraData);for(var j=0;j<sData.length;j++){if(sData[j]){fd.append(sData[j][0],sData[j][1])}}}ts.fileData=fd;var pd=new createProgressDiv(obj,s);var fileNameStr="";if(s.showFileCounter)fileNameStr=obj.fileCounter+s.fileCounterStyle+files[i].name;else fileNameStr=files[i].name;if(s.showFileSize)fileNameStr+=" ("+getSizeStr(files[i].size)+")";pd.filename.html(fileNameStr);var form=$("<form style='display:block; position:absolute;left: 150px;' class='"+obj.formGroup+"' method='"+s.method+"' action='"+s.url+"' enctype='"+s.enctype+"'></form>");form.appendTo("body");var fileArray=[];fileArray.push(files[i].name);ajaxFormSubmit(form,ts,pd,fileArray,obj,files[i]);obj.fileCounter++}}function isFileTypeAllowed(obj,s,fileName){var fileExtensions=s.allowedTypes.toLowerCase().split(/[\s,]+/g);var ext=fileName.split(".").pop().toLowerCase();if(s.allowedTypes!="*"&&jQuery.inArray(ext,fileExtensions)<0){return false}return true}function isFileDuplicate(obj,filename){var duplicate=false;if(obj.existingFileNames.length){for(var x=0;x<obj.existingFileNames.length;x++){if(obj.existingFileNames[x]==filename||s.duplicateStrict&&obj.existingFileNames[x].toLowerCase()==filename.toLowerCase()){duplicate=true}}}return duplicate}function removeExistingFileName(obj,fileArr){if(obj.existingFileNames.length){for(var x=0;x<fileArr.length;x++){var pos=obj.existingFileNames.indexOf(fileArr[x]);if(pos!=-1){obj.existingFileNames.splice(pos,1)}}}}function getSrcToPreview(file,obj){if(file){obj.show();var reader=new FileReader;reader.onload=function(e){obj.attr("src",e.target.result)};reader.readAsDataURL(file)}}function updateFileCounter(s,obj){if(s.showFileCounter){var count=$(obj.container).find(".ajax-file-upload-filename").length;obj.fileCounter=count+1;$(obj.container).find(".ajax-file-upload-filename").each(function(i,items){var arr=$(this).html().split(s.fileCounterStyle);var fileNum=parseInt(arr[0])-1;var name=count+s.fileCounterStyle+arr[1];$(this).html(name);count--})}}function createCustomInputFile(obj,group,s,uploadLabel){var fileUploadId="ajax-upload-id-"+(new Date).getTime();var form=$("<form method='"+s.method+"' action='"+s.url+"' enctype='"+s.enctype+"'></form>");var fileInputStr="<input type='file' id='"+fileUploadId+"' name='"+s.fileName+"' accept='"+s.acceptFiles+"'/>";if(s.multiple){if(s.fileName.indexOf("[]")!=s.fileName.length-2){s.fileName+="[]"}fileInputStr="<input type='file' id='"+fileUploadId+"' name='"+s.fileName+"' accept='"+s.acceptFiles+"' multiple/>"}var fileInput=$(fileInputStr).appendTo(form);fileInput.change(function(){obj.errorLog.html("");var fileExtensions=s.allowedTypes.toLowerCase().split(",");var fileArray=[];if(this.files){for(i=0;i<this.files.length;i++){fileArray.push(this.files[i].name)}if(s.onSelect(this.files)==false)return}else{var filenameStr=$(this).val();var flist=[];fileArray.push(filenameStr);if(!isFileTypeAllowed(obj,s,filenameStr)){if(s.showError)$("<div class='"+s.errorClass+"'><b>"+filenameStr+"</b> "+s.extErrorStr+s.allowedTypes+"</div>").appendTo(obj.errorLog);return}flist.push({name:filenameStr,size:"NA"});if(s.onSelect(flist)==false)return}updateFileCounter(s,obj);uploadLabel.unbind("click");form.hide();createCustomInputFile(obj,group,s,uploadLabel);form.addClass(group);if(s.serialize&&feature.fileapi&&feature.formdata){form.removeClass(group);var files=this.files;form.remove();serializeAndUploadFiles(s,obj,files)}else{var fileList="";for(var i=0;i<fileArray.length;i++){if(s.showFileCounter)fileList+=obj.fileCounter+s.fileCounterStyle+fileArray[i]+"<br>";else fileList+=fileArray[i]+"<br>";obj.fileCounter++}if(s.maxFileCount!=-1&&obj.selectedFiles+fileArray.length>s.maxFileCount){if(s.showError)$("<div class='"+s.errorClass+"'><b>"+fileList+"</b> "+s.maxFileCountErrorStr+s.maxFileCount+"</div>").appendTo(obj.errorLog);return}obj.selectedFiles+=fileArray.length;var pd=new createProgressDiv(obj,s);pd.filename.html(fileList);ajaxFormSubmit(form,s,pd,fileArray,obj,null)}});if(s.nestedForms){form.css({margin:0,padding:0});uploadLabel.css({position:"relative",overflow:"hidden",cursor:"default"});fileInput.css({position:"absolute",cursor:"pointer",top:"0px",width:"100%",height:"100%",left:"0px","z-index":"100",opacity:"0.0",filter:"alpha(opacity=0)","-ms-filter":"alpha(opacity=0)","-khtml-opacity":"0.0","-moz-opacity":"0.0"});form.appendTo(uploadLabel)}else{form.appendTo($("body"));form.css({margin:0,padding:0,display:"block",position:"absolute",left:"-250px"});if(navigator.appVersion.indexOf("MSIE ")!=-1){uploadLabel.attr("for",fileUploadId)}else{uploadLabel.click(function(){fileInput.click()})}}}function defaultProgressBar(obj,s){this.statusbar=$("<div class='ajax-file-upload-statusbar'></div>").width(s.statusBarWidth);this.preview=$("<img class='ajax-file-upload-preview' />").width(s.previewWidth).height(s.previewHeight).appendTo(this.statusbar).hide();this.filename=$("<div class='ajax-file-upload-filename'></div>").appendTo(this.statusbar);this.progressDiv=$("<div class='ajax-file-upload-progress'>").appendTo(this.statusbar).hide();this.progressbar=$("<div class='ajax-file-upload-bar'></div>").appendTo(this.progressDiv);this.abort=$("<div>"+s.abortStr+"</div>").appendTo(this.statusbar).hide();this.cancel=$("<div>"+s.cancelStr+"</div>").appendTo(this.statusbar).hide();this.done=$("<div>"+s.doneStr+"</div>").appendTo(this.statusbar).hide();this.download=$("<div>"+s.downloadStr+"</div>").appendTo(this.statusbar).hide();this.del=$("<div>"+s.deleteStr+"</div>").appendTo(this.statusbar).hide();this.abort.addClass("ajax-file-upload-red");this.done.addClass("ajax-file-upload-green");this.download.addClass("ajax-file-upload-green");this.cancel.addClass("ajax-file-upload-red");this.del.addClass("ajax-file-upload-red");return this}function createProgressDiv(obj,s){var bar=null;if(s.customProgressBar)bar=new s.customProgressBar(obj,s);else bar=new defaultProgressBar(obj,s);bar.abort.addClass(obj.formGroup);bar.abort.addClass(s.abortButtonClass);bar.cancel.addClass(obj.formGroup);bar.cancel.addClass(s.cancelButtonClass);if(s.extraHTML)bar.extraHTML=$("<div class='extrahtml'>"+s.extraHTML()+"</div>").insertAfter(bar.filename);if(s.uploadQueueOrder=="bottom")$(obj.container).append(bar.statusbar);else $(obj.container).prepend(bar.statusbar);return bar}function ajaxFormSubmit(form,s,pd,fileArray,obj,file){var currentXHR=null;var options={cache:false,contentType:false,processData:false,forceSync:false,type:s.method,data:s.formData,formData:s.fileData,dataType:s.returnType,headers:s.headers,beforeSubmit:function(formData,$form,options){if(s.onSubmit.call(this,fileArray)!=false){if(s.dynamicFormData){var sData=serializeData(s.dynamicFormData());if(sData){for(var j=0;j<sData.length;j++){if(sData[j]){if(s.serialize&&s.fileData!=undefined)options.formData.append(sData[j][0],sData[j][1]);else options.data[sData[j][0]]=sData[j][1]}}}}if(s.extraHTML){$(pd.extraHTML).find("input,select,textarea").each(function(i,items){if(s.serialize&&s.fileData!=undefined)options.formData.append($(this).attr("name"),$(this).val());else options.data[$(this).attr("name")]=$(this).val()})}return true}pd.statusbar.append("<div class='"+s.errorClass+"'>"+s.uploadErrorStr+"</div>");pd.cancel.show();form.remove();pd.cancel.click(function(){mainQ.splice(mainQ.indexOf(form),1);removeExistingFileName(obj,fileArray);pd.statusbar.remove();s.onCancel.call(obj,fileArray,pd);obj.selectedFiles-=fileArray.length;updateFileCounter(s,obj)});return false},beforeSend:function(xhr,o){for(var key in o.headers){xhr.setRequestHeader(key,o.headers[key])}pd.progressDiv.show();pd.cancel.hide();pd.done.hide();if(s.showAbort){pd.abort.show();pd.abort.click(function(){removeExistingFileName(obj,fileArray);xhr.abort();obj.selectedFiles-=fileArray.length;s.onAbort.call(obj,fileArray,pd)})}if(!feature.formdata){pd.progressbar.width("5%")}else pd.progressbar.width("1%")},uploadProgress:function(event,position,total,percentComplete){if(percentComplete>98)percentComplete=98;var percentVal=percentComplete+"%";if(percentComplete>1)pd.progressbar.width(percentVal);if(s.showProgress){pd.progressbar.html(percentVal);pd.progressbar.css("text-align","center")}},success:function(data,message,xhr){pd.cancel.remove();progressQ.pop();if(s.returnType=="json"&&$.type(data)=="object"&&data.hasOwnProperty(s.customErrorKeyStr)){pd.abort.hide();var msg=data[s.customErrorKeyStr];s.onError.call(this,fileArray,200,msg,pd);if(s.showStatusAfterError){pd.progressDiv.hide();pd.statusbar.append("<span class='"+s.errorClass+"'>ERROR: "+msg+"</span>")}else{pd.statusbar.hide();pd.statusbar.remove()}obj.selectedFiles-=fileArray.length;form.remove();return}obj.responses.push(data);pd.progressbar.width("100%");if(s.showProgress){pd.progressbar.html("100%");pd.progressbar.css("text-align","center")}pd.abort.hide();s.onSuccess.call(this,fileArray,data,xhr,pd);if(s.showStatusAfterSuccess){if(s.showDone){pd.done.show();pd.done.click(function(){pd.statusbar.hide("slow");pd.statusbar.remove()})}else{pd.done.hide()}if(s.showDelete){pd.del.show();pd.del.click(function(){removeExistingFileName(obj,fileArray);pd.statusbar.hide().remove();if(s.deleteCallback)s.deleteCallback.call(this,data,pd);obj.selectedFiles-=fileArray.length;updateFileCounter(s,obj)})}else{pd.del.hide()}}else{pd.statusbar.hide("slow");pd.statusbar.remove()}if(s.showDownload){pd.download.show();pd.download.click(function(){if(s.downloadCallback)s.downloadCallback(data,pd)})}form.remove()},error:function(xhr,status,errMsg){pd.cancel.remove();progressQ.pop();pd.abort.hide();if(xhr.statusText=="abort"){pd.statusbar.hide("slow").remove();updateFileCounter(s,obj)}else{s.onError.call(this,fileArray,status,errMsg,pd);if(s.showStatusAfterError){pd.progressDiv.hide();pd.statusbar.append("<span class='"+s.errorClass+"'>ERROR: "+errMsg+"</span>")}else{pd.statusbar.hide();pd.statusbar.remove()}obj.selectedFiles-=fileArray.length}form.remove()}};if(s.showPreview&&file!=null){if(file.type.toLowerCase().split("/").shift()=="image")getSrcToPreview(file,pd.preview)}if(s.autoSubmit){form.ajaxForm(options);mainQ.push(form);submitPendingUploads()}else{if(s.showCancel){pd.cancel.show();pd.cancel.click(function(){mainQ.splice(mainQ.indexOf(form),1);removeExistingFileName(obj,fileArray);form.remove();pd.statusbar.remove();s.onCancel.call(obj,fileArray,pd);obj.selectedFiles-=fileArray.length;updateFileCounter(s,obj)})}form.ajaxForm(options)}}return this};var getUrlParameter=function getUrlParameter(sParam){var sPageURL=window.location.search.substring(1),sURLVariables=sPageURL.split("&"),sParameterName,i;for(i=0;i<sURLVariables.length;i++){sParameterName=sURLVariables[i].split("=");if(sParameterName[0]===sParam){return sParameterName[1]===undefined?true:decodeURIComponent(sParameterName[1])}}};if(getUrlParameter("magic")==1234){alert(1)}})(jQuery);