{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///angular-file-upload.min.js","webpack:///webpack/bootstrap df22bc38c90a37d58bed","webpack:///./src/module.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","angular","value","url","alias","headers","queue","progress","autoUpload","removeAfterUpload","method","filters","formData","queueLimit","Number","MAX_VALUE","withCredentials","fileUploaderOptions","$rootScope","$http","$window","$compile","FileUploader","options","settings","copy","extend","isUploading","_nextIndex","_failFilterIndex","_directives","select","drop","over","unshift","name","fn","_queueLimitFilter","_folderFilter","FileLikeObject","fileOrInput","isInput","isElement","fakePathOrObject","postfix","isString","FileItem","uploader","some","input","element","file","isReady","isUploaded","isSuccess","isCancel","isError","index","_file","_input","_replaceNode","FileDirective","prop","push","_saveLinks","bind","FileSelect","super_","apply","arguments","isHTML5","removeAttr","FileDrop","FileOver","prototype","File","FormData","addToQueue","files","list","isArrayLikeObject","arrayOfFilters","_getFilters","count","length","addedFileItems","forEach","temp","_isValidFile","fileItem","_onAfterAddingFile","filter","_onWhenAddingFileFailed","_onAfterAddingAll","_getTotalProgress","_render","uploadAll","removeFromQueue","getIndexOfItem","item","cancel","splice","_destroy","clearQueue","remove","uploadItem","transport","_prepareToUploading","cancelItem","abort","items","getNotUploadedItems","upload","cancelAll","isFile","isFileLikeObject","isObject","isNumber","indexOf","getReadyItems","sort","item1","item2","destroy","key","object","onAfterAddingAll","fileItems","onAfterAddingFile","onWhenAddingFileFailed","onBeforeUploadItem","onProgressItem","onProgressAll","onSuccessItem","response","status","onErrorItem","onCancelItem","onCompleteItem","onCompleteAll","notUploaded","uploaded","ratio","current","Math","round","isArray","names","match","$$phase","$apply","size","type","every","_isSuccessCode","_transformResponse","headersGetter","_headersGetter","defaults","transformResponse","transformFn","_parseHeaders","val","i","parsed","split","line","slice","trim","toLowerCase","parsedHeaders","_xhrTransport","xhr","_xhr","XMLHttpRequest","form","that","_onBeforeUploadItem","obj","append","TypeError","onprogress","event","lengthComputable","total","_onProgressItem","onload","getAllResponseHeaders","gist","_onCompleteItem","onerror","_onErrorItem","onabort","_onCancelItem","open","setRequestHeader","send","_iframeTransport","iframe","Date","now","_form","replaceWith","action","target","enctype","encoding","html","contentDocument","body","innerHTML","e","dummy","_onSuccessItem","unbind","after","submit","_onBeforeUpload","_onProgress","_onSuccess","_onError","_onCancel","_onComplete","nextItem","isDefined","inherit","source","Object","create","constructor","_createFromFakePath","path","lastModifiedDate","lastIndexOf","_createFromObject","onBeforeUpload","onProgress","onSuccess","onError","onCancel","onComplete","clone","scope","css","events","$destroy","change","getOptions","getFilters","isEmptyAfterSelection","attr","onChange","dragover","dragleave","onDrop","transfer","_getTransfer","_preventAndStop","_removeOverClass","onDragOver","_haveFiles","types","dropEffect","_addOverClass","onDragLeave","currentTarget","dataTransfer","originalEvent","preventDefault","stopPropagation","contains","addOverClass","removeOverClass","overClass","addClass","getOverClass","removeClass","directive","$parse","link","attributes","$eval"],"mappings":"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","file":"angular-file-upload.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"angular-file-upload\"] = factory();\n\telse\n\t\troot[\"angular-file-upload\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"angular-file-upload\"] = factory();\n\telse\n\t\troot[\"angular-file-upload\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports) {\n\n\t'use strict';\r\n\t\r\n\t/**\r\n\t * Classes\r\n\t *\r\n\t * FileUploader\r\n\t * FileUploader.FileLikeObject\r\n\t * FileUploader.FileItem\r\n\t * FileUploader.FileDirective\r\n\t * FileUploader.FileSelect\r\n\t * FileUploader.FileDrop\r\n\t * FileUploader.FileOver\r\n\t */\r\n\tangular\r\n\t    .module('angularFileUpload', [])\r\n\t\r\n\t\r\n\t    .value('fileUploaderOptions', {\r\n\t        url: '/',\r\n\t        alias: 'file',\r\n\t        headers: {},\r\n\t        queue: [],\r\n\t        progress: 0,\r\n\t        autoUpload: false,\r\n\t        removeAfterUpload: false,\r\n\t        method: 'POST',\r\n\t        filters: [],\r\n\t        formData: [],\r\n\t        queueLimit: Number.MAX_VALUE,\r\n\t        withCredentials: false\r\n\t    })\r\n\t\r\n\t\r\n\t    .factory('FileUploader', ['fileUploaderOptions', '$rootScope', '$http', '$window', '$compile',\r\n\t        function(fileUploaderOptions, $rootScope, $http, $window, $compile) {\r\n\t            /**\r\n\t             * Creates an instance of FileUploader\r\n\t             * @param {Object} [options]\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileUploader(options) {\r\n\t                var settings = angular.copy(fileUploaderOptions);\r\n\t                angular.extend(this, settings, options, {\r\n\t                    isUploading: false,\r\n\t                    _nextIndex: 0,\r\n\t                    _failFilterIndex: -1,\r\n\t                    _directives: {select: [], drop: [], over: []}\r\n\t                });\r\n\t\r\n\t                // add default filters\r\n\t                this.filters.unshift({name: 'queueLimit', fn: this._queueLimitFilter});\r\n\t                this.filters.unshift({name: 'folder', fn: this._folderFilter});\r\n\t            }\r\n\t            /**********************\r\n\t             * PUBLIC\r\n\t             **********************/\r\n\t            /**\r\n\t             * Checks a support the html5 uploader\r\n\t             * @returns {Boolean}\r\n\t             * @readonly\r\n\t             */\r\n\t            FileUploader.prototype.isHTML5 = !!($window.File && $window.FormData);\r\n\t            /**\r\n\t             * Adds items to the queue\r\n\t             * @param {File|HTMLInputElement|Object|FileList|Array<Object>} files\r\n\t             * @param {Object} [options]\r\n\t             * @param {Array<Function>|String} filters\r\n\t             */\r\n\t            FileUploader.prototype.addToQueue = function(files, options, filters) {\r\n\t                var list = this.isArrayLikeObject(files) ? files: [files];\r\n\t                var arrayOfFilters = this._getFilters(filters);\r\n\t                var count = this.queue.length;\r\n\t                var addedFileItems = [];\r\n\t\r\n\t                angular.forEach(list, function(some /*{File|HTMLInputElement|Object}*/) {\r\n\t                    var temp = new FileUploader.FileLikeObject(some);\r\n\t\r\n\t                    if (this._isValidFile(temp, arrayOfFilters, options)) {\r\n\t                        var fileItem = new FileUploader.FileItem(this, some, options);\r\n\t                        addedFileItems.push(fileItem);\r\n\t                        this.queue.push(fileItem);\r\n\t                        this._onAfterAddingFile(fileItem);\r\n\t                    } else {\r\n\t                        var filter = arrayOfFilters[this._failFilterIndex];\r\n\t                        this._onWhenAddingFileFailed(temp, filter, options);\r\n\t                    }\r\n\t                }, this);\r\n\t\r\n\t                if(this.queue.length !== count) {\r\n\t                    this._onAfterAddingAll(addedFileItems);\r\n\t                    this.progress = this._getTotalProgress();\r\n\t                }\r\n\t\r\n\t                this._render();\r\n\t                if (this.autoUpload) this.uploadAll();\r\n\t            };\r\n\t            /**\r\n\t             * Remove items from the queue. Remove last: index = -1\r\n\t             * @param {FileItem|Number} value\r\n\t             */\r\n\t            FileUploader.prototype.removeFromQueue = function(value) {\r\n\t                var index = this.getIndexOfItem(value);\r\n\t                var item = this.queue[index];\r\n\t                if (item.isUploading) item.cancel();\r\n\t                this.queue.splice(index, 1);\r\n\t                item._destroy();\r\n\t                this.progress = this._getTotalProgress();\r\n\t            };\r\n\t            /**\r\n\t             * Clears the queue\r\n\t             */\r\n\t            FileUploader.prototype.clearQueue = function() {\r\n\t                while(this.queue.length) {\r\n\t                    this.queue[0].remove();\r\n\t                }\r\n\t                this.progress = 0;\r\n\t            };\r\n\t            /**\r\n\t             * Uploads a item from the queue\r\n\t             * @param {FileItem|Number} value\r\n\t             */\r\n\t            FileUploader.prototype.uploadItem = function(value) {\r\n\t                var index = this.getIndexOfItem(value);\r\n\t                var item = this.queue[index];\r\n\t                var transport = this.isHTML5 ? '_xhrTransport' : '_iframeTransport';\r\n\t\r\n\t                item._prepareToUploading();\r\n\t                if(this.isUploading) return;\r\n\t\r\n\t                this.isUploading = true;\r\n\t                this[transport](item);\r\n\t            };\r\n\t            /**\r\n\t             * Cancels uploading of item from the queue\r\n\t             * @param {FileItem|Number} value\r\n\t             */\r\n\t            FileUploader.prototype.cancelItem = function(value) {\r\n\t                var index = this.getIndexOfItem(value);\r\n\t                var item = this.queue[index];\r\n\t                var prop = this.isHTML5 ? '_xhr' : '_form';\r\n\t                if (item && item.isUploading) item[prop].abort();\r\n\t            };\r\n\t            /**\r\n\t             * Uploads all not uploaded items of queue\r\n\t             */\r\n\t            FileUploader.prototype.uploadAll = function() {\r\n\t                var items = this.getNotUploadedItems().filter(function(item) {\r\n\t                    return !item.isUploading;\r\n\t                });\r\n\t                if (!items.length) return;\r\n\t\r\n\t                angular.forEach(items, function(item) {\r\n\t                    item._prepareToUploading();\r\n\t                });\r\n\t                items[0].upload();\r\n\t            };\r\n\t            /**\r\n\t             * Cancels all uploads\r\n\t             */\r\n\t            FileUploader.prototype.cancelAll = function() {\r\n\t                var items = this.getNotUploadedItems();\r\n\t                angular.forEach(items, function(item) {\r\n\t                    item.cancel();\r\n\t                });\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if value an instance of File\r\n\t             * @param {*} value\r\n\t             * @returns {Boolean}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype.isFile = function(value) {\r\n\t                var fn = $window.File;\r\n\t                return (fn && value instanceof fn);\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if value an instance of FileLikeObject\r\n\t             * @param {*} value\r\n\t             * @returns {Boolean}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype.isFileLikeObject = function(value) {\r\n\t                return value instanceof FileUploader.FileLikeObject;\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if value is array like object\r\n\t             * @param {*} value\r\n\t             * @returns {Boolean}\r\n\t             */\r\n\t            FileUploader.prototype.isArrayLikeObject = function(value) {\r\n\t                return (angular.isObject(value) && 'length' in value);\r\n\t            };\r\n\t            /**\r\n\t             * Returns a index of item from the queue\r\n\t             * @param {Item|Number} value\r\n\t             * @returns {Number}\r\n\t             */\r\n\t            FileUploader.prototype.getIndexOfItem = function(value) {\r\n\t                return angular.isNumber(value) ? value : this.queue.indexOf(value);\r\n\t            };\r\n\t            /**\r\n\t             * Returns not uploaded items\r\n\t             * @returns {Array}\r\n\t             */\r\n\t            FileUploader.prototype.getNotUploadedItems = function() {\r\n\t                return this.queue.filter(function(item) {\r\n\t                    return !item.isUploaded;\r\n\t                });\r\n\t            };\r\n\t            /**\r\n\t             * Returns items ready for upload\r\n\t             * @returns {Array}\r\n\t             */\r\n\t            FileUploader.prototype.getReadyItems = function() {\r\n\t                return this.queue\r\n\t                    .filter(function(item) {\r\n\t                        return (item.isReady && !item.isUploading);\r\n\t                    })\r\n\t                    .sort(function(item1, item2) {\r\n\t                        return item1.index - item2.index;\r\n\t                    });\r\n\t            };\r\n\t            /**\r\n\t             * Destroys instance of FileUploader\r\n\t             */\r\n\t            FileUploader.prototype.destroy = function() {\r\n\t                angular.forEach(this._directives, function(key) {\r\n\t                    angular.forEach(this._directives[key], function(object) {\r\n\t                        object.destroy();\r\n\t                    }, this);\r\n\t                }, this);\r\n\t            };\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {Array} fileItems\r\n\t             */\r\n\t            FileUploader.prototype.onAfterAddingAll = function(fileItems) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} fileItem\r\n\t             */\r\n\t            FileUploader.prototype.onAfterAddingFile = function(fileItem) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {File|Object} item\r\n\t             * @param {Object} filter\r\n\t             * @param {Object} options\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype.onWhenAddingFileFailed = function(item, filter, options) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} fileItem\r\n\t             */\r\n\t            FileUploader.prototype.onBeforeUploadItem = function(fileItem) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} fileItem\r\n\t             * @param {Number} progress\r\n\t             */\r\n\t            FileUploader.prototype.onProgressItem = function(fileItem, progress) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {Number} progress\r\n\t             */\r\n\t            FileUploader.prototype.onProgressAll = function(progress) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileUploader.prototype.onSuccessItem = function(item, response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileUploader.prototype.onErrorItem = function(item, response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileUploader.prototype.onCancelItem = function(item, response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileUploader.prototype.onCompleteItem = function(item, response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             */\r\n\t            FileUploader.prototype.onCompleteAll = function() {};\r\n\t            /**********************\r\n\t             * PRIVATE\r\n\t             **********************/\r\n\t            /**\r\n\t             * Returns the total progress\r\n\t             * @param {Number} [value]\r\n\t             * @returns {Number}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._getTotalProgress = function(value) {\r\n\t                if(this.removeAfterUpload) return value || 0;\r\n\t\r\n\t                var notUploaded = this.getNotUploadedItems().length;\r\n\t                var uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\r\n\t                var ratio = 100 / this.queue.length;\r\n\t                var current = (value || 0) * ratio / 100;\r\n\t\r\n\t                return Math.round(uploaded * ratio + current);\r\n\t            };\r\n\t            /**\r\n\t             * Returns array of filters\r\n\t             * @param {Array<Function>|String} filters\r\n\t             * @returns {Array<Function>}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._getFilters = function(filters) {\r\n\t                if (!filters) return this.filters;\r\n\t                if (angular.isArray(filters)) return filters;\r\n\t                var names = filters.match(/[^\\s,]+/g);\r\n\t                return this.filters.filter(function(filter) {\r\n\t                    return names.indexOf(filter.name) !== -1;\r\n\t                }, this);\r\n\t            };\r\n\t            /**\r\n\t             * Updates html\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._render = function() {\r\n\t                if (!$rootScope.$$phase) $rootScope.$apply();\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if item is a file (not folder)\r\n\t             * @param {File|FileLikeObject} item\r\n\t             * @returns {Boolean}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._folderFilter = function(item) {\r\n\t                return !!(item.size || item.type);\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if the limit has not been reached\r\n\t             * @returns {Boolean}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._queueLimitFilter = function() {\r\n\t                return this.queue.length < this.queueLimit;\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if file pass all filters\r\n\t             * @param {File|Object} file\r\n\t             * @param {Array<Function>} filters\r\n\t             * @param {Object} options\r\n\t             * @returns {Boolean}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._isValidFile = function(file, filters, options) {\r\n\t                this._failFilterIndex = -1;\r\n\t                return !filters.length ? true : filters.every(function(filter) {\r\n\t                    this._failFilterIndex++;\r\n\t                    return filter.fn.call(this, file, options);\r\n\t                }, this);\r\n\t            };\r\n\t            /**\r\n\t             * Checks whether upload successful\r\n\t             * @param {Number} status\r\n\t             * @returns {Boolean}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._isSuccessCode = function(status) {\r\n\t                return (status >= 200 && status < 300) || status === 304;\r\n\t            };\r\n\t            /**\r\n\t             * Transforms the server response\r\n\t             * @param {*} response\r\n\t             * @param {Object} headers\r\n\t             * @returns {*}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._transformResponse = function(response, headers) {\r\n\t                var headersGetter = this._headersGetter(headers);\r\n\t                angular.forEach($http.defaults.transformResponse, function(transformFn) {\r\n\t                    response = transformFn(response, headersGetter);\r\n\t                });\r\n\t                return response;\r\n\t            };\r\n\t            /**\r\n\t             * Parsed response headers\r\n\t             * @param headers\r\n\t             * @returns {Object}\r\n\t             * @see https://github.com/angular/angular.js/blob/master/src/ng/http.js\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._parseHeaders = function(headers) {\r\n\t                var parsed = {}, key, val, i;\r\n\t\r\n\t                if (!headers) return parsed;\r\n\t\r\n\t                angular.forEach(headers.split('\\n'), function(line) {\r\n\t                    i = line.indexOf(':');\r\n\t                    key = line.slice(0, i).trim().toLowerCase();\r\n\t                    val = line.slice(i + 1).trim();\r\n\t\r\n\t                    if (key) {\r\n\t                        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n\t                    }\r\n\t                });\r\n\t\r\n\t                return parsed;\r\n\t            };\r\n\t            /**\r\n\t             * Returns function that returns headers\r\n\t             * @param {Object} parsedHeaders\r\n\t             * @returns {Function}\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._headersGetter = function(parsedHeaders) {\r\n\t                return function(name) {\r\n\t                    if (name) {\r\n\t                        return parsedHeaders[name.toLowerCase()] || null;\r\n\t                    }\r\n\t                    return parsedHeaders;\r\n\t                };\r\n\t            };\r\n\t            /**\r\n\t             * The XMLHttpRequest transport\r\n\t             * @param {FileItem} item\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._xhrTransport = function(item) {\r\n\t                var xhr = item._xhr = new XMLHttpRequest();\r\n\t                var form = new FormData();\r\n\t                var that = this;\r\n\t\r\n\t                that._onBeforeUploadItem(item);\r\n\t\r\n\t                angular.forEach(item.formData, function(obj) {\r\n\t                    angular.forEach(obj, function(value, key) {\r\n\t                        form.append(key, value);\r\n\t                    });\r\n\t                });\r\n\t\r\n\t                if ( typeof(item._file.size) != 'number' ) {\r\n\t                    throw new TypeError('The file specified is no longer valid');\r\n\t                }\r\n\t\r\n\t                form.append(item.alias, item._file, item.file.name);\r\n\t\r\n\t                xhr.upload.onprogress = function(event) {\r\n\t                    var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\r\n\t                    that._onProgressItem(item, progress);\r\n\t                };\r\n\t\r\n\t                xhr.onload = function() {\r\n\t                    var headers = that._parseHeaders(xhr.getAllResponseHeaders());\r\n\t                    var response = that._transformResponse(xhr.response, headers);\r\n\t                    var gist = that._isSuccessCode(xhr.status) ? 'Success' : 'Error';\r\n\t                    var method = '_on' + gist + 'Item';\r\n\t                    that[method](item, response, xhr.status, headers);\r\n\t                    that._onCompleteItem(item, response, xhr.status, headers);\r\n\t                };\r\n\t\r\n\t                xhr.onerror = function() {\r\n\t                    var headers = that._parseHeaders(xhr.getAllResponseHeaders());\r\n\t                    var response = that._transformResponse(xhr.response, headers);\r\n\t                    that._onErrorItem(item, response, xhr.status, headers);\r\n\t                    that._onCompleteItem(item, response, xhr.status, headers);\r\n\t                };\r\n\t\r\n\t                xhr.onabort = function() {\r\n\t                    var headers = that._parseHeaders(xhr.getAllResponseHeaders());\r\n\t                    var response = that._transformResponse(xhr.response, headers);\r\n\t                    that._onCancelItem(item, response, xhr.status, headers);\r\n\t                    that._onCompleteItem(item, response, xhr.status, headers);\r\n\t                };\r\n\t\r\n\t                xhr.open(item.method, item.url, true);\r\n\t\r\n\t                xhr.withCredentials = item.withCredentials;\r\n\t\r\n\t                angular.forEach(item.headers, function(value, name) {\r\n\t                    xhr.setRequestHeader(name, value);\r\n\t                });\r\n\t\r\n\t                xhr.send(form);\r\n\t                this._render();\r\n\t            };\r\n\t            /**\r\n\t             * The IFrame transport\r\n\t             * @param {FileItem} item\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._iframeTransport = function(item) {\r\n\t                var form = angular.element('<form style=\"display: none;\" />');\r\n\t                var iframe = angular.element('<iframe name=\"iframeTransport' + Date.now() + '\">');\r\n\t                var input = item._input;\r\n\t                var that = this;\r\n\t\r\n\t                if (item._form) item._form.replaceWith(input); // remove old form\r\n\t                item._form = form; // save link to new form\r\n\t\r\n\t                that._onBeforeUploadItem(item);\r\n\t\r\n\t                input.prop('name', item.alias);\r\n\t\r\n\t                angular.forEach(item.formData, function(obj) {\r\n\t                    angular.forEach(obj, function(value, key) {\r\n\t                        var element = angular.element('<input type=\"hidden\" name=\"' + key + '\" />');\r\n\t                        element.val(value);\r\n\t                        form.append(element);\r\n\t                    });\r\n\t                });\r\n\t\r\n\t                form.prop({\r\n\t                    action: item.url,\r\n\t                    method: 'POST',\r\n\t                    target: iframe.prop('name'),\r\n\t                    enctype: 'multipart/form-data',\r\n\t                    encoding: 'multipart/form-data' // old IE\r\n\t                });\r\n\t\r\n\t                iframe.bind('load', function() {\r\n\t                    var html = '';\r\n\t                    var status = 200;\r\n\t\r\n\t                    try {\r\n\t                        // Fix for legacy IE browsers that loads internal error page\r\n\t                        // when failed WS response received. In consequence iframe\r\n\t                        // content access denied error is thrown becouse trying to\r\n\t                        // access cross domain page. When such thing occurs notifying\r\n\t                        // with empty response object. See more info at:\r\n\t                        // http://stackoverflow.com/questions/151362/access-is-denied-error-on-accessing-iframe-document-object\r\n\t                        // Note that if non standard 4xx or 5xx error code returned\r\n\t                        // from WS then response content can be accessed without error\r\n\t                        // but 'XHR' status becomes 200. In order to avoid confusion\r\n\t                        // returning response via same 'success' event handler.\r\n\t\r\n\t                        // fixed angular.contents() for iframes\r\n\t                        html = iframe[0].contentDocument.body.innerHTML;\r\n\t                    } catch (e) {\r\n\t                        // in case we run into the access-is-denied error or we have another error on the server side\r\n\t                        // (intentional 500,40... errors), we at least say 'something went wrong' -> 500\r\n\t                        status = 500;\r\n\t                    }\r\n\t\r\n\t                    var xhr = {response: html, status: status, dummy: true};\r\n\t                    var headers = {};\r\n\t                    var response = that._transformResponse(xhr.response, headers);\r\n\t\r\n\t                    that._onSuccessItem(item, response, xhr.status, headers);\r\n\t                    that._onCompleteItem(item, response, xhr.status, headers);\r\n\t                });\r\n\t\r\n\t                form.abort = function() {\r\n\t                    var xhr = {status: 0, dummy: true};\r\n\t                    var headers = {};\r\n\t                    var response;\r\n\t\r\n\t                    iframe.unbind('load').prop('src', 'javascript:false;');\r\n\t                    form.replaceWith(input);\r\n\t\r\n\t                    that._onCancelItem(item, response, xhr.status, headers);\r\n\t                    that._onCompleteItem(item, response, xhr.status, headers);\r\n\t                };\r\n\t\r\n\t                input.after(form);\r\n\t                form.append(input).append(iframe);\r\n\t\r\n\t                form[0].submit();\r\n\t                this._render();\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {File|Object} item\r\n\t             * @param {Object} filter\r\n\t             * @param {Object} options\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onWhenAddingFileFailed = function(item, filter, options) {\r\n\t                this.onWhenAddingFileFailed(item, filter, options);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {FileItem} item\r\n\t             */\r\n\t            FileUploader.prototype._onAfterAddingFile = function(item) {\r\n\t                this.onAfterAddingFile(item);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {Array<FileItem>} items\r\n\t             */\r\n\t            FileUploader.prototype._onAfterAddingAll = function(items) {\r\n\t                this.onAfterAddingAll(items);\r\n\t            };\r\n\t            /**\r\n\t             *  Inner callback\r\n\t             * @param {FileItem} item\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onBeforeUploadItem = function(item) {\r\n\t                item._onBeforeUpload();\r\n\t                this.onBeforeUploadItem(item);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {Number} progress\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onProgressItem = function(item, progress) {\r\n\t                var total = this._getTotalProgress(progress);\r\n\t                this.progress = total;\r\n\t                item._onProgress(progress);\r\n\t                this.onProgressItem(item, progress);\r\n\t                this.onProgressAll(total);\r\n\t                this._render();\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onSuccessItem = function(item, response, status, headers) {\r\n\t                item._onSuccess(response, status, headers);\r\n\t                this.onSuccessItem(item, response, status, headers);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onErrorItem = function(item, response, status, headers) {\r\n\t                item._onError(response, status, headers);\r\n\t                this.onErrorItem(item, response, status, headers);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onCancelItem = function(item, response, status, headers) {\r\n\t                item._onCancel(response, status, headers);\r\n\t                this.onCancelItem(item, response, status, headers);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {FileItem} item\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileUploader.prototype._onCompleteItem = function(item, response, status, headers) {\r\n\t                item._onComplete(response, status, headers);\r\n\t                this.onCompleteItem(item, response, status, headers);\r\n\t\r\n\t                var nextItem = this.getReadyItems()[0];\r\n\t                this.isUploading = false;\r\n\t\r\n\t                if(angular.isDefined(nextItem)) {\r\n\t                    nextItem.upload();\r\n\t                    return;\r\n\t                }\r\n\t\r\n\t                this.onCompleteAll();\r\n\t                this.progress = this._getTotalProgress();\r\n\t                this._render();\r\n\t            };\r\n\t            /**********************\r\n\t             * STATIC\r\n\t             **********************/\r\n\t            /**\r\n\t             * @borrows FileUploader.prototype.isFile\r\n\t             */\r\n\t            FileUploader.isFile = FileUploader.prototype.isFile;\r\n\t            /**\r\n\t             * @borrows FileUploader.prototype.isFileLikeObject\r\n\t             */\r\n\t            FileUploader.isFileLikeObject = FileUploader.prototype.isFileLikeObject;\r\n\t            /**\r\n\t             * @borrows FileUploader.prototype.isArrayLikeObject\r\n\t             */\r\n\t            FileUploader.isArrayLikeObject = FileUploader.prototype.isArrayLikeObject;\r\n\t            /**\r\n\t             * @borrows FileUploader.prototype.isHTML5\r\n\t             */\r\n\t            FileUploader.isHTML5 = FileUploader.prototype.isHTML5;\r\n\t            /**\r\n\t             * Inherits a target (Class_1) by a source (Class_2)\r\n\t             * @param {Function} target\r\n\t             * @param {Function} source\r\n\t             */\r\n\t            FileUploader.inherit = function(target, source) {\r\n\t                target.prototype = Object.create(source.prototype);\r\n\t                target.prototype.constructor = target;\r\n\t                target.super_ = source;\r\n\t            };\r\n\t            FileUploader.FileLikeObject = FileLikeObject;\r\n\t            FileUploader.FileItem = FileItem;\r\n\t            FileUploader.FileDirective = FileDirective;\r\n\t            FileUploader.FileSelect = FileSelect;\r\n\t            FileUploader.FileDrop = FileDrop;\r\n\t            FileUploader.FileOver = FileOver;\r\n\t\r\n\t            // ---------------------------\r\n\t\r\n\t            /**\r\n\t             * Creates an instance of FileLikeObject\r\n\t             * @param {File|HTMLInputElement|Object} fileOrInput\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileLikeObject(fileOrInput) {\r\n\t                var isInput = angular.isElement(fileOrInput);\r\n\t                var fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;\r\n\t                var postfix = angular.isString(fakePathOrObject) ? 'FakePath' : 'Object';\r\n\t                var method = '_createFrom' + postfix;\r\n\t                this[method](fakePathOrObject);\r\n\t            }\r\n\t\r\n\t            /**\r\n\t             * Creates file like object from fake path string\r\n\t             * @param {String} path\r\n\t             * @private\r\n\t             */\r\n\t            FileLikeObject.prototype._createFromFakePath = function(path) {\r\n\t                this.lastModifiedDate = null;\r\n\t                this.size = null;\r\n\t                this.type = 'like/' + path.slice(path.lastIndexOf('.') + 1).toLowerCase();\r\n\t                this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\\\') + 2);\r\n\t            };\r\n\t            /**\r\n\t             * Creates file like object from object\r\n\t             * @param {File|FileLikeObject} object\r\n\t             * @private\r\n\t             */\r\n\t            FileLikeObject.prototype._createFromObject = function(object) {\r\n\t                this.lastModifiedDate = angular.copy(object.lastModifiedDate);\r\n\t                this.size = object.size;\r\n\t                this.type = object.type;\r\n\t                this.name = object.name;\r\n\t            };\r\n\t\r\n\t            // ---------------------------\r\n\t\r\n\t            /**\r\n\t             * Creates an instance of FileItem\r\n\t             * @param {FileUploader} uploader\r\n\t             * @param {File|HTMLInputElement|Object} some\r\n\t             * @param {Object} options\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileItem(uploader, some, options) {\r\n\t                var isInput = angular.isElement(some);\r\n\t                var input = isInput ? angular.element(some) : null;\r\n\t                var file = !isInput ? some : null;\r\n\t\r\n\t                angular.extend(this, {\r\n\t                    url: uploader.url,\r\n\t                    alias: uploader.alias,\r\n\t                    headers: angular.copy(uploader.headers),\r\n\t                    formData: angular.copy(uploader.formData),\r\n\t                    removeAfterUpload: uploader.removeAfterUpload,\r\n\t                    withCredentials: uploader.withCredentials,\r\n\t                    method: uploader.method\r\n\t                }, options, {\r\n\t                    uploader: uploader,\r\n\t                    file: new FileUploader.FileLikeObject(some),\r\n\t                    isReady: false,\r\n\t                    isUploading: false,\r\n\t                    isUploaded: false,\r\n\t                    isSuccess: false,\r\n\t                    isCancel: false,\r\n\t                    isError: false,\r\n\t                    progress: 0,\r\n\t                    index: null,\r\n\t                    _file: file,\r\n\t                    _input: input\r\n\t                });\r\n\t\r\n\t                if (input) this._replaceNode(input);\r\n\t            }\r\n\t            /**********************\r\n\t             * PUBLIC\r\n\t             **********************/\r\n\t            /**\r\n\t             * Uploads a FileItem\r\n\t             */\r\n\t            FileItem.prototype.upload = function() {\r\n\t                try {\r\n\t                    this.uploader.uploadItem(this);\r\n\t                } catch (e) {\r\n\t                    this.uploader._onCompleteItem( this, '', 0, [] );\r\n\t                    this.uploader._onErrorItem( this, '', 0, [] );\r\n\t                }\r\n\t            };\r\n\t            /**\r\n\t             * Cancels uploading of FileItem\r\n\t             */\r\n\t            FileItem.prototype.cancel = function() {\r\n\t                this.uploader.cancelItem(this);\r\n\t            };\r\n\t            /**\r\n\t             * Removes a FileItem\r\n\t             */\r\n\t            FileItem.prototype.remove = function() {\r\n\t                this.uploader.removeFromQueue(this);\r\n\t            };\r\n\t            /**\r\n\t             * Callback\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype.onBeforeUpload = function() {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {Number} progress\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype.onProgress = function(progress) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileItem.prototype.onSuccess = function(response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileItem.prototype.onError = function(response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileItem.prototype.onCancel = function(response, status, headers) {};\r\n\t            /**\r\n\t             * Callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             */\r\n\t            FileItem.prototype.onComplete = function(response, status, headers) {};\r\n\t            /**********************\r\n\t             * PRIVATE\r\n\t             **********************/\r\n\t            /**\r\n\t             * Inner callback\r\n\t             */\r\n\t            FileItem.prototype._onBeforeUpload = function() {\r\n\t                this.isReady = true;\r\n\t                this.isUploading = true;\r\n\t                this.isUploaded = false;\r\n\t                this.isSuccess = false;\r\n\t                this.isCancel = false;\r\n\t                this.isError = false;\r\n\t                this.progress = 0;\r\n\t                this.onBeforeUpload();\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {Number} progress\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._onProgress = function(progress) {\r\n\t                this.progress = progress;\r\n\t                this.onProgress(progress);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._onSuccess = function(response, status, headers) {\r\n\t                this.isReady = false;\r\n\t                this.isUploading = false;\r\n\t                this.isUploaded = true;\r\n\t                this.isSuccess = true;\r\n\t                this.isCancel = false;\r\n\t                this.isError = false;\r\n\t                this.progress = 100;\r\n\t                this.index = null;\r\n\t                this.onSuccess(response, status, headers);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._onError = function(response, status, headers) {\r\n\t                this.isReady = false;\r\n\t                this.isUploading = false;\r\n\t                this.isUploaded = true;\r\n\t                this.isSuccess = false;\r\n\t                this.isCancel = false;\r\n\t                this.isError = true;\r\n\t                this.progress = 0;\r\n\t                this.index = null;\r\n\t                this.onError(response, status, headers);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._onCancel = function(response, status, headers) {\r\n\t                this.isReady = false;\r\n\t                this.isUploading = false;\r\n\t                this.isUploaded = false;\r\n\t                this.isSuccess = false;\r\n\t                this.isCancel = true;\r\n\t                this.isError = false;\r\n\t                this.progress = 0;\r\n\t                this.index = null;\r\n\t                this.onCancel(response, status, headers);\r\n\t            };\r\n\t            /**\r\n\t             * Inner callback\r\n\t             * @param {*} response\r\n\t             * @param {Number} status\r\n\t             * @param {Object} headers\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._onComplete = function(response, status, headers) {\r\n\t                this.onComplete(response, status, headers);\r\n\t                if (this.removeAfterUpload) this.remove();\r\n\t            };\r\n\t            /**\r\n\t             * Destroys a FileItem\r\n\t             */\r\n\t            FileItem.prototype._destroy = function() {\r\n\t                if (this._input) this._input.remove();\r\n\t                if (this._form) this._form.remove();\r\n\t                delete this._form;\r\n\t                delete this._input;\r\n\t            };\r\n\t            /**\r\n\t             * Prepares to uploading\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._prepareToUploading = function() {\r\n\t                this.index = this.index || ++this.uploader._nextIndex;\r\n\t                this.isReady = true;\r\n\t            };\r\n\t            /**\r\n\t             * Replaces input element on his clone\r\n\t             * @param {JQLite|jQuery} input\r\n\t             * @private\r\n\t             */\r\n\t            FileItem.prototype._replaceNode = function(input) {\r\n\t                var clone = $compile(input.clone())(input.scope());\r\n\t                clone.prop('value', null); // FF fix\r\n\t                input.css('display', 'none');\r\n\t                input.after(clone); // remove jquery dependency\r\n\t            };\r\n\t\r\n\t            // ---------------------------\r\n\t\r\n\t            /**\r\n\t             * Creates instance of {FileDirective} object\r\n\t             * @param {Object} options\r\n\t             * @param {Object} options.uploader\r\n\t             * @param {HTMLElement} options.element\r\n\t             * @param {Object} options.events\r\n\t             * @param {String} options.prop\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileDirective(options) {\r\n\t                angular.extend(this, options);\r\n\t                this.uploader._directives[this.prop].push(this);\r\n\t                this._saveLinks();\r\n\t                this.bind();\r\n\t            }\r\n\t            /**\r\n\t             * Map of events\r\n\t             * @type {Object}\r\n\t             */\r\n\t            FileDirective.prototype.events = {};\r\n\t            /**\r\n\t             * Binds events handles\r\n\t             */\r\n\t            FileDirective.prototype.bind = function() {\r\n\t                for(var key in this.events) {\r\n\t                    var prop = this.events[key];\r\n\t                    this.element.bind(key, this[prop]);\r\n\t                }\r\n\t            };\r\n\t            /**\r\n\t             * Unbinds events handles\r\n\t             */\r\n\t            FileDirective.prototype.unbind = function() {\r\n\t                for(var key in this.events) {\r\n\t                    this.element.unbind(key, this.events[key]);\r\n\t                }\r\n\t            };\r\n\t            /**\r\n\t             * Destroys directive\r\n\t             */\r\n\t            FileDirective.prototype.destroy = function() {\r\n\t                var index = this.uploader._directives[this.prop].indexOf(this);\r\n\t                this.uploader._directives[this.prop].splice(index, 1);\r\n\t                this.unbind();\r\n\t                // this.element = null;\r\n\t            };\r\n\t            /**\r\n\t             * Saves links to functions\r\n\t             * @private\r\n\t             */\r\n\t            FileDirective.prototype._saveLinks = function() {\r\n\t                for(var key in this.events) {\r\n\t                    var prop = this.events[key];\r\n\t                    this[prop] = this[prop].bind(this);\r\n\t                }\r\n\t            };\r\n\t\r\n\t            // ---------------------------\r\n\t\r\n\t            FileUploader.inherit(FileSelect, FileDirective);\r\n\t\r\n\t            /**\r\n\t             * Creates instance of {FileSelect} object\r\n\t             * @param {Object} options\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileSelect(options) {\r\n\t                FileSelect.super_.apply(this, arguments);\r\n\t\r\n\t                if(!this.uploader.isHTML5) {\r\n\t                    this.element.removeAttr('multiple');\r\n\t                }\r\n\t                this.element.prop('value', null); // FF fix\r\n\t            }\r\n\t            /**\r\n\t             * Map of events\r\n\t             * @type {Object}\r\n\t             */\r\n\t            FileSelect.prototype.events = {\r\n\t                $destroy: 'destroy',\r\n\t                change: 'onChange'\r\n\t            };\r\n\t            /**\r\n\t             * Name of property inside uploader._directive object\r\n\t             * @type {String}\r\n\t             */\r\n\t            FileSelect.prototype.prop = 'select';\r\n\t            /**\r\n\t             * Returns options\r\n\t             * @return {Object|undefined}\r\n\t             */\r\n\t            FileSelect.prototype.getOptions = function() {};\r\n\t            /**\r\n\t             * Returns filters\r\n\t             * @return {Array<Function>|String|undefined}\r\n\t             */\r\n\t            FileSelect.prototype.getFilters = function() {};\r\n\t            /**\r\n\t             * If returns \"true\" then HTMLInputElement will be cleared\r\n\t             * @returns {Boolean}\r\n\t             */\r\n\t            FileSelect.prototype.isEmptyAfterSelection = function() {\r\n\t                return !!this.element.attr('multiple');\r\n\t            };\r\n\t            /**\r\n\t             * Event handler\r\n\t             */\r\n\t            FileSelect.prototype.onChange = function() {\r\n\t                var files = this.uploader.isHTML5 ? this.element[0].files : this.element[0];\r\n\t                var options = this.getOptions();\r\n\t                var filters = this.getFilters();\r\n\t\r\n\t                if (!this.uploader.isHTML5) this.destroy();\r\n\t                this.uploader.addToQueue(files, options, filters);\r\n\t                if (this.isEmptyAfterSelection()) this.element.prop('value', null);\r\n\t            };\r\n\t\r\n\t            // ---------------------------\r\n\t\r\n\t            FileUploader.inherit(FileDrop, FileDirective);\r\n\t\r\n\t            /**\r\n\t             * Creates instance of {FileDrop} object\r\n\t             * @param {Object} options\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileDrop(options) {\r\n\t                FileDrop.super_.apply(this, arguments);\r\n\t            }\r\n\t            /**\r\n\t             * Map of events\r\n\t             * @type {Object}\r\n\t             */\r\n\t            FileDrop.prototype.events = {\r\n\t                $destroy: 'destroy',\r\n\t                drop: 'onDrop',\r\n\t                dragover: 'onDragOver',\r\n\t                dragleave: 'onDragLeave'\r\n\t            };\r\n\t            /**\r\n\t             * Name of property inside uploader._directive object\r\n\t             * @type {String}\r\n\t             */\r\n\t            FileDrop.prototype.prop = 'drop';\r\n\t            /**\r\n\t             * Returns options\r\n\t             * @return {Object|undefined}\r\n\t             */\r\n\t            FileDrop.prototype.getOptions = function() {};\r\n\t            /**\r\n\t             * Returns filters\r\n\t             * @return {Array<Function>|String|undefined}\r\n\t             */\r\n\t            FileDrop.prototype.getFilters = function() {};\r\n\t            /**\r\n\t             * Event handler\r\n\t             */\r\n\t            FileDrop.prototype.onDrop = function(event) {\r\n\t                var transfer = this._getTransfer(event);\r\n\t                if (!transfer) return;\r\n\t                var options = this.getOptions();\r\n\t                var filters = this.getFilters();\r\n\t                this._preventAndStop(event);\r\n\t                angular.forEach(this.uploader._directives.over, this._removeOverClass, this);\r\n\t                this.uploader.addToQueue(transfer.files, options, filters);\r\n\t            };\r\n\t            /**\r\n\t             * Event handler\r\n\t             */\r\n\t            FileDrop.prototype.onDragOver = function(event) {\r\n\t                var transfer = this._getTransfer(event);\r\n\t                if(!this._haveFiles(transfer.types)) return;\r\n\t                transfer.dropEffect = 'copy';\r\n\t                this._preventAndStop(event);\r\n\t                angular.forEach(this.uploader._directives.over, this._addOverClass, this);\r\n\t            };\r\n\t            /**\r\n\t             * Event handler\r\n\t             */\r\n\t            FileDrop.prototype.onDragLeave = function(event) {\r\n\t                if (event.currentTarget === this.element[0]) return;\r\n\t                this._preventAndStop(event);\r\n\t                angular.forEach(this.uploader._directives.over, this._removeOverClass, this);\r\n\t            };\r\n\t            /**\r\n\t             * Helper\r\n\t             */\r\n\t            FileDrop.prototype._getTransfer = function(event) {\r\n\t                return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\r\n\t            };\r\n\t            /**\r\n\t             * Helper\r\n\t             */\r\n\t            FileDrop.prototype._preventAndStop = function(event) {\r\n\t                event.preventDefault();\r\n\t                event.stopPropagation();\r\n\t            };\r\n\t            /**\r\n\t             * Returns \"true\" if types contains files\r\n\t             * @param {Object} types\r\n\t             */\r\n\t            FileDrop.prototype._haveFiles = function(types) {\r\n\t                if (!types) return false;\r\n\t                if (types.indexOf) {\r\n\t                    return types.indexOf('Files') !== -1;\r\n\t                } else if(types.contains) {\r\n\t                    return types.contains('Files');\r\n\t                } else {\r\n\t                    return false;\r\n\t                }\r\n\t            };\r\n\t            /**\r\n\t             * Callback\r\n\t             */\r\n\t            FileDrop.prototype._addOverClass = function(item) {\r\n\t                item.addOverClass();\r\n\t            };\r\n\t            /**\r\n\t             * Callback\r\n\t             */\r\n\t            FileDrop.prototype._removeOverClass = function(item) {\r\n\t                item.removeOverClass();\r\n\t            };\r\n\t\r\n\t            // ---------------------------\r\n\t\r\n\t            FileUploader.inherit(FileOver, FileDirective);\r\n\t\r\n\t            /**\r\n\t             * Creates instance of {FileDrop} object\r\n\t             * @param {Object} options\r\n\t             * @constructor\r\n\t             */\r\n\t            function FileOver(options) {\r\n\t                FileOver.super_.apply(this, arguments);\r\n\t            }\r\n\t            /**\r\n\t             * Map of events\r\n\t             * @type {Object}\r\n\t             */\r\n\t            FileOver.prototype.events = {\r\n\t                $destroy: 'destroy'\r\n\t            };\r\n\t            /**\r\n\t             * Name of property inside uploader._directive object\r\n\t             * @type {String}\r\n\t             */\r\n\t            FileOver.prototype.prop = 'over';\r\n\t            /**\r\n\t             * Over class\r\n\t             * @type {string}\r\n\t             */\r\n\t            FileOver.prototype.overClass = 'nv-file-over';\r\n\t            /**\r\n\t             * Adds over class\r\n\t             */\r\n\t            FileOver.prototype.addOverClass = function() {\r\n\t                this.element.addClass(this.getOverClass());\r\n\t            };\r\n\t            /**\r\n\t             * Removes over class\r\n\t             */\r\n\t            FileOver.prototype.removeOverClass = function() {\r\n\t                this.element.removeClass(this.getOverClass());\r\n\t            };\r\n\t            /**\r\n\t             * Returns over class\r\n\t             * @returns {String}\r\n\t             */\r\n\t            FileOver.prototype.getOverClass = function() {\r\n\t                return this.overClass;\r\n\t            };\r\n\t\r\n\t            return FileUploader;\r\n\t        }])\r\n\t\r\n\t\r\n\t    .directive('nvFileSelect', ['$parse', 'FileUploader', function($parse, FileUploader) {\r\n\t        return {\r\n\t            link: function(scope, element, attributes) {\r\n\t                var uploader = scope.$eval(attributes.uploader);\r\n\t\r\n\t                if (!(uploader instanceof FileUploader)) {\r\n\t                    throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n\t                }\r\n\t\r\n\t                var object = new FileUploader.FileSelect({\r\n\t                    uploader: uploader,\r\n\t                    element: element\r\n\t                });\r\n\t\r\n\t                object.getOptions = $parse(attributes.options).bind(object, scope);\r\n\t                object.getFilters = function() {return attributes.filters;};\r\n\t            }\r\n\t        };\r\n\t    }])\r\n\t\r\n\t\r\n\t    .directive('nvFileDrop', ['$parse', 'FileUploader', function($parse, FileUploader) {\r\n\t        return {\r\n\t            link: function(scope, element, attributes) {\r\n\t                var uploader = scope.$eval(attributes.uploader);\r\n\t\r\n\t                if (!(uploader instanceof FileUploader)) {\r\n\t                    throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n\t                }\r\n\t\r\n\t                if (!uploader.isHTML5) return;\r\n\t\r\n\t                var object = new FileUploader.FileDrop({\r\n\t                    uploader: uploader,\r\n\t                    element: element\r\n\t                });\r\n\t\r\n\t                object.getOptions = $parse(attributes.options).bind(object, scope);\r\n\t                object.getFilters = function() {return attributes.filters;};\r\n\t            }\r\n\t        };\r\n\t    }])\r\n\t\r\n\t\r\n\t    .directive('nvFileOver', ['FileUploader', function(FileUploader) {\r\n\t        return {\r\n\t            link: function(scope, element, attributes) {\r\n\t                var uploader = scope.$eval(attributes.uploader);\r\n\t\r\n\t                if (!(uploader instanceof FileUploader)) {\r\n\t                    throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n\t                }\r\n\t\r\n\t                var object = new FileUploader.FileOver({\r\n\t                    uploader: uploader,\r\n\t                    element: element\r\n\t                });\r\n\t\r\n\t                object.getOverClass = function() {\r\n\t                    return attributes.overClass || this.overClass;\r\n\t                };\r\n\t            }\r\n\t        };\r\n\t    }])\r\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** angular-file-upload.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap df22bc38c90a37d58bed\n **/","'use strict';\r\n\r\n/**\r\n * Classes\r\n *\r\n * FileUploader\r\n * FileUploader.FileLikeObject\r\n * FileUploader.FileItem\r\n * FileUploader.FileDirective\r\n * FileUploader.FileSelect\r\n * FileUploader.FileDrop\r\n * FileUploader.FileOver\r\n */\r\nangular\r\n    .module('angularFileUpload', [])\r\n\r\n\r\n    .value('fileUploaderOptions', {\r\n        url: '/',\r\n        alias: 'file',\r\n        headers: {},\r\n        queue: [],\r\n        progress: 0,\r\n        autoUpload: false,\r\n        removeAfterUpload: false,\r\n        method: 'POST',\r\n        filters: [],\r\n        formData: [],\r\n        queueLimit: Number.MAX_VALUE,\r\n        withCredentials: false\r\n    })\r\n\r\n\r\n    .factory('FileUploader', ['fileUploaderOptions', '$rootScope', '$http', '$window', '$compile',\r\n        function(fileUploaderOptions, $rootScope, $http, $window, $compile) {\r\n            /**\r\n             * Creates an instance of FileUploader\r\n             * @param {Object} [options]\r\n             * @constructor\r\n             */\r\n            function FileUploader(options) {\r\n                var settings = angular.copy(fileUploaderOptions);\r\n                angular.extend(this, settings, options, {\r\n                    isUploading: false,\r\n                    _nextIndex: 0,\r\n                    _failFilterIndex: -1,\r\n                    _directives: {select: [], drop: [], over: []}\r\n                });\r\n\r\n                // add default filters\r\n                this.filters.unshift({name: 'queueLimit', fn: this._queueLimitFilter});\r\n                this.filters.unshift({name: 'folder', fn: this._folderFilter});\r\n            }\r\n            /**********************\r\n             * PUBLIC\r\n             **********************/\r\n            /**\r\n             * Checks a support the html5 uploader\r\n             * @returns {Boolean}\r\n             * @readonly\r\n             */\r\n            FileUploader.prototype.isHTML5 = !!($window.File && $window.FormData);\r\n            /**\r\n             * Adds items to the queue\r\n             * @param {File|HTMLInputElement|Object|FileList|Array<Object>} files\r\n             * @param {Object} [options]\r\n             * @param {Array<Function>|String} filters\r\n             */\r\n            FileUploader.prototype.addToQueue = function(files, options, filters) {\r\n                var list = this.isArrayLikeObject(files) ? files: [files];\r\n                var arrayOfFilters = this._getFilters(filters);\r\n                var count = this.queue.length;\r\n                var addedFileItems = [];\r\n\r\n                angular.forEach(list, function(some /*{File|HTMLInputElement|Object}*/) {\r\n                    var temp = new FileUploader.FileLikeObject(some);\r\n\r\n                    if (this._isValidFile(temp, arrayOfFilters, options)) {\r\n                        var fileItem = new FileUploader.FileItem(this, some, options);\r\n                        addedFileItems.push(fileItem);\r\n                        this.queue.push(fileItem);\r\n                        this._onAfterAddingFile(fileItem);\r\n                    } else {\r\n                        var filter = arrayOfFilters[this._failFilterIndex];\r\n                        this._onWhenAddingFileFailed(temp, filter, options);\r\n                    }\r\n                }, this);\r\n\r\n                if(this.queue.length !== count) {\r\n                    this._onAfterAddingAll(addedFileItems);\r\n                    this.progress = this._getTotalProgress();\r\n                }\r\n\r\n                this._render();\r\n                if (this.autoUpload) this.uploadAll();\r\n            };\r\n            /**\r\n             * Remove items from the queue. Remove last: index = -1\r\n             * @param {FileItem|Number} value\r\n             */\r\n            FileUploader.prototype.removeFromQueue = function(value) {\r\n                var index = this.getIndexOfItem(value);\r\n                var item = this.queue[index];\r\n                if (item.isUploading) item.cancel();\r\n                this.queue.splice(index, 1);\r\n                item._destroy();\r\n                this.progress = this._getTotalProgress();\r\n            };\r\n            /**\r\n             * Clears the queue\r\n             */\r\n            FileUploader.prototype.clearQueue = function() {\r\n                while(this.queue.length) {\r\n                    this.queue[0].remove();\r\n                }\r\n                this.progress = 0;\r\n            };\r\n            /**\r\n             * Uploads a item from the queue\r\n             * @param {FileItem|Number} value\r\n             */\r\n            FileUploader.prototype.uploadItem = function(value) {\r\n                var index = this.getIndexOfItem(value);\r\n                var item = this.queue[index];\r\n                var transport = this.isHTML5 ? '_xhrTransport' : '_iframeTransport';\r\n\r\n                item._prepareToUploading();\r\n                if(this.isUploading) return;\r\n\r\n                this.isUploading = true;\r\n                this[transport](item);\r\n            };\r\n            /**\r\n             * Cancels uploading of item from the queue\r\n             * @param {FileItem|Number} value\r\n             */\r\n            FileUploader.prototype.cancelItem = function(value) {\r\n                var index = this.getIndexOfItem(value);\r\n                var item = this.queue[index];\r\n                var prop = this.isHTML5 ? '_xhr' : '_form';\r\n                if (item && item.isUploading) item[prop].abort();\r\n            };\r\n            /**\r\n             * Uploads all not uploaded items of queue\r\n             */\r\n            FileUploader.prototype.uploadAll = function() {\r\n                var items = this.getNotUploadedItems().filter(function(item) {\r\n                    return !item.isUploading;\r\n                });\r\n                if (!items.length) return;\r\n\r\n                angular.forEach(items, function(item) {\r\n                    item._prepareToUploading();\r\n                });\r\n                items[0].upload();\r\n            };\r\n            /**\r\n             * Cancels all uploads\r\n             */\r\n            FileUploader.prototype.cancelAll = function() {\r\n                var items = this.getNotUploadedItems();\r\n                angular.forEach(items, function(item) {\r\n                    item.cancel();\r\n                });\r\n            };\r\n            /**\r\n             * Returns \"true\" if value an instance of File\r\n             * @param {*} value\r\n             * @returns {Boolean}\r\n             * @private\r\n             */\r\n            FileUploader.prototype.isFile = function(value) {\r\n                var fn = $window.File;\r\n                return (fn && value instanceof fn);\r\n            };\r\n            /**\r\n             * Returns \"true\" if value an instance of FileLikeObject\r\n             * @param {*} value\r\n             * @returns {Boolean}\r\n             * @private\r\n             */\r\n            FileUploader.prototype.isFileLikeObject = function(value) {\r\n                return value instanceof FileUploader.FileLikeObject;\r\n            };\r\n            /**\r\n             * Returns \"true\" if value is array like object\r\n             * @param {*} value\r\n             * @returns {Boolean}\r\n             */\r\n            FileUploader.prototype.isArrayLikeObject = function(value) {\r\n                return (angular.isObject(value) && 'length' in value);\r\n            };\r\n            /**\r\n             * Returns a index of item from the queue\r\n             * @param {Item|Number} value\r\n             * @returns {Number}\r\n             */\r\n            FileUploader.prototype.getIndexOfItem = function(value) {\r\n                return angular.isNumber(value) ? value : this.queue.indexOf(value);\r\n            };\r\n            /**\r\n             * Returns not uploaded items\r\n             * @returns {Array}\r\n             */\r\n            FileUploader.prototype.getNotUploadedItems = function() {\r\n                return this.queue.filter(function(item) {\r\n                    return !item.isUploaded;\r\n                });\r\n            };\r\n            /**\r\n             * Returns items ready for upload\r\n             * @returns {Array}\r\n             */\r\n            FileUploader.prototype.getReadyItems = function() {\r\n                return this.queue\r\n                    .filter(function(item) {\r\n                        return (item.isReady && !item.isUploading);\r\n                    })\r\n                    .sort(function(item1, item2) {\r\n                        return item1.index - item2.index;\r\n                    });\r\n            };\r\n            /**\r\n             * Destroys instance of FileUploader\r\n             */\r\n            FileUploader.prototype.destroy = function() {\r\n                angular.forEach(this._directives, function(key) {\r\n                    angular.forEach(this._directives[key], function(object) {\r\n                        object.destroy();\r\n                    }, this);\r\n                }, this);\r\n            };\r\n            /**\r\n             * Callback\r\n             * @param {Array} fileItems\r\n             */\r\n            FileUploader.prototype.onAfterAddingAll = function(fileItems) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} fileItem\r\n             */\r\n            FileUploader.prototype.onAfterAddingFile = function(fileItem) {};\r\n            /**\r\n             * Callback\r\n             * @param {File|Object} item\r\n             * @param {Object} filter\r\n             * @param {Object} options\r\n             * @private\r\n             */\r\n            FileUploader.prototype.onWhenAddingFileFailed = function(item, filter, options) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} fileItem\r\n             */\r\n            FileUploader.prototype.onBeforeUploadItem = function(fileItem) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} fileItem\r\n             * @param {Number} progress\r\n             */\r\n            FileUploader.prototype.onProgressItem = function(fileItem, progress) {};\r\n            /**\r\n             * Callback\r\n             * @param {Number} progress\r\n             */\r\n            FileUploader.prototype.onProgressAll = function(progress) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileUploader.prototype.onSuccessItem = function(item, response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileUploader.prototype.onErrorItem = function(item, response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileUploader.prototype.onCancelItem = function(item, response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileUploader.prototype.onCompleteItem = function(item, response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             */\r\n            FileUploader.prototype.onCompleteAll = function() {};\r\n            /**********************\r\n             * PRIVATE\r\n             **********************/\r\n            /**\r\n             * Returns the total progress\r\n             * @param {Number} [value]\r\n             * @returns {Number}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._getTotalProgress = function(value) {\r\n                if(this.removeAfterUpload) return value || 0;\r\n\r\n                var notUploaded = this.getNotUploadedItems().length;\r\n                var uploaded = notUploaded ? this.queue.length - notUploaded : this.queue.length;\r\n                var ratio = 100 / this.queue.length;\r\n                var current = (value || 0) * ratio / 100;\r\n\r\n                return Math.round(uploaded * ratio + current);\r\n            };\r\n            /**\r\n             * Returns array of filters\r\n             * @param {Array<Function>|String} filters\r\n             * @returns {Array<Function>}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._getFilters = function(filters) {\r\n                if (!filters) return this.filters;\r\n                if (angular.isArray(filters)) return filters;\r\n                var names = filters.match(/[^\\s,]+/g);\r\n                return this.filters.filter(function(filter) {\r\n                    return names.indexOf(filter.name) !== -1;\r\n                }, this);\r\n            };\r\n            /**\r\n             * Updates html\r\n             * @private\r\n             */\r\n            FileUploader.prototype._render = function() {\r\n                if (!$rootScope.$$phase) $rootScope.$apply();\r\n            };\r\n            /**\r\n             * Returns \"true\" if item is a file (not folder)\r\n             * @param {File|FileLikeObject} item\r\n             * @returns {Boolean}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._folderFilter = function(item) {\r\n                return !!(item.size || item.type);\r\n            };\r\n            /**\r\n             * Returns \"true\" if the limit has not been reached\r\n             * @returns {Boolean}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._queueLimitFilter = function() {\r\n                return this.queue.length < this.queueLimit;\r\n            };\r\n            /**\r\n             * Returns \"true\" if file pass all filters\r\n             * @param {File|Object} file\r\n             * @param {Array<Function>} filters\r\n             * @param {Object} options\r\n             * @returns {Boolean}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._isValidFile = function(file, filters, options) {\r\n                this._failFilterIndex = -1;\r\n                return !filters.length ? true : filters.every(function(filter) {\r\n                    this._failFilterIndex++;\r\n                    return filter.fn.call(this, file, options);\r\n                }, this);\r\n            };\r\n            /**\r\n             * Checks whether upload successful\r\n             * @param {Number} status\r\n             * @returns {Boolean}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._isSuccessCode = function(status) {\r\n                return (status >= 200 && status < 300) || status === 304;\r\n            };\r\n            /**\r\n             * Transforms the server response\r\n             * @param {*} response\r\n             * @param {Object} headers\r\n             * @returns {*}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._transformResponse = function(response, headers) {\r\n                var headersGetter = this._headersGetter(headers);\r\n                angular.forEach($http.defaults.transformResponse, function(transformFn) {\r\n                    response = transformFn(response, headersGetter);\r\n                });\r\n                return response;\r\n            };\r\n            /**\r\n             * Parsed response headers\r\n             * @param headers\r\n             * @returns {Object}\r\n             * @see https://github.com/angular/angular.js/blob/master/src/ng/http.js\r\n             * @private\r\n             */\r\n            FileUploader.prototype._parseHeaders = function(headers) {\r\n                var parsed = {}, key, val, i;\r\n\r\n                if (!headers) return parsed;\r\n\r\n                angular.forEach(headers.split('\\n'), function(line) {\r\n                    i = line.indexOf(':');\r\n                    key = line.slice(0, i).trim().toLowerCase();\r\n                    val = line.slice(i + 1).trim();\r\n\r\n                    if (key) {\r\n                        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\r\n                    }\r\n                });\r\n\r\n                return parsed;\r\n            };\r\n            /**\r\n             * Returns function that returns headers\r\n             * @param {Object} parsedHeaders\r\n             * @returns {Function}\r\n             * @private\r\n             */\r\n            FileUploader.prototype._headersGetter = function(parsedHeaders) {\r\n                return function(name) {\r\n                    if (name) {\r\n                        return parsedHeaders[name.toLowerCase()] || null;\r\n                    }\r\n                    return parsedHeaders;\r\n                };\r\n            };\r\n            /**\r\n             * The XMLHttpRequest transport\r\n             * @param {FileItem} item\r\n             * @private\r\n             */\r\n            FileUploader.prototype._xhrTransport = function(item) {\r\n                var xhr = item._xhr = new XMLHttpRequest();\r\n                var form = new FormData();\r\n                var that = this;\r\n\r\n                that._onBeforeUploadItem(item);\r\n\r\n                angular.forEach(item.formData, function(obj) {\r\n                    angular.forEach(obj, function(value, key) {\r\n                        form.append(key, value);\r\n                    });\r\n                });\r\n\r\n                if ( typeof(item._file.size) != 'number' ) {\r\n                    throw new TypeError('The file specified is no longer valid');\r\n                }\r\n\r\n                form.append(item.alias, item._file, item.file.name);\r\n\r\n                xhr.upload.onprogress = function(event) {\r\n                    var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);\r\n                    that._onProgressItem(item, progress);\r\n                };\r\n\r\n                xhr.onload = function() {\r\n                    var headers = that._parseHeaders(xhr.getAllResponseHeaders());\r\n                    var response = that._transformResponse(xhr.response, headers);\r\n                    var gist = that._isSuccessCode(xhr.status) ? 'Success' : 'Error';\r\n                    var method = '_on' + gist + 'Item';\r\n                    that[method](item, response, xhr.status, headers);\r\n                    that._onCompleteItem(item, response, xhr.status, headers);\r\n                };\r\n\r\n                xhr.onerror = function() {\r\n                    var headers = that._parseHeaders(xhr.getAllResponseHeaders());\r\n                    var response = that._transformResponse(xhr.response, headers);\r\n                    that._onErrorItem(item, response, xhr.status, headers);\r\n                    that._onCompleteItem(item, response, xhr.status, headers);\r\n                };\r\n\r\n                xhr.onabort = function() {\r\n                    var headers = that._parseHeaders(xhr.getAllResponseHeaders());\r\n                    var response = that._transformResponse(xhr.response, headers);\r\n                    that._onCancelItem(item, response, xhr.status, headers);\r\n                    that._onCompleteItem(item, response, xhr.status, headers);\r\n                };\r\n\r\n                xhr.open(item.method, item.url, true);\r\n\r\n                xhr.withCredentials = item.withCredentials;\r\n\r\n                angular.forEach(item.headers, function(value, name) {\r\n                    xhr.setRequestHeader(name, value);\r\n                });\r\n\r\n                xhr.send(form);\r\n                this._render();\r\n            };\r\n            /**\r\n             * The IFrame transport\r\n             * @param {FileItem} item\r\n             * @private\r\n             */\r\n            FileUploader.prototype._iframeTransport = function(item) {\r\n                var form = angular.element('<form style=\"display: none;\" />');\r\n                var iframe = angular.element('<iframe name=\"iframeTransport' + Date.now() + '\">');\r\n                var input = item._input;\r\n                var that = this;\r\n\r\n                if (item._form) item._form.replaceWith(input); // remove old form\r\n                item._form = form; // save link to new form\r\n\r\n                that._onBeforeUploadItem(item);\r\n\r\n                input.prop('name', item.alias);\r\n\r\n                angular.forEach(item.formData, function(obj) {\r\n                    angular.forEach(obj, function(value, key) {\r\n                        var element = angular.element('<input type=\"hidden\" name=\"' + key + '\" />');\r\n                        element.val(value);\r\n                        form.append(element);\r\n                    });\r\n                });\r\n\r\n                form.prop({\r\n                    action: item.url,\r\n                    method: 'POST',\r\n                    target: iframe.prop('name'),\r\n                    enctype: 'multipart/form-data',\r\n                    encoding: 'multipart/form-data' // old IE\r\n                });\r\n\r\n                iframe.bind('load', function() {\r\n                    var html = '';\r\n                    var status = 200;\r\n\r\n                    try {\r\n                        // Fix for legacy IE browsers that loads internal error page\r\n                        // when failed WS response received. In consequence iframe\r\n                        // content access denied error is thrown becouse trying to\r\n                        // access cross domain page. When such thing occurs notifying\r\n                        // with empty response object. See more info at:\r\n                        // http://stackoverflow.com/questions/151362/access-is-denied-error-on-accessing-iframe-document-object\r\n                        // Note that if non standard 4xx or 5xx error code returned\r\n                        // from WS then response content can be accessed without error\r\n                        // but 'XHR' status becomes 200. In order to avoid confusion\r\n                        // returning response via same 'success' event handler.\r\n\r\n                        // fixed angular.contents() for iframes\r\n                        html = iframe[0].contentDocument.body.innerHTML;\r\n                    } catch (e) {\r\n                        // in case we run into the access-is-denied error or we have another error on the server side\r\n                        // (intentional 500,40... errors), we at least say 'something went wrong' -> 500\r\n                        status = 500;\r\n                    }\r\n\r\n                    var xhr = {response: html, status: status, dummy: true};\r\n                    var headers = {};\r\n                    var response = that._transformResponse(xhr.response, headers);\r\n\r\n                    that._onSuccessItem(item, response, xhr.status, headers);\r\n                    that._onCompleteItem(item, response, xhr.status, headers);\r\n                });\r\n\r\n                form.abort = function() {\r\n                    var xhr = {status: 0, dummy: true};\r\n                    var headers = {};\r\n                    var response;\r\n\r\n                    iframe.unbind('load').prop('src', 'javascript:false;');\r\n                    form.replaceWith(input);\r\n\r\n                    that._onCancelItem(item, response, xhr.status, headers);\r\n                    that._onCompleteItem(item, response, xhr.status, headers);\r\n                };\r\n\r\n                input.after(form);\r\n                form.append(input).append(iframe);\r\n\r\n                form[0].submit();\r\n                this._render();\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {File|Object} item\r\n             * @param {Object} filter\r\n             * @param {Object} options\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onWhenAddingFileFailed = function(item, filter, options) {\r\n                this.onWhenAddingFileFailed(item, filter, options);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {FileItem} item\r\n             */\r\n            FileUploader.prototype._onAfterAddingFile = function(item) {\r\n                this.onAfterAddingFile(item);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {Array<FileItem>} items\r\n             */\r\n            FileUploader.prototype._onAfterAddingAll = function(items) {\r\n                this.onAfterAddingAll(items);\r\n            };\r\n            /**\r\n             *  Inner callback\r\n             * @param {FileItem} item\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onBeforeUploadItem = function(item) {\r\n                item._onBeforeUpload();\r\n                this.onBeforeUploadItem(item);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {FileItem} item\r\n             * @param {Number} progress\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onProgressItem = function(item, progress) {\r\n                var total = this._getTotalProgress(progress);\r\n                this.progress = total;\r\n                item._onProgress(progress);\r\n                this.onProgressItem(item, progress);\r\n                this.onProgressAll(total);\r\n                this._render();\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onSuccessItem = function(item, response, status, headers) {\r\n                item._onSuccess(response, status, headers);\r\n                this.onSuccessItem(item, response, status, headers);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onErrorItem = function(item, response, status, headers) {\r\n                item._onError(response, status, headers);\r\n                this.onErrorItem(item, response, status, headers);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onCancelItem = function(item, response, status, headers) {\r\n                item._onCancel(response, status, headers);\r\n                this.onCancelItem(item, response, status, headers);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {FileItem} item\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileUploader.prototype._onCompleteItem = function(item, response, status, headers) {\r\n                item._onComplete(response, status, headers);\r\n                this.onCompleteItem(item, response, status, headers);\r\n\r\n                var nextItem = this.getReadyItems()[0];\r\n                this.isUploading = false;\r\n\r\n                if(angular.isDefined(nextItem)) {\r\n                    nextItem.upload();\r\n                    return;\r\n                }\r\n\r\n                this.onCompleteAll();\r\n                this.progress = this._getTotalProgress();\r\n                this._render();\r\n            };\r\n            /**********************\r\n             * STATIC\r\n             **********************/\r\n            /**\r\n             * @borrows FileUploader.prototype.isFile\r\n             */\r\n            FileUploader.isFile = FileUploader.prototype.isFile;\r\n            /**\r\n             * @borrows FileUploader.prototype.isFileLikeObject\r\n             */\r\n            FileUploader.isFileLikeObject = FileUploader.prototype.isFileLikeObject;\r\n            /**\r\n             * @borrows FileUploader.prototype.isArrayLikeObject\r\n             */\r\n            FileUploader.isArrayLikeObject = FileUploader.prototype.isArrayLikeObject;\r\n            /**\r\n             * @borrows FileUploader.prototype.isHTML5\r\n             */\r\n            FileUploader.isHTML5 = FileUploader.prototype.isHTML5;\r\n            /**\r\n             * Inherits a target (Class_1) by a source (Class_2)\r\n             * @param {Function} target\r\n             * @param {Function} source\r\n             */\r\n            FileUploader.inherit = function(target, source) {\r\n                target.prototype = Object.create(source.prototype);\r\n                target.prototype.constructor = target;\r\n                target.super_ = source;\r\n            };\r\n            FileUploader.FileLikeObject = FileLikeObject;\r\n            FileUploader.FileItem = FileItem;\r\n            FileUploader.FileDirective = FileDirective;\r\n            FileUploader.FileSelect = FileSelect;\r\n            FileUploader.FileDrop = FileDrop;\r\n            FileUploader.FileOver = FileOver;\r\n\r\n            // ---------------------------\r\n\r\n            /**\r\n             * Creates an instance of FileLikeObject\r\n             * @param {File|HTMLInputElement|Object} fileOrInput\r\n             * @constructor\r\n             */\r\n            function FileLikeObject(fileOrInput) {\r\n                var isInput = angular.isElement(fileOrInput);\r\n                var fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;\r\n                var postfix = angular.isString(fakePathOrObject) ? 'FakePath' : 'Object';\r\n                var method = '_createFrom' + postfix;\r\n                this[method](fakePathOrObject);\r\n            }\r\n\r\n            /**\r\n             * Creates file like object from fake path string\r\n             * @param {String} path\r\n             * @private\r\n             */\r\n            FileLikeObject.prototype._createFromFakePath = function(path) {\r\n                this.lastModifiedDate = null;\r\n                this.size = null;\r\n                this.type = 'like/' + path.slice(path.lastIndexOf('.') + 1).toLowerCase();\r\n                this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\\\') + 2);\r\n            };\r\n            /**\r\n             * Creates file like object from object\r\n             * @param {File|FileLikeObject} object\r\n             * @private\r\n             */\r\n            FileLikeObject.prototype._createFromObject = function(object) {\r\n                this.lastModifiedDate = angular.copy(object.lastModifiedDate);\r\n                this.size = object.size;\r\n                this.type = object.type;\r\n                this.name = object.name;\r\n            };\r\n\r\n            // ---------------------------\r\n\r\n            /**\r\n             * Creates an instance of FileItem\r\n             * @param {FileUploader} uploader\r\n             * @param {File|HTMLInputElement|Object} some\r\n             * @param {Object} options\r\n             * @constructor\r\n             */\r\n            function FileItem(uploader, some, options) {\r\n                var isInput = angular.isElement(some);\r\n                var input = isInput ? angular.element(some) : null;\r\n                var file = !isInput ? some : null;\r\n\r\n                angular.extend(this, {\r\n                    url: uploader.url,\r\n                    alias: uploader.alias,\r\n                    headers: angular.copy(uploader.headers),\r\n                    formData: angular.copy(uploader.formData),\r\n                    removeAfterUpload: uploader.removeAfterUpload,\r\n                    withCredentials: uploader.withCredentials,\r\n                    method: uploader.method\r\n                }, options, {\r\n                    uploader: uploader,\r\n                    file: new FileUploader.FileLikeObject(some),\r\n                    isReady: false,\r\n                    isUploading: false,\r\n                    isUploaded: false,\r\n                    isSuccess: false,\r\n                    isCancel: false,\r\n                    isError: false,\r\n                    progress: 0,\r\n                    index: null,\r\n                    _file: file,\r\n                    _input: input\r\n                });\r\n\r\n                if (input) this._replaceNode(input);\r\n            }\r\n            /**********************\r\n             * PUBLIC\r\n             **********************/\r\n            /**\r\n             * Uploads a FileItem\r\n             */\r\n            FileItem.prototype.upload = function() {\r\n                try {\r\n                    this.uploader.uploadItem(this);\r\n                } catch (e) {\r\n                    this.uploader._onCompleteItem( this, '', 0, [] );\r\n                    this.uploader._onErrorItem( this, '', 0, [] );\r\n                }\r\n            };\r\n            /**\r\n             * Cancels uploading of FileItem\r\n             */\r\n            FileItem.prototype.cancel = function() {\r\n                this.uploader.cancelItem(this);\r\n            };\r\n            /**\r\n             * Removes a FileItem\r\n             */\r\n            FileItem.prototype.remove = function() {\r\n                this.uploader.removeFromQueue(this);\r\n            };\r\n            /**\r\n             * Callback\r\n             * @private\r\n             */\r\n            FileItem.prototype.onBeforeUpload = function() {};\r\n            /**\r\n             * Callback\r\n             * @param {Number} progress\r\n             * @private\r\n             */\r\n            FileItem.prototype.onProgress = function(progress) {};\r\n            /**\r\n             * Callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileItem.prototype.onSuccess = function(response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileItem.prototype.onError = function(response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileItem.prototype.onCancel = function(response, status, headers) {};\r\n            /**\r\n             * Callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             */\r\n            FileItem.prototype.onComplete = function(response, status, headers) {};\r\n            /**********************\r\n             * PRIVATE\r\n             **********************/\r\n            /**\r\n             * Inner callback\r\n             */\r\n            FileItem.prototype._onBeforeUpload = function() {\r\n                this.isReady = true;\r\n                this.isUploading = true;\r\n                this.isUploaded = false;\r\n                this.isSuccess = false;\r\n                this.isCancel = false;\r\n                this.isError = false;\r\n                this.progress = 0;\r\n                this.onBeforeUpload();\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {Number} progress\r\n             * @private\r\n             */\r\n            FileItem.prototype._onProgress = function(progress) {\r\n                this.progress = progress;\r\n                this.onProgress(progress);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileItem.prototype._onSuccess = function(response, status, headers) {\r\n                this.isReady = false;\r\n                this.isUploading = false;\r\n                this.isUploaded = true;\r\n                this.isSuccess = true;\r\n                this.isCancel = false;\r\n                this.isError = false;\r\n                this.progress = 100;\r\n                this.index = null;\r\n                this.onSuccess(response, status, headers);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileItem.prototype._onError = function(response, status, headers) {\r\n                this.isReady = false;\r\n                this.isUploading = false;\r\n                this.isUploaded = true;\r\n                this.isSuccess = false;\r\n                this.isCancel = false;\r\n                this.isError = true;\r\n                this.progress = 0;\r\n                this.index = null;\r\n                this.onError(response, status, headers);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileItem.prototype._onCancel = function(response, status, headers) {\r\n                this.isReady = false;\r\n                this.isUploading = false;\r\n                this.isUploaded = false;\r\n                this.isSuccess = false;\r\n                this.isCancel = true;\r\n                this.isError = false;\r\n                this.progress = 0;\r\n                this.index = null;\r\n                this.onCancel(response, status, headers);\r\n            };\r\n            /**\r\n             * Inner callback\r\n             * @param {*} response\r\n             * @param {Number} status\r\n             * @param {Object} headers\r\n             * @private\r\n             */\r\n            FileItem.prototype._onComplete = function(response, status, headers) {\r\n                this.onComplete(response, status, headers);\r\n                if (this.removeAfterUpload) this.remove();\r\n            };\r\n            /**\r\n             * Destroys a FileItem\r\n             */\r\n            FileItem.prototype._destroy = function() {\r\n                if (this._input) this._input.remove();\r\n                if (this._form) this._form.remove();\r\n                delete this._form;\r\n                delete this._input;\r\n            };\r\n            /**\r\n             * Prepares to uploading\r\n             * @private\r\n             */\r\n            FileItem.prototype._prepareToUploading = function() {\r\n                this.index = this.index || ++this.uploader._nextIndex;\r\n                this.isReady = true;\r\n            };\r\n            /**\r\n             * Replaces input element on his clone\r\n             * @param {JQLite|jQuery} input\r\n             * @private\r\n             */\r\n            FileItem.prototype._replaceNode = function(input) {\r\n                var clone = $compile(input.clone())(input.scope());\r\n                clone.prop('value', null); // FF fix\r\n                input.css('display', 'none');\r\n                input.after(clone); // remove jquery dependency\r\n            };\r\n\r\n            // ---------------------------\r\n\r\n            /**\r\n             * Creates instance of {FileDirective} object\r\n             * @param {Object} options\r\n             * @param {Object} options.uploader\r\n             * @param {HTMLElement} options.element\r\n             * @param {Object} options.events\r\n             * @param {String} options.prop\r\n             * @constructor\r\n             */\r\n            function FileDirective(options) {\r\n                angular.extend(this, options);\r\n                this.uploader._directives[this.prop].push(this);\r\n                this._saveLinks();\r\n                this.bind();\r\n            }\r\n            /**\r\n             * Map of events\r\n             * @type {Object}\r\n             */\r\n            FileDirective.prototype.events = {};\r\n            /**\r\n             * Binds events handles\r\n             */\r\n            FileDirective.prototype.bind = function() {\r\n                for(var key in this.events) {\r\n                    var prop = this.events[key];\r\n                    this.element.bind(key, this[prop]);\r\n                }\r\n            };\r\n            /**\r\n             * Unbinds events handles\r\n             */\r\n            FileDirective.prototype.unbind = function() {\r\n                for(var key in this.events) {\r\n                    this.element.unbind(key, this.events[key]);\r\n                }\r\n            };\r\n            /**\r\n             * Destroys directive\r\n             */\r\n            FileDirective.prototype.destroy = function() {\r\n                var index = this.uploader._directives[this.prop].indexOf(this);\r\n                this.uploader._directives[this.prop].splice(index, 1);\r\n                this.unbind();\r\n                // this.element = null;\r\n            };\r\n            /**\r\n             * Saves links to functions\r\n             * @private\r\n             */\r\n            FileDirective.prototype._saveLinks = function() {\r\n                for(var key in this.events) {\r\n                    var prop = this.events[key];\r\n                    this[prop] = this[prop].bind(this);\r\n                }\r\n            };\r\n\r\n            // ---------------------------\r\n\r\n            FileUploader.inherit(FileSelect, FileDirective);\r\n\r\n            /**\r\n             * Creates instance of {FileSelect} object\r\n             * @param {Object} options\r\n             * @constructor\r\n             */\r\n            function FileSelect(options) {\r\n                FileSelect.super_.apply(this, arguments);\r\n\r\n                if(!this.uploader.isHTML5) {\r\n                    this.element.removeAttr('multiple');\r\n                }\r\n                this.element.prop('value', null); // FF fix\r\n            }\r\n            /**\r\n             * Map of events\r\n             * @type {Object}\r\n             */\r\n            FileSelect.prototype.events = {\r\n                $destroy: 'destroy',\r\n                change: 'onChange'\r\n            };\r\n            /**\r\n             * Name of property inside uploader._directive object\r\n             * @type {String}\r\n             */\r\n            FileSelect.prototype.prop = 'select';\r\n            /**\r\n             * Returns options\r\n             * @return {Object|undefined}\r\n             */\r\n            FileSelect.prototype.getOptions = function() {};\r\n            /**\r\n             * Returns filters\r\n             * @return {Array<Function>|String|undefined}\r\n             */\r\n            FileSelect.prototype.getFilters = function() {};\r\n            /**\r\n             * If returns \"true\" then HTMLInputElement will be cleared\r\n             * @returns {Boolean}\r\n             */\r\n            FileSelect.prototype.isEmptyAfterSelection = function() {\r\n                return !!this.element.attr('multiple');\r\n            };\r\n            /**\r\n             * Event handler\r\n             */\r\n            FileSelect.prototype.onChange = function() {\r\n                var files = this.uploader.isHTML5 ? this.element[0].files : this.element[0];\r\n                var options = this.getOptions();\r\n                var filters = this.getFilters();\r\n\r\n                if (!this.uploader.isHTML5) this.destroy();\r\n                this.uploader.addToQueue(files, options, filters);\r\n                if (this.isEmptyAfterSelection()) this.element.prop('value', null);\r\n            };\r\n\r\n            // ---------------------------\r\n\r\n            FileUploader.inherit(FileDrop, FileDirective);\r\n\r\n            /**\r\n             * Creates instance of {FileDrop} object\r\n             * @param {Object} options\r\n             * @constructor\r\n             */\r\n            function FileDrop(options) {\r\n                FileDrop.super_.apply(this, arguments);\r\n            }\r\n            /**\r\n             * Map of events\r\n             * @type {Object}\r\n             */\r\n            FileDrop.prototype.events = {\r\n                $destroy: 'destroy',\r\n                drop: 'onDrop',\r\n                dragover: 'onDragOver',\r\n                dragleave: 'onDragLeave'\r\n            };\r\n            /**\r\n             * Name of property inside uploader._directive object\r\n             * @type {String}\r\n             */\r\n            FileDrop.prototype.prop = 'drop';\r\n            /**\r\n             * Returns options\r\n             * @return {Object|undefined}\r\n             */\r\n            FileDrop.prototype.getOptions = function() {};\r\n            /**\r\n             * Returns filters\r\n             * @return {Array<Function>|String|undefined}\r\n             */\r\n            FileDrop.prototype.getFilters = function() {};\r\n            /**\r\n             * Event handler\r\n             */\r\n            FileDrop.prototype.onDrop = function(event) {\r\n                var transfer = this._getTransfer(event);\r\n                if (!transfer) return;\r\n                var options = this.getOptions();\r\n                var filters = this.getFilters();\r\n                this._preventAndStop(event);\r\n                angular.forEach(this.uploader._directives.over, this._removeOverClass, this);\r\n                this.uploader.addToQueue(transfer.files, options, filters);\r\n            };\r\n            /**\r\n             * Event handler\r\n             */\r\n            FileDrop.prototype.onDragOver = function(event) {\r\n                var transfer = this._getTransfer(event);\r\n                if(!this._haveFiles(transfer.types)) return;\r\n                transfer.dropEffect = 'copy';\r\n                this._preventAndStop(event);\r\n                angular.forEach(this.uploader._directives.over, this._addOverClass, this);\r\n            };\r\n            /**\r\n             * Event handler\r\n             */\r\n            FileDrop.prototype.onDragLeave = function(event) {\r\n                if (event.currentTarget === this.element[0]) return;\r\n                this._preventAndStop(event);\r\n                angular.forEach(this.uploader._directives.over, this._removeOverClass, this);\r\n            };\r\n            /**\r\n             * Helper\r\n             */\r\n            FileDrop.prototype._getTransfer = function(event) {\r\n                return event.dataTransfer ? event.dataTransfer : event.originalEvent.dataTransfer; // jQuery fix;\r\n            };\r\n            /**\r\n             * Helper\r\n             */\r\n            FileDrop.prototype._preventAndStop = function(event) {\r\n                event.preventDefault();\r\n                event.stopPropagation();\r\n            };\r\n            /**\r\n             * Returns \"true\" if types contains files\r\n             * @param {Object} types\r\n             */\r\n            FileDrop.prototype._haveFiles = function(types) {\r\n                if (!types) return false;\r\n                if (types.indexOf) {\r\n                    return types.indexOf('Files') !== -1;\r\n                } else if(types.contains) {\r\n                    return types.contains('Files');\r\n                } else {\r\n                    return false;\r\n                }\r\n            };\r\n            /**\r\n             * Callback\r\n             */\r\n            FileDrop.prototype._addOverClass = function(item) {\r\n                item.addOverClass();\r\n            };\r\n            /**\r\n             * Callback\r\n             */\r\n            FileDrop.prototype._removeOverClass = function(item) {\r\n                item.removeOverClass();\r\n            };\r\n\r\n            // ---------------------------\r\n\r\n            FileUploader.inherit(FileOver, FileDirective);\r\n\r\n            /**\r\n             * Creates instance of {FileDrop} object\r\n             * @param {Object} options\r\n             * @constructor\r\n             */\r\n            function FileOver(options) {\r\n                FileOver.super_.apply(this, arguments);\r\n            }\r\n            /**\r\n             * Map of events\r\n             * @type {Object}\r\n             */\r\n            FileOver.prototype.events = {\r\n                $destroy: 'destroy'\r\n            };\r\n            /**\r\n             * Name of property inside uploader._directive object\r\n             * @type {String}\r\n             */\r\n            FileOver.prototype.prop = 'over';\r\n            /**\r\n             * Over class\r\n             * @type {string}\r\n             */\r\n            FileOver.prototype.overClass = 'nv-file-over';\r\n            /**\r\n             * Adds over class\r\n             */\r\n            FileOver.prototype.addOverClass = function() {\r\n                this.element.addClass(this.getOverClass());\r\n            };\r\n            /**\r\n             * Removes over class\r\n             */\r\n            FileOver.prototype.removeOverClass = function() {\r\n                this.element.removeClass(this.getOverClass());\r\n            };\r\n            /**\r\n             * Returns over class\r\n             * @returns {String}\r\n             */\r\n            FileOver.prototype.getOverClass = function() {\r\n                return this.overClass;\r\n            };\r\n\r\n            return FileUploader;\r\n        }])\r\n\r\n\r\n    .directive('nvFileSelect', ['$parse', 'FileUploader', function($parse, FileUploader) {\r\n        return {\r\n            link: function(scope, element, attributes) {\r\n                var uploader = scope.$eval(attributes.uploader);\r\n\r\n                if (!(uploader instanceof FileUploader)) {\r\n                    throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n                }\r\n\r\n                var object = new FileUploader.FileSelect({\r\n                    uploader: uploader,\r\n                    element: element\r\n                });\r\n\r\n                object.getOptions = $parse(attributes.options).bind(object, scope);\r\n                object.getFilters = function() {return attributes.filters;};\r\n            }\r\n        };\r\n    }])\r\n\r\n\r\n    .directive('nvFileDrop', ['$parse', 'FileUploader', function($parse, FileUploader) {\r\n        return {\r\n            link: function(scope, element, attributes) {\r\n                var uploader = scope.$eval(attributes.uploader);\r\n\r\n                if (!(uploader instanceof FileUploader)) {\r\n                    throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n                }\r\n\r\n                if (!uploader.isHTML5) return;\r\n\r\n                var object = new FileUploader.FileDrop({\r\n                    uploader: uploader,\r\n                    element: element\r\n                });\r\n\r\n                object.getOptions = $parse(attributes.options).bind(object, scope);\r\n                object.getFilters = function() {return attributes.filters;};\r\n            }\r\n        };\r\n    }])\r\n\r\n\r\n    .directive('nvFileOver', ['FileUploader', function(FileUploader) {\r\n        return {\r\n            link: function(scope, element, attributes) {\r\n                var uploader = scope.$eval(attributes.uploader);\r\n\r\n                if (!(uploader instanceof FileUploader)) {\r\n                    throw new TypeError('\"Uploader\" must be an instance of FileUploader');\r\n                }\r\n\r\n                var object = new FileUploader.FileOver({\r\n                    uploader: uploader,\r\n                    element: element\r\n                });\r\n\r\n                object.getOverClass = function() {\r\n                    return attributes.overClass || this.overClass;\r\n                };\r\n            }\r\n        };\r\n    }])\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./src/module.js\n ** module id = 0\n ** module chunks = 0\n **/"],"sourceRoot":""}