!function(n,t){return"function"==typeof define&&define.amd?(define("angular-file-upload",["angular"],function(n){return t(n)}),void 0):t(n)}(angular||null,function(n){var t=n.module("angularFileUpload",[]);return t.directive("ngFileDrop",["$fileUploader",function(t){"use strict";return{link:t.isHTML5?function(n,t,i){t.bind("drop",function(t){var r=t.dataTransfer?t.dataTransfer:t.originalEvent.dataTransfer;r&&(t.preventDefault(),t.stopPropagation(),n.$broadcast("file:removeoverclass"),n.$emit("file:add",r.files,n.$eval(i.ngFileDrop)))}).bind("dragover",function(t){var i=t.dataTransfer?t.dataTransfer:t.originalEvent.dataTransfer;t.preventDefault();t.stopPropagation();i.dropEffect="copy";n.$broadcast("file:addoverclass")}).bind("dragleave",function(){n.$broadcast("file:removeoverclass")})}:n.noop}}]),t.directive("ngFileOver",function(){"use strict";return{link:function(n,t,i){n.$on("file:addoverclass",function(){t.addClass(i.ngFileOver||"ng-file-over")});n.$on("file:removeoverclass",function(){t.removeClass(i.ngFileOver||"ng-file-over")})}}}),t.directive("ngFileSelect",["$fileUploader",function(n){"use strict";return{link:function(t,i,r){n.isHTML5||i.removeAttr("multiple");i.bind("change",function(){t.$emit("file:add",n.isHTML5?this.files:this,t.$eval(r.ngFileSelect));n.isHTML5&&i.attr("multiple")&&i.prop("value",null)});i.prop("value",null)}}}]),t.factory("$fileUploader",["$compile","$rootScope","$http","$window",function(t,i,r,u){"use strict";function e(t){n.extend(this,{scope:i,url:"/",alias:"file",queue:[],headers:{},progress:null,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],isUploading:!1,_nextIndex:0,_timestamp:Date.now()},t);this.filters.unshift(this._filter);this.scope.$on("file:add",function(n,t,i){n.stopPropagation();this.addToQueue(t,i)}.bind(this));this.bind("beforeupload",f.prototype._beforeupload);this.bind("in:progress",f.prototype._progress);this.bind("in:success",f.prototype._success);this.bind("in:cancel",f.prototype._cancel);this.bind("in:error",f.prototype._error);this.bind("in:complete",f.prototype._complete);this.bind("in:progress",this._progress);this.bind("in:complete",this._complete)}function f(i){if(!e.prototype.isHTML5){var u=n.element(i.file),f=t(u.clone())(i.uploader.scope),r=u.val();i.file={lastModifiedDate:null,size:null,type:"like/"+r.slice(r.lastIndexOf(".")+1).toLowerCase(),name:r.slice(r.lastIndexOf("/")+r.lastIndexOf("\\")+2)};i._input=u;f.prop("value",null);u.css("display","none").after(f)}n.extend(this,{isReady:!1,isUploading:!1,isUploaded:!1,isSuccess:!1,isCancel:!1,isError:!1,progress:null,index:null},i)}return e.prototype={constructor:e,_filter:function(t){return n.isElement(t)?!0:!!t.size},bind:function(n,t){return this.scope.$on(this._timestamp+":"+n,t.bind(this))},trigger:function(n){arguments[0]=this._timestamp+":"+n;this.scope.$broadcast.apply(this.scope,arguments)},isHTML5:!(!u.File||!u.FormData),addToQueue:function(t,i){var r=this.queue.length,u="length"in t?t:[t];n.forEach(u,function(t){var u=this.filters.length?this.filters.every(function(n){return n.call(this,t)},this):!0,r;u&&(r=new f(n.extend({url:this.url,alias:this.alias,headers:n.copy(this.headers),formData:n.copy(this.formData),removeAfterUpload:this.removeAfterUpload,method:this.method,uploader:this,file:t},i)),this.queue.push(r),this.trigger("afteraddingfile",r))},this);this.queue.length!==r&&(this.trigger("afteraddingall",this.queue),this.progress=this._getTotalProgress());this._render();this.autoUpload&&this.uploadAll()},removeFromQueue:function(n){var i=this.getIndexOfItem(n),t=this.queue[i];t.isUploading&&t.cancel();this.queue.splice(i,1);t._destroy();this.progress=this._getTotalProgress()},clearQueue:function(){this.queue.forEach(function(n){n.isUploading&&n.cancel();n._destroy()},this);this.queue.length=0;this.progress=0},getIndexOfItem:function(t){return n.isObject(t)?this.queue.indexOf(t):t},getNotUploadedItems:function(){return this.queue.filter(function(n){return!n.isUploaded})},getReadyItems:function(){return this.queue.filter(function(n){return n.isReady&&!n.isUploading}).sort(function(n,t){return n.index-t.index})},uploadItem:function(n){var i=this.getIndexOfItem(n),t=this.queue[i],r=this.isHTML5?"_xhrTransport":"_iframeTransport";t.index=t.index||this._nextIndex++;t.isReady=!0;this.isUploading||(this.isUploading=!0,this[r](t))},cancelItem:function(n){var r=this.getIndexOfItem(n),t=this.queue[r],i=this.isHTML5?"_xhr":"_form";t[i]&&t[i].abort()},uploadAll:function(){var n=this.getNotUploadedItems().filter(function(n){return!n.isUploading});n.forEach(function(n){n.index=n.index||this._nextIndex++;n.isReady=!0},this);n.length&&this.uploadItem(n[0])},cancelAll:function(){this.getNotUploadedItems().forEach(function(n){this.cancelItem(n)},this)},_render:function(){this.scope.$$phase||this.scope.$digest()},_getTotalProgress:function(n){if(this.removeAfterUpload)return n||0;var t=this.getNotUploadedItems().length,r=t?this.queue.length-t:this.queue.length,i=100/this.queue.length,u=(n||0)*i/100;return Math.round(r*i+u)},_progress:function(n,t,i){var r=this._getTotalProgress(i);this.trigger("progressall",r);this.progress=r;this._render()},_complete:function(){var t=this.getReadyItems()[0];return this.isUploading=!1,n.isDefined(t)?(this.uploadItem(t),void 0):(this.trigger("completeall",this.queue),this.progress=this._getTotalProgress(),this._render(),void 0)},_xhrTransport:function(t){var i=t._xhr=new XMLHttpRequest,u=new FormData,r=this;this.trigger("beforeupload",t);t.formData.forEach(function(t){n.forEach(t,function(n,t){u.append(t,n)})});u.append(t.alias,t.file);i.upload.onprogress=function(n){var i=n.lengthComputable?100*n.loaded/n.total:0;r.trigger("in:progress",t,Math.round(i))};i.onload=function(){var n=r._transformResponse(i.response),u=r._isSuccessCode(i.status)?"success":"error";r.trigger("in:"+u,i,t,n);r.trigger("in:complete",i,t,n)};i.onerror=function(){r.trigger("in:error",i,t);r.trigger("in:complete",i,t)};i.onabort=function(){r.trigger("in:cancel",i,t);r.trigger("in:complete",i,t)};i.open(t.method,t.url,!0);n.forEach(t.headers,function(n,t){i.setRequestHeader(t,n)});i.send(u)},_iframeTransport:function(t){var i=n.element('<form style="display: none;" />'),r=n.element('<iframe name="iframeTransport'+Date.now()+'">'),u=t._input,f=this;t._form&&t._form.replaceWith(u);t._form=i;this.trigger("beforeupload",t);u.prop("name",t.alias);t.formData.forEach(function(t){n.forEach(t,function(t,r){i.append(n.element('<input type="hidden" name="'+r+'" value="'+t+'" />'))})});i.prop({action:t.url,method:t.method,target:r.prop("name"),enctype:"multipart/form-data",encoding:"multipart/form-data"});r.bind("load",function(){var u=r[0].contentDocument.body.innerHTML,n={response:u,status:200,dummy:!0},i=f._transformResponse(n.response);f.trigger("in:success",n,t,i);f.trigger("in:complete",n,t,i)});i.abort=function(){var n={status:0,dummy:!0};r.unbind("load").prop("src","javascript:false;");i.replaceWith(u);f.trigger("in:cancel",n,t);f.trigger("in:complete",n,t)};u.after(i);i.append(u).append(r);i[0].submit()},_isSuccessCode:function(n){return n>=200&&300>n||304===n},_transformResponse:function(n){return r.defaults.transformResponse.forEach(function(t){n=t(n)}),n}},f.prototype={constructor:f,remove:function(){this.uploader.removeFromQueue(this)},upload:function(){this.uploader.uploadItem(this)},cancel:function(){this.uploader.cancelItem(this)},_destroy:function(){this._form&&this._form.remove();this._input&&this._input.remove();delete this._form;delete this._input},_beforeupload:function(n,t){t.isReady=!0;t.isUploading=!0;t.isUploaded=!1;t.isSuccess=!1;t.isCancel=!1;t.isError=!1;t.progress=0},_progress:function(n,t,i){t.progress=i;t.uploader.trigger("progress",t,i)},_success:function(n,t,i,r){i.isReady=!1;i.isUploading=!1;i.isUploaded=!0;i.isSuccess=!0;i.isCancel=!1;i.isError=!1;i.progress=100;i.index=null;i.uploader.trigger("success",t,i,r)},_cancel:function(n,t,i){i.isReady=!1;i.isUploading=!1;i.isUploaded=!1;i.isSuccess=!1;i.isCancel=!0;i.isError=!1;i.progress=0;i.index=null;i.uploader.trigger("cancel",t,i)},_error:function(n,t,i,r){i.isReady=!1;i.isUploading=!1;i.isUploaded=!0;i.isSuccess=!1;i.isCancel=!1;i.isError=!0;i.progress=100;i.index=null;i.uploader.trigger("error",t,i,r)},_complete:function(n,t,i,r){i.uploader.trigger("complete",t,i,r);i.removeAfterUpload&&i.remove()}},{create:function(n){return new e(n)},isHTML5:e.prototype.isHTML5}}]),t})