1
1
/*
2
- angular-file-upload v1.0.3
2
+ angular-file-upload v1.1.0
3
3
https://github.com/nervgh/angular-file-upload
4
4
*/
5
5
( function ( angular , factory ) {
@@ -78,28 +78,27 @@ module
78
78
FileUploader . prototype . isHTML5 = ! ! ( $window . File && $window . FormData ) ;
79
79
/**
80
80
* Adds items to the queue
81
- * @param {FileList| File|HTMLInputElement } files
81
+ * @param {File|HTMLInputElement|Object|FileList|Array<Object> } files
82
82
* @param {Object } [options]
83
83
* @param {Array<Function>|String } filters
84
84
*/
85
85
FileUploader . prototype . addToQueue = function ( files , options , filters ) {
86
- var list = angular . isElement ( files ) ? [ files ] : files ;
86
+ var list = this . isArrayLikeObject ( files ) ? files : [ files ] ;
87
87
var arrayOfFilters = this . _getFilters ( filters ) ;
88
88
var count = this . queue . length ;
89
89
var addedFileItems = [ ] ;
90
90
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 ) ;
93
93
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 ) ;
97
96
addedFileItems . push ( fileItem ) ;
98
97
this . queue . push ( fileItem ) ;
99
98
this . _onAfterAddingFile ( fileItem ) ;
100
99
} else {
101
100
var filter = this . filters [ this . _failFilterIndex ] ;
102
- this . _onWhenAddingFileFailed ( item , filter , options ) ;
101
+ this . _onWhenAddingFileFailed ( temp , filter , options ) ;
103
102
}
104
103
} , this ) ;
105
104
@@ -199,6 +198,14 @@ module
199
198
FileUploader . prototype . isFileLikeObject = function ( value ) {
200
199
return value instanceof FileUploader . FileLikeObject ;
201
200
} ;
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
+ } ;
202
209
/**
203
210
* Returns a index of item from the queue
204
211
* @param {Item|Number } value
@@ -381,16 +388,6 @@ module
381
388
return filter . fn . call ( this , file , options ) ;
382
389
} , this ) ;
383
390
} ;
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
- } ;
394
391
/**
395
392
* Checks whether upload successful
396
393
* @param {Number } status
@@ -695,6 +692,10 @@ module
695
692
* @borrows FileUploader.prototype.isFileLikeObject
696
693
*/
697
694
FileUploader . isFileLikeObject = FileUploader . prototype . isFileLikeObject ;
695
+ /**
696
+ * @borrows FileUploader.prototype.isArrayLikeObject
697
+ */
698
+ FileUploader . isArrayLikeObject = FileUploader . prototype . isArrayLikeObject ;
698
699
/**
699
700
* @borrows FileUploader.prototype.isHTML5
700
701
*/
@@ -720,17 +721,19 @@ module
720
721
721
722
/**
722
723
* Creates an instance of FileLikeObject
723
- * @param {String| Object } fakePathOrObject
724
+ * @param {File|HTMLInputElement| Object } fileOrInput
724
725
* @constructor
725
726
*/
726
- function FileLikeObject ( fakePathOrObject ) {
727
+ function FileLikeObject ( fileOrInput ) {
728
+ var isInput = angular . isElement ( fileOrInput ) ;
729
+ var fakePathOrObject = isInput ? fileOrInput . value : fileOrInput ;
727
730
var postfix = angular . isString ( fakePathOrObject ) ? 'FakePath' : 'Object' ;
728
731
var method = '_createFrom' + postfix ;
729
732
this [ method ] ( fakePathOrObject ) ;
730
733
}
731
734
732
735
/**
733
- * Creates file from fake path string
736
+ * Creates file like object from fake path string
734
737
* @param {String } path
735
738
* @private
736
739
*/
@@ -741,7 +744,7 @@ module
741
744
this . name = path . slice ( path . lastIndexOf ( '/' ) + path . lastIndexOf ( '\\' ) + 2 ) ;
742
745
} ;
743
746
/**
744
- * Creates file from object
747
+ * Creates file like object from object
745
748
* @param {File|FileLikeObject } object
746
749
* @private
747
750
*/
@@ -757,13 +760,14 @@ module
757
760
/**
758
761
* Creates an instance of FileItem
759
762
* @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
763
765
* @constructor
764
766
*/
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 ;
767
771
768
772
angular . extend ( this , {
769
773
url : uploader . url ,
@@ -775,7 +779,7 @@ module
775
779
method : uploader . method
776
780
} , options , {
777
781
uploader : uploader ,
778
- file : new FileUploader . FileLikeObject ( file ) ,
782
+ file : new FileUploader . FileLikeObject ( some ) ,
779
783
isReady : false ,
780
784
isUploading : false ,
781
785
isUploaded : false ,
@@ -784,13 +788,11 @@ module
784
788
isError : false ,
785
789
progress : 0 ,
786
790
index : null ,
787
- _file : file
791
+ _file : file ,
792
+ _input : input
788
793
} ) ;
789
794
790
- if ( input ) {
791
- this . _input = angular . element ( input ) ;
792
- this . _replaceNode ( this . _input ) ;
793
- }
795
+ if ( input ) this . _replaceNode ( input ) ;
794
796
}
795
797
/**********************
796
798
* PUBLIC
0 commit comments