'use strict';
/**
* Classes
*
* FileUploader
* FileUploader.FileLikeObject
* FileUploader.FileItem
* FileUploader.FileDirective
* FileUploader.FileSelect
* FileUploader.FileDrop
* FileUploader.FileOver
*/
angular
.module('angularFileUpload', [])
.value('fileUploaderOptions', {
url: '/',
alias: 'file',
headers: {},
queue: [],
progress: 0,
autoUpload: false,
removeAfterUpload: false,
method: 'POST',
filters: [],
formData: [],
queueLimit: Number.MAX_VALUE,
withCredentials: false
})
.factory('FileUploader', ['fileUploaderOptions', '$rootScope', '$http', '$window', '$compile',
function(fileUploaderOptions, $rootScope, $http, $window, $compile) {
/**
* Creates an instance of FileUploader
* @param {Object} [options]
* @constructor
*/
function FileUploader(options) {
var settings = angular.copy(fileUploaderOptions);
angular.extend(this, settings, options, {
isUploading: false,
_nextIndex: 0,
_failFilterIndex: -1,
_directives: {select: [], drop: [], over: []}
});
// add default filters
this.filters.unshift({name: 'queueLimit', fn: this._queueLimitFilter});
this.filters.unshift({name: 'folder', fn: this._folderFilter});
}
/**********************
* PUBLIC
**********************/
/**
* Checks a support the html5 uploader
* @returns {Boolean}
* @readonly
*/
FileUploader.prototype.isHTML5 = !!($window.File && $window.FormData);
/**
* Adds items to the queue
* @param {File|HTMLInputElement|Object|FileList|Array