-
Notifications
You must be signed in to change notification settings - Fork 0
/
angular-file-upload.min.js
1 lines (1 loc) · 17 KB
/
angular-file-upload.min.js
1
!function(e,t){return"function"==typeof define&&define.amd?void define("angular-file-upload",["angular"],function(e){return t(e)}):t(e)}("undefined"==typeof angular?null:angular,function(e){var t=e.module("angularFileUpload",[]);return t.value("fileUploaderOptions",{url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}).factory("FileUploader",["fileUploaderOptions","$rootScope","$http","$window","$compile",function(t,o,i,n,r){function s(o){var i=e.copy(t);e.extend(this,i,o,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter}),this.s3Upload&&this.loadS3Library()}function p(t){var o=e.isElement(t),i=o?t.value:t,n=e.isString(i)?"FakePath":"Object",r="_createFrom"+n;this[r](i)}function a(t,o,i){var n=e.isElement(o),r=n?e.element(o):null,p=n?null:o;e.extend(this,{url:t.url,alias:t.alias,headers:e.copy(t.headers),formData:e.copy(t.formData),removeAfterUpload:t.removeAfterUpload,withCredentials:t.withCredentials,method:t.method},i,{uploader:t,file:new s.FileLikeObject(o),isReady:!1,isUploading:!1,isUploaded:!1,isSuccess:!1,isCancel:!1,isError:!1,progress:0,index:null,_file:p,_input:r}),r&&this._replaceNode(r)}function l(t){e.extend(this,t),this.uploader._directives[this.prop].push(this),this._saveLinks(),this.bind()}function u(){u.super_.apply(this,arguments),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}function d(){d.super_.apply(this,arguments)}function c(){c.super_.apply(this,arguments)}return s.prototype.isHTML5=!(!n.File||!n.FormData),s.prototype.addToQueue=function(t,o,i){var n=this.isArrayLikeObject(t)?t:[t],r=this._getFilters(i),p=this.queue.length,a=[];e.forEach(n,function(e){var t=new s.FileLikeObject(e);if(this._isValidFile(t,r,o)){var i=new s.FileItem(this,e,o);a.push(i),this.queue.push(i),this._onAfterAddingFile(i)}else{var n=this.filters[this._failFilterIndex];this._onWhenAddingFileFailed(t,n,o)}},this),this.queue.length!==p&&(this._onAfterAddingAll(a),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()},s.prototype.removeFromQueue=function(e){var t=this.getIndexOfItem(e),o=this.queue[t];o.isUploading&&o.cancel(),this.queue.splice(t,1),o._destroy(),this.progress=this._getTotalProgress()},s.prototype.clearQueue=function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0},s.prototype.uploadItem=function(e){var t=this.getIndexOfItem(e),o=this.queue[t],i=this.isHTML5?"_xhrTransport":"_iframeTransport";o._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[i](o))},s.prototype.initializeS3=function(){if(e.isUndefined(AWS))throw new TypeError("AWS-SDK has not been loaded.");AWS.config.update({accessKeyId:this.s3Options.accessKeyId,secretAccessKey:this.s3Options.secretAccessKey}),AWS.config.region=this.s3Options.region,this.s3=new AWS.S3({params:{Bucket:this.s3Options.bucket}})},s.prototype.uploadItemToS3=function(t){var o,i,n=this.getIndexOfItem(t),r=this.queue[n],s=r._file,p=this,a=(new Date).getTime(),l={};if(e.isUndefined(this.s3)&&this.initializeS3(),s){if(r._prepareToUploading(),this.isUploading)return;r.isUploading=!0;var u=a+"_"+s.name,d={Key:this.s3Options.folder+u,ContentType:s.type,Body:s,ServerSideEncryption:"AES256"};this.managedUpload=this.s3.upload(d),this.managedUpload.queueSize=1,this.managedUpload.on("httpUploadProgress",function(e){var t=Math.round(e.loaded/e.total*100);p._onProgressItem(r,t)}),this.managedUpload.send(function(e,t){e?(o={message:e},p._onErrorItem(r,o,i,l)):(o={fileName:u,bucket:p.s3Options.bucket,folder:p.s3Options.folder,url:t.Location},i=200,l={"Content-Type":s.type},p._onSuccessItem(r,o,i,l),p._onCompleteItem(r,o,i,l))})}else o={message:"No file Selected"},p._onErrorItem(r,o,i,l)},s.prototype.deleteFromS3=function(t){e.isUndefined(this.s3)&&this.initializeS3();var o={Bucket:this.s3Options.bucket,Delete:{Objects:[{Key:this.s3Options.folder+t}]}};this.s3.deleteObjects(o,function(e){e&&console.log(e)})},s.prototype.deleteDirectoryS3=function(t){e.isUndefined(this.s3)&&this.initializeS3();var o=this.s3,i=[],n={Bucket:this.s3Options.bucket,Delete:{Objects:[{Key:"/"}]}};this.s3PrefixInstance=new AWS.S3({params:{Bucket:this.s3Options.bucket,Prefix:t}}),this.s3PrefixInstance.listObjects(function(e,t){if(t.Contents.length>0){{t.Contents.map(function(e){i.push({Key:e.Key})})}n.Delete.Objects=i,o.deleteObjects(n,function(e){e&&console.log(e)})}})},s.prototype.loadS3Library=function(t){var o,i=document.getElementsByTagName("script")[0],n=/^http:/.test(document.location)?"http":"https",r="aws-sdk";document.getElementById(r)||(o=document.createElement("script"),o.id="aws-sdk",o.src=n+"://sdk.amazonaws.com/js/aws-sdk-2.1.4.min.js",o.onload=function(){e.isUndefined(t)||t()},i.parentNode.insertBefore(o,i))},s.prototype.cancelItem=function(e){var t=this.getIndexOfItem(e),o=this.queue[t],i=this.isHTML5?"_xhr":"_form";o&&o.isUploading&&o[i].abort()},s.prototype.cancelS3Item=function(e){var t=this.getIndexOfItem(e),o=this.queue[t];o&&o.isUploading&&(this.managedUpload.abort(),this.managedUpload=void 0,this._onCancelItem(o,void 0,void 0,void 0),this._onCompleteItem(o,void 0,void 0,void 0))},s.prototype.uploadAll=function(){var t=this.getNotUploadedItems().filter(function(e){return!e.isUploading});t.length&&(e.forEach(t,function(e){e._prepareToUploading()}),t[0].upload())},s.prototype.cancelAll=function(){var t=this.getNotUploadedItems();e.forEach(t,function(e){e.cancel()})},s.prototype.isFile=function(e){var t=n.File;return t&&e instanceof t},s.prototype.isFileLikeObject=function(e){return e instanceof s.FileLikeObject},s.prototype.isArrayLikeObject=function(t){return e.isObject(t)&&"length"in t},s.prototype.getIndexOfItem=function(t){return e.isNumber(t)?t:this.queue.indexOf(t)},s.prototype.getNotUploadedItems=function(){return this.queue.filter(function(e){return!e.isUploaded})},s.prototype.getReadyItems=function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})},s.prototype.destroy=function(){e.forEach(this._directives,function(t){e.forEach(this._directives[t],function(e){e.destroy()},this)},this)},s.prototype.onAfterAddingAll=function(){},s.prototype.onAfterAddingFile=function(){},s.prototype.onWhenAddingFileFailed=function(){},s.prototype.onBeforeUploadItem=function(){},s.prototype.onProgressItem=function(){},s.prototype.onProgressAll=function(){},s.prototype.onSuccessItem=function(){},s.prototype.onErrorItem=function(){},s.prototype.onCancelItem=function(){},s.prototype.onCompleteItem=function(){},s.prototype.onCompleteAll=function(){},s.prototype._getTotalProgress=function(e){if(this.removeAfterUpload)return e||0;var t=this.getNotUploadedItems().length,o=t?this.queue.length-t:this.queue.length,i=100/this.queue.length,n=(e||0)*i/100;return Math.round(o*i+n)},s.prototype._getFilters=function(t){if(e.isUndefined(t))return this.filters;if(e.isArray(t))return t;var o=t.match(/[^\s,]+/g);return this.filters.filter(function(e){return-1!==o.indexOf(e.name)},this)},s.prototype._render=function(){o.$$phase||o.$apply()},s.prototype._folderFilter=function(e){return!(!e.size&&!e.type)},s.prototype._queueLimitFilter=function(){return this.queue.length<this.queueLimit},s.prototype._isValidFile=function(e,t,o){return this._failFilterIndex=-1,t.length?t.every(function(t){return this._failFilterIndex++,t.fn.call(this,e,o)},this):!0},s.prototype._isSuccessCode=function(e){return e>=200&&300>e||304===e},s.prototype._transformResponse=function(t,o){var n=this._headersGetter(o);return e.forEach(i.defaults.transformResponse,function(e){t=e(t,n)}),t},s.prototype._parseHeaders=function(t){var o,i,n,r={};return t?(e.forEach(t.split("\n"),function(e){n=e.indexOf(":"),o=e.slice(0,n).trim().toLowerCase(),i=e.slice(n+1).trim(),o&&(r[o]=r[o]?r[o]+", "+i:i)}),r):r},s.prototype._headersGetter=function(e){return function(t){return t?e[t.toLowerCase()]||null:e}},s.prototype._xhrTransport=function(t){var o=t._xhr=new XMLHttpRequest,i=new FormData,n=this;n._onBeforeUploadItem(t),e.forEach(t.formData,function(t){e.forEach(t,function(e,t){i.append(t,e)})}),i.append(t.alias,t._file,t.file.name),o.upload.onprogress=function(e){var o=Math.round(e.lengthComputable?100*e.loaded/e.total:0);n._onProgressItem(t,o)},o.onload=function(){var e=n._parseHeaders(o.getAllResponseHeaders()),i=n._transformResponse(o.response,e),r=n._isSuccessCode(o.status)?"Success":"Error",s="_on"+r+"Item";n[s](t,i,o.status,e),n._onCompleteItem(t,i,o.status,e)},o.onerror=function(){var e=n._parseHeaders(o.getAllResponseHeaders()),i=n._transformResponse(o.response,e);n._onErrorItem(t,i,o.status,e),n._onCompleteItem(t,i,o.status,e)},o.onabort=function(){var e=n._parseHeaders(o.getAllResponseHeaders()),i=n._transformResponse(o.response,e);n._onCancelItem(t,i,o.status,e),n._onCompleteItem(t,i,o.status,e)},o.open(t.method,t.url,!0),o.withCredentials=t.withCredentials,e.forEach(t.headers,function(e,t){o.setRequestHeader(t,e)}),o.send(i),this._render()},s.prototype._iframeTransport=function(t){var o=e.element('<form style="display: none;" />'),i=e.element('<iframe name="iframeTransport'+Date.now()+'">'),n=t._input,r=this;t._form&&t._form.replaceWith(n),t._form=o,r._onBeforeUploadItem(t),n.prop("name",t.alias),e.forEach(t.formData,function(t){e.forEach(t,function(t,i){var n=e.element('<input type="hidden" name="'+i+'" />');n.val(t),o.append(n)})}),o.prop({action:t.url,method:"POST",target:i.prop("name"),enctype:"multipart/form-data",encoding:"multipart/form-data"}),i.bind("load",function(){try{var e=i[0].contentDocument.body.innerHTML}catch(o){}var n={response:e,status:200,dummy:!0},s={},p=r._transformResponse(n.response,s);r._onSuccessItem(t,p,n.status,s),r._onCompleteItem(t,p,n.status,s)}),o.abort=function(){var e,s={status:0,dummy:!0},p={};i.unbind("load").prop("src","javascript:false;"),o.replaceWith(n),r._onCancelItem(t,e,s.status,p),r._onCompleteItem(t,e,s.status,p)},n.after(o),o.append(n).append(i),o[0].submit(),this._render()},s.prototype._onWhenAddingFileFailed=function(e,t,o){this.onWhenAddingFileFailed(e,t,o)},s.prototype._onAfterAddingFile=function(e){this.onAfterAddingFile(e)},s.prototype._onAfterAddingAll=function(e){this.onAfterAddingAll(e)},s.prototype._onBeforeUploadItem=function(e){e._onBeforeUpload(),this.onBeforeUploadItem(e)},s.prototype._onProgressItem=function(e,t){var o=this._getTotalProgress(t);this.progress=o,e._onProgress(t),this.onProgressItem(e,t),this.onProgressAll(o),this._render()},s.prototype._onSuccessItem=function(e,t,o,i){e._onSuccess(t,o,i),this.onSuccessItem(e,t,o,i)},s.prototype._onErrorItem=function(e,t,o,i){e._onError(t,o,i),this.onErrorItem(e,t,o,i)},s.prototype._onCancelItem=function(e,t,o,i){e._onCancel(t,o,i),this.onCancelItem(e,t,o,i)},s.prototype._onCompleteItem=function(t,o,i,n){t._onComplete(o,i,n),this.onCompleteItem(t,o,i,n);var r=this.getReadyItems()[0];return this.isUploading=!1,e.isDefined(r)?void r.upload():(this.onCompleteAll(),this.progress=this._getTotalProgress(),void this._render())},s.isFile=s.prototype.isFile,s.isFileLikeObject=s.prototype.isFileLikeObject,s.isArrayLikeObject=s.prototype.isArrayLikeObject,s.isHTML5=s.prototype.isHTML5,s.inherit=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.super_=t},s.FileLikeObject=p,s.FileItem=a,s.FileDirective=l,s.FileSelect=u,s.FileDrop=d,s.FileOver=c,p.prototype._createFromFakePath=function(e){this.lastModifiedDate=null,this.size=null,this.type="like/"+e.slice(e.lastIndexOf(".")+1).toLowerCase(),this.name=e.slice(e.lastIndexOf("/")+e.lastIndexOf("\\")+2)},p.prototype._createFromObject=function(t){this.lastModifiedDate=e.copy(t.lastModifiedDate),this.size=t.size,this.type=t.type,this.name=t.name},a.prototype.upload=function(){this.uploader.s3Upload?this.uploader.uploadItemToS3(this):this.uploader.uploadItem(this)},a.prototype.cancel=function(){this.uploader.s3Upload?this.uploader.cancelS3Item(this):this.uploader.cancelItem(this)},a.prototype.remove=function(){this.uploader.removeFromQueue(this)},a.prototype.onBeforeUpload=function(){},a.prototype.onProgress=function(){},a.prototype.onSuccess=function(){},a.prototype.onError=function(){},a.prototype.onCancel=function(){},a.prototype.onComplete=function(){},a.prototype._onBeforeUpload=function(){this.isReady=!0,this.isUploading=!0,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.onBeforeUpload()},a.prototype._onProgress=function(e){this.progress=e,this.onProgress(e)},a.prototype._onSuccess=function(e,t,o){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!0,this.isCancel=!1,this.isError=!1,this.progress=100,this.index=null,this.onSuccess(e,t,o)},a.prototype._onError=function(e,t,o){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!1,this.isCancel=!1,this.isError=!0,this.progress=0,this.index=null,this.onError(e,t,o)},a.prototype._onCancel=function(e,t,o){this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!0,this.isError=!1,this.progress=0,this.index=null,this.onCancel(e,t,o)},a.prototype._onComplete=function(e,t,o){this.onComplete(e,t,o),this.removeAfterUpload&&this.remove()},a.prototype._destroy=function(){this._input&&this._input.remove(),this._form&&this._form.remove(),delete this._form,delete this._input},a.prototype._prepareToUploading=function(){this.index=this.index||++this.uploader._nextIndex,this.isReady=!0},a.prototype._replaceNode=function(e){var t=r(e.clone())(e.scope());t.prop("value",null),e.css("display","none"),e.after(t)},l.prototype.events={},l.prototype.bind=function(){for(var e in this.events){var t=this.events[e];this.element.bind(e,this[t])}},l.prototype.unbind=function(){for(var e in this.events)this.element.unbind(e,this.events[e])},l.prototype.destroy=function(){var e=this.uploader._directives[this.prop].indexOf(this);this.uploader._directives[this.prop].splice(e,1),this.unbind()},l.prototype._saveLinks=function(){for(var e in this.events){var t=this.events[e];this[t]=this[t].bind(this)}},s.inherit(u,l),u.prototype.events={$destroy:"destroy",change:"onChange"},u.prototype.prop="select",u.prototype.getOptions=function(){},u.prototype.getFilters=function(){},u.prototype.isEmptyAfterSelection=function(){return!!this.element.attr("multiple")},u.prototype.onChange=function(){var e=this.uploader.isHTML5?this.element[0].files:this.element[0],t=this.getOptions(),o=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(e,t,o),this.isEmptyAfterSelection()&&this.element.prop("value",null)},s.inherit(d,l),d.prototype.events={$destroy:"destroy",drop:"onDrop",dragover:"onDragOver",dragleave:"onDragLeave"},d.prototype.prop="drop",d.prototype.getOptions=function(){},d.prototype.getFilters=function(){},d.prototype.onDrop=function(t){var o=this._getTransfer(t);if(o){var i=this.getOptions(),n=this.getFilters();this._preventAndStop(t),e.forEach(this.uploader._directives.over,this._removeOverClass,this),this.uploader.addToQueue(o.files,i,n)}},d.prototype.onDragOver=function(t){var o=this._getTransfer(t);this._haveFiles(o.types)&&(o.dropEffect="copy",this._preventAndStop(t),e.forEach(this.uploader._directives.over,this._addOverClass,this))},d.prototype.onDragLeave=function(t){t.currentTarget===this.element[0]&&(this._preventAndStop(t),e.forEach(this.uploader._directives.over,this._removeOverClass,this))},d.prototype._getTransfer=function(e){return e.dataTransfer?e.dataTransfer:e.originalEvent.dataTransfer},d.prototype._preventAndStop=function(e){e.preventDefault(),e.stopPropagation()},d.prototype._haveFiles=function(e){return e?e.indexOf?-1!==e.indexOf("Files"):e.contains?e.contains("Files"):!1:!1},d.prototype._addOverClass=function(e){e.addOverClass()},d.prototype._removeOverClass=function(e){e.removeOverClass()},s.inherit(c,l),c.prototype.events={$destroy:"destroy"},c.prototype.prop="over",c.prototype.overClass="nv-file-over",c.prototype.addOverClass=function(){this.element.addClass(this.getOverClass())},c.prototype.removeOverClass=function(){this.element.removeClass(this.getOverClass())},c.prototype.getOverClass=function(){return this.overClass},s}]).directive("nvFileSelect",["$parse","FileUploader",function(e,t){return{link:function(o,i,n){var r=o.$eval(n.uploader);if(!(r instanceof t))throw new TypeError('"Uploader" must be an instance of FileUploader');var s=new t.FileSelect({uploader:r,element:i});s.getOptions=e(n.options).bind(s,o),s.getFilters=function(){return n.filters}}}}]).directive("nvFileDrop",["$parse","FileUploader",function(e,t){return{link:function(o,i,n){var r=o.$eval(n.uploader);if(!(r instanceof t))throw new TypeError('"Uploader" must be an instance of FileUploader');if(r.isHTML5){var s=new t.FileDrop({uploader:r,element:i});s.getOptions=e(n.options).bind(s,o),s.getFilters=function(){return n.filters}}}}}]).directive("nvFileOver",["FileUploader",function(e){return{link:function(t,o,i){var n=t.$eval(i.uploader);if(!(n instanceof e))throw new TypeError('"Uploader" must be an instance of FileUploader');var r=new e.FileOver({uploader:n,element:o});r.getOverClass=function(){return i.overClass||this.overClass}}}}]),t});