uploadify_rails 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +90 -0
- data/Rakefile +1 -0
- data/app/views/shared/uploadify/photos/_fields.html.erb +15 -0
- data/app/views/shared/uploadify/photos/_form.html.erb +6 -0
- data/lib/uploadify_rails/controllers/base.rb +48 -0
- data/lib/uploadify_rails/engine.rb +22 -0
- data/lib/uploadify_rails/hooks/formtastic.rb +19 -0
- data/lib/uploadify_rails/models/parent.rb +52 -0
- data/lib/uploadify_rails/models/resource.rb +27 -0
- data/lib/uploadify_rails/version.rb +3 -0
- data/lib/uploadify_rails.rb +6 -0
- data/uploadify_rails.gemspec +24 -0
- data/vendor/assets/flash/uploadify.swf +0 -0
- data/vendor/assets/images/add.gif +0 -0
- data/vendor/assets/images/remove.gif +0 -0
- data/vendor/assets/javascripts/jquery.uploadify.js +967 -0
- data/vendor/assets/javascripts/nested_attachments_uploader.js +60 -0
- data/vendor/assets/javascripts/uploadify.js +25 -0
- data/vendor/assets/stylesheets/uploadify.css +107 -0
- metadata +131 -0
@@ -0,0 +1,967 @@
|
|
1
|
+
/*
|
2
|
+
SWFObject v2.2 <http://code.google.com/p/swfobject/>
|
3
|
+
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
4
|
+
*/
|
5
|
+
;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;
|
6
|
+
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;
|
7
|
+
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);
|
8
|
+
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");
|
9
|
+
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};
|
10
|
+
}(),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();
|
11
|
+
}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);
|
12
|
+
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;
|
13
|
+
}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"));
|
14
|
+
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);
|
15
|
+
}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;
|
16
|
+
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);
|
17
|
+
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(",");
|
18
|
+
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();
|
19
|
+
})();}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);
|
20
|
+
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;
|
21
|
+
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");
|
22
|
+
}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");
|
23
|
+
}}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;
|
24
|
+
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);
|
25
|
+
}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";
|
26
|
+
}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";
|
27
|
+
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;
|
28
|
+
}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";
|
29
|
+
(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");
|
30
|
+
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);
|
31
|
+
}})();}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];
|
32
|
+
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));
|
33
|
+
}}}}}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];
|
34
|
+
}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]+'" />';
|
35
|
+
}}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);
|
36
|
+
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]);
|
37
|
+
}}}}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");
|
38
|
+
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";
|
39
|
+
(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;
|
40
|
+
}}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);
|
41
|
+
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;
|
42
|
+
}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;
|
43
|
+
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];
|
44
|
+
}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+"}"));
|
45
|
+
}}}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=/[\\\"<>\.;]/;
|
46
|
+
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;
|
47
|
+
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;
|
48
|
+
}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;
|
49
|
+
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};
|
50
|
+
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;
|
51
|
+
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];
|
52
|
+
}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);
|
53
|
+
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]};
|
54
|
+
},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);
|
55
|
+
}},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;
|
56
|
+
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)));
|
57
|
+
}}}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";
|
58
|
+
}}if(E){E(B);}}a=false;}}};}();
|
59
|
+
|
60
|
+
/*
|
61
|
+
SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
|
62
|
+
|
63
|
+
mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/
|
64
|
+
|
65
|
+
SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
|
66
|
+
http://www.opensource.org/licenses/mit-license.php
|
67
|
+
|
68
|
+
SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
|
69
|
+
http://www.opensource.org/licenses/mit-license.php
|
70
|
+
*/
|
71
|
+
|
72
|
+
var SWFUpload;if(SWFUpload==undefined){SWFUpload=function(a){this.initSWFUpload(a)}}SWFUpload.prototype.initSWFUpload=function(b){try{this.customSettings={};this.settings=b;this.eventQueue=[];this.movieName="SWFUpload_"+SWFUpload.movieCount++;this.movieElement=null;SWFUpload.instances[this.movieName]=this;this.initSettings();this.loadFlash();this.displayDebugInfo()}catch(a){delete SWFUpload.instances[this.movieName];throw a}};SWFUpload.instances={};SWFUpload.movieCount=0;SWFUpload.version="2.2.0 2009-03-25";SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130};SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290};SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5};SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120};SWFUpload.CURSOR={ARROW:-1,HAND:-2};SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"};SWFUpload.completeURL=function(a){if(typeof(a)!=="string"||a.match(/^https?:\/\//i)||a.match(/^\//)){return a}var c=window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:"");var b=window.location.pathname.lastIndexOf("/");if(b<=0){path="/"}else{path=window.location.pathname.substr(0,b)+"/"}return path+a};SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(b,a){this.settings[b]=(this.settings[b]==undefined)?a:this.settings[b]};this.ensureDefault("upload_url","");this.ensureDefault("preserve_relative_urls",false);this.ensureDefault("file_post_name","Filedata");this.ensureDefault("post_params",{});this.ensureDefault("use_query_string",false);this.ensureDefault("requeue_on_error",false);this.ensureDefault("http_success",[]);this.ensureDefault("assume_success_timeout",0);this.ensureDefault("file_types","*.*");this.ensureDefault("file_types_description","All Files");this.ensureDefault("file_size_limit",0);this.ensureDefault("file_upload_limit",0);this.ensureDefault("file_queue_limit",0);this.ensureDefault("flash_url","swfupload.swf");this.ensureDefault("prevent_swf_caching",true);this.ensureDefault("button_image_url","");this.ensureDefault("button_width",1);this.ensureDefault("button_height",1);this.ensureDefault("button_text","");this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;");this.ensureDefault("button_text_top_padding",0);this.ensureDefault("button_text_left_padding",0);this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES);this.ensureDefault("button_disabled",false);this.ensureDefault("button_placeholder_id","");this.ensureDefault("button_placeholder",null);this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW);this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW);this.ensureDefault("debug",false);this.settings.debug_enabled=this.settings.debug;this.settings.return_upload_start_handler=this.returnUploadStart;this.ensureDefault("swfupload_loaded_handler",null);this.ensureDefault("file_dialog_start_handler",null);this.ensureDefault("file_queued_handler",null);this.ensureDefault("file_queue_error_handler",null);this.ensureDefault("file_dialog_complete_handler",null);this.ensureDefault("upload_start_handler",null);this.ensureDefault("upload_progress_handler",null);this.ensureDefault("upload_error_handler",null);this.ensureDefault("upload_success_handler",null);this.ensureDefault("upload_complete_handler",null);this.ensureDefault("debug_handler",this.debugMessage);this.ensureDefault("custom_settings",{});this.customSettings=this.settings.custom_settings;if(!!this.settings.prevent_swf_caching){this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+new Date().getTime()}if(!this.settings.preserve_relative_urls){this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)}delete this.ensureDefault};SWFUpload.prototype.loadFlash=function(){var a,b;if(document.getElementById(this.movieName)!==null){throw"ID "+this.movieName+" is already in use. The Flash Object could not be added"}a=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder;if(a==undefined){throw"Could not find the placeholder element: "+this.settings.button_placeholder_id}b=document.createElement("div");b.innerHTML=this.getFlashHTML();a.parentNode.replaceChild(b.firstChild,a);if(window[this.movieName]==undefined){window[this.movieName]=this.getMovieElement()}};SWFUpload.prototype.getFlashHTML=function(){return['<object id="',this.movieName,'" type="application/x-shockwave-flash" data="',this.settings.flash_url,'" width="',this.settings.button_width,'" height="',this.settings.button_height,'" class="swfupload">','<param name="wmode" value="',this.settings.button_window_mode,'" />','<param name="movie" value="',this.settings.flash_url,'" />','<param name="quality" value="high" />','<param name="menu" value="false" />','<param name="allowScriptAccess" value="always" />','<param name="flashvars" value="'+this.getFlashVars()+'" />',"</object>"].join("")};SWFUpload.prototype.getFlashVars=function(){var b=this.buildParamString();var a=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(a),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(b),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")};SWFUpload.prototype.getMovieElement=function(){if(this.movieElement==undefined){this.movieElement=document.getElementById(this.movieName)}if(this.movieElement===null){throw"Could not find Flash element"}return this.movieElement};SWFUpload.prototype.buildParamString=function(){var c=this.settings.post_params;var b=[];if(typeof(c)==="object"){for(var a in c){if(c.hasOwnProperty(a)){b.push(encodeURIComponent(a.toString())+"="+encodeURIComponent(c[a].toString()))}}}return b.join("&")};SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,false);var a=null;a=this.getMovieElement();if(a&&typeof(a.CallFunction)==="unknown"){for(var c in a){try{if(typeof(a[c])==="function"){a[c]=null}}catch(e){}}try{a.parentNode.removeChild(a)}catch(b){}}window[this.movieName]=null;SWFUpload.instances[this.movieName]=null;delete SWFUpload.instances[this.movieName];this.movieElement=null;this.settings=null;this.customSettings=null;this.eventQueue=null;this.movieName=null;return true}catch(d){return false}};SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",(this.settings.button_placeholder?"Set":"Not Set"),"\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",(typeof this.settings.swfupload_loaded_handler==="function").toString(),"\n","\t","file_dialog_start_handler assigned: ",(typeof this.settings.file_dialog_start_handler==="function").toString(),"\n","\t","file_queued_handler assigned: ",(typeof this.settings.file_queued_handler==="function").toString(),"\n","\t","file_queue_error_handler assigned: ",(typeof this.settings.file_queue_error_handler==="function").toString(),"\n","\t","upload_start_handler assigned: ",(typeof this.settings.upload_start_handler==="function").toString(),"\n","\t","upload_progress_handler assigned: ",(typeof this.settings.upload_progress_handler==="function").toString(),"\n","\t","upload_error_handler assigned: ",(typeof this.settings.upload_error_handler==="function").toString(),"\n","\t","upload_success_handler assigned: ",(typeof this.settings.upload_success_handler==="function").toString(),"\n","\t","upload_complete_handler assigned: ",(typeof this.settings.upload_complete_handler==="function").toString(),"\n","\t","debug_handler assigned: ",(typeof this.settings.debug_handler==="function").toString(),"\n"].join(""))};SWFUpload.prototype.addSetting=function(b,c,a){if(c==undefined){return(this.settings[b]=a)}else{return(this.settings[b]=c)}};SWFUpload.prototype.getSetting=function(a){if(this.settings[a]!=undefined){return this.settings[a]}return""};SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement();var returnValue,returnString;try{returnString=movieElement.CallFunction('<invoke name="'+functionName+'" returntype="javascript">'+__flash__argumentsToXML(argumentArray,0)+"</invoke>");returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}if(returnValue!=undefined&&typeof returnValue.post==="object"){returnValue=this.unescapeFilePostParams(returnValue)}return returnValue};SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")};SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")};SWFUpload.prototype.startUpload=function(a){this.callFlash("StartUpload",[a])};SWFUpload.prototype.cancelUpload=function(a,b){if(b!==false){b=true}this.callFlash("CancelUpload",[a,b])};SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")};SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")};SWFUpload.prototype.setStats=function(a){this.callFlash("SetStats",[a])};SWFUpload.prototype.getFile=function(a){if(typeof(a)==="number"){return this.callFlash("GetFileByIndex",[a])}else{return this.callFlash("GetFile",[a])}};SWFUpload.prototype.addFileParam=function(a,b,c){return this.callFlash("AddFileParam",[a,b,c])};SWFUpload.prototype.removeFileParam=function(a,b){this.callFlash("RemoveFileParam",[a,b])};SWFUpload.prototype.setUploadURL=function(a){this.settings.upload_url=a.toString();this.callFlash("SetUploadURL",[a])};SWFUpload.prototype.setPostParams=function(a){this.settings.post_params=a;this.callFlash("SetPostParams",[a])};SWFUpload.prototype.addPostParam=function(a,b){this.settings.post_params[a]=b;this.callFlash("SetPostParams",[this.settings.post_params])};SWFUpload.prototype.removePostParam=function(a){delete this.settings.post_params[a];this.callFlash("SetPostParams",[this.settings.post_params])};SWFUpload.prototype.setFileTypes=function(a,b){this.settings.file_types=a;this.settings.file_types_description=b;this.callFlash("SetFileTypes",[a,b])};SWFUpload.prototype.setFileSizeLimit=function(a){this.settings.file_size_limit=a;this.callFlash("SetFileSizeLimit",[a])};SWFUpload.prototype.setFileUploadLimit=function(a){this.settings.file_upload_limit=a;this.callFlash("SetFileUploadLimit",[a])};SWFUpload.prototype.setFileQueueLimit=function(a){this.settings.file_queue_limit=a;this.callFlash("SetFileQueueLimit",[a])};SWFUpload.prototype.setFilePostName=function(a){this.settings.file_post_name=a;this.callFlash("SetFilePostName",[a])};SWFUpload.prototype.setUseQueryString=function(a){this.settings.use_query_string=a;this.callFlash("SetUseQueryString",[a])};SWFUpload.prototype.setRequeueOnError=function(a){this.settings.requeue_on_error=a;this.callFlash("SetRequeueOnError",[a])};SWFUpload.prototype.setHTTPSuccess=function(a){if(typeof a==="string"){a=a.replace(" ","").split(",")}this.settings.http_success=a;this.callFlash("SetHTTPSuccess",[a])};SWFUpload.prototype.setAssumeSuccessTimeout=function(a){this.settings.assume_success_timeout=a;this.callFlash("SetAssumeSuccessTimeout",[a])};SWFUpload.prototype.setDebugEnabled=function(a){this.settings.debug_enabled=a;this.callFlash("SetDebugEnabled",[a])};SWFUpload.prototype.setButtonImageURL=function(a){if(a==undefined){a=""}this.settings.button_image_url=a;this.callFlash("SetButtonImageURL",[a])};SWFUpload.prototype.setButtonDimensions=function(c,a){this.settings.button_width=c;this.settings.button_height=a;var b=this.getMovieElement();if(b!=undefined){b.style.width=c+"px";b.style.height=a+"px"}this.callFlash("SetButtonDimensions",[c,a])};SWFUpload.prototype.setButtonText=function(a){this.settings.button_text=a;this.callFlash("SetButtonText",[a])};SWFUpload.prototype.setButtonTextPadding=function(b,a){this.settings.button_text_top_padding=a;this.settings.button_text_left_padding=b;this.callFlash("SetButtonTextPadding",[b,a])};SWFUpload.prototype.setButtonTextStyle=function(a){this.settings.button_text_style=a;this.callFlash("SetButtonTextStyle",[a])};SWFUpload.prototype.setButtonDisabled=function(a){this.settings.button_disabled=a;this.callFlash("SetButtonDisabled",[a])};SWFUpload.prototype.setButtonAction=function(a){this.settings.button_action=a;this.callFlash("SetButtonAction",[a])};SWFUpload.prototype.setButtonCursor=function(a){this.settings.button_cursor=a;this.callFlash("SetButtonCursor",[a])};SWFUpload.prototype.queueEvent=function(b,c){if(c==undefined){c=[]}else{if(!(c instanceof Array)){c=[c]}}var a=this;if(typeof this.settings[b]==="function"){this.eventQueue.push(function(){this.settings[b].apply(this,c)});setTimeout(function(){a.executeNextEvent()},0)}else{if(this.settings[b]!==null){throw"Event handler "+b+" is unknown or is not a function"}}};SWFUpload.prototype.executeNextEvent=function(){var a=this.eventQueue?this.eventQueue.shift():null;if(typeof(a)==="function"){a.apply(this)}};SWFUpload.prototype.unescapeFilePostParams=function(c){var e=/[$]([0-9a-f]{4})/i;var f={};var d;if(c!=undefined){for(var a in c.post){if(c.post.hasOwnProperty(a)){d=a;var b;while((b=e.exec(d))!==null){d=d.replace(b[0],String.fromCharCode(parseInt("0x"+b[1],16)))}f[d]=c.post[a]}}c.post=f}return c};SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(a){return false}};SWFUpload.prototype.flashReady=function(){var a=this.getMovieElement();if(!a){this.debug("Flash called back ready but the flash movie can't be found.");return}this.cleanUp(a);this.queueEvent("swfupload_loaded_handler")};SWFUpload.prototype.cleanUp=function(a){try{if(this.movieElement&&typeof(a.CallFunction)==="unknown"){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var c in a){try{if(typeof(a[c])==="function"){a[c]=null}}catch(b){}}}}catch(d){}window.__flash__removeCallback=function(e,f){try{if(e){e[f]=null}}catch(g){}}};SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")};SWFUpload.prototype.fileQueued=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("file_queued_handler",a)};SWFUpload.prototype.fileQueueError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("file_queue_error_handler",[a,c,b])};SWFUpload.prototype.fileDialogComplete=function(b,c,a){this.queueEvent("file_dialog_complete_handler",[b,c,a])};SWFUpload.prototype.uploadStart=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("return_upload_start_handler",a)};SWFUpload.prototype.returnUploadStart=function(a){var b;if(typeof this.settings.upload_start_handler==="function"){a=this.unescapeFilePostParams(a);b=this.settings.upload_start_handler.call(this,a)}else{if(this.settings.upload_start_handler!=undefined){throw"upload_start_handler must be a function"}}if(b===undefined){b=true}b=!!b;this.callFlash("ReturnUploadStart",[b])};SWFUpload.prototype.uploadProgress=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("upload_progress_handler",[a,c,b])};SWFUpload.prototype.uploadError=function(a,c,b){a=this.unescapeFilePostParams(a);this.queueEvent("upload_error_handler",[a,c,b])};SWFUpload.prototype.uploadSuccess=function(b,a,c){b=this.unescapeFilePostParams(b);this.queueEvent("upload_success_handler",[b,a,c])};SWFUpload.prototype.uploadComplete=function(a){a=this.unescapeFilePostParams(a);this.queueEvent("upload_complete_handler",a)};SWFUpload.prototype.debug=function(a){this.queueEvent("debug_handler",a)};SWFUpload.prototype.debugMessage=function(c){if(this.settings.debug){var a,d=[];if(typeof c==="object"&&typeof c.name==="string"&&typeof c.message==="string"){for(var b in c){if(c.hasOwnProperty(b)){d.push(b+": "+c[b])}}a=d.join("\n")||"";d=a.split("\n");a="EXCEPTION: "+d.join("\nEXCEPTION: ");SWFUpload.Console.writeLine(a)}else{SWFUpload.Console.writeLine(c)}}};SWFUpload.Console={};SWFUpload.Console.writeLine=function(d){var b,a;try{b=document.getElementById("SWFUpload_Console");if(!b){a=document.createElement("form");document.getElementsByTagName("body")[0].appendChild(a);b=document.createElement("textarea");b.id="SWFUpload_Console";b.style.fontFamily="monospace";b.setAttribute("wrap","off");b.wrap="off";b.style.overflow="auto";b.style.width="700px";b.style.height="350px";b.style.margin="5px";a.appendChild(b)}b.value+=d+"\n";b.scrollTop=b.scrollHeight-b.clientHeight}catch(c){alert("Exception: "+c.name+" Message: "+c.message)}};
|
73
|
+
|
74
|
+
/*
|
75
|
+
Uploadify v3.1.1
|
76
|
+
Copyright (c) 2012 Reactive Apps, Ronnie Garcia
|
77
|
+
Released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
78
|
+
*/
|
79
|
+
|
80
|
+
(function($) {
|
81
|
+
|
82
|
+
// These methods can be called by adding them as the first argument in the uploadify plugin call
|
83
|
+
var methods = {
|
84
|
+
|
85
|
+
init : function(options, swfUploadOptions) {
|
86
|
+
|
87
|
+
return this.each(function() {
|
88
|
+
|
89
|
+
// Create a reference to the jQuery DOM object
|
90
|
+
var $this = $(this);
|
91
|
+
|
92
|
+
// Clone the original DOM object
|
93
|
+
var $clone = $this.clone();
|
94
|
+
|
95
|
+
// Setup the default options
|
96
|
+
var settings = $.extend({
|
97
|
+
// Required Settings
|
98
|
+
id : $this.attr('id'), // The ID of the DOM object
|
99
|
+
swf : 'uploadify.swf', // The path to the uploadify SWF file
|
100
|
+
uploader : 'uploadify.php', // The path to the server-side upload script
|
101
|
+
|
102
|
+
// Options
|
103
|
+
auto : true, // Automatically upload files when added to the queue
|
104
|
+
buttonClass : '', // A class name to add to the browse button DOM object
|
105
|
+
buttonCursor : 'hand', // The cursor to use with the browse button
|
106
|
+
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
|
107
|
+
buttonText : 'SELECT FILES', // The text to use for the browse button
|
108
|
+
checkExisting : false, // The path to a server-side script that checks for existing files on the server
|
109
|
+
debug : false, // Turn on swfUpload debugging mode
|
110
|
+
fileObjName : 'Filedata', // The name of the file object to use in your server-side script
|
111
|
+
fileSizeLimit : 0, // The maximum size of an uploadable file in KB (Accepts units B KB MB GB if string, 0 for no limit)
|
112
|
+
fileTypeDesc : 'All Files', // The description for file types in the browse dialog
|
113
|
+
fileTypeExts : '*.*', // Allowed extensions in the browse dialog (server-side validation should also be used)
|
114
|
+
height : 30, // The height of the browse button
|
115
|
+
method : 'post', // The method to use when sending files to the server-side upload script
|
116
|
+
multi : true, // Allow multiple file selection in the browse dialog
|
117
|
+
formData : {}, // An object with additional data to send to the server-side upload script with every file upload
|
118
|
+
preventCaching : true, // Adds a random value to the Flash URL to prevent caching of it (conflicts with existing parameters)
|
119
|
+
progressData : 'percentage', // ('percentage' or 'speed') Data to show in the queue item during a file upload
|
120
|
+
queueID : false, // The ID of the DOM object to use as a file queue (without the #)
|
121
|
+
queueSizeLimit : 999, // The maximum number of files that can be in the queue at one time
|
122
|
+
removeCompleted : true, // Remove queue items from the queue when they are done uploading
|
123
|
+
removeTimeout : 3, // The delay in seconds before removing a queue item if removeCompleted is set to true
|
124
|
+
requeueErrors : false, // Keep errored files in the queue and keep trying to upload them
|
125
|
+
successTimeout : 30, // The number of seconds to wait for Flash to detect the server's response after the file has finished uploading
|
126
|
+
uploadLimit : 0, // The maximum number of files you can upload
|
127
|
+
width : 120, // The width of the browse button
|
128
|
+
|
129
|
+
// Events
|
130
|
+
overrideEvents : [] // (Array) A list of default event handlers to skip
|
131
|
+
/*
|
132
|
+
onCancel // Triggered when a file is cancelled from the queue
|
133
|
+
onClearQueue // Triggered during the 'clear queue' method
|
134
|
+
onDestroy // Triggered when the uploadify object is destroyed
|
135
|
+
onDialogClose // Triggered when the browse dialog is closed
|
136
|
+
onDialogOpen // Triggered when the browse dialog is opened
|
137
|
+
onDisable // Triggered when the browse button gets disabled
|
138
|
+
onEnable // Triggered when the browse button gets enabled
|
139
|
+
onFallback // Triggered is Flash is not detected
|
140
|
+
onInit // Triggered when Uploadify is initialized
|
141
|
+
onQueueComplete // Triggered when all files in the queue have been uploaded
|
142
|
+
onSelectError // Triggered when an error occurs while selecting a file (file size, queue size limit, etc.)
|
143
|
+
onSelect // Triggered for each file that is selected
|
144
|
+
onSWFReady // Triggered when the SWF button is loaded
|
145
|
+
onUploadComplete // Triggered when a file upload completes (success or error)
|
146
|
+
onUploadError // Triggered when a file upload returns an error
|
147
|
+
onUploadSuccess // Triggered when a file is uploaded successfully
|
148
|
+
onUploadProgress // Triggered every time a file progress is updated
|
149
|
+
onUploadStart // Triggered immediately before a file upload starts
|
150
|
+
*/
|
151
|
+
}, options);
|
152
|
+
|
153
|
+
// Prepare settings for SWFUpload
|
154
|
+
var swfUploadSettings = {
|
155
|
+
assume_success_timeout : settings.successTimeout,
|
156
|
+
button_placeholder_id : settings.id,
|
157
|
+
button_width : settings.width,
|
158
|
+
button_height : settings.height,
|
159
|
+
button_text : null,
|
160
|
+
button_text_style : null,
|
161
|
+
button_text_top_padding : 0,
|
162
|
+
button_text_left_padding : 0,
|
163
|
+
button_action : (settings.multi ? SWFUpload.BUTTON_ACTION.SELECT_FILES : SWFUpload.BUTTON_ACTION.SELECT_FILE),
|
164
|
+
button_disabled : false,
|
165
|
+
button_cursor : (settings.buttonCursor == 'arrow' ? SWFUpload.CURSOR.ARROW : SWFUpload.CURSOR.HAND),
|
166
|
+
button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
|
167
|
+
debug : settings.debug,
|
168
|
+
requeue_on_error : settings.requeueErrors,
|
169
|
+
file_post_name : settings.fileObjName,
|
170
|
+
file_size_limit : settings.fileSizeLimit,
|
171
|
+
file_types : settings.fileTypeExts,
|
172
|
+
file_types_description : settings.fileTypeDesc,
|
173
|
+
file_queue_limit : settings.queueSizeLimit,
|
174
|
+
file_upload_limit : settings.uploadLimit,
|
175
|
+
flash_url : settings.swf,
|
176
|
+
prevent_swf_caching : settings.preventCaching,
|
177
|
+
post_params : settings.formData,
|
178
|
+
upload_url : settings.uploader,
|
179
|
+
use_query_string : (settings.method == 'get'),
|
180
|
+
|
181
|
+
// Event Handlers
|
182
|
+
file_dialog_complete_handler : handlers.onDialogClose,
|
183
|
+
file_dialog_start_handler : handlers.onDialogOpen,
|
184
|
+
file_queued_handler : handlers.onSelect,
|
185
|
+
file_queue_error_handler : handlers.onSelectError,
|
186
|
+
swfupload_loaded_handler : settings.onSWFReady,
|
187
|
+
upload_complete_handler : handlers.onUploadComplete,
|
188
|
+
upload_error_handler : handlers.onUploadError,
|
189
|
+
upload_progress_handler : handlers.onUploadProgress,
|
190
|
+
upload_start_handler : handlers.onUploadStart,
|
191
|
+
upload_success_handler : handlers.onUploadSuccess
|
192
|
+
}
|
193
|
+
|
194
|
+
// Merge the user-defined options with the defaults
|
195
|
+
if (swfUploadOptions) {
|
196
|
+
swfUploadSettings = $.extend(swfUploadSettings, swfUploadOptions);
|
197
|
+
}
|
198
|
+
// Add the user-defined settings to the swfupload object
|
199
|
+
swfUploadSettings = $.extend(swfUploadSettings, settings);
|
200
|
+
|
201
|
+
// Detect if Flash is available
|
202
|
+
var playerVersion = swfobject.getFlashPlayerVersion();
|
203
|
+
var flashInstalled = (playerVersion.major >= 9);
|
204
|
+
|
205
|
+
if (flashInstalled) {
|
206
|
+
// Create the swfUpload instance
|
207
|
+
window['uploadify_' + settings.id] = new SWFUpload(swfUploadSettings);
|
208
|
+
var swfuploadify = window['uploadify_' + settings.id];
|
209
|
+
|
210
|
+
// Add the SWFUpload object to the elements data object
|
211
|
+
$this.data('uploadify', swfuploadify);
|
212
|
+
|
213
|
+
// Wrap the instance
|
214
|
+
var $wrapper = $('<div />', {
|
215
|
+
'id' : settings.id,
|
216
|
+
'class' : 'uploadify',
|
217
|
+
'css' : {
|
218
|
+
'height' : settings.height + 'px',
|
219
|
+
'width' : settings.width + 'px'
|
220
|
+
}
|
221
|
+
});
|
222
|
+
$('#' + swfuploadify.movieName).wrap($wrapper);
|
223
|
+
// Recreate the reference to wrapper
|
224
|
+
$wrapper = $('#' + settings.id);
|
225
|
+
// Add the data object to the wrapper
|
226
|
+
$wrapper.data('uploadify', swfuploadify);
|
227
|
+
|
228
|
+
// Create the button
|
229
|
+
var $button = $('<div />', {
|
230
|
+
'id' : settings.id + '-button',
|
231
|
+
'class' : 'uploadify-button ' + settings.buttonClass
|
232
|
+
});
|
233
|
+
if (settings.buttonImage) {
|
234
|
+
$button.css({
|
235
|
+
'background-image' : "url('" + settings.buttonImage + "')",
|
236
|
+
'text-indent' : '-9999px'
|
237
|
+
});
|
238
|
+
}
|
239
|
+
$button.html('<span class="uploadify-button-text">' + settings.buttonText + '</span>')
|
240
|
+
.css({
|
241
|
+
'height' : settings.height + 'px',
|
242
|
+
'line-height' : settings.height + 'px',
|
243
|
+
'width' : settings.width + 'px'
|
244
|
+
});
|
245
|
+
// Append the button to the wrapper
|
246
|
+
$wrapper.append($button);
|
247
|
+
|
248
|
+
// Adjust the styles of the movie
|
249
|
+
$('#' + swfuploadify.movieName).css({
|
250
|
+
'position' : 'absolute',
|
251
|
+
'z-index' : 1
|
252
|
+
});
|
253
|
+
|
254
|
+
// Create the file queue
|
255
|
+
if (!settings.queueID) {
|
256
|
+
var $queue = $('<div />', {
|
257
|
+
'id' : settings.id + '-queue',
|
258
|
+
'class' : 'uploadify-queue'
|
259
|
+
});
|
260
|
+
$wrapper.after($queue);
|
261
|
+
swfuploadify.settings.queueID = settings.id + '-queue';
|
262
|
+
swfuploadify.settings.defaultQueue = true;
|
263
|
+
}
|
264
|
+
|
265
|
+
// Create some queue related objects and variables
|
266
|
+
swfuploadify.queueData = {
|
267
|
+
files : {}, // The files in the queue
|
268
|
+
filesSelected : 0, // The number of files selected in the last select operation
|
269
|
+
filesQueued : 0, // The number of files added to the queue in the last select operation
|
270
|
+
filesReplaced : 0, // The number of files replaced in the last select operation
|
271
|
+
filesCancelled : 0, // The number of files that were cancelled instead of replaced
|
272
|
+
filesErrored : 0, // The number of files that caused error in the last select operation
|
273
|
+
uploadsSuccessful : 0, // The number of files that were successfully uploaded
|
274
|
+
uploadsErrored : 0, // The number of files that returned errors during upload
|
275
|
+
averageSpeed : 0, // The average speed of the uploads in KB
|
276
|
+
queueLength : 0, // The number of files in the queue
|
277
|
+
queueSize : 0, // The size in bytes of the entire queue
|
278
|
+
uploadSize : 0, // The size in bytes of the upload queue
|
279
|
+
queueBytesUploaded : 0, // The size in bytes that have been uploaded for the current upload queue
|
280
|
+
uploadQueue : [], // The files currently to be uploaded
|
281
|
+
errorMsg : 'Some files were not added to the queue:'
|
282
|
+
};
|
283
|
+
|
284
|
+
// Save references to all the objects
|
285
|
+
swfuploadify.original = $clone;
|
286
|
+
swfuploadify.wrapper = $wrapper;
|
287
|
+
swfuploadify.button = $button;
|
288
|
+
swfuploadify.queue = $queue;
|
289
|
+
|
290
|
+
// Call the user-defined init event handler
|
291
|
+
if (settings.onInit) settings.onInit.call($this, swfuploadify);
|
292
|
+
|
293
|
+
} else {
|
294
|
+
|
295
|
+
// Call the fallback function
|
296
|
+
if (settings.onFallback) settings.onFallback.call($this);
|
297
|
+
|
298
|
+
}
|
299
|
+
});
|
300
|
+
|
301
|
+
},
|
302
|
+
|
303
|
+
// Stop a file upload and remove it from the queue
|
304
|
+
cancel : function(fileID, supressEvent) {
|
305
|
+
|
306
|
+
var args = arguments;
|
307
|
+
|
308
|
+
this.each(function() {
|
309
|
+
// Create a reference to the jQuery DOM object
|
310
|
+
var $this = $(this),
|
311
|
+
swfuploadify = $this.data('uploadify'),
|
312
|
+
settings = swfuploadify.settings,
|
313
|
+
delay = -1;
|
314
|
+
|
315
|
+
if (args[0]) {
|
316
|
+
// Clear the queue
|
317
|
+
if (args[0] == '*') {
|
318
|
+
var queueItemCount = swfuploadify.queueData.queueLength;
|
319
|
+
$('#' + settings.queueID).find('.uploadify-queue-item').each(function() {
|
320
|
+
delay++;
|
321
|
+
if (args[1] === true) {
|
322
|
+
swfuploadify.cancelUpload($(this).attr('id'), false);
|
323
|
+
} else {
|
324
|
+
swfuploadify.cancelUpload($(this).attr('id'));
|
325
|
+
}
|
326
|
+
$(this).find('.data').removeClass('data').html(' - Cancelled');
|
327
|
+
$(this).find('.uploadify-progress-bar').remove();
|
328
|
+
$(this).delay(1000 + 100 * delay).fadeOut(500, function() {
|
329
|
+
$(this).remove();
|
330
|
+
});
|
331
|
+
});
|
332
|
+
swfuploadify.queueData.queueSize = 0;
|
333
|
+
swfuploadify.queueData.queueLength = 0;
|
334
|
+
// Trigger the onClearQueue event
|
335
|
+
if (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount);
|
336
|
+
} else {
|
337
|
+
for (var n = 0; n < args.length; n++) {
|
338
|
+
swfuploadify.cancelUpload(args[n]);
|
339
|
+
$('#' + args[n]).find('.data').removeClass('data').html(' - Cancelled');
|
340
|
+
$('#' + args[n]).find('.uploadify-progress-bar').remove();
|
341
|
+
$('#' + args[n]).delay(1000 + 100 * n).fadeOut(500, function() {
|
342
|
+
$(this).remove();
|
343
|
+
});
|
344
|
+
}
|
345
|
+
}
|
346
|
+
} else {
|
347
|
+
var item = $('#' + settings.queueID).find('.uploadify-queue-item').get(0);
|
348
|
+
$item = $(item);
|
349
|
+
swfuploadify.cancelUpload($item.attr('id'));
|
350
|
+
$item.find('.data').removeClass('data').html(' - Cancelled');
|
351
|
+
$item.find('.uploadify-progress-bar').remove();
|
352
|
+
$item.delay(1000).fadeOut(500, function() {
|
353
|
+
$(this).remove();
|
354
|
+
});
|
355
|
+
}
|
356
|
+
});
|
357
|
+
|
358
|
+
},
|
359
|
+
|
360
|
+
// Revert the DOM object back to its original state
|
361
|
+
destroy : function() {
|
362
|
+
|
363
|
+
this.each(function() {
|
364
|
+
// Create a reference to the jQuery DOM object
|
365
|
+
var $this = $(this),
|
366
|
+
swfuploadify = $this.data('uploadify'),
|
367
|
+
settings = swfuploadify.settings;
|
368
|
+
|
369
|
+
// Destroy the SWF object and
|
370
|
+
swfuploadify.destroy();
|
371
|
+
|
372
|
+
// Destroy the queue
|
373
|
+
if (settings.defaultQueue) {
|
374
|
+
$('#' + settings.queueID).remove();
|
375
|
+
}
|
376
|
+
|
377
|
+
// Reload the original DOM element
|
378
|
+
$('#' + settings.id).replaceWith(swfuploadify.original);
|
379
|
+
|
380
|
+
// Call the user-defined event handler
|
381
|
+
if (settings.onDestroy) settings.onDestroy.call(this);
|
382
|
+
|
383
|
+
delete swfuploadify;
|
384
|
+
});
|
385
|
+
|
386
|
+
},
|
387
|
+
|
388
|
+
// Disable the select button
|
389
|
+
disable : function(isDisabled) {
|
390
|
+
|
391
|
+
this.each(function() {
|
392
|
+
// Create a reference to the jQuery DOM object
|
393
|
+
var $this = $(this),
|
394
|
+
swfuploadify = $this.data('uploadify'),
|
395
|
+
settings = swfuploadify.settings;
|
396
|
+
|
397
|
+
// Call the user-defined event handlers
|
398
|
+
if (isDisabled) {
|
399
|
+
swfuploadify.button.addClass('disabled');
|
400
|
+
if (settings.onDisable) settings.onDisable.call(this);
|
401
|
+
} else {
|
402
|
+
swfuploadify.button.removeClass('disabled');
|
403
|
+
if (settings.onEnable) settings.onEnable.call(this);
|
404
|
+
}
|
405
|
+
|
406
|
+
// Enable/disable the browse button
|
407
|
+
swfuploadify.setButtonDisabled(isDisabled);
|
408
|
+
});
|
409
|
+
|
410
|
+
},
|
411
|
+
|
412
|
+
// Get or set the settings data
|
413
|
+
settings : function(name, value, resetObjects) {
|
414
|
+
|
415
|
+
var args = arguments;
|
416
|
+
var returnValue = value;
|
417
|
+
|
418
|
+
this.each(function() {
|
419
|
+
// Create a reference to the jQuery DOM object
|
420
|
+
var $this = $(this),
|
421
|
+
swfuploadify = $this.data('uploadify'),
|
422
|
+
settings = swfuploadify.settings;
|
423
|
+
|
424
|
+
if (typeof(args[0]) == 'object') {
|
425
|
+
for (var n in value) {
|
426
|
+
setData(n,value[n]);
|
427
|
+
}
|
428
|
+
}
|
429
|
+
if (args.length === 1) {
|
430
|
+
returnValue = settings[name];
|
431
|
+
} else {
|
432
|
+
switch (name) {
|
433
|
+
case 'uploader':
|
434
|
+
swfuploadify.setUploadURL(value);
|
435
|
+
break;
|
436
|
+
case 'formData':
|
437
|
+
if (!resetObjects) {
|
438
|
+
value = $.extend(settings.formData, value);
|
439
|
+
}
|
440
|
+
swfuploadify.setPostParams(settings.formData);
|
441
|
+
break;
|
442
|
+
case 'method':
|
443
|
+
if (value == 'get') {
|
444
|
+
swfuploadify.setUseQueryString(true);
|
445
|
+
} else {
|
446
|
+
swfuploadify.setUseQueryString(false);
|
447
|
+
}
|
448
|
+
break;
|
449
|
+
case 'fileObjName':
|
450
|
+
swfuploadify.setFilePostName(value);
|
451
|
+
break;
|
452
|
+
case 'fileTypeExts':
|
453
|
+
swfuploadify.setFileTypes(value, settings.fileTypeDesc);
|
454
|
+
break;
|
455
|
+
case 'fileTypeDesc':
|
456
|
+
swfuploadify.setFileTypes(settings.fileTypeExts, value);
|
457
|
+
break;
|
458
|
+
case 'fileSizeLimit':
|
459
|
+
swfuploadify.setFileSizeLimit(value);
|
460
|
+
break;
|
461
|
+
case 'uploadLimit':
|
462
|
+
swfuploadify.setFileUploadLimit(value);
|
463
|
+
break;
|
464
|
+
case 'queueSizeLimit':
|
465
|
+
swfuploadify.setFileQueueLimit(value);
|
466
|
+
break;
|
467
|
+
case 'buttonImage':
|
468
|
+
swfuploadify.button.css('background-image', settingValue);
|
469
|
+
break;
|
470
|
+
case 'buttonCursor':
|
471
|
+
if (value == 'arrow') {
|
472
|
+
swfuploadify.setButtonCursor(SWFUpload.CURSOR.ARROW);
|
473
|
+
} else {
|
474
|
+
swfuploadify.setButtonCursor(SWFUpload.CURSOR.HAND);
|
475
|
+
}
|
476
|
+
break;
|
477
|
+
case 'buttonText':
|
478
|
+
$('#' + settings.id + '-button').find('.uploadify-button-text').html(value);
|
479
|
+
break;
|
480
|
+
case 'width':
|
481
|
+
swfuploadify.setButtonDimensions(value, settings.height);
|
482
|
+
break;
|
483
|
+
case 'height':
|
484
|
+
swfuploadify.setButtonDimensions(settings.width, value);
|
485
|
+
break;
|
486
|
+
case 'multi':
|
487
|
+
if (value) {
|
488
|
+
swfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILES);
|
489
|
+
} else {
|
490
|
+
swfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILE);
|
491
|
+
}
|
492
|
+
break;
|
493
|
+
}
|
494
|
+
settings[name] = value;
|
495
|
+
}
|
496
|
+
});
|
497
|
+
|
498
|
+
if (args.length === 1) {
|
499
|
+
return returnValue;
|
500
|
+
}
|
501
|
+
|
502
|
+
},
|
503
|
+
|
504
|
+
// Stop the current uploads and requeue what is in progress
|
505
|
+
stop : function() {
|
506
|
+
|
507
|
+
this.each(function() {
|
508
|
+
// Create a reference to the jQuery DOM object
|
509
|
+
var $this = $(this),
|
510
|
+
swfuploadify = $this.data('uploadify');
|
511
|
+
|
512
|
+
// Reset the queue information
|
513
|
+
swfuploadify.queueData.averageSpeed = 0;
|
514
|
+
swfuploadify.queueData.uploadSize = 0;
|
515
|
+
swfuploadify.queueData.bytesUploaded = 0;
|
516
|
+
swfuploadify.queueData.uploadQueue = [];
|
517
|
+
|
518
|
+
swfuploadify.stopUpload();
|
519
|
+
});
|
520
|
+
|
521
|
+
},
|
522
|
+
|
523
|
+
// Start uploading files in the queue
|
524
|
+
upload : function() {
|
525
|
+
|
526
|
+
var args = arguments;
|
527
|
+
|
528
|
+
this.each(function() {
|
529
|
+
// Create a reference to the jQuery DOM object
|
530
|
+
var $this = $(this),
|
531
|
+
swfuploadify = $this.data('uploadify');
|
532
|
+
|
533
|
+
// Reset the queue information
|
534
|
+
swfuploadify.queueData.averageSpeed = 0;
|
535
|
+
swfuploadify.queueData.uploadSize = 0;
|
536
|
+
swfuploadify.queueData.bytesUploaded = 0;
|
537
|
+
swfuploadify.queueData.uploadQueue = [];
|
538
|
+
|
539
|
+
// Upload the files
|
540
|
+
if (args[0]) {
|
541
|
+
if (args[0] == '*') {
|
542
|
+
swfuploadify.queueData.uploadSize = swfuploadify.queueData.queueSize;
|
543
|
+
swfuploadify.queueData.uploadQueue.push('*');
|
544
|
+
swfuploadify.startUpload();
|
545
|
+
} else {
|
546
|
+
for (var n = 0; n < args.length; n++) {
|
547
|
+
swfuploadify.queueData.uploadSize += swfuploadify.queueData.files[args[n]].size;
|
548
|
+
swfuploadify.queueData.uploadQueue.push(args[n]);
|
549
|
+
}
|
550
|
+
swfuploadify.startUpload(swfuploadify.queueData.uploadQueue.shift());
|
551
|
+
}
|
552
|
+
} else {
|
553
|
+
swfuploadify.startUpload();
|
554
|
+
}
|
555
|
+
|
556
|
+
});
|
557
|
+
|
558
|
+
}
|
559
|
+
|
560
|
+
}
|
561
|
+
|
562
|
+
// These functions handle all the events that occur with the file uploader
|
563
|
+
var handlers = {
|
564
|
+
|
565
|
+
// Triggered when the file dialog is opened
|
566
|
+
onDialogOpen : function() {
|
567
|
+
// Load the swfupload settings
|
568
|
+
var settings = this.settings;
|
569
|
+
|
570
|
+
// Reset some queue info
|
571
|
+
this.queueData.errorMsg = 'Some files were not added to the queue:';
|
572
|
+
this.queueData.filesReplaced = 0;
|
573
|
+
this.queueData.filesCancelled = 0;
|
574
|
+
|
575
|
+
// Call the user-defined event handler
|
576
|
+
if (settings.onDialogOpen) settings.onDialogOpen.call(this);
|
577
|
+
},
|
578
|
+
|
579
|
+
// Triggered when the browse dialog is closed
|
580
|
+
onDialogClose : function(filesSelected, filesQueued, queueLength) {
|
581
|
+
// Load the swfupload settings
|
582
|
+
var settings = this.settings;
|
583
|
+
|
584
|
+
// Update the queue information
|
585
|
+
this.queueData.filesErrored = filesSelected - filesQueued;
|
586
|
+
this.queueData.filesSelected = filesSelected;
|
587
|
+
this.queueData.filesQueued = filesQueued - this.queueData.filesCancelled;
|
588
|
+
this.queueData.queueLength = queueLength;
|
589
|
+
|
590
|
+
// Run the default event handler
|
591
|
+
if ($.inArray('onDialogClose', settings.overrideEvents) < 0) {
|
592
|
+
if (this.queueData.filesErrored > 0) {
|
593
|
+
alert(this.queueData.errorMsg);
|
594
|
+
}
|
595
|
+
}
|
596
|
+
|
597
|
+
// Call the user-defined event handler
|
598
|
+
if (settings.onDialogClose) settings.onDialogClose.call(this, this.queueData);
|
599
|
+
|
600
|
+
// Upload the files if auto is true
|
601
|
+
if (settings.auto) $('#' + settings.id).uploadify('upload', '*');
|
602
|
+
},
|
603
|
+
|
604
|
+
// Triggered once for each file added to the queue
|
605
|
+
onSelect : function(file) {
|
606
|
+
// Load the swfupload settings
|
607
|
+
var settings = this.settings;
|
608
|
+
|
609
|
+
// Check if a file with the same name exists in the queue
|
610
|
+
var queuedFile = {};
|
611
|
+
for (var n in this.queueData.files) {
|
612
|
+
queuedFile = this.queueData.files[n];
|
613
|
+
if (queuedFile.uploaded != true && queuedFile.name == file.name) {
|
614
|
+
var replaceQueueItem = confirm('The file named "' + file.name + '" is already in the queue.\nDo you want to replace the existing item in the queue?');
|
615
|
+
if (!replaceQueueItem) {
|
616
|
+
this.cancelUpload(file.id);
|
617
|
+
this.queueData.filesCancelled++;
|
618
|
+
return false;
|
619
|
+
} else {
|
620
|
+
$('#' + queuedFile.id).remove();
|
621
|
+
this.cancelUpload(queuedFile.id);
|
622
|
+
this.queueData.filesReplaced++;
|
623
|
+
}
|
624
|
+
}
|
625
|
+
}
|
626
|
+
|
627
|
+
// Get the size of the file
|
628
|
+
var fileSize = Math.round(file.size / 1024);
|
629
|
+
var suffix = 'KB';
|
630
|
+
if (fileSize > 1000) {
|
631
|
+
fileSize = Math.round(fileSize / 1000);
|
632
|
+
suffix = 'MB';
|
633
|
+
}
|
634
|
+
var fileSizeParts = fileSize.toString().split('.');
|
635
|
+
fileSize = fileSizeParts[0];
|
636
|
+
if (fileSizeParts.length > 1) {
|
637
|
+
fileSize += '.' + fileSizeParts[1].substr(0,2);
|
638
|
+
}
|
639
|
+
fileSize += suffix;
|
640
|
+
|
641
|
+
// Truncate the filename if it's too long
|
642
|
+
var fileName = file.name;
|
643
|
+
if (fileName.length > 25) {
|
644
|
+
fileName = fileName.substr(0,25) + '...';
|
645
|
+
}
|
646
|
+
|
647
|
+
// Run the default event handler
|
648
|
+
if ($.inArray('onSelect', settings.overrideEvents) < 0) {
|
649
|
+
|
650
|
+
// Add the file item to the queue
|
651
|
+
$('#' + settings.queueID).append('<div id="' + file.id + '" class="uploadify-queue-item">\
|
652
|
+
<div class="cancel">\
|
653
|
+
<a href="javascript:$(\'#' + settings.id + '\').uploadify(\'cancel\', \'' + file.id + '\')">X</a>\
|
654
|
+
</div>\
|
655
|
+
<span class="fileName">' + fileName + ' (' + fileSize + ')</span><span class="data"></span>\
|
656
|
+
<div class="uploadify-progress">\
|
657
|
+
<div class="uploadify-progress-bar"><!--Progress Bar--></div>\
|
658
|
+
</div>\
|
659
|
+
</div>');
|
660
|
+
|
661
|
+
}
|
662
|
+
|
663
|
+
this.queueData.queueSize += file.size;
|
664
|
+
this.queueData.files[file.id] = file;
|
665
|
+
|
666
|
+
// Call the user-defined event handler
|
667
|
+
if (settings.onSelect) settings.onSelect.apply(this, arguments);
|
668
|
+
},
|
669
|
+
|
670
|
+
// Triggered when a file is not added to the queue
|
671
|
+
onSelectError : function(file, errorCode, errorMsg) {
|
672
|
+
// Load the swfupload settings
|
673
|
+
var settings = this.settings;
|
674
|
+
|
675
|
+
// Run the default event handler
|
676
|
+
if ($.inArray('onSelectError', settings.overrideEvents) < 0) {
|
677
|
+
switch(errorCode) {
|
678
|
+
case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
|
679
|
+
if (settings.queueSizeLimit > errorMsg) {
|
680
|
+
this.queueData.errorMsg += '\nThe number of files selected exceeds the remaining upload limit (' + errorMsg + ').';
|
681
|
+
} else {
|
682
|
+
this.queueData.errorMsg += '\nThe number of files selected exceeds the queue size limit (' + settings.queueSizeLimit + ').';
|
683
|
+
}
|
684
|
+
break;
|
685
|
+
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
|
686
|
+
this.queueData.errorMsg += '\nThe file "' + file.name + '" exceeds the size limit (' + settings.fileSizeLimit + ').';
|
687
|
+
break;
|
688
|
+
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
|
689
|
+
this.queueData.errorMsg += '\nThe file "' + file.name + '" is empty.';
|
690
|
+
break;
|
691
|
+
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
|
692
|
+
this.queueData.errorMsg += '\nThe file "' + file.name + '" is not an accepted file type (' + settings.fileTypeDesc + ').';
|
693
|
+
break;
|
694
|
+
}
|
695
|
+
}
|
696
|
+
if (errorCode != SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
|
697
|
+
delete this.queueData.files[file.id];
|
698
|
+
}
|
699
|
+
|
700
|
+
// Call the user-defined event handler
|
701
|
+
if (settings.onSelectError) settings.onSelectError.apply(this, arguments);
|
702
|
+
},
|
703
|
+
|
704
|
+
// Triggered when all the files in the queue have been processed
|
705
|
+
onQueueComplete : function() {
|
706
|
+
if (this.settings.onQueueComplete) this.settings.onQueueComplete.call(this, this.settings.queueData);
|
707
|
+
},
|
708
|
+
|
709
|
+
// Triggered when a file upload successfully completes
|
710
|
+
onUploadComplete : function(file) {
|
711
|
+
// Load the swfupload settings
|
712
|
+
var settings = this.settings,
|
713
|
+
swfuploadify = this;
|
714
|
+
|
715
|
+
// Check if all the files have completed uploading
|
716
|
+
var stats = this.getStats();
|
717
|
+
this.queueData.queueLength = stats.files_queued;
|
718
|
+
if (this.queueData.uploadQueue[0] == '*') {
|
719
|
+
if (this.queueData.queueLength > 0) {
|
720
|
+
this.startUpload();
|
721
|
+
} else {
|
722
|
+
this.queueData.uploadQueue = [];
|
723
|
+
|
724
|
+
// Call the user-defined event handler for queue complete
|
725
|
+
if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);
|
726
|
+
}
|
727
|
+
} else {
|
728
|
+
if (this.queueData.uploadQueue.length > 0) {
|
729
|
+
this.startUpload(this.queueData.uploadQueue.shift());
|
730
|
+
} else {
|
731
|
+
this.queueData.uploadQueue = [];
|
732
|
+
|
733
|
+
// Call the user-defined event handler for queue complete
|
734
|
+
if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);
|
735
|
+
}
|
736
|
+
}
|
737
|
+
|
738
|
+
// Call the default event handler
|
739
|
+
if ($.inArray('onUploadComplete', settings.overrideEvents) < 0) {
|
740
|
+
if (settings.removeCompleted) {
|
741
|
+
switch (file.filestatus) {
|
742
|
+
case SWFUpload.FILE_STATUS.COMPLETE:
|
743
|
+
setTimeout(function() {
|
744
|
+
if ($('#' + file.id)) {
|
745
|
+
swfuploadify.queueData.queueSize -= file.size;
|
746
|
+
swfuploadify.queueData.queueLength -= 1;
|
747
|
+
delete swfuploadify.queueData.files[file.id]
|
748
|
+
$('#' + file.id).fadeOut(500, function() {
|
749
|
+
$(this).remove();
|
750
|
+
});
|
751
|
+
}
|
752
|
+
}, settings.removeTimeout * 1000);
|
753
|
+
break;
|
754
|
+
case SWFUpload.FILE_STATUS.ERROR:
|
755
|
+
if (!settings.requeueErrors) {
|
756
|
+
setTimeout(function() {
|
757
|
+
if ($('#' + file.id)) {
|
758
|
+
swfuploadify.queueData.queueSize -= file.size;
|
759
|
+
swfuploadify.queueData.queueLength -= 1;
|
760
|
+
delete swfuploadify.queueData.files[file.id];
|
761
|
+
$('#' + file.id).fadeOut(500, function() {
|
762
|
+
$(this).remove();
|
763
|
+
});
|
764
|
+
}
|
765
|
+
}, settings.removeTimeout * 1000);
|
766
|
+
}
|
767
|
+
break;
|
768
|
+
}
|
769
|
+
} else {
|
770
|
+
file.uploaded = true;
|
771
|
+
}
|
772
|
+
}
|
773
|
+
|
774
|
+
// Call the user-defined event handler
|
775
|
+
if (settings.onUploadComplete) settings.onUploadComplete.call(this, file);
|
776
|
+
},
|
777
|
+
|
778
|
+
// Triggered when a file upload returns an error
|
779
|
+
onUploadError : function(file, errorCode, errorMsg) {
|
780
|
+
// Load the swfupload settings
|
781
|
+
var settings = this.settings;
|
782
|
+
|
783
|
+
// Set the error string
|
784
|
+
var errorString = 'Error';
|
785
|
+
switch(errorCode) {
|
786
|
+
case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
|
787
|
+
errorString = 'HTTP Error (' + errorMsg + ')';
|
788
|
+
break;
|
789
|
+
case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
|
790
|
+
errorString = 'Missing Upload URL';
|
791
|
+
break;
|
792
|
+
case SWFUpload.UPLOAD_ERROR.IO_ERROR:
|
793
|
+
errorString = 'IO Error';
|
794
|
+
break;
|
795
|
+
case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
|
796
|
+
errorString = 'Security Error';
|
797
|
+
break;
|
798
|
+
case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
|
799
|
+
alert('The upload limit has been reached (' + errorMsg + ').');
|
800
|
+
errorString = 'Exceeds Upload Limit';
|
801
|
+
break;
|
802
|
+
case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
|
803
|
+
errorString = 'Failed';
|
804
|
+
break;
|
805
|
+
case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
|
806
|
+
break;
|
807
|
+
case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
|
808
|
+
errorString = 'Validation Error';
|
809
|
+
break;
|
810
|
+
case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
|
811
|
+
errorString = 'Cancelled';
|
812
|
+
this.queueData.queueSize -= file.size;
|
813
|
+
this.queueData.queueLength -= 1;
|
814
|
+
if (file.status == SWFUpload.FILE_STATUS.IN_PROGRESS || $.inArray(file.id, this.queueData.uploadQueue) >= 0) {
|
815
|
+
this.queueData.uploadSize -= file.size;
|
816
|
+
}
|
817
|
+
// Trigger the onCancel event
|
818
|
+
if (settings.onCancel) settings.onCancel.call(this, file);
|
819
|
+
delete this.queueData.files[file.id];
|
820
|
+
break;
|
821
|
+
case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
|
822
|
+
errorString = 'Stopped';
|
823
|
+
break;
|
824
|
+
}
|
825
|
+
|
826
|
+
// Call the default event handler
|
827
|
+
if ($.inArray('onUploadError', settings.overrideEvents) < 0) {
|
828
|
+
|
829
|
+
if (errorCode != SWFUpload.UPLOAD_ERROR.FILE_CANCELLED && errorCode != SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED) {
|
830
|
+
$('#' + file.id).addClass('uploadify-error');
|
831
|
+
}
|
832
|
+
|
833
|
+
// Reset the progress bar
|
834
|
+
$('#' + file.id).find('.uploadify-progress-bar').css('width','1px');
|
835
|
+
|
836
|
+
// Add the error message to the queue item
|
837
|
+
if (errorCode != SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND && file.status != SWFUpload.FILE_STATUS.COMPLETE) {
|
838
|
+
$('#' + file.id).find('.data').html(' - ' + errorString);
|
839
|
+
}
|
840
|
+
}
|
841
|
+
|
842
|
+
var stats = this.getStats();
|
843
|
+
this.queueData.uploadsErrored = stats.upload_errors;
|
844
|
+
|
845
|
+
// Call the user-defined event handler
|
846
|
+
if (settings.onUploadError) settings.onUploadError.call(this, file, errorCode, errorMsg, errorString);
|
847
|
+
},
|
848
|
+
|
849
|
+
// Triggered periodically during a file upload
|
850
|
+
onUploadProgress : function(file, fileBytesLoaded, fileTotalBytes) {
|
851
|
+
// Load the swfupload settings
|
852
|
+
var settings = this.settings;
|
853
|
+
|
854
|
+
// Setup all the variables
|
855
|
+
var timer = new Date();
|
856
|
+
var newTime = timer.getTime();
|
857
|
+
var lapsedTime = newTime - this.timer;
|
858
|
+
if (lapsedTime > 500) {
|
859
|
+
this.timer = newTime;
|
860
|
+
}
|
861
|
+
var lapsedBytes = fileBytesLoaded - this.bytesLoaded;
|
862
|
+
this.bytesLoaded = fileBytesLoaded;
|
863
|
+
var queueBytesLoaded = this.queueData.queueBytesUploaded + fileBytesLoaded;
|
864
|
+
var percentage = Math.round(fileBytesLoaded / fileTotalBytes * 100);
|
865
|
+
|
866
|
+
// Calculate the average speed
|
867
|
+
var suffix = 'KB/s';
|
868
|
+
var mbs = 0;
|
869
|
+
var kbs = (lapsedBytes / 1024) / (lapsedTime / 1000);
|
870
|
+
kbs = Math.floor(kbs * 10) / 10;
|
871
|
+
if (this.queueData.averageSpeed > 0) {
|
872
|
+
this.queueData.averageSpeed = Math.floor((this.queueData.averageSpeed + kbs) / 2);
|
873
|
+
} else {
|
874
|
+
this.queueData.averageSpeed = Math.floor(kbs);
|
875
|
+
}
|
876
|
+
if (kbs > 1000) {
|
877
|
+
mbs = (kbs * .001);
|
878
|
+
this.queueData.averageSpeed = Math.floor(mbs);
|
879
|
+
suffix = 'MB/s';
|
880
|
+
}
|
881
|
+
|
882
|
+
// Call the default event handler
|
883
|
+
if ($.inArray('onUploadProgress', settings.overrideEvents) < 0) {
|
884
|
+
if (settings.progressData == 'percentage') {
|
885
|
+
$('#' + file.id).find('.data').html(' - ' + percentage + '%');
|
886
|
+
} else if (settings.progressData == 'speed' && lapsedTime > 500) {
|
887
|
+
$('#' + file.id).find('.data').html(' - ' + this.queueData.averageSpeed + suffix);
|
888
|
+
}
|
889
|
+
$('#' + file.id).find('.uploadify-progress-bar').css('width', percentage + '%');
|
890
|
+
}
|
891
|
+
|
892
|
+
// Call the user-defined event handler
|
893
|
+
if (settings.onUploadProgress) settings.onUploadProgress.call(this, file, fileBytesLoaded, fileTotalBytes, queueBytesLoaded, this.queueData.uploadSize);
|
894
|
+
},
|
895
|
+
|
896
|
+
// Triggered right before a file is uploaded
|
897
|
+
onUploadStart : function(file) {
|
898
|
+
// Load the swfupload settings
|
899
|
+
var settings = this.settings;
|
900
|
+
|
901
|
+
var timer = new Date();
|
902
|
+
this.timer = timer.getTime();
|
903
|
+
this.bytesLoaded = 0;
|
904
|
+
if (this.queueData.uploadQueue.length == 0) {
|
905
|
+
this.queueData.uploadSize = file.size;
|
906
|
+
}
|
907
|
+
if (settings.checkExisting) {
|
908
|
+
$.ajax({
|
909
|
+
type : 'POST',
|
910
|
+
async : false,
|
911
|
+
url : settings.checkExisting,
|
912
|
+
data : {filename: file.name},
|
913
|
+
success : function(data) {
|
914
|
+
if (data == 1) {
|
915
|
+
var overwrite = confirm('A file with the name "' + file.name + '" already exists on the server.\nWould you like to replace the existing file?');
|
916
|
+
if (!overwrite) {
|
917
|
+
this.cancelUpload(file.id);
|
918
|
+
$('#' + file.id).remove();
|
919
|
+
if (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) {
|
920
|
+
if (this.queueData.uploadQueue[0] == '*') {
|
921
|
+
this.startUpload();
|
922
|
+
} else {
|
923
|
+
this.startUpload(this.queueData.uploadQueue.shift());
|
924
|
+
}
|
925
|
+
}
|
926
|
+
}
|
927
|
+
}
|
928
|
+
}
|
929
|
+
});
|
930
|
+
}
|
931
|
+
|
932
|
+
// Call the user-defined event handler
|
933
|
+
if (settings.onUploadStart) settings.onUploadStart.call(this, file);
|
934
|
+
},
|
935
|
+
|
936
|
+
// Triggered when a file upload returns a successful code
|
937
|
+
onUploadSuccess : function(file, data, response) {
|
938
|
+
// Load the swfupload settings
|
939
|
+
var settings = this.settings;
|
940
|
+
var stats = this.getStats();
|
941
|
+
this.queueData.uploadsSuccessful = stats.successful_uploads;
|
942
|
+
this.queueData.queueBytesUploaded += file.size;
|
943
|
+
|
944
|
+
// Call the default event handler
|
945
|
+
if ($.inArray('onUploadSuccess', settings.overrideEvents) < 0) {
|
946
|
+
$('#' + file.id).find('.data').html(' - Complete');
|
947
|
+
}
|
948
|
+
|
949
|
+
// Call the user-defined event handler
|
950
|
+
if (settings.onUploadSuccess) settings.onUploadSuccess.call(this, file, data, response);
|
951
|
+
}
|
952
|
+
|
953
|
+
}
|
954
|
+
|
955
|
+
$.fn.uploadify = function(method) {
|
956
|
+
|
957
|
+
if (methods[method]) {
|
958
|
+
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
959
|
+
} else if (typeof method === 'object' || !method) {
|
960
|
+
return methods.init.apply(this, arguments);
|
961
|
+
} else {
|
962
|
+
$.error('The method ' + method + ' does not exist in $.uploadify');
|
963
|
+
}
|
964
|
+
|
965
|
+
}
|
966
|
+
|
967
|
+
})($);
|