2013-10-23 14:28:08 +02:00
/ * *
* mOxie - multi - runtime File API & XMLHttpRequest L2 Polyfill
2014-05-13 17:23:48 -07:00
* v1 . 2.1
2013-10-23 14:28:08 +02:00
*
* Copyright 2013 , Moxiecode Systems AB
* Released under GPL License .
*
* License : http : //www.plupload.com/license
* Contributing : http : //www.plupload.com/contributing
*
2014-05-13 17:23:48 -07:00
* Date : 2014 - 05 - 14
2013-10-23 14:28:08 +02:00
* /
2014-05-13 17:23:48 -07:00
! function ( e , t ) { "use strict" ; function n ( e , t ) { for ( var n , i = [ ] , r = 0 ; r < e . length ; ++ r ) { if ( n = s [ e [ r ] ] || o ( e [ r ] ) , ! n ) throw "module definition dependecy not found: " + e [ r ] ; i . push ( n ) } t . apply ( null , i ) } function i ( e , i , r ) { if ( "string" != typeof e ) throw "invalid module definition, module id must be defined and be a string" ; if ( i === t ) throw "invalid module definition, dependencies must be specified" ; if ( r === t ) throw "invalid module definition, definition function must be specified" ; n ( i , function ( ) { s [ e ] = r . apply ( null , arguments ) } ) } function r ( e ) { return ! ! s [ e ] } function o ( t ) { for ( var n = e , i = t . split ( /[.\/]/ ) , r = 0 ; r < i . length ; ++ r ) { if ( ! n [ i [ r ] ] ) return ; n = n [ i [ r ] ] } return n } function a ( n ) { for ( var i = 0 ; i < n . length ; i ++ ) { for ( var r = e , o = n [ i ] , a = o . split ( /[.\/]/ ) , u = 0 ; u < a . length - 1 ; ++ u ) r [ a [ u ] ] === t && ( r [ a [ u ] ] = { } ) , r = r [ a [ u ] ] ; r [ a [ a . length - 1 ] ] = s [ o ] } } var s = { } , u = "moxie/core/utils/Basic" , c = "moxie/core/I18n" , l = "moxie/core/utils/Mime" , d = "moxie/core/utils/Env" , f = "moxie/core/utils/Dom" , h = "moxie/core/Exceptions" , p = "moxie/core/EventTarget" , m = "moxie/core/utils/Encode" , g = "moxie/runtime/Runtime" , v = "moxie/runtime/RuntimeClient" , y = "moxie/file/Blob" , w = "moxie/file/File" , E = "moxie/file/FileInput" , _ = "moxie/file/FileDrop" , x = "moxie/runtime/RuntimeTarget" , b = "moxie/file/FileReader" , R = "moxie/core/utils/Url" , T = "moxie/file/FileReaderSync" , A = "moxie/xhr/FormData" , S = "moxie/xhr/XMLHttpRequest" , O = "moxie/runtime/Transporter" , I = "moxie/image/Image" , D = "moxie/runtime/html5/Runtime" , N = "moxie/runtime/html5/file/Blob" , L = "moxie/core/utils/Events" , M = "moxie/runtime/html5/file/FileInput" , C = "moxie/runtime/html5/file/FileDrop" , F = "moxie/runtime/html5/file/FileReader" , H = "moxie/runtime/html5/xhr/XMLHttpRequest" , P = "moxie/runtime/html5/utils/BinaryReader" , k = "moxie/runtime/html5/image/JPEGHeaders" , U = "moxie/runtime/html5/image/ExifParser" , B = "moxie/runtime/html5/image/JPEG" , z = "moxie/runtime/html5/image/PNG" , G = "moxie/runtime/html5/image/ImageInfo" , q = "moxie/runtime/html5/image/MegaPixel" , X = "moxie/runtime/html5/image/Image" , j = "moxie/runtime/flash/Runtime" , V = "moxie/runtime/flash/file/Blob" , W = "moxie/runtime/flash/file/FileInput" , Y = "moxie/runtime/flash/file/FileReader" , $ = "moxie/runtime/flash/file/FileReaderSync" , J = "moxie/runtime/flash/xhr/XMLHttpRequest" , Z = "moxie/runtime/flash/runtime/Transporter" , K = "moxie/runtime/flash/image/Image" , Q = "moxie/runtime/silverlight/Runtime" , et = "moxie/runtime/silverlight/file/Blob" , tt = "moxie/runtime/silverlight/file/FileInput" , nt = "moxie/runtime/silverlight/file/FileDrop" , it = "moxie/runtime/silverlight/file/FileReader" , rt = "moxie/runtime/silverlight/file/FileReaderSync" , ot = "moxie/runtime/silverlight/xhr/XMLHttpRequest" , at = "moxie/runtime/silverlight/runtime/Transporter" , st = "moxie/runtime/silverlight/image/Image" , ut = "moxie/runtime/html4/Runtime" , ct = "moxie/runtime/html4/file/FileInput" , lt = "moxie/runtime/html4/file/FileReader" , dt = "moxie/runtime/html4/xhr/XMLHttpRequest" , ft = "moxie/runtime/html4/image/Image" ; i ( u , [ ] , function ( ) { var e = function ( e ) { var t ; return e === t ? "undefined" : null === e ? "null" : e . nodeType ? "node" : { } . toString . call ( e ) . match ( /\s([a-z|A-Z]+)/ ) [ 1 ] . toLowerCase ( ) } , t = function ( i ) { var r ; return n ( arguments , function ( o , s ) { s > 0 && n ( o , function ( n , o ) { n !== r && ( e ( i [ o ] ) === e ( n ) && ~ a ( e ( n ) , [ "array" , "object" ] ) ? t ( i [ o ] , n ) : i [ o ] = n ) } ) } ) , i } , n = function ( e , t ) { var n , i , r , o ; if ( e ) { try { n = e . length } catch ( a ) { n = o } if ( n === o ) { for ( i in e ) if ( e . hasOwnProperty ( i ) && t ( e [ i ] , i ) === ! 1 ) return } else for ( r = 0 ; n > r ; r ++ ) if ( t ( e [ r ] , r ) === ! 1 ) return } } , i = function ( t ) { var n ; if ( ! t || "object" !== e ( t ) ) return ! 0 ; for ( n in t ) return ! 1 ; return ! 0 } , r = function ( t , n ) { function i ( r ) { "function" === e ( t [ r ] ) && t [ r ] ( function ( e ) { ++ r < o && ! e ? i ( r ) : n ( e ) } ) } var r = 0 , o = t . length ; "function" !== e ( n ) && ( n = function ( ) { } ) , t && t . length || n ( ) , i ( r ) } , o = function ( e , t ) { var i = 0 , r = e . length , o = new Array ( r ) ; n ( e , function ( e , n ) { e ( function ( e ) { if ( e ) return t ( e ) ; var a = [ ] . slice . call ( arguments ) ; a . shift ( ) , o [ n ] = a , i ++ , i === r && ( o . unshift ( null ) , t . apply ( this , o ) ) } ) } ) } , a = function ( e , t ) { if ( t ) { if ( Array . prototype . indexOf ) return Array . prototype . indexOf . call ( t , e ) ; for ( var n = 0 , i = t . length ; i > n ; n ++ ) if ( t [ n ] === e ) return n } return - 1 } , s = function ( t , n ) { var i = [ ] ; "array" !== e ( t ) && ( t = [ t ] ) , "array" !== e ( n ) && ( n = [ n ] ) ; for ( var r in t ) - 1 === a ( t [ r ] , n ) && i . push ( t [ r ] ) ; return i . length ? i : ! 1 } , u = function ( e ,
} , destroy : function ( ) { this . abort ( ) , c && ( c . getRuntime ( ) . exec . call ( this , "FileReader" , "destroy" ) , c . disconnectRuntime ( ) ) , o = c = null } } ) } var u = [ "loadstart" , "progress" , "load" , "abort" , "error" , "loadend" ] ; return s . EMPTY = 0 , s . LOADING = 1 , s . DONE = 2 , s . prototype = i . instance , s } ) , i ( R , [ ] , function ( ) { var e = function ( t , n ) { for ( var i = [ "source" , "scheme" , "authority" , "userInfo" , "user" , "pass" , "host" , "port" , "relative" , "path" , "directory" , "file" , "query" , "fragment" ] , r = i . length , o = { http : 80 , https : 443 } , a = { } , s = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/ , u = s . exec ( t || "" ) ; r -- ; ) u [ r ] && ( a [ i [ r ] ] = u [ r ] ) ; if ( ! a . scheme ) { n && "string" != typeof n || ( n = e ( n || document . location . href ) ) , a . scheme = n . scheme , a . host = n . host , a . port = n . port ; var c = "" ; /^[^\/]/ . test ( a . path ) && ( c = n . path , /(\/|\/[^\.]+)$/ . test ( c ) ? c += "/" : c = c . replace ( /\/[^\/]+$/ , "/" ) ) , a . path = c + ( a . path || "" ) } return a . port || ( a . port = o [ a . scheme ] || 80 ) , a . port = parseInt ( a . port , 10 ) , a . path || ( a . path = "/" ) , delete a . source , a } , t = function ( t ) { var n = { http : 80 , https : 443 } , i = e ( t ) ; return i . scheme + "://" + i . host + ( i . port !== n [ i . scheme ] ? ":" + i . port : "" ) + i . path + ( i . query ? i . query : "" ) } , n = function ( t ) { function n ( e ) { return [ e . scheme , e . host , e . port ] . join ( "/" ) } return "string" == typeof t && ( t = e ( t ) ) , n ( e ( ) ) === n ( t ) } ; return { parseUrl : e , resolveUrl : t , hasSameOrigin : n } } ) , i ( T , [ u , v , m ] , function ( e , t , n ) { return function ( ) { function i ( e , t ) { if ( ! t . isDetached ( ) ) { var i = this . connectRuntime ( t . ruid ) . exec . call ( this , "FileReaderSync" , "read" , e , t ) ; return this . disconnectRuntime ( ) , i } var r = t . getSource ( ) ; switch ( e ) { case "readAsBinaryString" : return r ; case "readAsDataURL" : return "data:" + t . type + ";base64," + n . btoa ( r ) ; case "readAsText" : for ( var o = "" , a = 0 , s = r . length ; s > a ; a ++ ) o += String . fromCharCode ( r [ a ] ) ; return o } } t . call ( this ) , e . extend ( this , { uid : e . guid ( "uid_" ) , readAsBinaryString : function ( e ) { return i . call ( this , "readAsBinaryString" , e ) } , readAsDataURL : function ( e ) { return i . call ( this , "readAsDataURL" , e ) } , readAsText : function ( e ) { return i . call ( this , "readAsText" , e ) } } ) } } ) , i ( A , [ h , u , y ] , function ( e , t , n ) { function i ( ) { var e , i = [ ] ; t . extend ( this , { append : function ( r , o ) { var a = this , s = t . typeOf ( o ) ; o instanceof n ? e = { name : r , value : o } : "array" === s ? ( r += "[]" , t . each ( o , function ( e ) { a . append ( r , e ) } ) ) : "object" === s ? t . each ( o , function ( e , t ) { a . append ( r + "[" + t + "]" , e ) } ) : "null" === s || "undefined" === s || "number" === s && isNaN ( o ) ? a . append ( r , "false" ) : i . push ( { name : r , value : o . toString ( ) } ) } , hasBlob : function ( ) { return ! ! this . getBlob ( ) } , getBlob : function ( ) { return e && e . value || null } , getBlobName : function ( ) { return e && e . name || null } , each : function ( n ) { t . each ( i , function ( e ) { n ( e . value , e . name ) } ) , e && n ( e . value , e . name ) } , destroy : function ( ) { e = null , i = [ ] } } ) } return i } ) , i ( S , [ u , h , p , m , R , g , x , y , T , A , d , l ] , function ( e , t , n , i , r , o , a , s , u , c , l , d ) { function f ( ) { this . uid = e . guid ( "uid_" ) } function h ( ) { function n ( e , t ) { return y . hasOwnProperty ( e ) ? 1 === arguments . length ? l . can ( "define_property" ) ? y [ e ] : v [ e ] : void ( l . can ( "define_property" ) ? y [ e ] = t : v [ e ] = t ) : void 0 } function u ( t ) { function i ( ) { k && ( k . destroy ( ) , k = null ) , s . dispatchEvent ( "loadend" ) , s = null } function r ( r ) { k . bind ( "LoadStart" , function ( e ) { n ( "readyState" , h . LOADING ) , s . dispatchEvent ( "readystatechange" ) , s . dispatchEvent ( e ) , I && s . upload . dispatchEvent ( e ) } ) , k . bind ( "Progress" , function ( e ) { n ( "readyState" ) !== h . LOADING && ( n ( "readyState" , h . LOADING ) , s . dispatchEvent ( "readystatechange" ) ) , s . dispatchEvent ( e ) } ) , k . bind ( "UploadProgress" , function ( e ) { I && s . upload . dispatchEvent ( { type : "progress" , lengthComputable : ! 1 , total : e . total , loaded : e . loaded } ) } ) , k . bind ( "Load" , function ( t ) { n ( "readyState" , h . DONE ) , n ( "status" , Number ( r . exec . call ( k , "XMLHttpRequest" , "getStatus" ) || 0 ) ) , n ( "statusText" , p [ n ( "status" ) ] || "" ) , n ( "response" , r . exec . call ( k , "XMLHttpRequest" , "getResponse" , n ( "responseType" ) ) ) , ~ e . inArray ( n ( "responseType" ) , [ "text" , "" ] ) ? n ( "responseText" , n ( "response" ) ) : "document" === n ( "responseType" ) && n ( "responseXML" , n ( "response" ) ) , U = r . exec . call ( k , "XMLHttpRequest" , "getAllResponseHeaders" ) , s . dispatchEvent ( "readystatechange" ) , n ( "status" ) > 0 ? ( I && s . upload . dispatchEvent ( t ) , s . dispatchEvent ( t ) ) : ( N = ! 0 , s . dispatchEvent ( "error" ) ) , i ( ) } ) , k . bind ( "Abort" , function ( e ) { s . dispatchEvent ( e ) , i ( ) } ) , k . bind ( "Error" , function ( e ) { N = ! 0 , n ( "readyState" , h . DONE ) , s . dispatchEvent
} , TIFF : function ( ) { return u } , EXIF : function ( ) { var t ; if ( t = i ( c . exifIFD , s . exif ) , t . ExifVersion && "array" === e . typeOf ( t . ExifVersion ) ) { for ( var n = 0 , r = "" ; n < t . ExifVersion . length ; n ++ ) r += String . fromCharCode ( t . ExifVersion [ n ] ) ; t . ExifVersion = r } return t } , GPS : function ( ) { var t ; return t = i ( c . gpsIFD , s . gps ) , t . GPSVersionID && "array" === e . typeOf ( t . GPSVersionID ) && ( t . GPSVersionID = t . GPSVersionID . join ( "." ) ) , t } , setExif : function ( e , t ) { return "PixelXDimension" !== e && "PixelYDimension" !== e ? ! 1 : o ( "exif" , e , t ) } , getBinary : function ( ) { return a . SEGMENT ( ) } , purge : function ( ) { a . init ( null ) , a = u = null , c = { } } } } } ) , i ( B , [ u , h , k , P , U ] , function ( e , t , n , i , r ) { function o ( o ) { function a ( ) { for ( var e = 0 , t , n ; e <= u . length ; ) { if ( t = c . SHORT ( e += 2 ) , t >= 65472 && 65475 >= t ) return e += 5 , { height : c . SHORT ( e ) , width : c . SHORT ( e += 2 ) } ; n = c . SHORT ( e += 2 ) , e += n - 2 } return null } function s ( ) { d && l && c && ( d . purge ( ) , l . purge ( ) , c . init ( null ) , u = f = l = d = c = null ) } var u , c , l , d , f , h ; if ( u = o , c = new i , c . init ( u ) , 65496 !== c . SHORT ( 0 ) ) throw new t . ImageError ( t . ImageError . WRONG _FORMAT ) ; l = new n ( o ) , d = new r , h = ! ! d . init ( l . get ( "app1" ) [ 0 ] ) , f = a . call ( this ) , e . extend ( this , { type : "image/jpeg" , size : u . length , width : f && f . width || 0 , height : f && f . height || 0 , setExif : function ( t , n ) { return h ? ( "object" === e . typeOf ( t ) ? e . each ( t , function ( e , t ) { d . setExif ( t , e ) } ) : d . setExif ( t , n ) , void l . set ( "app1" , d . getBinary ( ) ) ) : ! 1 } , writeHeaders : function ( ) { return arguments . length ? l . restore ( arguments [ 0 ] ) : u = l . restore ( u ) } , stripHeaders : function ( e ) { return l . strip ( e ) } , purge : function ( ) { s . call ( this ) } } ) , h && ( this . meta = { tiff : d . TIFF ( ) , exif : d . EXIF ( ) , gps : d . GPS ( ) } ) } return o } ) , i ( z , [ h , u , P ] , function ( e , t , n ) { function i ( i ) { function r ( ) { var e , t ; return e = a . call ( this , 8 ) , "IHDR" == e . type ? ( t = e . start , { width : u . LONG ( t ) , height : u . LONG ( t += 4 ) } ) : null } function o ( ) { u && ( u . init ( null ) , s = d = c = l = u = null ) } function a ( e ) { var t , n , i , r ; return t = u . LONG ( e ) , n = u . STRING ( e += 4 , 4 ) , i = e += 4 , r = u . LONG ( e + t ) , { length : t , type : n , start : i , CRC : r } } var s , u , c , l , d ; s = i , u = new n , u . init ( s ) , function ( ) { var t = 0 , n = 0 , i = [ 35152 , 20039 , 3338 , 6666 ] ; for ( n = 0 ; n < i . length ; n ++ , t += 2 ) if ( i [ n ] != u . SHORT ( t ) ) throw new e . ImageError ( e . ImageError . WRONG _FORMAT ) } ( ) , d = r . call ( this ) , t . extend ( this , { type : "image/png" , size : s . length , width : d . width , height : d . height , purge : function ( ) { o . call ( this ) } } ) , o . call ( this ) } return i } ) , i ( G , [ u , h , B , z ] , function ( e , t , n , i ) { return function ( r ) { var o = [ n , i ] , a ; a = function ( ) { for ( var e = 0 ; e < o . length ; e ++ ) try { return new o [ e ] ( r ) } catch ( n ) { } throw new t . ImageError ( t . ImageError . WRONG _FORMAT ) } ( ) , e . extend ( this , { type : "" , size : 0 , width : 0 , height : 0 , setExif : function ( ) { } , writeHeaders : function ( e ) { return e } , stripHeaders : function ( e ) { return e } , purge : function ( ) { } } ) , e . extend ( this , a ) , this . purge = function ( ) { a . purge ( ) , a = null } } } ) , i ( q , [ ] , function ( ) { function e ( e , i , r ) { var o = e . naturalWidth , a = e . naturalHeight , s = r . width , u = r . height , c = r . x || 0 , l = r . y || 0 , d = i . getContext ( "2d" ) ; t ( e ) && ( o /= 2 , a /= 2 ) ; var f = 1024 , h = document . createElement ( "canvas" ) ; h . width = h . height = f ; for ( var p = h . getContext ( "2d" ) , m = n ( e , o , a ) , g = 0 ; a > g ; ) { for ( var v = g + f > a ? a - g : f , y = 0 ; o > y ; ) { var w = y + f > o ? o - y : f ; p . clearRect ( 0 , 0 , f , f ) , p . drawImage ( e , - y , - g ) ; var E = y * s / o + c << 0 , _ = Math . ceil ( w * s / o ) , x = g * u / a / m + l << 0 , b = Math . ceil ( v * u / a / m ) ; d . drawImage ( h , 0 , 0 , w , v , E , x , _ , b ) , y += f } g += f } h = p = null } function t ( e ) { var t = e . naturalWidth , n = e . naturalHeight ; if ( t * n > 1048576 ) { var i = document . createElement ( "canvas" ) ; i . width = i . height = 1 ; var r = i . getContext ( "2d" ) ; return r . drawImage ( e , - t + 1 , 0 ) , 0 === r . getImageData ( 0 , 0 , 1 , 1 ) . data [ 3 ] } return ! 1 } function n ( e , t , n ) { var i = document . createElement ( "canvas" ) ; i . width = 1 , i . height = n ; var r = i . getContext ( "2d" ) ; r . drawImage ( e , 0 , 0 ) ; for ( var o = r . getImageData ( 0 , 0 , 1 , n ) . data , a = 0 , s = n , u = n ; u > a ; ) { var c = o [ 4 * ( u - 1 ) + 3 ] ; 0 === c ? s = u : a = u , u = s + a >> 1 } i = null ; var l = u / n ; return 0 === l ? 1 : l } return { isSubsampled : t , renderTo : e } } ) , i ( X , [ D , u , h , m , w , G , q , l , d ] , function ( e , t , n , i , r , o , a , s , u ) { function c ( ) { function e ( ) { if ( ! E && ! y ) throw new n . ImageError ( n . DOMException . INVALID _STATE _ERR ) ; return E || y } function c ( e ) { return i . atob ( e . substring ( e . indexOf ( "base64," ) + 7 ) ) } function l ( e , t ) { return "data:" + ( t || "" ) + ";base64," + i . btoa ( e ) } function d ( e ) { var t = this ; y = new Image , y . onerror = function ( ) { g . call ( this ) , t . trigger ( "error" , n . ImageError . WRONG _FORMAT ) } , y . onload = function ( ) { t . trigger ( "load" ) } , y . src = /^data:[^;]*;base64,/ . test ( e ) ? e : l ( e , x . type ) } function f ( e , t ) { var i = this , r ; return window . FileRea
2013-10-23 14:28:08 +02:00
/ * *
* Plupload - multi - runtime File Uploader
2014-05-13 17:23:48 -07:00
* v2 . 1.2
2013-10-23 14:28:08 +02:00
*
* Copyright 2013 , Moxiecode Systems AB
* Released under GPL License .
*
* License : http : //www.plupload.com/license
* Contributing : http : //www.plupload.com/contributing
*
2014-05-13 17:23:48 -07:00
* Date : 2014 - 05 - 14
2013-10-23 14:28:08 +02:00
* /
2014-06-14 23:06:51 +05:30
; ( function ( e , t , n ) { function s ( e ) { function r ( e , t , r ) { var i = { chunks : "slice_blob" , jpgresize : "send_binary_string" , pngresize : "send_binary_string" , progress : "report_upload_progress" , multi _selection : "select_multiple" , dragdrop : "drag_and_drop" , drop _element : "drag_and_drop" , headers : "send_custom_headers" , urlstream _upload : "send_binary_string" , canSendBinary : "send_binary" , triggerDialog : "summon_file_dialog" } ; i [ e ] ? n [ i [ e ] ] = t : r || ( n [ e ] = t ) } var t = e . required _features , n = { } ; if ( typeof t == "string" ) o . each ( t . split ( /\s*,\s*/ ) , function ( e ) { r ( e , ! 0 ) } ) ; else if ( typeof t == "object" ) o . each ( t , function ( e , t ) { r ( t , e ) } ) ; else if ( t === ! 0 ) { e . chunk _size > 0 && ( n . slice _blob = ! 0 ) ; if ( e . resize . enabled || ! e . multipart ) n . send _binary _string = ! 0 ; o . each ( e , function ( e , t ) { r ( t , ! ! e , ! 0 ) } ) } return n } var r = e . setTimeout , i = { } , o = { VERSION : "2.1.2" , STOPPED : 1 , STARTED : 2 , QUEUED : 1 , UPLOADING : 2 , FAILED : 4 , DONE : 5 , GENERIC _ERROR : - 100 , HTTP _ERROR : - 200 , IO _ERROR : - 300 , SECURITY _ERROR : - 400 , INIT _ERROR : - 500 , FILE _SIZE _ERROR : - 600 , FILE _EXTENSION _ERROR : - 601 , FILE _DUPLICATE _ERROR : - 602 , IMAGE _FORMAT _ERROR : - 700 , MEMORY _ERROR : - 701 , IMAGE _DIMENSIONS _ERROR : - 702 , mimeTypes : t . mimes , ua : t . ua , typeOf : t . typeOf , extend : t . extend , guid : t . guid , get : function ( n ) { var r = [ ] , i ; t . typeOf ( n ) !== "array" && ( n = [ n ] ) ; var s = n . length ; while ( s -- ) i = t . get ( n [ s ] ) , i && r . push ( i ) ; return r . length ? r : null } , each : t . each , getPos : t . getPos , getSize : t . getSize , xmlEncode : function ( e ) { var t = { "<" : "lt" , ">" : "gt" , "&" : "amp" , '"' : "quot" , "'" : "#39" } , n = /[<>&\"\']/g ; return e ? ( "" + e ) . replace ( n , function ( e ) { return t [ e ] ? "&" + t [ e ] + ";" : e } ) : e } , toArray : t . toArray , inArray : t . inArray , addI18n : t . addI18n , translate : t . translate , isEmptyObj : t . isEmptyObj , hasClass : t . hasClass , addClass : t . addClass , removeClass : t . removeClass , getStyle : t . getStyle , addEvent : t . addEvent , removeEvent : t . removeEvent , removeAllEvents : t . removeAllEvents , cleanName : function ( e ) { var t , n ; n = [ /[\300-\306]/g , "A" , /[\340-\346]/g , "a" , /\307/g , "C" , /\347/g , "c" , /[\310-\313]/g , "E" , /[\350-\353]/g , "e" , /[\314-\317]/g , "I" , /[\354-\357]/g , "i" , /\321/g , "N" , /\361/g , "n" , /[\322-\330]/g , "O" , /[\362-\370]/g , "o" , /[\331-\334]/g , "U" , /[\371-\374]/g , "u" ] ; for ( t = 0 ; t < n . length ; t += 2 ) e = e . replace ( n [ t ] , n [ t + 1 ] ) ; return e = e . replace ( /\s+/g , "_" ) , e = e . replace ( /[^a-z0-9_\-\.]+/gi , "" ) , e } , buildUrl : function ( e , t ) { var n = "" ; return o . each ( t , function ( e , t ) { n += ( n ? "&" : "" ) + encodeURIComponent ( t ) + "=" + encodeURIComponent ( e ) } ) , n && ( e += ( e . indexOf ( "?" ) > 0 ? "&" : "?" ) + n ) , e } , formatSize : function ( e ) { function t ( e , t ) { return Math . round ( e * Math . pow ( 10 , t ) ) / Math . pow ( 10 , t ) } if ( e === n || /\D/ . test ( e ) ) return o . translate ( "N/A" ) ; var r = Math . pow ( 1024 , 4 ) ; return e > r ? t ( e / r , 1 ) + " " + o . translate ( "tb" ) : e > ( r /= 1024 ) ? t ( e / r , 1 ) + " " + o . translate ( "gb" ) : e > ( r /= 1024 ) ? t ( e / r , 1 ) + " " + o . translate ( "mb" ) : e > 1024 ? Math . round ( e / 1024 ) + " " + o . translate ( "kb" ) : e + " " + o . translate ( "b" ) } , parseSize : t . parseSizeStr , predictRuntime : function ( e , n ) { var r , i ; return r = new o . Uploader ( e ) , i = t . Runtime . thatCan ( r . getOption ( ) . required _features , n || e . runtimes ) , r . destroy ( ) , i } , addFileFilter : function ( e , t ) { i [ e ] = t } } ; o . addFileFilter ( "mime_types" , function ( e , t , n ) { e . length && ! e . regexp . test ( t . name ) ? ( this . trigger ( "Error" , { code : o . FILE _EXTENSION _ERROR , message : o . translate ( "File extension error." ) , file : t } ) , n ( ! 1 ) ) : n ( ! 0 ) } ) , o . addFileFilter ( "max_file_size" , function ( e , t , n ) { var r ; e = o . parseSize ( e ) , t . size !== r && e && t . size > e ? ( this . trigger ( "Error" , { code : o . FILE _SIZE _ERROR , message : o . translate ( "File size error." ) , file : t } ) , n ( ! 1 ) ) : n ( ! 0 ) } ) , o . addFileFilter ( "prevent_duplicates" , function ( e , t , n ) { if ( e ) { var r = this . files . length ; while ( r -- ) if ( t . name === this . files [ r ] . name && t . size === this . files [ r ] . size ) { this . trigger ( "Error" , { code : o . FILE _DUPLICATE _ERROR , message : o . translate ( "Duplicate file error." ) , file : t } ) , n ( ! 1 ) ; return } } n ( ! 0 ) } ) , o . Uploader = function ( e ) { function g ( ) { var e , t = 0 , n ; if ( this . state == o . STARTED ) { for ( n = 0 ; n < f . length ; n ++ ) ! e && f [ n ] . status == o . QUEUED ? ( e = f [ n ] , this . trigger ( "BeforeUpload" , e ) && ( e . status = o . UPLOADING , this . trigger ( "UploadFile" , e ) ) ) : t ++ ; t == f . length && ( this . state !== o . STOPPED && ( this . state = o . STOPPED , this . trigger ( "StateChanged" ) ) , this . trigger ( "UploadComplete" , f ) ) } } function y ( e ) { e . percent = e . size > 0 ? Math . ceil ( e . loaded / e . size * 100 ) : 100 , b ( ) } function b ( ) { var e , t ; d . reset ( ) ; for ( e = 0 ; e < f . length ; e ++ ) t = f [ e ] , t . size !== n ? ( d . size += t . origSize , d . loaded += t . loaded * t . origSize / t . si