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