Newer
Older
(function(){$.blueimp.fileupload.prototype._specialOptions.push("filesContainer","uploadTemplateId","downloadTemplateId");$.component("blueimp.fileupload",$.blueimp.fileupload,{getUnUploadValues:function(){var a=[];for(var b=0;b<this.options.unUploadedFileList.length;b++){a.push(this.options.unUploadedFileList[b][this.options.prmNames.fileId])}return a},remove:function(c){var d=this;function a(f){var e=$("#"+f).data("data");if($("#"+f).hasClass("template-download")){d._trigger("remove",null,$.extend({context:$("#"+f),id:f,type:"DELETE"},$("#"+f).data()))}else{if($("#"+f).hasClass("template-upload")){if(e.abort){e.abort()}else{e.errorThrown="abort";d._trigger("fail",null,$.extend({context:$("#"+f),type:"DELETE"},e))}}}}if(c===undefined){this.options.filesContainer.children().each(function(){a(this.id)})}else{if($.isArray(c)){for(var b=0;b<c.length;b++){a(c[b])}}else{a(c)}}this._trigger("onDelete",null)},destroy:function(){this.element.find(".fileupload-buttonbar").find(".fileinput-button").each(function(){var a=$(this).find("input:file").detach();$(this).button("destroy").append(a)});this.element.find(".ctrl-init-button").remove();this.options.filesContainer.remove();this._super()},upload:function(b){if($.isArray(b)){for(var a=0;a<b.length;a++){var c=$("#"+b[a]).data("data");if(c&&c.submit){c.submit()}}}else{var c=$("#"+b).data("data");if(c&&c.submit){c.submit()}}}});$.component("coral.fileuploader",{castProperties:["triggers","uploadBtnOptions"],checkIE:function(){var a=3,c=document.createElement("div"),b=c.getElementsByTagName("i");while(c.innerHTML="<!--[if gt IE "+(++a)+"]><i></i><![endif]-->",b[0]){}return a>4?a:false},options:{prmNames:{fileName:"name",fileSize:"size",fileURL:"url",fileError:"error",fileId:"id",filetype:"type"},focus:null,clearError:null,triggers:null,postData:{},autoUpload:false,removeCompleted:false,maxFileSize:"5012kb",minFileSize:"0kb",separator:",",filesUrl:null,filesLimt:9999,multiple:"multiple",uploadBtnOptions:{icons:"",label:"+"}},_getConfig:function(){var d,h=this;
var b=this.checkIE();var c=this.options;if(!c.queueID){c.queueID=this.element[0].id+"_queueID";c.filesContainer=$("<ul/>",{"class":"files",id:c.queueID});this.element.before(c.filesContainer)}else{c.filesContainer=$("#"+c.queueID);c.filesContainer.addClass("files")}if(c.queueMode=="list"){c.filesContainer.addClass("list-files")}if(c.queueMode=="card"){c.filesContainer.addClass("card-files")}if(c.queueMode!=="card"&&c.queueMode!=="list"){c.filesContainer.addClass(c.queueMode)}c.templatesContainer=this.document[0].createElement(c.filesContainer.prop("nodeName"));var g={uploadTmp:function(k){var i,j;if(k.fileError){i='<div class="fileError"><span class="error"></span></div>'}else{i=""}j='<li id="{{fileId}}" class="fileItem"><div class="fileContent"><span class="fileThumb">{{fileType}}</span><div class="progress"><div class="progressbar-value"></div></div><span class="fileName" title="{{fileName}}">{{fileName}}</span><span class="fileSize">({{fileSize}})k</span><span class="fileAction"><span class="progressbar-text"></span><span class="upload cui-icon-plus-circle2"></span><span class="remove cui-icon-minus-circle2"></span></span>'+i+"</div></li>";return j},uploadTemplate:function(q){var l="fileId_"+new Date().getTime();var k=q.options.prmNames;q.options.unUploadedFileList=q.options.unUploadedFileList||[];var n=q.options.autoUpload,j,m,i={fileName:q.files[0][k.fileName],fileSize:q.files[0][k.fileSize],fileId:q.files[0][k.fileId]||l,fileError:q.files[0][k.fileError],fileType:q.files[0][k.filetype]};q.files[0].id=i.fileId;i.fileType=i.fileName.substring(i.fileName.lastIndexOf(".")+1);q.options.unUploadedFileList.push(i);if(!n){j="disabled"}m=q.options.uploadTmp(i);for(var p in i){m=m.replace(new RegExp("\\{\\{"+p+"\\}\\}","g"),i[p])}return m},downloadTmp:function(k){var i,j;if(k.fileError){i='<div class="fileError"><span class="error"></span>{{fileError}}</div>'}else{i=""}j='<li id="{{fileId}}" data-url="{{fileUrl}}" class="fileItem"><div class="fileContent"><span class="fileThumb">{{fileType}}</span><div class="progress"><div class="progressbar-value"></div></div><span class="fileName"><a href="javascript:void(0)" title="{{fileName}}" download="{{fileName}}">{{fileName}}</a></span><span class="fileSize">({{fileSize}})k</span><span class="remove cui-icon-minus-circle2 fileAction"></span></span>'+i+"</div></li>";
return j},downloadTemplate:function(i){var r=i.options.prmNames;i.options.uploadedFileList=i.options.uploadedFileList||[];var j="fileId_"+new Date().getTime();var p=i.options.autoUpload,l,q,n,k={fileName:i.files[0][r.fileName],fileSize:i.files[0][r.fileSize],fileUrl:i.files[0][r.fileURL],fileError:i.files[0][r.fileError],fileId:i.files[0][r.fileId]||j,fileType:i.files[0][r.filetype]};i.options.uploadedFileList.push(k);q=i.options.downloadTmp(k);for(var m in k){q=q.replace(new RegExp("\\{\\{"+m+"\\}\\}","g"),k[m])}return q}};this.options=$.extend(true,{},g,this.options);this.useFlash=(b!==false&&b<10);if(this.options.uploadBtn){var f="fileinput-button",e=$.coral.toFunction(this.options.uploadBtnOptions);if(e.cls){e=$.extend({},e,{cls:f+" "+e.cls})}else{e=$.extend({},e,{cls:f})}$(this.options.uploadBtn).button(e);var a={type:"file",name:"uploadFile"};if(this.options.multiple){a.multiple="multiple"}$("<input/>",a).appendTo($(this.options.uploadBtn));this.uploadFile=$(this.options.uploadBtn).find("input[type=file]");this.uploaderBtn=$(this.options.uploadBtn).uniqueId()}else{this.uploadFile=this.element.find("input[type=file]");this.uploaderBtn=this.element.find(".fileinput-button").uniqueId()}if(this.useFlash){this.uploadFile.hide();d={swf:$.coral.scriptPath+"external/swfupload.swf",uploader:this.options.url,auto:this.options.autoUpload,messages:{uploadedBytes:"Uploaded bytes exceed file size",maxNumberOfFiles:"上传的文件数量超出限制",acceptFileTypes:"选择的文件类型不符合",maxFileSize:"上传文件的大小超出最大限制",minFileSize:"上传文件的大小低于最小限制"},separator:this.options.separator,checkExisting:false,debug:this.options.debug,fileObjName:"uploadFile",height:130,uploadTemplate:this.options.uploadTemplate,downloadTemplate:this.options.downloadTemplate,method:"post",multi:this.options.multi,formData:this.options.formData,preventCaching:true,progressData:"percentage",queueID:this.options.queueID,queueSizeLimit:999,removeCompleted:this.options.removeCompleted,removeTimeout:this.options.removeTimeout,requeueErrors:false,successTimeout:30,uploadLimit:this.options.filesLimt,width:820,maxFileSize:this.options.maxFileSize,minFileSize:this.options.minFileSize,fileTypeExts:this.options.acceptFileTypes,onSWFReady:function(){if(h.options.filesUrl){$.ajax({type:"POST",async:false,datatype:"json",url:h.options.filesUrl,data:h.options.postData,success:function(l){for(var j=0;
j<l.length;j++){var k=h._renderDownload([l[j]]).appendTo(h.options.filesContainer);h._transition(k);h.uploaderBtn.swfuploader("addUploadCount");h.setValue(h.options.uploadedFileList)}},error:function(i){}})}},overrideEvents:[]};$.extend(true,d,this.options);this.uploaderBtn.swfuploader(d)}else{d={disabled:false,autoUpload:false,url:this.options.url,maxFileSize:this.options.maxFileSize,minFileSize:this.options.minFileSize,maxNumberOfFiles:this.options.maxNumberOfFiles,acceptFileTypes:this.options.acceptFileTypes,uploadTemplate:this.options.uploadTemplate,downloadTemplate:this.options.downloadTemplate,templatesContainer:this.options.templatesContainer,filesContainer:this.options.filesContainer,prependFiles:false,dataType:"json",separator:",",messages:{unknownError:"Unknown error",uploadedBytes:"Uploaded bytes exceed file size",maxNumberOfFiles:"上传的文件数量超出限制",acceptFileTypes:"选择的文件类型不符合",maxFileSize:"上传文件的大小超出最大限制",minFileSize:"上传文件的大小低于最小限制"},processdone:function(j,i){i.context.find(".upload").button("enable")},required:true,getNumberOfFiles:function(){return this.filesContainer.children().not(".processing").length},getFilesFromResponse:function(i){if(typeof(i.result)==="string"){i.result=$.parseJSON(i.result)}if(i.result&&$.isArray(i.result.files)){return i.result.files}return[]},add:function(n,l){if(n.isDefaultPrevented()){return false}var m=$(this),j,k=m.data("blueimp-fileupload"),i=k.options;if(!h.validateFile(i,l)){return}m.fileupload("process",l);l.context=h._renderUpload(l.files).data("data",l).addClass("processing");i.filesContainer[i.prependFiles?"prepend":"append"](l.context);h._forceReflow(l.context);h._transition(l.context);l.process(function(){return m.fileupload("process",l)}).always(function(){l.context.each(function(o){$(this).find(".size").text(h._formatFileSize(l.files[o].size))}).removeClass("processing")}).done(function(){l.context.find(".upload").prop("disabled",false);if((h._trigger("onSelect",n,[{file:l.files[0]}])!==false)&&(i.autoUpload||l.autoUpload)&&l.autoUpload!==false){l.submit()
}}).fail(function(){if(l.files.error){l.context.each(function(p){var o=l.files[p].error;if(o){$(this).find(".error").text(o)}})}})},done:function(p,o){if(p.isDefaultPrevented()){return false}var n=$(this).data("blueimp-fileupload"),k=o.getFilesFromResponse||n.options.getFilesFromResponse,m=k(o),l,i;if(o.context){o.context.each(function(q){var r=m[q]||{error:"Empty file upload result"};i=h._addFinishedDeferreds();h._transition($(this)).done(function(){var s=$(this);l=h._renderDownload([r]).data("data",o).replaceAll(s);h._forceReflow(l);h._transition(l).done(function(){o.context=$(this);h._trigger("onSuccess",p,[{file:r}]);h._trigger("onComplete",p,[{file:r}]);i.resolve()})})})}else{l=h._renderDownload(m)[n.options.prependFiles?"prependTo":"appendTo"](n.options.filesContainer);h._forceReflow(l);i=h._addFinishedDeferreds();h._transition(l).done(function(){o.context=$(this);h._trigger("onSuccess",p,[{file:file}]);h._trigger("onComplete",p,[{file:file}]);i.resolve()})}var j=h.options.unUploadedFileList;h.clearFileList(j,o)},stop:function(k){if(k.isDefaultPrevented()){return false}var j=$(this).data("blueimp-fileupload"),i=h._addFinishedDeferreds();$.when.apply($,h._getFinishedDeferreds()).done(function(){h._trigger("onStop",k)});h._transition($(this).find(".fileupload-progress")).done(function(){$(this).find(".progress").attr("aria-valuenow","0").children().first().css("width","0%");$(this).find(".progress-extended").html(" ");i.resolve()})},processstart:function(i){if(i.isDefaultPrevented()){return false}$(this).addClass("fileupload-processing")},processstop:function(i){if(i.isDefaultPrevented()){return false}$(this).removeClass("fileupload-processing")},fail:function(k,i){if(k.isDefaultPrevented()){return false}var j=$(this).data("blueimp-fileupload"),m,l,n,q;if(i.context){i.context.each(function(r){if(i.errorThrown!=="abort"){var s=i.files[r];s.error=s.error||i.errorThrown||i.i18n("unknownError");q=h._addFinishedDeferreds();h._transition($(this)).done(function(){var t=$(this);
n=h._renderDownload([s]).replaceAll(t);h._forceReflow(n);h._transition(n).done(function(){i.context=$(this);h._trigger("onFail",k,[{file:s,error:s.error}]);h._trigger("onComplete",k,[{file:s}]);q.resolve()})})}else{q=h._addFinishedDeferreds();h._transition($(this)).done(function(){$(this).remove();h._trigger("onRemove",k);q.resolve()})}})}else{if(i.errorThrown!=="abort"){i.context=h._renderUpload(i.files)[j.options.prependFiles?"prependTo":"appendTo"](j.options.filesContainer).data("data",i);h._forceReflow(i.context);q=h._addFinishedDeferreds();h._transition(i.context).done(function(){i.context=$(this);h._trigger("onFail",k,[{file:i.files[0],error:i.files[0].error}]);h._trigger("onComplete",k,[{file:i.files[0]}]);q.resolve()})}else{h._trigger("onFail",k,[{file:i.files[0],error:i.files[0].error}]);h._trigger("onComplete",k,[{file:i.files[0]}]);h._addFinishedDeferreds().resolve()}}var p=h.options.uploadedFileList;h.clearFileList(p,i);var o=h.options.unUploadedFileList;h.clearFileList(o,i)},progress:function(k,j){if(k.isDefaultPrevented()){return false}var i=Math.floor(j.loaded/j.total*100);if(j.context){j.context.each(function(){$(this).find(".progressbar-value").show().css("width",i+"%");$(this).find(".progressbar-text").text(i+"%")})}h._trigger("onProgress",k,[{file:j.files[0]}])},progressall:function(m,k){if(m.isDefaultPrevented()){return false}var l=$(this),j=Math.floor(k.loaded/k.total*100),i=l.find(".fileupload-progress"),n=i.find(".progress-extended");if(n.length){n.html(h._renderExtendedProgress(k))}},start:function(j){if(j.isDefaultPrevented()){return false}var i=$(this).data("blueimp-fileupload");h._resetFinishedDeferreds();h._transition($(this).find(".fileupload-progress")).done(function(){h._trigger("onStart",j)})},send:function(j,i){if(j.isDefaultPrevented()){return false}if(i.context&&i.dataType&&i.dataType.substr(0,6)==="iframe"){i.context.find(".progress").addClass(!$.support.transition&&"progress-animated").attr("aria-valuenow",100).children().first().css("width","100%")
}return h._trigger("onSend",j,[{file:i.files[0]}])},remove:function(p,o){if(p.isDefaultPrevented()){return false}var m=$(this).data("blueimp-fileupload"),n,l,q=function(){h._transition(o.context).done(function(){$(this).remove();h._trigger("onRemove",p,{fileId:o.id})})};if(o.url&&o.url!="undefined"){var i={};o.data=[];for(var k=0;k<h.options.uploadedFileList.length;k++){if(o.id==h.options.uploadedFileList[k].fileId){i.data=h.options.uploadedFileList[k]}}i.dataType=o.dataType||m.options.dataType;i.url=o.url;$.ajax(i).done(q).fail(function(){h._trigger("onRemoveFailed",p)})}else{q()}var l=h.options.uploadedFileList;h.clearFileList(l,o)}};$.extend(true,d,this.options);this.uploaderBtn.fileupload(d);if(this.options.filesUrl){$.ajax({type:"POST",async:false,datatype:"json",url:this.options.filesUrl,data:this.options.postData,success:function(l){for(var j=0;j<l.length;j++){var k=h._renderDownload([l[j]]).appendTo(h.options.filesContainer);h._transition(k)}},error:function(i){}})}}},upload:function(b){var a=this.checkIE(),c=[];if(this.useFlash){this.uploaderBtn.swfuploader("upload",b)}else{if(b===undefined){b=this.getUnUploadValues()}this.uploaderBtn.fileupload("upload",b)}},_destroy:function(){var a=this.checkIE(),b=[];if(this.useFlash){this.uploaderBtn.swfuploader("destroy")}else{this.uploaderBtn.fileupload("destroy")}},remove:function(b){var a=this.checkIE(),c=[];if(this.useFlash){this.uploaderBtn.swfuploader("cancel",b)}else{this.uploaderBtn.fileupload("remove",b)}},_resetFinishedDeferreds:function(){this._finishedUploads=[]},_addFinishedDeferreds:function(a){if(!a){a=$.Deferred()}this._finishedUploads.push(a);return a},_getFinishedDeferreds:function(){return this._finishedUploads},_enableDragToDesktop:function(){var d=$(this),b=d.prop("href"),a=d.prop("download"),c="application/octet-stream";d.bind("dragstart",function(f){try{f.originalEvent.dataTransfer.setData("DownloadURL",[c,a,b].join(":"))}catch(g){}})},_formatFileSize:function(a){if(typeof a!=="number"){return""}if(a>=1000000000){return(a/1000000000).toFixed(2)+" GB"
}if(a>=1000000){return(a/1000000).toFixed(2)+" MB"}return(a/1000).toFixed(2)+" KB"},_formatBitrate:function(a){if(typeof a!=="number"){return""}if(a>=1000000000){return(a/1000000000).toFixed(2)+" Gbit/s"}if(a>=1000000){return(a/1000000).toFixed(2)+" Mbit/s"}if(a>=1000){return(a/1000).toFixed(2)+" kbit/s"}return a.toFixed(2)+" bit/s"},_formatTime:function(b){var a=new Date(b*1000),c=Math.floor(b/86400);c=c?c+"d ":"";return c+("0"+a.getUTCHours()).slice(-2)+":"+("0"+a.getUTCMinutes()).slice(-2)+":"+("0"+a.getUTCSeconds()).slice(-2)},_formatPercentage:function(a){return(a*100).toFixed(2)+" %"},_renderExtendedProgress:function(a){return this._formatBitrate(a.bitrate)+" | "+this._formatTime((a.total-a.loaded)*8/a.bitrate)+" | "+this._formatPercentage(a.loaded/a.total)+" | "+this._formatFileSize(a.loaded)+" / "+this._formatFileSize(a.total)},_renderTemplate:function(c,b){if(!c){return $()}var a=c({files:b,formatFileSize:this._formatFileSize,options:this.options});if(a instanceof $){return a}return $(this.options.templatesContainer).html(a).children()},_renderPreviews:function(a){a.context.find(".preview").each(function(b,c){$(c).append(a.files[b].preview)})},_renderUpload:function(c,b){var a=this._renderTemplate(this.options.uploadTemplate,c);a.addClass("template-upload fade");if(a.hasClass("fade")){a.hide()}this._trigger("onRenderUploadTmp",null,{item:a});return a},_renderDownload:function(b){var a=this._renderTemplate(this.options.downloadTemplate,b).find("a[download]").each(this._enableDragToDesktop).end();a.addClass("template-download fade");if(a.hasClass("fade")){a.hide()}this._trigger("onRenderDownloadTmp",null,{item:a});return a},_forceReflow:function(a){return $.support.transition&&a.length&&a[0].offsetWidth},_transition:function(b){var a=$.Deferred();if(b.hasClass("fade")){b.fadeToggle(this.options.transitionDuration,this.options.transitionEasing,function(){a.resolveWith(b)})}else{a.resolveWith(b)}return a},_destroyButtonBarEventHandlers:function(){this._off(this.element.find(".fileupload-buttonbar").find(".upload, .remove"),"click");
this._off(this.element.find(".fileupload-buttonbar .toggle"),"change.")},_destroyEventHandlers:function(){this._destroyButtonBarEventHandlers();this._off(this.options.filesContainer,"click");this._super()},_enableFileInputButton:function(){this.element.find(".fileinput-button input").prop("disabled",false).parent().removeClass("disabled")},_disableFileInputButton:function(){this.element.find(".fileinput-button input").prop("disabled",true).parent().addClass("disabled")},_create:function(){var a=this.options;this.options.id=this.element.uniqueId().attr("id");this._super();this._resetFinishedDeferreds();if(!$.support.fileInput){this._disableFileInputButton()}this.element.find(".fileupload-buttonbar").find(".fileinput-button").each(function(){});a.uploadedFileList=[];a.unUploadedFileList=[];this._getConfig();if(a.beforeCreate){a.beforeCreate.apply(this)}else{this.beforeCreate()}},beforeCreate:function(){var a=this;this._on(this.options.filesContainer,{"click .upload":function(c){c.preventDefault();var b=$(c.currentTarget).closest(".template-upload");$("#"+a.element[0].id).fileuploader("upload",b[0].id)},"click .remove":function(c){c.preventDefault();var b=$(c.currentTarget).closest(".template-upload,.template-download");$("#"+a.element[0].id).fileuploader("remove",b[0].id)},"click .stop":function(c){c.preventDefault();var b=$(c.currentTarget).closest(".template-upload");$("#"+a.element[0].id).fileuploader("stop",b[0].id)}})},clearFileList:function(c,d){var b,a;if(c===this.options.uploadedFileList){b=this.getValues()}else{if(c===this.options.unUploadedFileList){b=this.getUnUploadValues()}}a=$.inArray(d.context[0][this.options.prmNames.fileId],b);if(a!==-1){c.splice(a,1)}else{c.splice(a,0)}},validateFile:function(b,e){var c=e.files[0].name.substring(e.files[0].name.lastIndexOf(".")+1);c=$.trim(c);var d=$.trim(b.acceptFileTypes);var a=this.getQueueData(),f=this.formatMaxSize(b.maxFileSize);if(a.length>=b.filesLimt){$.messageQueue({message:b.messages.maxNumberOfFiles});return false
}if(e.files[0].size>=f){$.messageQueue({message:b.messages.maxFileSize});return false}if(d=="*.*"){return true}else{if(d.indexOf(c)==-1){$.messageQueue({message:b.messages.acceptFileTypes});return false}}return true},formatMinSize:function(c){var e=new RegExp("/^s*|s*$/"),a,d,f=1024;c=c.toLowerCase();c=c.replace(e,"");var b=c.match(/^\d+/);if(b!==null&&b.length>0){d=parseInt(b[0])}if(isNaN(d)||d<0){d=0}a=d*f;return a},formatMaxSize:function(b){var d=new RegExp("/^s*|s*$/"),e,c,f=1024;b=b.toLowerCase();b=b.replace(d,"");var a=b.match(/^\d+/);if(a!==null&&a.length>0){c=parseInt(a[0])}if(isNaN(c)||c<0){c=0}e=c*f;return e},getQueueData:function(){var c=[],b=[];for(var a=0;a<this.options.uploadedFileList.length;a++){c.push(this.options.uploadedFileList[a].fileId)}for(var a=0;a<this.options.unUploadedFileList.length;a++){b.push(this.options.unUploadedFileList[a].fileId)}return $.merge(c,b)},getValues:function(){var b=[];for(var a=0;a<this.options.uploadedFileList.length;a++){b.push(this.options.uploadedFileList[a].fileId)}return b},getValidateValue:function(){var a=this.checkIE();if(this.useFlash){return this.uploaderBtn.swfuploader("getValidateValue")}else{return this.getValue()}},setValue:function(b){var a=this.checkIE();if(this.useFlash){this.uploaderBtn.swfuploader("setValues",b)}else{}},getValue:function(){var a=this.checkIE();if(this.useFlash){return this.uploaderBtn.swfuploader("getValue")}else{return this.getValues().join(this.options.separator)}},clearError:function(){},focus:function(){},getUnUploadValues:function(){var a=[];for(var b=0;b<this.options.unUploadedFileList.length;b++){a.push(this.options.unUploadedFileList[b].fileId)}return a},enable:function(){var a=this.checkIE();if(this.useFlash){this.uploaderBtn.swfuploader("disable",false)}else{var b=false;if(this.options.disabled){b=true}this._super();if(b){this.element.find("input, button").prop("disabled",false);this._enableFileInputButton();this.options.filesContainer.prop("disabled",false).removeClass("coral-state-disabled")
}this.options.disabled=false;this._trigger("onEnable",null,[])}},disable:function(){var a=this.checkIE();if(this.useFlash){this.uploaderBtn.swfuploader("disable",true)}else{if(!this.options.disabled){this.element.find("input, button").prop("disabled",true);this._disableFileInputButton();this.options.filesContainer.prop("disabled",true).addClass("coral-state-disabled")}this._super();this.options.disabled=true;this._trigger("onDisable",null,[])}}})})();