2016-10-14 01:03:49 +00:00
/ * S o c k e t I O F i l e U p l o a d C l i e n t - S i d e L i b r a r y
* Copyright ( C ) 2015 Shane Carr and others
* Released under the X11 License
* For more information , visit : https : //github.com/vote539/socketio-file-upload
* /
( function ( g , d , f ) { "function" === typeof define && define . amd ? define ( d , f ) : "object" === typeof module && module . exports ? module . exports = f ( ) : g [ d ] = f ( ) } ) ( this , "SocketIOFileUpload" , function ( ) { return function ( g ) { var d = this ; if ( ! window . File || ! window . FileReader ) throw Error ( "Socket.IO File Upload: Browser Not Supported" ) ; var f = { } , q = [ ] , u = [ ] , k = { } ; d . fileInputElementId = "siofu_input" ; d . resetFileInputs = ! 0 ; d . useText = ! 1 ; d . serializedOctets = ! 1 ; d . useBuffer = ! 0 ; d . chunkSize = 102400 ; d . chunkDelay = 0 ; var r = function ( a , b ) { var c = document . createEvent ( "Event" ) ;
c . initEvent ( a , ! 1 , ! 1 ) ; for ( var y in b ) b . hasOwnProperty ( y ) && ( c [ y ] = b [ y ] ) ; return d . dispatchEvent ( c ) } , p = [ ] , e = function ( a , b , c , d ) { a . addEventListener ( b , c , d ) ; p . push ( arguments ) } , t = function ( a , b , c , d ) { a . removeEventListener && a . removeEventListener ( b , c , d ) } , z = function ( ) { for ( var a = p . length - 1 ; 0 <= a ; a -- ) t . apply ( this , p [ a ] ) ; p = [ ] } , A = function ( a ) { if ( null !== d . maxFileSize && a . size > d . maxFileSize ) r ( "error" , { file : a , message : "Attempt by client to upload file exceeding the maximum file size" , code : 1 } ) ; else if ( r ( "start" , { file : a } ) ) { var b =
new FileReader , c = q . length , f = d . useText , v = 0 , k ; b . _realReader && ( b = b . _realReader ) ; q . push ( a ) ; var p = { id : c } , w = d . chunkSize ; if ( w >= a . size || 0 >= w ) w = a . size ; var x = function ( ) { if ( ! p . abort ) { var c = a . slice ( v , Math . min ( v + w , a . size ) ) ; f ? b . readAsText ( c ) : b . readAsArrayBuffer ( c ) } } , l = function ( e ) { if ( ! p . abort ) { var l = Math . min ( v + w , a . size ) ; a : { var q = v ; e = e . target . result ; var u = ! 1 ; if ( ! f ) try { var m = new Uint8Array ( e ) ; if ( d . serializedOctets ) e = m ; else if ( d . useBuffer ) e = m . buffer ; else { var u = ! 0 , n , t = m . buffer . byteLength , h = "" ; for ( n = 0 ; n < t ; n += 3 ) h += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ m [ n ] >>
2 ] , h += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ ( m [ n ] & 3 ) << 4 | m [ n + 1 ] >> 4 ] , h += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ ( m [ n + 1 ] & 15 ) << 2 | m [ n + 2 ] >> 6 ] , h += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ m [ n + 2 ] & 63 ] ; 2 === t % 3 ? h = h . substring ( 0 , h . length - 1 ) + "=" : 1 === t % 3 && ( h = h . substring ( 0 , h . length - 2 ) + "==" ) ; e = h } } catch ( z ) { g . emit ( "siofu_done" , { id : c , interrupt : ! 0 } ) ; break a } g . emit ( "siofu_progress" , { id : c , size : a . size , start : q , end : l , content : e , base64 : u } ) } r ( "progress" ,
2016-10-14 18:55:20 +00:00
{ file : a , bytesLoaded : l , name : k } ) ; v += w ; v < a . size ? setTimeout ( x , d . chunkDelay ) : ( g . emit ( "siofu_done" , { id : c } ) , r ( "load" , { file : a , reader : b , name : k } ) ) } } ; e ( b , "load" , l ) ; e ( b , "error" , function ( ) { g . emit ( "siofu_done" , { id : c , interrupt : ! 0 } ) ; t ( b , "load" , l ) } ) ; e ( b , "abort" , function ( ) { g . emit ( "siofu_done" , { id : c , interrupt : ! 0 } ) ; t ( b , "load" , l ) } ) ; g . emit ( "siofu_start" , { name : a . name , mtime : a . lastModified , meta : a . meta , size : a . size , encoding : f ? "text" : "octet" , id : c } ) ; u . push ( function ( a ) { k = a ; x ( ) } ) ; return p } } , x = function ( a ) { if ( 0 !== a . length ) { for ( var b =
2016-10-14 01:03:49 +00:00
0 ; b < a . length ; b ++ ) a [ b ] . meta || ( a [ b ] . meta = { } ) ; if ( r ( "choose" , { files : a } ) ) for ( b = 0 ; b < a . length ; b ++ ) { var c = A ( a [ b ] ) ; k [ c . id ] = c } } } , l = function ( a ) { var b = a . target . files || a . dataTransfer . files ; a . preventDefault ( ) ; x ( b ) ; if ( d . resetFileInputs ) { try { a . target . value = "" } catch ( e ) { } if ( a . target . value ) { var b = document . createElement ( "form" ) , c = a . target . parentNode , f = a . target . nextSibling ; b . appendChild ( a . target ) ; b . reset ( ) ; c . insertBefore ( a . target , f ) } } } ; this . submitFiles = function ( a ) { a && x ( a ) } ; this . listenOnSubmit = function ( a , b ) { b . files && e ( a ,
"click" , function ( ) { x ( b . files ) } , ! 1 ) } ; this . listenOnArraySubmit = function ( a , b ) { for ( var c in b ) this . listenOnSubmit ( a , b [ c ] ) } ; this . listenOnInput = function ( a ) { a . files && e ( a , "change" , l , ! 1 ) } ; this . listenOnDrop = function ( a ) { e ( a , "dragover" , function ( a ) { a . preventDefault ( ) } , ! 1 ) ; e ( a , "drop" , l ) } ; this . prompt = function ( ) { var a ; a = document . getElementById ( d . fileInputElementId ) ; a || ( a = document . createElement ( "input" ) , a . setAttribute ( "type" , "file" ) , a . setAttribute ( "id" , d . fileInputElementId ) , a . style . display = "none" , document . body . appendChild ( a ) ) ;
e ( a , "change" , l , ! 1 ) ; var b = document . createEvent ( "MouseEvents" ) ; b . initMouseEvent ( "click" , ! 0 , ! 0 , window , 0 , 0 , 0 , 0 , 0 , ! 1 , ! 1 , ! 1 , ! 1 , 0 , null ) ; a . dispatchEvent ( b ) } ; this . destroy = function ( ) { z ( ) ; var a = document . getElementById ( d . fileInputElementId ) ; a && a . parentNode . removeChild ( a ) ; for ( var b in k ) k . hasOwnProperty ( b ) && ( k [ b ] . abort = ! 0 ) ; k = u = q = f = null } ; this . addEventListener = function ( a , b ) { f [ a ] || ( f [ a ] = [ ] ) ; f [ a ] . push ( b ) } ; this . removeEventListener = function ( a , b ) { if ( ! f [ a ] ) return ! 1 ; for ( var c = 0 ; c < f [ a ] . length ; c ++ ) if ( f [ a ] [ c ] === b ) return f [ a ] . splice ( c ,
2016-10-14 18:55:20 +00:00
1 ) , ! 0 ; return ! 1 } ; this . dispatchEvent = function ( a ) { var b = f [ a . type ] ; if ( ! b ) return ! 0 ; for ( var c = ! 0 , d = 0 ; d < b . length ; d ++ ) ! 1 === b [ d ] ( a ) && ( c = ! 1 ) ; return c } ; e ( g , "siofu_ready" , function ( a ) { u [ a . id ] ( a . name ) } ) ; e ( g , "siofu_complete" , function ( a ) { r ( "complete" , { file : q [ a . id ] , detail : a . detail , success : a . success } ) } ) ; e ( g , "siofu_error" , function ( a ) { r ( "error" , { file : q [ a . id ] , message : a . message , code : 0 } ) ; k [ a . id ] . abort = ! 0 } ) } } ) ;