8000 Updated: FileUploader.prototype.addToQueue, FileUploader.FileLikeObje… · oneflow/angular-file-upload@1ee0dba · GitHub
[go: up one dir, main page]

Skip to content

Commit 1ee0dba

Browse files
committed
Updated: FileUploader.prototype.addToQueue, FileUploader.FileLikeObject, FileUploader.FileItem
Added: FileUploader.prototype.isArrayLikeObject, Removed: FileUploader.prototype._getFileOrFileLikeObject
1 parent 5c18aec commit 1ee0dba

6 files changed

+76
-72
lines changed

angular-file-upload.js

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
angular-file-upload v1.0.3
2+
angular-file-upload v1.1.0
33
https://github.com/nervgh/angular-file-upload
44
*/
55
(function(angular, factory) {
@@ -78,28 +78,27 @@ module
7878
FileUploader.prototype.isHTML5 = !!($window.File && $window.FormData);
7979
/**
8080
* Adds items to the queue
81-
* @param {FileList|File|HTMLInputElement} files
81+
* @param {File|HTMLInputElement|Object|FileList|Array<Object>} files
8282
* @param {Object} [options]
8383
* @param {Array<Function>|String} filters
8484
*/
8585
FileUploader.prototype.addToQueue = function(files, options, filters) {
86-
var list = angular.isElement(files) ? [files]: files;
86+
var list = this.isArrayLikeObject(files) ? files: [files];
8787
var arrayOfFilters = this._getFilters(filters);
8888
var count = this.queue.length;
8989
var addedFileItems = [];
9090

91-
angular.forEach(list, function(file) {
92-
var item = this._getFileOrFileLikeObject(file);
91+
angular.forEach(list, function(some /*{File|HTMLInputElement|Object}*/) {
92+
var temp = new FileUploader.FileLikeObject(some);
9393

94-
if (this._isValidFile(item, arrayOfFilters, options)) {
95-
var input = this.isFile(item) ? null : file;
96-
var fileItem = new FileUploader.FileItem(this, item, options, input);
94+
if (this._isValidFile(temp, arrayOfFilters, options)) {
95+
var fileItem = new FileUploader.FileItem(this, some, options);
9796
addedFileItems.push(fileItem);
9897
this.queue.push(fileItem);
9998
this._onAfterAddingFile(fileItem);
10099
} else {
101100
var filter = this.filters[this._failFilterIndex];
102-
this._onWhenAddingFileFailed(item, filter, options);
101+
this._onWhenAddingFileFailed(temp, filter, options);
103102
}
104103
}, this);
105104

@@ -199,6 +198,14 @@ module
199198
FileUploader.prototype.isFileLikeObject = function(value) {
200199
return value instanceof FileUploader.FileLikeObject;
201200
};
201+
/**
202+
* Returns "true" if value is array like object
203+
* @param {*} value
204+
* @returns {Boolean}
205+
*/
206+
FileUploader.prototype.isArrayLikeObject = function(value) {
207+
return (angular.isObject(value) && 'length' in value);
208+
};
202209
/**
203210
* Returns a index of item from the queue
204211
* @param {Item|Number} value
@@ -381,16 +388,6 @@ module
381388
return filter.fn.call(this, file, options);
382389
}, this);
383390
};
384-
/**
385-
* Returns a file or a file-like object
386-
* @param {File|HTMLInputElement} some
387-
* @returns {File|Object}
388-
* @private
389-
*/
390-
FileUploader.prototype._getFileOrFileLikeObject = function(some) {
391-
if (this.isFile(some) || this.isFileLikeObject(some)) return some;
392-
return new FileUploader.FileLikeObject(some.value);
393-
};
394391
/**
395392
* Checks whether upload successful
396393
* @param {Number} status
@@ -695,6 +692,10 @@ module
695692
* @borrows FileUploader.prototype.isFileLikeObject
696693
*/
697694
FileUploader.isFileLikeObject = FileUploader.prototype.isFileLikeObject;
695+
/**
696+
* @borrows FileUploader.prototype.isArrayLikeObject
697+
*/
698+
FileUploader.isArrayLikeObject = FileUploader.prototype.isArrayLikeObject;
698699
/**
699700
* @borrows FileUploader.prototype.isHTML5
700701
*/
@@ -720,17 +721,19 @@ module
720721

721722
/**
722723
* Creates an instance of FileLikeObject
723-
* @param {String|Object} fakePathOrObject
724+
* @param {File|HTMLInputElement|Object} fileOrInput
724725
* @constructor
725726
*/
726-
function FileLikeObject(fakePathOrObject) {
727+
function FileLikeObject(fileOrInput) {
728+
var isInput = angular.isElement(fileOrInput);
729+
var fakePathOrObject = isInput ? fileOrInput.value : fileOrInput;
727730
var postfix = angular.isString(fakePathOrObject) ? 'FakePath' : 'Object';
728731
var method = '_createFrom' + postfix;
729732
this[method](fakePathOrObject);
730733
}
731734

732735
/**
733-
* Creates file from fake path string
736+
* Creates file like object from fake path string
734737
* @param {String} path
735738
* @private
736739
*/
@@ -741,7 +744,7 @@ module
741744
this.name = path.slice(path.lastIndexOf('/') + path.lastIndexOf('\\') + 2);
742745
};
743746
/**
744-
* Creates file from object
747+
* Creates file like object from object
745748
* @param {File|FileLikeObject} object
746749
* @private
747750
*/
@@ -757,13 +760,14 @@ module
757760
/**
758761
* Creates an instance of FileItem
759762
* @param {FileUploader} uploader
760-
* @param {File|FileLikeObject} file
761-
* @param {File|Object} options
762-
* @param {HTMLInputElement} [input]
763+
* @param {File|HTMLInputElement|Object} some
764+
* @param {Object} options
763765
* @constructor
764766
*/
765-
function FileItem(uploader, file, options, input) {
766-
file = uploader._getFileOrFileLikeObject(file);
767+
function FileItem(uploader, some, options) {
768+
var isInput = angular.isElement(some);
769+
var input = isInput ? angular.element(some) : null;
770+
var file = !isInput ? some : null;
767771

768772
angular.extend(this, {
769773
url: uploader.url,
@@ -775,7 +779,7 @@ module
775779
method: uploader.method
776780
}, options, {
777781
uploader: uploader,
778-
file: new FileUploader.FileLikeObject(file),
782+
file: new FileUploader.FileLikeObject(some),
779783
isReady: false,
780784
isUploading: false,
781785
isUploaded: false,
@@ -784,13 +788,11 @@ module
784788
isError: false,
785789
progress: 0,
786790
index: null,
787-
_file: file
791+
_file: file,
792+
_input: input
788793
});
789794

790-
if (input) {
791-
this._input = angular.element(input);
792-
this._replaceNode(this._input);
793-
}
795+
if (input) this._replaceNode(input);
794796
}
795797
/**********************
796798
* PUBLIC

0 commit comments

Comments
 (0)
0