/*! * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 * @version 2.4.0 * bootstrap-fileinput * For more JQuery Plugins visit http://plugins.krajee.com */!function(e){var i='style="width:{width};height:{height};"',t=' <div class="text-center"><small>{caption}</small></div>\n',a=' <param name="controller" value="true" />\n <param name="allowFullScreen" value="true" />\n <param name="allowScriptAccess" value="always" />\n <param name="autoPlay" value="false" />\n <param name="autoStart" value="false" />\n <param name="quality" value="high" />\n',n='<div class="file-preview-other" '+i+'>\n <h2><i class="glyphicon glyphicon-file"></i></h2>\n </div>',r={main1:'{preview}\n<div class="input-group {class}">\n {caption}\n <div class="input-group-btn">\n {remove}\n {upload}\n {browse}\n </div>\n</div>',main2:"{preview}\n{remove}\n{upload}\n{browse}\n",preview:'<div class="file-preview {class}">\n <div class="close fileinput-remove text-right">×</div>\n <div class="file-preview-thumbnails"></div>\n <div class="clearfix"></div> <div class="file-preview-status text-center text-success"></div>\n</div>',caption:'<div tabindex="-1" class="form-control file-caption {class}">\n <span class="glyphicon glyphicon-file kv-caption-icon"></span><div class="file-caption-name"></div>\n</div>',modal:'<div id="{id}" class="modal fade">\n <div class="modal-dialog modal-lg">\n <div class="modal-content">\n <div class="modal-header">\n <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>\n <h3 class="modal-title">Detailed Preview <small>{title}</small></h3>\n </div>\n <div class="modal-body">\n <textarea class="form-control" style="font-family:Monaco,Consolas,monospace; height: {height}px;" readonly>{body}</textarea>\n </div>\n </div>\n </div>\n</div>\n'},l=["image","html","text","video","audio","flash","object"],o={generic:'<div class="file-preview-frame" id="{previewId}">\n {content}\n</div>\n',html:'<div class="file-preview-frame" id="{previewId}">\n <object data="{data}" type="{type}" width="{width}" height="{height}">\n '+n+"\n </object>\n"+t+"</div>",image:'<div class="file-preview-frame" id="{previewId}">\n <img src="{data}" class="file-preview-image" title="{caption}" alt="{caption}" '+i+">\n</div>\n",text:'<div class="file-preview-frame" id="{previewId}">\n <div class="file-preview-text" title="{caption}" '+i+">\n {data}\n </div>\n</div>\n",video:'<div class="file-preview-frame" id="{previewId}" title="{caption}" '+i+'>\n <video width="{width}" height="{height}" controls>\n <source src="{data}" type="{type}">\n '+n+"\n </video>\n"+t+"</div>\n",audio:'<div class="file-preview-frame" id="{previewId}" title="{caption}" '+i+'>\n <audio controls>\n <source src="{data}" type="{type}">\n '+n+"\n </audio>\n"+t+"</div>\n",flash:'<div class="file-preview-frame" id="{previewId}" title="{caption}" '+i+'>\n <object type="application/x-shockwave-flash" width="{width}" height="{height}" data="{data}">\n'+a+" "+n+"\n </object>\n"+t+"</div>\n",object:'<div class="file-preview-frame" id="{previewId}" title="{caption}" '+i+'>\n <object data="{data}" type="{type}" width="{width}" height="{height}">\n <param name="movie" value="{caption}" />\n'+a+" "+n+"\n </object>\n"+t+"</div>",other:'<div class="file-preview-frame" id="{previewId}" title="{caption}" '+i+">\n "+n+"\n"+t+"</div>"},s={image:{width:"auto",height:"160px"},html:{width:"320px",height:"180px"},text:{width:"160px",height:"160px"},video:{width:"320px",height:"240px"},audio:{width:"320px",height:"80px"},flash:{width:"320px",height:"240px"},object:{width:"320px",height:"300px"},other:{width:"160px",height:"120px"}},p={image:function(e,i){return"undefined"!=typeof e?e.match("image.*"):i.match(/\.(gif|png|jpe?g)$/i)},html:function(e,i){return"undefined"!=typeof e?"text/html"==e:i.match(/\.(htm|html)$/i)},text:function(e,i){return"undefined"!=typeof e&&e.match("text.*")||i.match(/\.(txt|md|csv|nfo|php|ini)$/i)},video:function(e,i){return"undefined"!=typeof e&&e.match(/\.video\/(ogg|mp4|webm)$/i)||i.match(/\.(og?|mp4|webm)$/i)},audio:function(e,i){return"undefined"!=typeof e&&e.match(/\.audio\/(ogg|mp3|wav)$/i)||i.match(/\.(ogg|mp3|wav)$/i)},flash:function(e,i){return"undefined"!=typeof e&&"application/x-shockwave-flash"==e||i.match(/\.(swf)$/i)},object:function(){return!0},other:function(){return!0}},d=function(i,t){return null===i||void 0===i||i==[]||""===i||t&&""===e.trim(i)},c=function(e){return Array.isArray(e)||"[object Array]"===Object.prototype.toString.call(e)},v=function(e,i){return"object"==typeof i&&e in i},m=function(i,t,a){return d(i)||d(i[t])?a:e(i[t])},u=function(){return Math.round((new Date).getTime()+100*Math.random())},g=function(){return window.File&&window.FileReader&&window.FileList&&window.Blob},w=window.URL||window.webkitURL,f=function(i,t){this.$element=e(i),g()?(this.init(t),this.listen()):this.$element.removeClass("file-loading")};f.prototype={constructor:f,init:function(e){var i=this;i.reader=null,i.showCaption=e.showCaption,i.showPreview=e.showPreview,i.maxFileSize=e.maxFileSize,i.maxFileCount=e.maxFileCount,i.msgSizeTooLarge=e.msgSizeTooLarge,i.msgFilesTooMany=e.msgFilesTooMany,i.msgFileNotFound=e.msgFileNotFound,i.msgFileNotReadable=e.msgFileNotReadable,i.msgFilePreviewAborted=e.msgFilePreviewAborted,i.msgFilePreviewError=e.msgFilePreviewError,i.msgValidationError=e.msgValidationError,i.msgErrorClass=e.msgErrorClass,i.initialDelimiter=e.initialDelimiter,i.initialPreview=e.initialPreview,i.initialCaption=e.initialCaption,i.initialPreviewCount=e.initialPreviewCount,i.initialPreviewContent=e.initialPreviewContent,i.overwriteInitial=e.overwriteInitial,i.layoutTemplates=e.layoutTemplates,i.previewTemplates=e.previewTemplates,i.allowedPreviewTypes=d(e.allowedPreviewTypes)?l:e.allowedPreviewTypes,i.allowedPreviewMimeTypes=e.allowedPreviewMimeTypes,i.previewSettings=e.previewSettings,i.fileTypeSettings=e.fileTypeSettings,i.showRemove=e.showRemove,i.showUpload=e.showUpload,i.captionClass=e.captionClass,i.previewClass=e.previewClass,i.mainClass=e.mainClass,i.mainTemplate=i.getLayoutTemplate(i.showCaption?"main1":"main2"),i.captionTemplate=i.getLayoutTemplate("caption"),i.previewGenericTemplate=i.getPreviewTemplate("generic"),i.browseLabel=e.browseLabel,i.browseIcon=e.browseIcon,i.browseClass=e.browseClass,i.removeLabel=e.removeLabel,i.removeIcon=e.removeIcon,i.removeClass=e.removeClass,i.uploadLabel=e.uploadLabel,i.uploadIcon=e.uploadIcon,i.uploadClass=e.uploadClass,i.uploadUrl=e.uploadUrl,i.msgLoading=e.msgLoading,i.msgProgress=e.msgProgress,i.msgSelected=e.msgSelected,i.previewFileType=e.previewFileType,i.wrapTextLength=e.wrapTextLength,i.wrapIndicator=e.wrapIndicator,i.isError=!1,i.isDisabled=i.$element.attr("disabled")||i.$element.attr("readonly"),d(i.$element.attr("id"))&&i.$element.attr("id",u()),"undefined"==typeof i.$container?i.$container=i.createContainer():i.refreshContainer(),i.$captionContainer=m(e,"elCaptionContainer",i.$container.find(".file-caption")),i.$caption=m(e,"elCaptionText",i.$container.find(".file-caption-name")),i.$previewContainer=m(e,"elPreviewContainer",i.$container.find(".file-preview")),i.$preview=m(e,"elPreviewImage",i.$container.find(".file-preview-thumbnails")),i.$previewStatus=m(e,"elPreviewStatus",i.$container.find(".file-preview-status"));var t=i.initialPreview;i.initialPreviewCount=c(t)?t.length:t.length>0?t.split(i.initialDelimiter).length:0,i.initPreview(),i.original={preview:i.$preview.html(),caption:i.$caption.html()},i.options=e,i.$element.removeClass("file-loading")},getLayoutTemplate:function(e){var i=this;return v(e,i.layoutTemplates)?i.layoutTemplates[e]:r[e]},getPreviewTemplate:function(e){var i=this;return v(e,i.previewTemplates)?i.previewTemplates[e]:o[e]},listen:function(){var i=this,t=i.$element,a=i.$captionContainer,n=i.$btnFile;t.on("change",e.proxy(i.change,i)),n.on("click",function(){i.clear(!1),a.focus()}),e(t[0].form).on("reset",e.proxy(i.reset,i)),i.$container.on("click",".fileinput-remove:not([disabled])",e.proxy(i.clear,i))},refresh:function(i){var t=this,a=arguments.length?e.extend(t.options,i):t.options;t.init(a)},initPreview:function(){var e=this,i="",t=e.initialPreview,a=e.initialPreviewCount,n=e.initialCaption.length,r="preview-"+u(),l=n>0?e.initialCaption:e.msgSelected.replace(/\{n\}/g,a);if(c(t)&&a>0){for(var o=0;a>o;o++)r+="-"+o,i+=e.previewGenericTemplate.replace(/\{previewId\}/g,r).replace(/\{content\}/g,t[o]);a>1&&0==n&&(l=e.msgSelected.replace(/\{n\}/g,a))}else{if(!(a>0))return n>0?(e.$caption.html(l),void e.$captionContainer.attr("title",l)):void 0;for(var s=t.split(e.initialDelimiter),o=0;a>o;o++)r+="-"+o,i+=e.previewGenericTemplate.replace(/\{previewId\}/g,r).replace(/\{content\}/g,s[o]);a>1&&0==n&&(l=e.msgSelected.replace(/\{n\}/g,a))}e.initialPreviewContent=i,e.$preview.html(i),e.$caption.html(l),e.$captionContainer.attr("title",l),e.$container.removeClass("file-input-new")},clearObjects:function(){var i=this,t=i.$preview;t.find("video audio").each(function(){this.pause(),delete this,e(this).remove()}),t.find("img object div").each(function(){delete this,e(this).remove()})},clear:function(e){var i=this;if(e&&e.preventDefault(),i.reader instanceof FileReader&&i.reader.abort(),i.$element.val(""),i.resetErrors(!0),e!==!1&&(i.$element.trigger("change"),i.$element.trigger("fileclear")),i.overwriteInitial&&(i.initialPreviewCount=0),i.overwriteInitial||d(i.initialPreviewContent)){i.clearObjects(),i.$preview.html("");var t=!i.overwriteInitial&&i.initialCaption.length>0?i.original.caption:"";i.$caption.html(t),i.$captionContainer.attr("title",""),i.$container.removeClass("file-input-new").addClass("file-input-new")}else i.showFileIcon(),i.$preview.html(i.original.preview),i.$caption.html(i.original.caption),i.$container.removeClass("file-input-new");i.hideFileIcon(),i.$element.trigger("filecleared"),i.$captionContainer.focus()},reset:function(){var e=this;e.clear(!1),e.$preview.html(e.original.preview),e.$caption.html(e.original.caption),e.$container.find(".fileinput-filename").text(""),e.$element.trigger("filereset"),e.initialPreview.length>0&&e.$container.removeClass("file-input-new")},disable:function(){var e=this;e.isDisabled=!0,e.$element.attr("disabled","disabled"),e.$container.find(".kv-fileinput-caption").addClass("file-caption-disabled"),e.$container.find(".btn-file, .fileinput-remove, .kv-fileinput-upload").attr("disabled",!0)},enable:function(){var e=this;e.isDisabled=!1,e.$element.removeAttr("disabled"),e.$container.find(".kv-fileinput-caption").removeClass("file-caption-disabled"),e.$container.find(".btn-file, .fileinput-remove, .kv-fileinput-upload").removeAttr("disabled")},hideFileIcon:function(){this.overwriteInitial&&this.$captionContainer.find(".kv-caption-icon").hide()},showFileIcon:function(){this.$captionContainer.find(".kv-caption-icon").show()},resetErrors:function(e){var i=this,t=i.$previewContainer.find(".kv-fileinput-error");i.isError=!1,e?t.fadeOut("slow"):t.remove()},showError:function(e,i,t,a){var n=this,r=n.$previewContainer.find(".kv-fileinput-error");return d(r.attr("class"))?n.$previewContainer.append('<div class="kv-fileinput-error '+n.msgErrorClass+'">'+e+"</div>"):r.html(e),r.hide(),r.fadeIn(800),n.$element.trigger("fileerror",[i,t,a]),n.$element.val(""),!0},errorHandler:function(e,i){var t=this;switch(e.target.error.code){case e.target.error.NOT_FOUND_ERR:t.addError(t.msgFileNotFound.replace(/\{name\}/g,i));break;case e.target.error.NOT_READABLE_ERR:t.addError(t.msgFileNotReadable.replace(/\{name\}/g,i));break;case e.target.error.ABORT_ERR:t.addError(t.msgFilePreviewAborted.replace(/\{name\}/g,i));break;default:t.addError(t.msgFilePreviewError.replace(/\{name\}/g,i))}},parseFileType:function(e){for(var i,t,a=0;a<l.length;a++)if(cat=l[a],i=v(cat,self.fileTypeSettings)?self.fileTypeSettings[cat]:p[cat],t=i(e.type,e.name)?cat:"",""!=t)return t;return"other"},previewDefault:function(i,t){var a=this,n=w.createObjectURL(i),r=e("#"+t),l=v("other",a.previewTemplates)?a.previewTemplates.other:o.other;a.$preview.append("\n"+l.replace(/\{previewId\}/g,t).replace(/\{caption\}/g,i.name).replace(/\{type\}/g,i.type).replace(/\{data\}/g,n)),r.on("load",function(){w.revokeObjectURL(r.attr("data"))})},previewFile:function(e,i,t,a){var a,n,r=this,l=r.parseFileType(e),p=e.name,c=r.allowedPreviewTypes,m=r.allowedPreviewMimeTypes,g=(e.type,v(l,r.previewTemplates)?r.previewTemplates[l]:o[l]),f=v(l,r.previewSettings)?r.previewSettings[l]:s[l],h=parseInt(r.wrapTextLength),b=r.wrapIndicator,y=r.$preview,C=c.indexOf(l)>=0,$=d(m)||!d(m)&&v(e.type,m);if(C&&$){if("text"==l){var x=i.target.result;if(w.revokeObjectURL(a),x.length>h){var T="text-"+u(),F=.75*window.innerHeight,P=r.getLayoutTemplate("modal").replace(/\{id\}/g,T).replace(/\{title\}/g,p).replace(/\{body\}/g,x).replace(/\{height\}/g,F);b=b.replace(/\{title\}/g,p).replace(/\{dialog\}/g,"$('#"+T+"').modal('show')"),x=x.substring(0,h-1)+b}n=g.replace(/\{previewId\}/g,t).replace(/\{caption\}/g,p).replace(/\{type\}/g,e.type).replace(/\{data\}/g,x).replace(/\{width\}/g,f.width).replace(/\{height\}/g,f.height)+P}else n=g.replace(/\{previewId\}/g,t).replace(/\{caption\}/g,p).replace(/\{type\}/g,e.type).replace(/\{data\}/g,a).replace(/\{width\}/g,f.width).replace(/\{height\}/g,f.height);y.append("\n"+n)}else r.previewDefault(e,t)},readFiles:function(e){function i(p){if(p>=m)return l.removeClass("loading"),void o.html("");var v=c+"-"+p,u=e[p],f=u.name,h=(u.size?u.size:0)/1e3,b=w.createObjectURL(u);if(h=h.toFixed(2),t.maxFileSize>0&&h>t.maxFileSize){var y=t.msgSizeTooLarge.replace(/\{name\}/g,f).replace(/\{size\}/g,h).replace(/\{maxSize\}/g,t.maxFileSize);return void(t.isError=t.showError(y,u,v,p))}return t.showPreview?void(n.length>0&&"undefined"!=typeof FileReader?(o.html(s.replace(/\{index\}/g,p+1).replace(/\{files\}/g,m)),l.addClass("loading"),r.onerror=function(e){t.errorHandler(e,f)},r.onload=function(e){t.previewFile(u,e,v,b)},r.onloadend=function(){var e=d.replace(/\{index\}/g,p+1).replace(/\{files\}/g,m).replace(/\{percent\}/g,100).replace(/\{name\}/g,f);setTimeout(function(){o.html(e),w.revokeObjectURL(b)},1e3),setTimeout(function(){i(p+1)},1500),a.trigger("fileloaded",[u,v,p])},r.onprogress=function(e){if(e.lengthComputable){var i=parseInt(e.loaded/e.total*100,10),t=d.replace(/\{index\}/g,p+1).replace(/\{files\}/g,m).replace(/\{percent\}/g,i).replace(/\{name\}/g,f);setTimeout(function(){o.html(t)},1e3)}},g(u.type,f)?r.readAsText(u):r.readAsArrayBuffer(u)):(t.previewDefault(u,v),a.trigger("fileloaded",[u,v,p]),setTimeout(i(p+1),1e3))):void setTimeout(i(p+1),1e3)}this.reader=new FileReader;var t=this,a=t.$element,n=t.$preview,r=t.reader,l=t.$previewContainer,o=t.$previewStatus,s=t.msgLoading,d=t.msgProgress,c=(t.msgSelected,t.previewFileType,parseInt(t.wrapTextLength),t.wrapIndicator,"preview-"+u()),m=e.length,g=v("text",t.fileTypeSettings)?t.fileTypeSettings.text:p.text;i(0)},change:function(e){var i,t=this,a=t.$element,n=a.val().replace(/\\/g,"/").replace(/.*\//,""),r=0,l=t.$preview,o=a.get(0).files,s=t.msgSelected,p=d(o)?1:o.length+t.initialPreviewCount;if(t.hideFileIcon(),i=void 0===e.target.files?e.target&&e.target.value?[{name:e.target.value.replace(/^.+\\/,"")}]:[]:e.target.files,0!==i.length){t.resetErrors(),l.html(""),t.overwriteInitial||l.html(t.initialPreviewContent);var r=i.length;if(t.maxFileCount>0&&r>t.maxFileCount){var c=t.msgFilesTooMany.replace(/\{m\}/g,t.maxFileCount).replace(/\{n\}/g,r);return t.isError=t.showError(c,null,null,null),t.$captionContainer.find(".kv-caption-icon").hide(),t.$caption.html(t.msgValidationError),void t.$container.removeClass("file-input-new")}t.readFiles(o),t.reader=null;var v=p>1?s.replace(/\{n\}/g,p):n;t.isError?(t.$captionContainer.find(".kv-caption-icon").hide(),v=t.msgValidationError):t.showFileIcon(),t.$caption.html(v),t.$captionContainer.attr("title",v),t.$container.removeClass("file-input-new"),a.trigger("fileselect",[p,n])}},initBrowse:function(e){var i=this;i.$btnFile=e.find(".btn-file"),i.$btnFile.append(i.$element)},createContainer:function(){var i=this,t=e(document.createElement("span")).attr({"class":"file-input file-input-new"}).html(i.renderMain());return i.$element.before(t),i.initBrowse(t),t},refreshContainer:function(){var e=this,i=e.$container;i.before(e.$element),i.html(e.renderMain()),e.initBrowse(i)},renderMain:function(){var e=this,i=e.showPreview?e.getLayoutTemplate("preview").replace(/\{class\}/g,e.previewClass):"",t=e.isDisabled?e.captionClass+" file-caption-disabled":e.captionClass,a=e.captionTemplate.replace(/\{class\}/g,t+" kv-fileinput-caption");return e.mainTemplate.replace(/\{class\}/g,e.mainClass).replace(/\{preview\}/g,i).replace(/\{caption\}/g,a).replace(/\{upload\}/g,e.renderUpload()).replace(/\{remove\}/g,e.renderRemove()).replace(/\{browse\}/g,e.renderBrowse())},renderBrowse:function(){var e=this,i=e.browseClass+" btn-file",t="";return e.isDisabled&&(t=" disabled "),'<div class="'+i+'"'+t+"> "+e.browseIcon+e.browseLabel+" </div>"},renderRemove:function(){var e=this,i=e.removeClass+" fileinput-remove fileinput-remove-button",t="";return e.showRemove?(e.isDisabled&&(t=" disabled "),'<button type="button" class="'+i+'"'+t+">"+e.removeIcon+e.removeLabel+"</button>"):""},renderUpload:function(){var e=this,i=e.uploadClass+" kv-fileinput-upload",t="",a="";return e.showUpload?(e.isDisabled&&(a=" disabled "),t=d(e.uploadUrl)?'<button type="submit" class="'+i+'"'+a+">"+e.uploadIcon+e.uploadLabel+"</button>":'<a href="'+e.uploadUrl+'" class="'+e.uploadClass+'"'+a+">"+e.uploadIcon+e.uploadLabel+"</a>"):""}},e.fn.fileinput=function(i){if(g()){var t=Array.apply(null,arguments);return t.shift(),this.each(function(){var a=e(this),n=a.data("fileinput"),r="object"==typeof i&&i;n||a.data("fileinput",n=new f(this,e.extend({},e.fn.fileinput.defaults,r,e(this).data()))),"string"==typeof i&&n[i].apply(n,t)})}},e.fn.fileinput.defaults={showCaption:!0,showPreview:!0,showRemove:!0,showUpload:!0,mainClass:"",previewClass:"",captionClass:"",mainTemplate:null,initialDelimiter:"*$$*",initialPreview:"",initialCaption:"",initialPreviewCount:0,initialPreviewContent:"",overwriteInitial:!0,layoutTemplates:r,previewTemplates:o,allowedPreviewTypes:l,allowedPreviewMimeTypes:null,previewSettings:s,fileTypeSettings:p,browseLabel:"Browse …",browseIcon:'<i class="glyphicon glyphicon-folder-open"></i> ',browseClass:"btn btn-primary",removeLabel:"Remove",removeIcon:'<i class="glyphicon glyphicon-ban-circle"></i> ',removeClass:"btn btn-default",uploadLabel:"Upload",uploadIcon:'<i class="glyphicon glyphicon-upload"></i> ',uploadClass:"btn btn-default",uploadUrl:null,maxFileSize:0,maxFileCount:0,msgSizeTooLarge:'File "{name}" (<b>{size} KB</b>) exceeds maximum allowed upload size of <b>{maxSize} KB</b>. Please retry your upload!',msgFilesTooMany:"Number of files selected for upload <b>({n})</b> exceeds maximum allowed limit of <b>{m}</b>. Please retry your upload!",msgFileNotFound:'File "{name}" not found!',msgFileNotReadable:'File "{name}" is not readable.',msgFilePreviewAborted:'File preview aborted for "{name}".',msgFilePreviewError:'An error occurred while reading the file "{name}".',msgValidationError:'<span class="text-danger"><i class="glyphicon glyphicon-exclamation-sign"></i> File Upload Error</span>',msgErrorClass:"file-error-message",msgLoading:"Loading file {index} of {files} …",msgProgress:"Loading file {index} of {files} - {name} - {percent}% completed.",msgSelected:"{n} files selected",previewFileType:"image",wrapTextLength:250,wrapIndicator:' <span class="wrap-indicator" title="{title}" onclick="{dialog}">[…]</span>',elCaptionContainer:null,elCaptionText:null,elPreviewContainer:null,elPreviewImage:null,elPreviewStatus:null},e(document).ready(function(){var i=e("input.file[type=file]"),t=null!=i.attr("type")?i.length:0;t>0&&i.fileinput()})}(window.jQuery);