2016-04-06 23:28:27 +08:00
/ *
SWFObject v2 . 2 < http : //code.google.com/p/swfobject/>
is released under the MIT License < http : //www.opensource.org/licenses/mit-license.php>
* /
; var swfobject = function ( ) { var D = "undefined" , r = "object" , S = "Shockwave Flash" , W = "ShockwaveFlash.ShockwaveFlash" , q = "application/x-shockwave-flash" , R = "SWFObjectExprInst" , x = "onreadystatechange" , O = window , j = document , t = navigator , T = false , U = [ h ] , o = [ ] , N = [ ] , I = [ ] , l , Q , E , B , J = false , a = false , n , G , m = true , M = function ( ) { var aa = typeof j . getElementById != D && typeof j . getElementsByTagName != D && typeof j . createElement != D , ah = t . userAgent . toLowerCase ( ) , Y = t . platform . toLowerCase ( ) , ae = Y ? /win/ . test ( Y ) : /win/ . test ( ah ) , ac = Y ? /mac/ . test ( Y ) : /mac/ . test ( ah ) , af = /webkit/ . test ( ah ) ? parseFloat ( ah . replace ( /^.*webkit\/(\d+(\.\d+)?).*$/ , "$1" ) ) : false , X = ! + "\v1" , ag = [ 0 , 0 , 0 ] , ab = null ;
if ( typeof t . plugins != D && typeof t . plugins [ S ] == r ) { ab = t . plugins [ S ] . description ; if ( ab && ! ( typeof t . mimeTypes != D && t . mimeTypes [ q ] && ! t . mimeTypes [ q ] . enabledPlugin ) ) { T = true ;
X = false ; ab = ab . replace ( /^.*\s+(\S+\s+\S+$)/ , "$1" ) ; ag [ 0 ] = parseInt ( ab . replace ( /^(.*)\..*$/ , "$1" ) , 10 ) ; ag [ 1 ] = parseInt ( ab . replace ( /^.*\.(.*)\s.*$/ , "$1" ) , 10 ) ;
ag [ 2 ] = /[a-zA-Z]/ . test ( ab ) ? parseInt ( ab . replace ( /^.*[a-zA-Z]+(.*)$/ , "$1" ) , 10 ) : 0 ; } } else { if ( typeof O . ActiveXObject != D ) { try { var ad = new ActiveXObject ( W ) ; if ( ad ) { ab = ad . GetVariable ( "$version" ) ;
if ( ab ) { X = true ; ab = ab . split ( " " ) [ 1 ] . split ( "," ) ; ag = [ parseInt ( ab [ 0 ] , 10 ) , parseInt ( ab [ 1 ] , 10 ) , parseInt ( ab [ 2 ] , 10 ) ] ; } } } catch ( Z ) { } } } return { w3 : aa , pv : ag , wk : af , ie : X , win : ae , mac : ac } ;
} ( ) , k = function ( ) { if ( ! M . w3 ) { return ; } if ( ( typeof j . readyState != D && j . readyState == "complete" ) || ( typeof j . readyState == D && ( j . getElementsByTagName ( "body" ) [ 0 ] || j . body ) ) ) { f ( ) ;
} if ( ! J ) { if ( typeof j . addEventListener != D ) { j . addEventListener ( "DOMContentLoaded" , f , false ) ; } if ( M . ie && M . win ) { j . attachEvent ( x , function ( ) { if ( j . readyState == "complete" ) { j . detachEvent ( x , arguments . callee ) ;
f ( ) ; } } ) ; if ( O == top ) { ( function ( ) { if ( J ) { return ; } try { j . documentElement . doScroll ( "left" ) ; } catch ( X ) { setTimeout ( arguments . callee , 0 ) ; return ; } f ( ) ; } ) ( ) ; } } if ( M . wk ) { ( function ( ) { if ( J ) { return ;
} if ( ! /loaded|complete/ . test ( j . readyState ) ) { setTimeout ( arguments . callee , 0 ) ; return ; } f ( ) ; } ) ( ) ; } s ( f ) ; } } ( ) ; function f ( ) { if ( J ) { return ; } try { var Z = j . getElementsByTagName ( "body" ) [ 0 ] . appendChild ( C ( "span" ) ) ;
Z . parentNode . removeChild ( Z ) ; } catch ( aa ) { return ; } J = true ; var X = U . length ; for ( var Y = 0 ; Y < X ; Y ++ ) { U [ Y ] ( ) ; } } function K ( X ) { if ( J ) { X ( ) ; } else { U [ U . length ] = X ; } } function s ( Y ) { if ( typeof O . addEventListener != D ) { O . addEventListener ( "load" , Y , false ) ;
} else { if ( typeof j . addEventListener != D ) { j . addEventListener ( "load" , Y , false ) ; } else { if ( typeof O . attachEvent != D ) { i ( O , "onload" , Y ) ; } else { if ( typeof O . onload == "function" ) { var X = O . onload ;
O . onload = function ( ) { X ( ) ; Y ( ) ; } ; } else { O . onload = Y ; } } } } } function h ( ) { if ( T ) { V ( ) ; } else { H ( ) ; } } function V ( ) { var X = j . getElementsByTagName ( "body" ) [ 0 ] ; var aa = C ( r ) ;
aa . setAttribute ( "type" , q ) ; var Z = X . appendChild ( aa ) ; if ( Z ) { var Y = 0 ; ( function ( ) { if ( typeof Z . GetVariable != D ) { var ab = Z . GetVariable ( "$version" ) ; if ( ab ) { ab = ab . split ( " " ) [ 1 ] . split ( "," ) ;
M . pv = [ parseInt ( ab [ 0 ] , 10 ) , parseInt ( ab [ 1 ] , 10 ) , parseInt ( ab [ 2 ] , 10 ) ] ; } } else { if ( Y < 10 ) { Y ++ ; setTimeout ( arguments . callee , 10 ) ; return ; } } X . removeChild ( aa ) ; Z = null ; H ( ) ;
} ) ( ) ; } else { H ( ) ; } } function H ( ) { var ag = o . length ; if ( ag > 0 ) { for ( var af = 0 ; af < ag ; af ++ ) { var Y = o [ af ] . id ; var ab = o [ af ] . callbackFn ; var aa = { success : false , id : Y } ; if ( M . pv [ 0 ] > 0 ) { var ae = c ( Y ) ;
if ( ae ) { if ( F ( o [ af ] . swfVersion ) && ! ( M . wk && M . wk < 312 ) ) { w ( Y , true ) ; if ( ab ) { aa . success = true ; aa . ref = z ( Y ) ; ab ( aa ) ; } } else { if ( o [ af ] . expressInstall && A ( ) ) { var ai = { } ; ai . data = o [ af ] . expressInstall ;
ai . width = ae . getAttribute ( "width" ) || "0" ; ai . height = ae . getAttribute ( "height" ) || "0" ; if ( ae . getAttribute ( "class" ) ) { ai . styleclass = ae . getAttribute ( "class" ) ; } if ( ae . getAttribute ( "align" ) ) { ai . align = ae . getAttribute ( "align" ) ;
} var ah = { } ; var X = ae . getElementsByTagName ( "param" ) ; var ac = X . length ; for ( var ad = 0 ; ad < ac ; ad ++ ) { if ( X [ ad ] . getAttribute ( "name" ) . toLowerCase ( ) != "movie" ) { ah [ X [ ad ] . getAttribute ( "name" ) ] = X [ ad ] . getAttribute ( "value" ) ;
} } P ( ai , ah , Y , ab ) ; } else { p ( ae ) ; if ( ab ) { ab ( aa ) ; } } } } } else { w ( Y , true ) ; if ( ab ) { var Z = z ( Y ) ; if ( Z && typeof Z . SetVariable != D ) { aa . success = true ; aa . ref = Z ; } ab ( aa ) ; } } } } } function z ( aa ) { var X = null ;
var Y = c ( aa ) ; if ( Y && Y . nodeName == "OBJECT" ) { if ( typeof Y . SetVariable != D ) { X = Y ; } else { var Z = Y . getElementsByTagName ( r ) [ 0 ] ; if ( Z ) { X = Z ; } } } return X ; } function A ( ) { return ! a && F ( "6.0.65" ) && ( M . win || M . mac ) && ! ( M . wk && M . wk < 312 ) ;
} function P ( aa , ab , X , Z ) { a = true ; E = Z || null ; B = { success : false , id : X } ; var ae = c ( X ) ; if ( ae ) { if ( ae . nodeName == "OBJECT" ) { l = g ( ae ) ; Q = null ; } else { l = ae ; Q = X ; } aa . id = R ; if ( typeof aa . width == D || ( ! /%$/ . test ( aa . width ) && parseInt ( aa . width , 10 ) < 310 ) ) { aa . width = "310" ;
} if ( typeof aa . height == D || ( ! /%$/ . test ( aa . height ) && parseInt ( aa . height , 10 ) < 137 ) ) { aa . height = "137" ; } j . title = j . title . slice ( 0 , 47 ) + " - Flash Player Installation" ;
var ad = M . ie && M . win ? "ActiveX" : "PlugIn" , ac = "MMredirectURL=" + O . location . toString ( ) . replace ( /&/g , "%26" ) + "&MMplayerType=" + ad + "&MMdoctitle=" + j . title ; if ( typeof ab . flashvars != D ) { ab . flashvars += "&" + ac ;
} else { ab . flashvars = ac ; } if ( M . ie && M . win && ae . readyState != 4 ) { var Y = C ( "div" ) ; X += "SWFObjectNew" ; Y . setAttribute ( "id" , X ) ; ae . parentNode . insertBefore ( Y , ae ) ; ae . style . display = "none" ;
( function ( ) { if ( ae . readyState == 4 ) { ae . parentNode . removeChild ( ae ) ; } else { setTimeout ( arguments . callee , 10 ) ; } } ) ( ) ; } u ( aa , ab , X ) ; } } function p ( Y ) { if ( M . ie && M . win && Y . readyState != 4 ) { var X = C ( "div" ) ;
Y . parentNode . insertBefore ( X , Y ) ; X . parentNode . replaceChild ( g ( Y ) , X ) ; Y . style . display = "none" ; ( function ( ) { if ( Y . readyState == 4 ) { Y . parentNode . removeChild ( Y ) ; } else { setTimeout ( arguments . callee , 10 ) ;
} } ) ( ) ; } else { Y . parentNode . replaceChild ( g ( Y ) , Y ) ; } } function g ( ab ) { var aa = C ( "div" ) ; if ( M . win && M . ie ) { aa . innerHTML = ab . innerHTML ; } else { var Y = ab . getElementsByTagName ( r ) [ 0 ] ;
if ( Y ) { var ad = Y . childNodes ; if ( ad ) { var X = ad . length ; for ( var Z = 0 ; Z < X ; Z ++ ) { if ( ! ( ad [ Z ] . nodeType == 1 && ad [ Z ] . nodeName == "PARAM" ) && ! ( ad [ Z ] . nodeType == 8 ) ) { aa . appendChild ( ad [ Z ] . cloneNode ( true ) ) ;
} } } } } return aa ; } function u ( ai , ag , Y ) { var X , aa = c ( Y ) ; if ( M . wk && M . wk < 312 ) { return X ; } if ( aa ) { if ( typeof ai . id == D ) { ai . id = Y ; } if ( M . ie && M . win ) { var ah = "" ; for ( var ae in ai ) { if ( ai [ ae ] != Object . prototype [ ae ] ) { if ( ae . toLowerCase ( ) == "data" ) { ag . movie = ai [ ae ] ;
} else { if ( ae . toLowerCase ( ) == "styleclass" ) { ah += ' class="' + ai [ ae ] + '"' ; } else { if ( ae . toLowerCase ( ) != "classid" ) { ah += " " + ae + '="' + ai [ ae ] + '"' ; } } } } } var af = "" ; for ( var ad in ag ) { if ( ag [ ad ] != Object . prototype [ ad ] ) { af += '<param name="' + ad + '" value="' + ag [ ad ] + '" />' ;
} } aa . outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + ah + ">" + af + "</object>" ; N [ N . length ] = ai . id ; X = c ( ai . id ) ; } else { var Z = C ( r ) ; Z . setAttribute ( "type" , q ) ;
for ( var ac in ai ) { if ( ai [ ac ] != Object . prototype [ ac ] ) { if ( ac . toLowerCase ( ) == "styleclass" ) { Z . setAttribute ( "class" , ai [ ac ] ) ; } else { if ( ac . toLowerCase ( ) != "classid" ) { Z . setAttribute ( ac , ai [ ac ] ) ;
} } } } for ( var ab in ag ) { if ( ag [ ab ] != Object . prototype [ ab ] && ab . toLowerCase ( ) != "movie" ) { e ( Z , ab , ag [ ab ] ) ; } } aa . parentNode . replaceChild ( Z , aa ) ; X = Z ; } } return X ; } function e ( Z , X , Y ) { var aa = C ( "param" ) ;
aa . setAttribute ( "name" , X ) ; aa . setAttribute ( "value" , Y ) ; Z . appendChild ( aa ) ; } function y ( Y ) { var X = c ( Y ) ; if ( X && X . nodeName == "OBJECT" ) { if ( M . ie && M . win ) { X . style . display = "none" ;
( function ( ) { if ( X . readyState == 4 ) { b ( Y ) ; } else { setTimeout ( arguments . callee , 10 ) ; } } ) ( ) ; } else { X . parentNode . removeChild ( X ) ; } } } function b ( Z ) { var Y = c ( Z ) ; if ( Y ) { for ( var X in Y ) { if ( typeof Y [ X ] == "function" ) { Y [ X ] = null ;
} } Y . parentNode . removeChild ( Y ) ; } } function c ( Z ) { var X = null ; try { X = j . getElementById ( Z ) ; } catch ( Y ) { } return X ; } function C ( X ) { return j . createElement ( X ) ; } function i ( Z , X , Y ) { Z . attachEvent ( X , Y ) ;
I [ I . length ] = [ Z , X , Y ] ; } function F ( Z ) { var Y = M . pv , X = Z . split ( "." ) ; X [ 0 ] = parseInt ( X [ 0 ] , 10 ) ; X [ 1 ] = parseInt ( X [ 1 ] , 10 ) || 0 ; X [ 2 ] = parseInt ( X [ 2 ] , 10 ) || 0 ; return ( Y [ 0 ] > X [ 0 ] || ( Y [ 0 ] == X [ 0 ] && Y [ 1 ] > X [ 1 ] ) || ( Y [ 0 ] == X [ 0 ] && Y [ 1 ] == X [ 1 ] && Y [ 2 ] >= X [ 2 ] ) ) ? true : false ;
} function v ( ac , Y , ad , ab ) { if ( M . ie && M . mac ) { return ; } var aa = j . getElementsByTagName ( "head" ) [ 0 ] ; if ( ! aa ) { return ; } var X = ( ad && typeof ad == "string" ) ? ad : "screen" ; if ( ab ) { n = null ;
G = null ; } if ( ! n || G != X ) { var Z = C ( "style" ) ; Z . setAttribute ( "type" , "text/css" ) ; Z . setAttribute ( "media" , X ) ; n = aa . appendChild ( Z ) ; if ( M . ie && M . win && typeof j . styleSheets != D && j . styleSheets . length > 0 ) { n = j . styleSheets [ j . styleSheets . length - 1 ] ;
} G = X ; } if ( M . ie && M . win ) { if ( n && typeof n . addRule == r ) { n . addRule ( ac , Y ) ; } } else { if ( n && typeof j . createTextNode != D ) { n . appendChild ( j . createTextNode ( ac + " {" + Y + "}" ) ) ;
} } } function w ( Z , X ) { if ( ! m ) { return ; } var Y = X ? "visible" : "hidden" ; if ( J && c ( Z ) ) { c ( Z ) . style . visibility = Y ; } else { v ( "#" + Z , "visibility:" + Y ) ; } } function L ( Y ) { var Z = /[\\\"<>\.;]/ ;
var X = Z . exec ( Y ) != null ; return X && typeof encodeURIComponent != D ? encodeURIComponent ( Y ) : Y ; } var d = function ( ) { if ( M . ie && M . win ) { window . attachEvent ( "onunload" , function ( ) { var ac = I . length ;
for ( var ab = 0 ; ab < ac ; ab ++ ) { I [ ab ] [ 0 ] . detachEvent ( I [ ab ] [ 1 ] , I [ ab ] [ 2 ] ) ; } var Z = N . length ; for ( var aa = 0 ; aa < Z ; aa ++ ) { y ( N [ aa ] ) ; } for ( var Y in M ) { M [ Y ] = null ; } M = null ; for ( var X in swfobject ) { swfobject [ X ] = null ;
} swfobject = null ; } ) ; } } ( ) ; return { registerObject : function ( ab , X , aa , Z ) { if ( M . w3 && ab && X ) { var Y = { } ; Y . id = ab ; Y . swfVersion = X ; Y . expressInstall = aa ; Y . callbackFn = Z ; o [ o . length ] = Y ;
w ( ab , false ) ; } else { if ( Z ) { Z ( { success : false , id : ab } ) ; } } } , getObjectById : function ( X ) { if ( M . w3 ) { return z ( X ) ; } } , embedSWF : function ( ab , ah , ae , ag , Y , aa , Z , ad , af , ac ) { var X = { success : false , id : ah } ;
if ( M . w3 && ! ( M . wk && M . wk < 312 ) && ab && ah && ae && ag && Y ) { w ( ah , false ) ; K ( function ( ) { ae += "" ; ag += "" ; var aj = { } ; if ( af && typeof af === r ) { for ( var al in af ) { aj [ al ] = af [ al ] ; } } aj . data = ab ;
aj . width = ae ; aj . height = ag ; var am = { } ; if ( ad && typeof ad === r ) { for ( var ak in ad ) { am [ ak ] = ad [ ak ] ; } } if ( Z && typeof Z === r ) { for ( var ai in Z ) { if ( typeof am . flashvars != D ) { am . flashvars += "&" + ai + "=" + Z [ ai ] ;
} else { am . flashvars = ai + "=" + Z [ ai ] ; } } } if ( F ( Y ) ) { var an = u ( aj , am , ah ) ; if ( aj . id == ah ) { w ( ah , true ) ; } X . success = true ; X . ref = an ; } else { if ( aa && A ( ) ) { aj . data = aa ; P ( aj , am , ah , ac ) ;
return ; } else { w ( ah , true ) ; } } if ( ac ) { ac ( X ) ; } } ) ; } else { if ( ac ) { ac ( X ) ; } } } , switchOffAutoHideShow : function ( ) { m = false ; } , ua : M , getFlashPlayerVersion : function ( ) { return { major : M . pv [ 0 ] , minor : M . pv [ 1 ] , release : M . pv [ 2 ] } ;
} , hasFlashPlayerVersion : F , createSWF : function ( Z , Y , X ) { if ( M . w3 ) { return u ( Z , Y , X ) ; } else { return undefined ; } } , showExpressInstall : function ( Z , aa , X , Y ) { if ( M . w3 && A ( ) ) { P ( Z , aa , X , Y ) ;
} } , removeSWF : function ( X ) { if ( M . w3 ) { y ( X ) ; } } , createCSS : function ( aa , Z , Y , X ) { if ( M . w3 ) { v ( aa , Z , Y , X ) ; } } , addDomLoadEvent : K , addLoadEvent : s , getQueryParamValue : function ( aa ) { var Z = j . location . search || j . location . hash ;
if ( Z ) { if ( /\?/ . test ( Z ) ) { Z = Z . split ( "?" ) [ 1 ] ; } if ( aa == null ) { return L ( Z ) ; } var Y = Z . split ( "&" ) ; for ( var X = 0 ; X < Y . length ; X ++ ) { if ( Y [ X ] . substring ( 0 , Y [ X ] . indexOf ( "=" ) ) == aa ) { return L ( Y [ X ] . substring ( ( Y [ X ] . indexOf ( "=" ) + 1 ) ) ) ;
} } } return "" ; } , expressInstallCallback : function ( ) { if ( a ) { var X = c ( R ) ; if ( X && l ) { X . parentNode . replaceChild ( l , X ) ; if ( Q ) { w ( Q , true ) ; if ( M . ie && M . win ) { l . style . display = "block" ;
} } if ( E ) { E ( B ) ; } } a = false ; } } } ; } ( ) ;
/ *
Uploadify v3 . 2.1
Copyright ( c ) 2012 Reactive Apps , Ronnie Garcia
Released under the MIT License < http : //www.opensource.org/licenses/mit-license.php>
* /
( function ( $ ) {
// These methods can be called by adding them as the first argument in the uploadify plugin call
var methods = {
init : function ( options , swfUploadOptions ) {
return this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ;
// Clone the original DOM object
var $clone = $this . clone ( ) ;
// Setup the default options
var settings = $ . extend ( {
// Required Settings
$upload : $this , // The ID of the DOM object
swf : 'uploadify.swf' , // The path to the uploadify SWF file
uploader : 'uploadify.php' , // The path to the server-side upload script
// Options
auto : true , // Automatically upload files when added to the queue
buttonClass : '' , // A class name to add to the browse button DOM object
buttonCursor : 'hand' , // The cursor to use with the browse button
buttonImage : null , // (String or null) The path to an image to use for the Flash browse button if not using CSS to style the button
buttonText : 'SELECT FILES' , // The text to use for the browse button
checkExisting : false , // The path to a server-side script that checks for existing files on the server
debug : false , // Turn on swfUpload debugging mode
fileObjName : 'Filedata' , // The name of the file object to use in your server-side script
fileSizeLimit : 0 , // The maximum size of an uploadable file in KB (Accepts units B KB MB GB if string, 0 for no limit)
fileTypeDesc : 'All Files' , // The description for file types in the browse dialog
fileTypeExts : '*.*' , // Allowed extensions in the browse dialog (server-side validation should also be used)
height : 30 , // The height of the browse button
itemTemplate : false , // The template for the file item in the queue
method : 'post' , // The method to use when sending files to the server-side upload script
multi : true , // Allow multiple file selection in the browse dialog
formData : { } , // An object with additional data to send to the server-side upload script with every file upload
preventCaching : true , // Adds a random value to the Flash URL to prevent caching of it (conflicts with existing parameters)
progressData : 'percentage' , // ('percentage' or 'speed') Data to show in the queue item during a file upload
queueID : false , // The ID of the DOM object to use as a file queue (without the #)
queueSizeLimit : 999 , // The maximum number of files that can be in the queue at one time
removeCompleted : true , // Remove queue items from the queue when they are done uploading
removeTimeout : 3 , // The delay in seconds before removing a queue item if removeCompleted is set to true
requeueErrors : false , // Keep errored files in the queue and keep trying to upload them
successTimeout : 30 , // The number of seconds to wait for Flash to detect the server's response after the file has finished uploading
uploadLimit : 0 , // The maximum number of files you can upload
width : 120 , // The width of the browse button
// Events
overrideEvents : [ ] // (Array) A list of default event handlers to skip
/ *
onCancel // Triggered when a file is cancelled from the queue
onClearQueue // Triggered during the 'clear queue' method
onDestroy // Triggered when the uploadify object is destroyed
onDialogClose // Triggered when the browse dialog is closed
onDialogOpen // Triggered when the browse dialog is opened
onDisable // Triggered when the browse button gets disabled
onEnable // Triggered when the browse button gets enabled
onFallback // Triggered is Flash is not detected
onInit // Triggered when Uploadify is initialized
onQueueComplete // Triggered when all files in the queue have been uploaded
onSelectError // Triggered when an error occurs while selecting a file (file size, queue size limit, etc.)
onSelect // Triggered for each file that is selected
onSWFReady // Triggered when the SWF button is loaded
onUploadComplete // Triggered when a file upload completes (success or error)
onUploadError // Triggered when a file upload returns an error
onUploadSuccess // Triggered when a file is uploaded successfully
onUploadProgress // Triggered every time a file progress is updated
onUploadStart // Triggered immediately before a file upload starts
* /
} , options ) ;
// Prepare settings for SWFUpload
var swfUploadSettings = {
assume _success _timeout : settings . successTimeout ,
button _placeholder _id : settings . id ,
button _width : settings . width ,
button _height : settings . height ,
button _text : null ,
button _text _style : null ,
button _text _top _padding : 0 ,
button _text _left _padding : 0 ,
button _action : ( settings . multi ? SWFUpload . BUTTON _ACTION . SELECT _FILES : SWFUpload . BUTTON _ACTION . SELECT _FILE ) ,
button _disabled : false ,
button _cursor : ( settings . buttonCursor == 'arrow' ? SWFUpload . CURSOR . ARROW : SWFUpload . CURSOR . HAND ) ,
button _window _mode : SWFUpload . WINDOW _MODE . TRANSPARENT ,
debug : settings . debug ,
requeue _on _error : settings . requeueErrors ,
file _post _name : settings . fileObjName ,
file _size _limit : settings . fileSizeLimit ,
file _types : settings . fileTypeExts ,
file _types _description : settings . fileTypeDesc ,
file _queue _limit : settings . queueSizeLimit ,
file _upload _limit : settings . uploadLimit ,
flash _url : settings . swf ,
prevent _swf _caching : settings . preventCaching ,
post _params : settings . formData ,
upload _url : settings . uploader ,
use _query _string : ( settings . method == 'get' ) ,
// Event Handlers
file _dialog _complete _handler : handlers . onDialogClose ,
file _dialog _start _handler : handlers . onDialogOpen ,
file _queued _handler : handlers . onSelect ,
file _queue _error _handler : handlers . onSelectError ,
swfupload _loaded _handler : settings . onSWFReady ,
upload _complete _handler : handlers . onUploadComplete ,
upload _error _handler : handlers . onUploadError ,
upload _progress _handler : handlers . onUploadProgress ,
upload _start _handler : handlers . onUploadStart ,
upload _success _handler : handlers . onUploadSuccess
}
// Merge the user-defined options with the defaults
if ( swfUploadOptions ) {
swfUploadSettings = $ . extend ( swfUploadSettings , swfUploadOptions ) ;
}
// Add the user-defined settings to the swfupload object
swfUploadSettings = $ . extend ( swfUploadSettings , settings ) ;
// Detect if Flash is available
var playerVersion = swfobject . getFlashPlayerVersion ( ) ;
var flashInstalled = ( playerVersion . major >= 9 ) ;
if ( flashInstalled ) {
// Create the swfUpload instance
window [ 'uploadify_' + settings . id ] = new SWFUpload ( swfUploadSettings ) ;
var swfuploadify = window [ 'uploadify_' + settings . id ] ;
// Add the SWFUpload object to the elements data object
$this . data ( 'uploadify' , swfuploadify ) ;
// Wrap the instance
var $wrapper = $ ( '<div />' , {
'id' : settings . id ,
'class' : 'uploadify' ,
'css' : {
'height' : settings . height + 'px' ,
'width' : settings . width + 'px'
}
} ) ;
$ ( '#' + swfuploadify . movieName ) . wrap ( $wrapper ) ;
// Recreate the reference to wrapper
$wrapper = $ ( '#' + settings . id ) ;
// Add the data object to the wrapper
$wrapper . data ( 'uploadify' , swfuploadify ) ;
// Create the button
var $button = $ ( '<div />' , {
'id' : settings . id + '-button' ,
'class' : 'uploadify-button ' + settings . buttonClass
} ) ;
if ( settings . buttonImage ) {
$button . css ( {
'background-image' : "url('" + settings . buttonImage + "')" ,
'text-indent' : '-9999px'
} ) ;
}
$button . html ( '<span class="uploadify-button-text">' + settings . buttonText + '</span>' )
. css ( {
'height' : settings . height + 'px' ,
'line-height' : settings . height + 'px' ,
'width' : settings . width + 'px'
} ) ;
// Append the button to the wrapper
$wrapper . append ( $button ) ;
// Adjust the styles of the movie
$ ( '#' + swfuploadify . movieName ) . css ( {
'position' : 'absolute' ,
'z-index' : 1
} ) ;
// Create the file queue
if ( ! settings . queueID ) {
var $queue = $ ( '<div />' , {
'id' : settings . id + '-queue' ,
'class' : 'uploadify-queue'
} ) ;
$wrapper . after ( $queue ) ;
swfuploadify . settings . queueID = settings . id + '-queue' ;
swfuploadify . settings . defaultQueue = true ;
}
// Create some queue related objects and variables
swfuploadify . queueData = {
files : { } , // The files in the queue
filesSelected : 0 , // The number of files selected in the last select operation
filesQueued : 0 , // The number of files added to the queue in the last select operation
filesReplaced : 0 , // The number of files replaced in the last select operation
filesCancelled : 0 , // The number of files that were cancelled instead of replaced
filesErrored : 0 , // The number of files that caused error in the last select operation
uploadsSuccessful : 0 , // The number of files that were successfully uploaded
uploadsErrored : 0 , // The number of files that returned errors during upload
averageSpeed : 0 , // The average speed of the uploads in KB
queueLength : 0 , // The number of files in the queue
queueSize : 0 , // The size in bytes of the entire queue
uploadSize : 0 , // The size in bytes of the upload queue
queueBytesUploaded : 0 , // The size in bytes that have been uploaded for the current upload queue
uploadQueue : [ ] , // The files currently to be uploaded
errorMsg : 'Some files were not added to the queue:'
} ;
// Save references to all the objects
swfuploadify . original = $clone ;
swfuploadify . wrapper = $wrapper ;
swfuploadify . button = $button ;
swfuploadify . queue = $queue ;
// Call the user-defined init event handler
if ( settings . onInit ) settings . onInit . call ( $this , swfuploadify ) ;
} else {
// Call the fallback function
if ( settings . onFallback ) settings . onFallback . call ( $this ) ;
}
} ) ;
} ,
// Stop a file upload and remove it from the queue
cancel : function ( fileID , supressEvent ) {
var args = arguments ;
this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ,
swfuploadify = $this . data ( 'uploadify' ) ,
settings = swfuploadify . settings ,
delay = - 1 ;
if ( args [ 0 ] ) {
// Clear the queue
if ( args [ 0 ] == '*' ) {
var queueItemCount = swfuploadify . queueData . queueLength ;
$ ( '#' + settings . queueID ) . find ( '.uploadify-queue-item' ) . each ( function ( ) {
delay ++ ;
if ( args [ 1 ] === true ) {
swfuploadify . cancelUpload ( $ ( this ) . attr ( 'id' ) , false ) ;
} else {
swfuploadify . cancelUpload ( $ ( this ) . attr ( 'id' ) ) ;
}
$ ( this ) . find ( '.data' ) . removeClass ( 'data' ) . html ( ' - Cancelled' ) ;
$ ( this ) . find ( '.uploadify-progress-bar' ) . remove ( ) ;
$ ( this ) . delay ( 1000 + 100 * delay ) . fadeOut ( 500 , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
} ) ;
swfuploadify . queueData . queueSize = 0 ;
swfuploadify . queueData . queueLength = 0 ;
// Trigger the onClearQueue event
if ( settings . onClearQueue ) settings . onClearQueue . call ( $this , queueItemCount ) ;
} else {
for ( var n = 0 ; n < args . length ; n ++ ) {
swfuploadify . cancelUpload ( args [ n ] ) ;
$ ( '#' + args [ n ] ) . find ( '.data' ) . removeClass ( 'data' ) . html ( ' - Cancelled' ) ;
$ ( '#' + args [ n ] ) . find ( '.uploadify-progress-bar' ) . remove ( ) ;
$ ( '#' + args [ n ] ) . delay ( 1000 + 100 * n ) . fadeOut ( 500 , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
}
}
} else {
var item = $ ( '#' + settings . queueID ) . find ( '.uploadify-queue-item' ) . get ( 0 ) ;
$item = $ ( item ) ;
swfuploadify . cancelUpload ( $item . attr ( 'id' ) ) ;
$item . find ( '.data' ) . removeClass ( 'data' ) . html ( ' - Cancelled' ) ;
$item . find ( '.uploadify-progress-bar' ) . remove ( ) ;
$item . delay ( 1000 ) . fadeOut ( 500 , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
}
} ) ;
} ,
// Revert the DOM object back to its original state
destroy : function ( ) {
this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ,
swfuploadify = $this . data ( 'uploadify' ) ,
settings = swfuploadify . settings ;
// Destroy the SWF object and
swfuploadify . destroy ( ) ;
// Destroy the queue
if ( settings . defaultQueue ) {
$ ( '#' + settings . queueID ) . remove ( ) ;
}
// Reload the original DOM element
$ ( '#' + settings . id ) . replaceWith ( swfuploadify . original ) ;
// Call the user-defined event handler
if ( settings . onDestroy ) settings . onDestroy . call ( this ) ;
delete swfuploadify ;
} ) ;
} ,
// Disable the select button
disable : function ( isDisabled ) {
this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ,
swfuploadify = $this . data ( 'uploadify' ) ,
settings = swfuploadify . settings ;
// Call the user-defined event handlers
if ( isDisabled ) {
swfuploadify . button . addClass ( 'disabled' ) ;
if ( settings . onDisable ) settings . onDisable . call ( this ) ;
} else {
swfuploadify . button . removeClass ( 'disabled' ) ;
if ( settings . onEnable ) settings . onEnable . call ( this ) ;
}
// Enable/disable the browse button
swfuploadify . setButtonDisabled ( isDisabled ) ;
} ) ;
} ,
// Get or set the settings data
settings : function ( name , value , resetObjects ) {
var args = arguments ;
var returnValue = value ;
this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ,
swfuploadify = $this . data ( 'uploadify' ) ,
settings = swfuploadify . settings ;
if ( typeof ( args [ 0 ] ) == 'object' ) {
for ( var n in value ) {
setData ( n , value [ n ] ) ;
}
}
if ( args . length === 1 ) {
returnValue = settings [ name ] ;
} else {
switch ( name ) {
case 'uploader' :
swfuploadify . setUploadURL ( value ) ;
break ;
case 'formData' :
if ( ! resetObjects ) {
value = $ . extend ( settings . formData , value ) ;
}
swfuploadify . setPostParams ( settings . formData ) ;
break ;
case 'method' :
if ( value == 'get' ) {
swfuploadify . setUseQueryString ( true ) ;
} else {
swfuploadify . setUseQueryString ( false ) ;
}
break ;
case 'fileObjName' :
swfuploadify . setFilePostName ( value ) ;
break ;
case 'fileTypeExts' :
swfuploadify . setFileTypes ( value , settings . fileTypeDesc ) ;
break ;
case 'fileTypeDesc' :
swfuploadify . setFileTypes ( settings . fileTypeExts , value ) ;
break ;
case 'fileSizeLimit' :
swfuploadify . setFileSizeLimit ( value ) ;
break ;
case 'uploadLimit' :
swfuploadify . setFileUploadLimit ( value ) ;
break ;
case 'queueSizeLimit' :
swfuploadify . setFileQueueLimit ( value ) ;
break ;
case 'buttonImage' :
swfuploadify . button . css ( 'background-image' , settingValue ) ;
break ;
case 'buttonCursor' :
if ( value == 'arrow' ) {
swfuploadify . setButtonCursor ( SWFUpload . CURSOR . ARROW ) ;
} else {
swfuploadify . setButtonCursor ( SWFUpload . CURSOR . HAND ) ;
}
break ;
case 'buttonText' :
$ ( '#' + settings . id + '-button' ) . find ( '.uploadify-button-text' ) . html ( value ) ;
break ;
case 'width' :
swfuploadify . setButtonDimensions ( value , settings . height ) ;
break ;
case 'height' :
swfuploadify . setButtonDimensions ( settings . width , value ) ;
break ;
case 'multi' :
if ( value ) {
swfuploadify . setButtonAction ( SWFUpload . BUTTON _ACTION . SELECT _FILES ) ;
} else {
swfuploadify . setButtonAction ( SWFUpload . BUTTON _ACTION . SELECT _FILE ) ;
}
break ;
}
settings [ name ] = value ;
}
} ) ;
if ( args . length === 1 ) {
return returnValue ;
}
} ,
// Stop the current uploads and requeue what is in progress
stop : function ( ) {
this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ,
swfuploadify = $this . data ( 'uploadify' ) ;
// Reset the queue information
swfuploadify . queueData . averageSpeed = 0 ;
swfuploadify . queueData . uploadSize = 0 ;
swfuploadify . queueData . bytesUploaded = 0 ;
swfuploadify . queueData . uploadQueue = [ ] ;
swfuploadify . stopUpload ( ) ;
} ) ;
} ,
// Start uploading files in the queue
upload : function ( ) {
var args = arguments ;
this . each ( function ( ) {
// Create a reference to the jQuery DOM object
var $this = $ ( this ) ,
swfuploadify = $this . data ( 'uploadify' ) ;
// Reset the queue information
swfuploadify . queueData . averageSpeed = 0 ;
swfuploadify . queueData . uploadSize = 0 ;
swfuploadify . queueData . bytesUploaded = 0 ;
swfuploadify . queueData . uploadQueue = [ ] ;
// Upload the files
if ( args [ 0 ] ) {
if ( args [ 0 ] == '*' ) {
swfuploadify . queueData . uploadSize = swfuploadify . queueData . queueSize ;
swfuploadify . queueData . uploadQueue . push ( '*' ) ;
swfuploadify . startUpload ( ) ;
} else {
for ( var n = 0 ; n < args . length ; n ++ ) {
swfuploadify . queueData . uploadSize += swfuploadify . queueData . files [ args [ n ] ] . size ;
swfuploadify . queueData . uploadQueue . push ( args [ n ] ) ;
}
swfuploadify . startUpload ( swfuploadify . queueData . uploadQueue . shift ( ) ) ;
}
} else {
swfuploadify . startUpload ( ) ;
}
} ) ;
}
}
// These functions handle all the events that occur with the file uploader
var handlers = {
// Triggered when the file dialog is opened
onDialogOpen : function ( ) {
// Load the swfupload settings
var settings = this . settings ;
// Reset some queue info
this . queueData . errorMsg = 'Some files were not added to the queue:' ;
this . queueData . filesReplaced = 0 ;
this . queueData . filesCancelled = 0 ;
// Call the user-defined event handler
if ( settings . onDialogOpen ) settings . onDialogOpen . call ( this ) ;
} ,
// Triggered when the browse dialog is closed
onDialogClose : function ( filesSelected , filesQueued , queueLength ) {
// Load the swfupload settings
var settings = this . settings ;
// Update the queue information
this . queueData . filesErrored = filesSelected - filesQueued ;
this . queueData . filesSelected = filesSelected ;
this . queueData . filesQueued = filesQueued - this . queueData . filesCancelled ;
this . queueData . queueLength = queueLength ;
// Run the default event handler
if ( $ . inArray ( 'onDialogClose' , settings . overrideEvents ) < 0 ) {
if ( this . queueData . filesErrored > 0 ) {
alert ( this . queueData . errorMsg ) ;
}
}
// Call the user-defined event handler
if ( settings . onDialogClose ) settings . onDialogClose . call ( this , this . queueData ) ;
// Upload the files if auto is true
if ( settings . auto ) $ ( '#' + settings . id ) . uploadify ( 'upload' , '*' ) ;
} ,
// Triggered once for each file added to the queue
onSelect : function ( file ) {
// Load the swfupload settings
var settings = this . settings ;
// Check if a file with the same name exists in the queue
var queuedFile = { } ;
for ( var n in this . queueData . files ) {
queuedFile = this . queueData . files [ n ] ;
if ( queuedFile . uploaded != true && queuedFile . name == file . name ) {
var replaceQueueItem = confirm ( 'The file named "' + file . name + '" is already in the queue.\nDo you want to replace the existing item in the queue?' ) ;
if ( ! replaceQueueItem ) {
this . cancelUpload ( file . id ) ;
this . queueData . filesCancelled ++ ;
return false ;
} else {
$ ( '#' + queuedFile . id ) . remove ( ) ;
this . cancelUpload ( queuedFile . id ) ;
this . queueData . filesReplaced ++ ;
}
}
}
// Get the size of the file
var fileSize = Math . round ( file . size / 1024 ) ;
var suffix = 'KB' ;
if ( fileSize > 1000 ) {
fileSize = Math . round ( fileSize / 1000 ) ;
suffix = 'MB' ;
}
var fileSizeParts = fileSize . toString ( ) . split ( '.' ) ;
fileSize = fileSizeParts [ 0 ] ;
if ( fileSizeParts . length > 1 ) {
fileSize += '.' + fileSizeParts [ 1 ] . substr ( 0 , 2 ) ;
}
fileSize += suffix ;
// Truncate the filename if it's too long
var fileName = file . name ;
if ( fileName . length > 25 ) {
fileName = fileName . substr ( 0 , 25 ) + '...' ;
}
// Create the file data object
itemData = {
'fileID' : file . id ,
'instanceID' : settings . id ,
'fileName' : fileName ,
'fileSize' : fileSize
}
// Create the file item template
if ( settings . itemTemplate == false ) {
settings . itemTemplate = ' < div id = "${fileID}" class = "uploadify-queue-item" > \
< div class = "cancel" > \
< a href = "javascript:$(\'#${instanceID}\').uploadify(\'cancel\', \'${fileID}\')" > X < / a > \
< / d i v > \
< span class = "fileName" > $ { fileName } ( $ { fileSize } ) < / s p a n > < s p a n c l a s s = " d a t a " > < / s p a n > \
< div class = "uploadify-progress" > \
< div class = "uploadify-progress-bar" > <!-- Progress Bar -- > < / d i v > \
< / d i v > \
< / d i v > ' ;
}
// Run the default event handler
if ( $ . inArray ( 'onSelect' , settings . overrideEvents ) < 0 ) {
// Replace the item data in the template
itemHTML = settings . itemTemplate ;
for ( var d in itemData ) {
itemHTML = itemHTML . replace ( new RegExp ( '\\$\\{' + d + '\\}' , 'g' ) , itemData [ d ] ) ;
}
// Add the file item to the queue
$ ( '#' + settings . queueID ) . append ( itemHTML ) ;
}
this . queueData . queueSize += file . size ;
this . queueData . files [ file . id ] = file ;
// Call the user-defined event handler
if ( settings . onSelect ) settings . onSelect . apply ( this , arguments ) ;
} ,
// Triggered when a file is not added to the queue
onSelectError : function ( file , errorCode , errorMsg ) {
// Load the swfupload settings
var settings = this . settings ;
// Run the default event handler
if ( $ . inArray ( 'onSelectError' , settings . overrideEvents ) < 0 ) {
switch ( errorCode ) {
case SWFUpload . QUEUE _ERROR . QUEUE _LIMIT _EXCEEDED :
if ( settings . queueSizeLimit > errorMsg ) {
this . queueData . errorMsg += '\nThe number of files selected exceeds the remaining upload limit (' + errorMsg + ').' ;
} else {
this . queueData . errorMsg += '\nThe number of files selected exceeds the queue size limit (' + settings . queueSizeLimit + ').' ;
}
break ;
case SWFUpload . QUEUE _ERROR . FILE _EXCEEDS _SIZE _LIMIT :
this . queueData . errorMsg += '\nThe file "' + file . name + '" exceeds the size limit (' + settings . fileSizeLimit + ').' ;
break ;
case SWFUpload . QUEUE _ERROR . ZERO _BYTE _FILE :
this . queueData . errorMsg += '\nThe file "' + file . name + '" is empty.' ;
break ;
case SWFUpload . QUEUE _ERROR . FILE _EXCEEDS _SIZE _LIMIT :
this . queueData . errorMsg += '\nThe file "' + file . name + '" is not an accepted file type (' + settings . fileTypeDesc + ').' ;
break ;
}
}
if ( errorCode != SWFUpload . QUEUE _ERROR . QUEUE _LIMIT _EXCEEDED ) {
delete this . queueData . files [ file . id ] ;
}
// Call the user-defined event handler
if ( settings . onSelectError ) settings . onSelectError . apply ( this , arguments ) ;
} ,
// Triggered when all the files in the queue have been processed
onQueueComplete : function ( ) {
if ( this . settings . onQueueComplete ) this . settings . onQueueComplete . call ( this , this . settings . queueData ) ;
} ,
// Triggered when a file upload successfully completes
onUploadComplete : function ( file ) {
// Load the swfupload settings
var settings = this . settings ,
swfuploadify = this ;
// Check if all the files have completed uploading
var stats = this . getStats ( ) ;
this . queueData . queueLength = stats . files _queued ;
if ( this . queueData . uploadQueue [ 0 ] == '*' ) {
if ( this . queueData . queueLength > 0 ) {
this . startUpload ( ) ;
} else {
this . queueData . uploadQueue = [ ] ;
// Call the user-defined event handler for queue complete
if ( settings . onQueueComplete ) settings . onQueueComplete . call ( this , this . queueData ) ;
}
} else {
if ( this . queueData . uploadQueue . length > 0 ) {
this . startUpload ( this . queueData . uploadQueue . shift ( ) ) ;
} else {
this . queueData . uploadQueue = [ ] ;
// Call the user-defined event handler for queue complete
if ( settings . onQueueComplete ) settings . onQueueComplete . call ( this , this . queueData ) ;
}
}
// Call the default event handler
if ( $ . inArray ( 'onUploadComplete' , settings . overrideEvents ) < 0 ) {
if ( settings . removeCompleted ) {
switch ( file . filestatus ) {
case SWFUpload . FILE _STATUS . COMPLETE :
setTimeout ( function ( ) {
if ( $ ( '#' + file . id ) ) {
swfuploadify . queueData . queueSize -= file . size ;
swfuploadify . queueData . queueLength -= 1 ;
delete swfuploadify . queueData . files [ file . id ]
$ ( '#' + file . id ) . fadeOut ( 500 , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
}
} , settings . removeTimeout * 1000 ) ;
break ;
case SWFUpload . FILE _STATUS . ERROR :
if ( ! settings . requeueErrors ) {
setTimeout ( function ( ) {
if ( $ ( '#' + file . id ) ) {
swfuploadify . queueData . queueSize -= file . size ;
swfuploadify . queueData . queueLength -= 1 ;
delete swfuploadify . queueData . files [ file . id ] ;
$ ( '#' + file . id ) . fadeOut ( 500 , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
}
} , settings . removeTimeout * 1000 ) ;
}
break ;
}
} else {
file . uploaded = true ;
}
}
// Call the user-defined event handler
if ( settings . onUploadComplete ) settings . onUploadComplete . call ( this , file ) ;
} ,
// Triggered when a file upload returns an error
onUploadError : function ( file , errorCode , errorMsg ) {
// Load the swfupload settings
var settings = this . settings ;
// Set the error string
var errorString = 'Error' ;
switch ( errorCode ) {
case SWFUpload . UPLOAD _ERROR . HTTP _ERROR :
errorString = 'HTTP Error (' + errorMsg + ')' ;
break ;
case SWFUpload . UPLOAD _ERROR . MISSING _UPLOAD _URL :
errorString = 'Missing Upload URL' ;
break ;
case SWFUpload . UPLOAD _ERROR . IO _ERROR :
errorString = 'IO Error' ;
break ;
case SWFUpload . UPLOAD _ERROR . SECURITY _ERROR :
errorString = 'Security Error' ;
break ;
case SWFUpload . UPLOAD _ERROR . UPLOAD _LIMIT _EXCEEDED :
alert ( 'The upload limit has been reached (' + errorMsg + ').' ) ;
errorString = 'Exceeds Upload Limit' ;
break ;
case SWFUpload . UPLOAD _ERROR . UPLOAD _FAILED :
errorString = 'Failed' ;
break ;
case SWFUpload . UPLOAD _ERROR . SPECIFIED _FILE _ID _NOT _FOUND :
break ;
case SWFUpload . UPLOAD _ERROR . FILE _VALIDATION _FAILED :
errorString = 'Validation Error' ;
break ;
case SWFUpload . UPLOAD _ERROR . FILE _CANCELLED :
errorString = 'Cancelled' ;
this . queueData . queueSize -= file . size ;
this . queueData . queueLength -= 1 ;
if ( file . status == SWFUpload . FILE _STATUS . IN _PROGRESS || $ . inArray ( file . id , this . queueData . uploadQueue ) >= 0 ) {
this . queueData . uploadSize -= file . size ;
}
// Trigger the onCancel event
if ( settings . onCancel ) settings . onCancel . call ( this , file ) ;
delete this . queueData . files [ file . id ] ;
break ;
case SWFUpload . UPLOAD _ERROR . UPLOAD _STOPPED :
errorString = 'Stopped' ;
break ;
}
// Call the default event handler
if ( $ . inArray ( 'onUploadError' , settings . overrideEvents ) < 0 ) {
if ( errorCode != SWFUpload . UPLOAD _ERROR . FILE _CANCELLED && errorCode != SWFUpload . UPLOAD _ERROR . UPLOAD _STOPPED ) {
$ ( '#' + file . id ) . addClass ( 'uploadify-error' ) ;
}
// Reset the progress bar
$ ( '#' + file . id ) . find ( '.uploadify-progress-bar' ) . css ( 'width' , '1px' ) ;
// Add the error message to the queue item
if ( errorCode != SWFUpload . UPLOAD _ERROR . SPECIFIED _FILE _ID _NOT _FOUND && file . status != SWFUpload . FILE _STATUS . COMPLETE ) {
$ ( '#' + file . id ) . find ( '.data' ) . html ( ' - ' + errorString ) ;
}
}
var stats = this . getStats ( ) ;
this . queueData . uploadsErrored = stats . upload _errors ;
// Call the user-defined event handler
if ( settings . onUploadError ) settings . onUploadError . call ( this , file , errorCode , errorMsg , errorString ) ;
} ,
// Triggered periodically during a file upload
onUploadProgress : function ( file , fileBytesLoaded , fileTotalBytes ) {
// Load the swfupload settings
var settings = this . settings ;
// Setup all the variables
var timer = new Date ( ) ;
var newTime = timer . getTime ( ) ;
var lapsedTime = newTime - this . timer ;
if ( lapsedTime > 500 ) {
this . timer = newTime ;
}
var lapsedBytes = fileBytesLoaded - this . bytesLoaded ;
this . bytesLoaded = fileBytesLoaded ;
var queueBytesLoaded = this . queueData . queueBytesUploaded + fileBytesLoaded ;
var percentage = Math . round ( fileBytesLoaded / fileTotalBytes * 100 ) ;
// Calculate the average speed
var suffix = 'KB/s' ;
var mbs = 0 ;
var kbs = ( lapsedBytes / 1024 ) / ( lapsedTime / 1000 ) ;
kbs = Math . floor ( kbs * 10 ) / 10 ;
if ( this . queueData . averageSpeed > 0 ) {
this . queueData . averageSpeed = Math . floor ( ( this . queueData . averageSpeed + kbs ) / 2 ) ;
} else {
this . queueData . averageSpeed = Math . floor ( kbs ) ;
}
if ( kbs > 1000 ) {
mbs = ( kbs * . 001 ) ;
this . queueData . averageSpeed = Math . floor ( mbs ) ;
suffix = 'MB/s' ;
}
// Call the default event handler
if ( $ . inArray ( 'onUploadProgress' , settings . overrideEvents ) < 0 ) {
if ( settings . progressData == 'percentage' ) {
$ ( '#' + file . id ) . find ( '.data' ) . html ( ' - ' + percentage + '%' ) ;
} else if ( settings . progressData == 'speed' && lapsedTime > 500 ) {
$ ( '#' + file . id ) . find ( '.data' ) . html ( ' - ' + this . queueData . averageSpeed + suffix ) ;
}
$ ( '#' + file . id ) . find ( '.uploadify-progress-bar' ) . css ( 'width' , percentage + '%' ) ;
}
// Call the user-defined event handler
if ( settings . onUploadProgress ) settings . onUploadProgress . call ( this , file , fileBytesLoaded , fileTotalBytes , queueBytesLoaded , this . queueData . uploadSize ) ;
} ,
// Triggered right before a file is uploaded
onUploadStart : function ( file ) {
// Load the swfupload settings
var settings = this . settings ;
var timer = new Date ( ) ;
this . timer = timer . getTime ( ) ;
this . bytesLoaded = 0 ;
if ( this . queueData . uploadQueue . length == 0 ) {
this . queueData . uploadSize = file . size ;
}
if ( settings . checkExisting ) {
$ . ajax ( {
type : 'POST' ,
async : false ,
url : settings . checkExisting ,
data : { filename : file . name } ,
success : function ( data ) {
if ( data == 1 ) {
var overwrite = confirm ( 'A file with the name "' + file . name + '" already exists on the server.\nWould you like to replace the existing file?' ) ;
if ( ! overwrite ) {
this . cancelUpload ( file . id ) ;
$ ( '#' + file . id ) . remove ( ) ;
if ( this . queueData . uploadQueue . length > 0 && this . queueData . queueLength > 0 ) {
if ( this . queueData . uploadQueue [ 0 ] == '*' ) {
this . startUpload ( ) ;
} else {
this . startUpload ( this . queueData . uploadQueue . shift ( ) ) ;
}
}
}
}
}
} ) ;
}
// Call the user-defined event handler
if ( settings . onUploadStart ) settings . onUploadStart . call ( this , file ) ;
} ,
// Triggered when a file upload returns a successful code
onUploadSuccess : function ( file , data , response ) {
// Load the swfupload settings
var settings = this . settings ;
var stats = this . getStats ( ) ;
this . queueData . uploadsSuccessful = stats . successful _uploads ;
this . queueData . queueBytesUploaded += file . size ;
// Call the default event handler
if ( $ . inArray ( 'onUploadSuccess' , settings . overrideEvents ) < 0 ) {
$ ( '#' + file . id ) . find ( '.data' ) . html ( ' - Complete' ) ;
}
// Call the user-defined event handler
if ( settings . onUploadSuccess ) settings . onUploadSuccess . call ( this , file , data , settings . $upload ) ;
}
}
$ . fn . uploadify = function ( method ) {
if ( methods [ method ] ) {
return methods [ method ] . apply ( this , Array . prototype . slice . call ( arguments , 1 ) ) ;
} else if ( typeof method === 'object' || ! method ) {
return methods . init . apply ( this , arguments ) ;
} else {
$ . error ( 'The method ' + method + ' does not exist in $.uploadify' ) ;
}
}
2015-10-23 23:19:11 +08:00
} ) ( $ ) ;