forked from fyneworks/multifile
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathjQuery.MultiFile.min.js
1 lines (1 loc) · 11.8 KB
/
jQuery.MultiFile.min.js
1
/* jquery-multifile v2.3.1 @ 2017-11-20 07:11:19 */window.jQuery&&function(a){"use strict";function b(a){return a>1048576?(a/1048576).toFixed(1)+"Mb":1024==a?"1Mb":512>a?a+" bytes":(a/1024).toFixed(1)+"Kb"}function c(a){return(a.files&&a.files.length?a.files:null)||[{name:a.value,size:0,type:((a.value||"").match(/[^\.]+$/i)||[""])[0]}]}function d(a){return String(a||"").replace(/[&<>'"]/g,function(a){return"&#"+a.charCodeAt()+";"})}a.fn.MultiFile=function(e){if(!this.length)return this;if("string"==typeof arguments[0]){if(this.length>1){var f=arguments;return this.each(function(){a.fn.MultiFile.apply(a(this),f)})}return a.fn.MultiFile[arguments[0]].apply(this,a.makeArray(arguments).slice(1)||[])}"number"==typeof e&&(e={max:e}),e=a.extend({},a.fn.MultiFile.options,e||{}),a("form").not("."+e.multifileName+"_intercepted").addClass(e.multifileName+"_intercepted"),a.fn.MultiFile.options.autoIntercept&&(a.fn.MultiFile.intercept(a.fn.MultiFile.options.autoIntercept),a.fn.MultiFile.options.autoIntercept=null),this.not("."+e.multifileName+"_applied").addClass(e.multifileName+"_applied").each(function(){window.MultiFile=(window.MultiFile||0)+1;var f=window.MultiFile,g={e:this,E:a(this),clone:a(this).clone()},h=a.extend({},a.fn.MultiFile.options,e||{},(a.metadata?g.E.metadata():a.meta?g.E.data():null)||{},{});h.max>0||(h.max=g.E.attr("maxlength")),h.max>0||(h.max=(String(g.e.className.match(/\b(max|limit)\-([0-9]+)\b/gi)||[""]).match(/[0-9]+/gi)||[""])[0],h.max>0?h.max=String(h.max).match(/[0-9]+/gi)[0]:h.max=-1),h.max=new Number(h.max),h.accept=h.accept||g.E.attr("accept")||"",h.accept||(h.accept=g.e.className.match(/\b(accept\-[\w\|]+)\b/gi)||"",h.accept=new String(h.accept).replace(/^(accept|ext)\-/i,"")),h.maxsize=h.maxsize>0?h.maxsize:g.E.data("maxsize")||0,h.maxsize>0||(h.maxsize=(String(g.e.className.match(/\b(maxsize|maxload|size)\-([0-9]+)\b/gi)||[""]).match(/[0-9]+/gi)||[""])[0],h.maxsize>0?h.maxsize=String(h.maxsize).match(/[0-9]+/gi)[0]:h.maxsize=-1),h.maxfile=h.maxfile>0?h.maxfile:g.E.data("maxfile")||0,h.maxfile>0||(h.maxfile=(String(g.e.className.match(/\b(maxfile|filemax)\-([0-9]+)\b/gi)||[""]).match(/[0-9]+/gi)||[""])[0],h.maxfile>0?h.maxfile=String(h.maxfile).match(/[0-9]+/gi)[0]:h.maxfile=-1),h.maxfile>1&&(h.maxfile=1024*h.maxfile),h.maxsize>1&&(h.maxsize=1024*h.maxsize),h.max>1&&g.E.attr("multiple","multiple").prop("multiple",!0),a.extend(g,h||{}),g.STRING=a.extend({},a.fn.MultiFile.options.STRING[e.lang],e.STRING[e.lang]),a.extend(g,{n:0,slaves:[],files:[],instanceKey:String(f),generateID:function(a){return e.multifileName+"-"+g.instanceKey+(a>0?"_F"+String(a):"")},trigger:function(b,d,e,f){var g,h=e[b]||e["on"+b];return h?(f=f||e.files||c(this),a.each(f,function(a,b){g=h.apply(e.wrapper,[d,b.name,e,b])}),g):void 0}}),String(g.accept).length>1&&(g.accept=g.accept.replace(/\W+/g,"|").replace(/^\W|\W$/g,""),g.rxAccept=new RegExp("\\.("+(g.accept?g.accept:"")+")$","gi")),g.wrapID=e.multifileName+"__wrap-"+g.instanceKey,e.wrapper?g.E.closest(e.wrapper).attr("id",g.wrapID):g.E.wrap('<div class="'+e.multifileName+'__wrap" id="'+g.wrapID+'"></div>'),g.wrapper=a("#"+g.wrapID),g.e.name=g.e.name||"file"+f+"[]",g.list||(a('<div class="'+e.multifileName+'__list" id="'+e.multifileName+"__list-"+g.instanceKey+'"></div>').insertBefore(g.wrapper),g.list=a("#"+e.multifileName+"__list-"+g.instanceKey)),g.block=g.wrapper.closest("."+e.multifileName),g.block.length||(g.block=g.wrapper.prev("."+e.multifileName+"__list").andSelf().wrapAll('<div class="'+e.multifileName+'"></div>')),g.addSlave=function(d,h){g.n++,d.MultiFile=g,d.id=d.name="",d.multiple=g.clone.context.multiple,d.id=g.generateID(h),d.name=String(g.namePattern.replace(/\$name/gi,a(g.clone).attr("name")).replace(/\$id/gi,a(g.clone).attr("id")).replace(/\$g/gi,f).replace(/\$i/gi,h));var i;g.max>0&&g.files.length>g.max&&(d.disabled=!0,i=!0),g.current=d,d=a(d),d.val("").attr("value","")[0].value="",d.addClass(e.multifileName+"_applied"),d.change(function(f,i,j){a(this).blur();var k=this,l=g.files||[],m=this.files||[{name:this.value,size:0,type:((this.value||"").match(/[^\.]+$/i)||[""])[0]}],n=[],o=0,p=g.total_size||0,q=(this.files&&a(this).attr("multiple"),[]);a.each(m,function(a,b){n[n.length]=b}),g.trigger("FileSelect",this,g,n),a.each(m,function(d,e){var f=e.name,h=e.size,i=function(a){return a.replace("$ext",String(f.match(/[^\.]+$/i)||"")).replace("$file",f.match(/[^\/\\]+$/gi)).replace("$size",b(h)+" > "+b(g.maxfile))};g.accept&&f&&!f.match(g.rxAccept)&&(q[q.length]=i(g.STRING.denied),g.trigger("FileInvalid",this,g,[e])),a(g.wrapper).find("input[type=file]").not(k).each(function(){a.each(c(this),function(a,b){if(b.name){var c=(b.name||"").replace(/^C:\\fakepath\\/gi,"");(f==c||f==c.substr(c.length-f.length))&&(q[q.length]=i(g.STRING.duplicate),g.trigger("FileDuplicate",k,g,[b]))}})}),g.maxfile>0&&h>0&&h>g.maxfile&&(q[q.length]=i(g.STRING.toobig),g.trigger("FileTooBig",this,g,[e])),g.minfile>0&&h<g.minfile&&(q[q.length]=g.STRING.toolittle.replace("$size",b(h)+" < "+b(g.minfile)),g.trigger("FileTooSmall",this,g,[e]));var j=g.trigger("FileValidate",this,g,[e]);j&&""!==j&&(q[q.length]=i(j)),o+=e.size}),p+=o,n.size=o,n.total=p,n.total_length=n.length+l.length,g.max>0&&l.length+m.length>g.max&&(q[q.length]=g.STRING.toomany.replace("$max",g.max),g.trigger("FileTooMany",this,g,n)),g.min>0&&l.length+m.length<g.min&&(q[q.length]=g.STRING.toofew.replace("$min",g.min),g.trigger("FileTooFew",this,g,n)),g.maxsize>0&&p>g.maxsize&&(q[q.length]=g.STRING.toomuch.replace("$size",b(p)+" > "+b(g.maxsize)),g.trigger("FileTooMuch",this,g,n)),g.minsize>0&&p<g.minsize&&(q[q.length]=g.STRING.toolittle.replace("$size",b(p)+" < "+b(g.minsize)),g.trigger("FileTooLittle",this,g,n));var r=a(g.clone).clone();return g.removeError(),q.length>0?(e.showErrors?g.showError(q[0]):"function"==a.type(g.error)&&g.error(q[0],g),g.n--,g.addSlave(r[0],h),d.parent().prepend(r),d.remove(),!1):(g.total_size=p,m=l.concat(n),m.size=p,m.size_label=b(p),g.files=m,a(this).css({position:"absolute",top:"-3000px"}),d.after(r),g.addSlave(r[0],h+1),g.addToList(this,h,n),"function"==typeof g.afterFileSelect&&g.afterFileSelect.apply(this,[this,n,g]),void 0)}),a(d).data("MultiFile-wrapper",g.wrapper),a(g.wrapper).data("MultiFile",g),i&&a(d).attr("disabled","disabled").prop("disabled",!0)},g.addToList=function(f,h,i){g.trigger("FileAppend",f,g,i);var j=a("<span/>");a.each(i,function(c,h){var i=d(h.name),k=g.STRING,l=k.label||k.file||k.name,m=k.title||k.tooltip||k.selected,n='<img class="'+e.multifileName+'__preview" style="'+g.previewCss+'"/>',o=a(('<span class="'+e.multifileName+'__list-label" title="'+m+'"><span class="'+e.multifileName+'__list-title">'+l+"</span>"+(g.preview||a(f).is(".with-preview")?n:"")+"</span>").replace(/\$(file|name)/gi,(i.match(/[^\/\\]+$/gi)||[i])[0]).replace(/\$(ext|extension|type)/gi,(i.match(/[^\.]+$/gi)||[""])[0]).replace(/\$(size)/gi,b(h.size||0)).replace(/\$(preview)/gi,n));o.find("img."+e.multifileName+"__preview").each(function(){var a=this,b=new FileReader;b.readAsDataURL(h),b.onload=function(b){a.src=b.target.result}}),j.append(o)});var k=a('<div class="'+e.multifileName+'__list-item"></div>'),l=a('<a class="'+e.multifileName+'__remove" href="#'+g.wrapID+'">'+g.STRING.remove+"</a>").click(function(){var d=c(f);g.trigger("FileRemove",f,g,d),g.n--,g.current.disabled=!1,a(f).remove(),a(this).parent().remove(),a(g.current).css({position:"",top:""}),a(g.current).reset().val("").attr("value","")[0].value="";var e=[],h=0;return a(g.wrapper).find("input[type=file]").each(function(){a.each(c(this),function(a,b){b.name&&(e[e.length]=b,h+=b.size)})}),g.files=e,g.total_size=h,g.size_label=b(h),a(g.wrapper).data("MultiFile",g),g.trigger("afterFileRemove",f,g,d),"function"==typeof g.afterFileRemoveCallback&&g.afterFileRemoveCallback.apply(this,[f,d,g]),g.trigger("FileChange",g.current,g,e),g.removeError(),!1});g.list.append(k.append(l," ",j)),g.trigger("afterFileAppend",f,g,i),g.trigger("afterFileAppendCallback",f,g,i),g.trigger("FileChange",f,g,g.files)},g.MultiFile||g.addSlave(g.e,0),g.n++})},a.extend(a.fn.MultiFile,{data:function(){var b=a(this),c=b.data("MultiFile"),d=c?b:b.data("MultiFile-wrapper");if(!d||!d.length)return!console.error("Could not find MultiFile control wrapper");var e=d.data("MultiFile");return e?e||{}:!console.error("Could not find MultiFile data in wrapper")},reset:function(){var b=this.MultiFile("data");return b&&a(b.list).find("."+b.multifileName+"__remove").click(),a(this)},files:function(){var a=this.MultiFile("data");return a?a.files||[]:!console.log("MultiFile plugin not initialized")},size:function(){var a=this.MultiFile("data");return a?a.total_size||0:!console.log("MultiFile plugin not initialized")},count:function(){var a=this.MultiFile("data");return a?a.files?a.files.length||0:0:!console.log("MultiFile plugin not initialized")},disableEmpty:function(b){b=("string"==typeof b?b:"")||"mfD";var c=[];return a("input:file").each(function(){if(a(this).data("MultiFile-wrapper")&&a(this).data("MultiFile-wrapper").data("MultiFile")){a(this).data("MultiFile-wrapper").data("MultiFile");""===this.value&&(c[c.length]=this)}}),window.clearTimeout(a.fn.MultiFile.reEnableTimeout),a.fn.MultiFile.reEnableTimeout=window.setTimeout(a.fn.MultiFile.reEnableEmpty,500),a(c).each(function(){this.disabled=!0}).addClass(b)},reEnableEmpty:function(b){return b=("string"==typeof b?b:"")||"mfD",a("input:file."+b).removeClass(b).each(function(){this.disabled=!1})},intercepted:{},intercept:function(b,c,d){var e,f;if(d=d||[],d.constructor.toString().indexOf("Array")<0&&(d=[d]),"function"==typeof b)return a.fn.MultiFile.disableEmpty(),f=b.apply(c||window,d),setTimeout(function(){a.fn.MultiFile.reEnableEmpty()},1e3),f;b.constructor.toString().indexOf("Array")<0&&(b=[b]);for(var g=0;g<b.length;g++)e=b[g]+"",e&&function(b){a.fn.MultiFile.intercepted[b]=a.fn[b]||function(){},a.fn[b]=function(){return a.fn.MultiFile.disableEmpty(),f=a.fn.MultiFile.intercepted[b].apply(this,arguments),setTimeout(function(){a.fn.MultiFile.reEnableEmpty()},1e3),f}}(e)}}),a.fn.MultiFile.options={accept:"",max:-1,maxfile:-1,maxsize:-1,minfile:-1,minsize:-1,namePattern:"$name",preview:!1,previewCss:"max-height:100px; max-width:100px;",multifileName:"MultiFile",wrapper:"",lang:"en",showErrors:!0,STRING:{en:{remove:"x",denied:"You cannot select a $ext file.\nTry again...",file:"$file",selected:"File selected: $file",duplicate:"This file has already been selected:\n$file",toomuch:"The files selected exceed the maximum size permited ($size)",toolittle:"The files do not reach the minimum size required ($size)",toomany:"Too many files selected (max: $max)",toofew:"Too few files selected (min: $max)",toobig:"$file is too big (max $size)",toosmall:"$file is too small (min $size)"},ru:{remove:"x",denied:"Нельзя выбрать $ext файл.",file:"$file",selected:"Файл выбран: $file",duplicate:"Этот файл уже выбран:\n$file",toomuch:"Общий размер файлов выше допустимого ($size)",toolittle:"Слишком маленький размер файлов ($size)",toomany:"Максимальное кол-во файлов: $max",toofew:"Минимальное кол-во файлов: $max",toobig:"Превышен размер файла ($size)",toosmall:"Слишком маленький размер файла ($size)"}},autoIntercept:["submit","ajaxSubmit","ajaxForm","validate","valid"],error:function(a){"undefined"!=typeof console&&console.log(a),alert(a)},showError:function(b){var c=this;c.block.addClass(c.multifileName+"_status_error"),c.errors?c.errors.append(b):(c.errors=a('<div class="'+c.multifileName+'__error" />').appendTo(c.wrapper.parent()),c.errors.html(b))},removeError:function(){var a=this;a.errors&&(a.errors.remove(),delete a.errors,a.block.removeClass(a.multifileName+"_status_error"))},reset:function(){var a=this;return a.E.MultiFile("reset")}},a.fn.reset=a.fn.reset||function(){return this.each(function(){try{this.reset()}catch(a){}})},a(function(){a("input[type=file].multi").MultiFile()})}(jQuery);