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