22 lines
15 KiB
JavaScript
Executable File
22 lines
15 KiB
JavaScript
Executable File
|
|
(function($){window.SWFUpload={instances:new Array(),movieCount:0,version:"2.2.0 Beta 2",QUEUE_ERROR:{QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},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},FILE_STATUS:{QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},BUTTON_ACTION:{SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},CURSOR:{ARROW:-1,HAND:-2},WINDOW_MODE:{WINDOW:'window',TRANSPARENT:'transparent',OPAQUE:'opaque'}};$.uploader=function(settings,callbacks){return new $._uploader(settings,callbacks);};$._uploader=function(settings,callbacks){var defaults={debug:false,upload_url:'',flash_movie:'',movie_name:null,params:null,use_query_string:null,requeue_on_error:false,file_types:'*.*',file_types_description:'All files',file_size_limit:0,file_upload_limit:0,file_queue_limit:-1,target_element:null};this.params=$.extend(defaults,settings);var default_callbacks={flashReady:function(){},fileDialogComplete:function(){},fileDialogStart:function(){},fileQueued:function(){},fileQueueError:function(){},uploadStart:function(){},uploadProgress:function(){},uploadError:function(){},uploadSuccess:function(){},uploadComplete:function(){},debug:function(){}};this.callbacks=$.extend(default_callbacks,callbacks);return this.build();};$._uploader.prototype={log:function(msg){if(!this.params.debug){return;}
|
|
try{console.log(msg);}catch(e){}},build:function(settings){if(!this.params.upload_url||!this.params.movie_name){throw('Configuration error. Please make sure you specified movie_name and upload_url options.');}
|
|
if($.browser.opera){return this;}
|
|
this.params.file_size_limit=this.getFileSizeLimit(this.params.file_size_limit);var fv=new Array();this.addFlashVar(fv,'debugEnabled',this.params.debug);this.addFlashVar(fv,'movieName',this.params.movie_name);this.addFlashVar(fv,'uploadURL',this.params.upload_url);this.addFlashVar(fv,'fileTypes',this.params.file_types);this.addFlashVar(fv,'fileTypesDescription',this.params.file_types_description);this.addFlashVar(fv,'params',this.params.params);this.addFlashVar(fv,'fileSizeLimit',this.params.file_size_limit+'b');this.addFlashVar(fv,'fileUploadLimit',this.params.file_upload_limit);this.addFlashVar(fv,'fileQueueLimit',this.params.file_queue_limit);this.addFlashVar(fv,'requeueOnError',this.params.requeue_on_error);this.addFlashVar(fv,'buttonImageURL','');this.addFlashVar(fv,'buttonWidth',500);this.addFlashVar(fv,'buttonHeight',500);this.addFlashVar(fv,'buttonText','');this.addFlashVar(fv,'buttonTextTopPadding',0);this.addFlashVar(fv,'buttonTextLeftPadding',0);this.addFlashVar(fv,'buttonTextStyle','');this.addFlashVar(fv,'buttonAction',this.params.upload_limit==1?-100:-110);this.addFlashVar(fv,'buttonDisabled',false);this.addFlashVar(fv,'buttonCursor',-2);this.addFlashVar(fv,'button_window_mode','window');this.flashBind();var flash='<object id="'+this.params.movie_name+'" data="'+this.params.flash_movie+'" '+'type="application/x-shockwave-flash" width="10" height="10">'+'<param name="movie" value="'+this.params.flash_movie+'" />'+'<param name="wmode" value="transparent" />'+'<param name="menu" value="false" />'+'<param name="allowScriptAccess" value="always" />'+'<param name="flashvars" value="'+fv.join('&')+'" />'+'</object>';this.container=$('<span></span>');if(this.params.target_element==null){this.container.css({display:'block',position:'absolute',left:$(document).scrollLeft()+'px',top:$(document).scrollTop()+'px',width:'30px',height:'30px',background:'#f00'});$('body').append(this.container);}else{$(this.params.target_element).append(this.container);this.container.css({display:'block',position:'absolute',top:0,left:0,zIndex:1});}
|
|
this.container[0].innerHTML=flash;this.movie=document.getElementById(this.params.movie_name);return this;},addFlashVar:function(fv,n,v){if(v!=null){fv.push(n+'='+encodeURIComponent(v));}},flashBind:function(){_this=this;var events={flashReady:function(){if(window[_this.params.movie_name]==undefined){window[_this.params.movie_name]=_this.movie;}
|
|
_this.flashBindEvent('flashReady',arguments);},fileDialogComplete:function(){_this.flashBindEvent('fileDialogComplete',arguments);},fileDialogStart:function(){_this.flashBindEvent('fileDialogStart',arguments);},fileQueued:function(file_object){_this.flashBindEvent('fileQueued',arguments);},fileQueueError:function(file_object,error_code,error_msg){_this.flashBindEvent('fileQueueError',arguments);},uploadStart:function(){_this.flashBindEvent('uploadStart',arguments);},uploadProgress:function(){_this.flashBindEvent('uploadProgress',arguments);},uploadError:function(){_this.flashBindEvent('uploadError',arguments);},uploadSuccess:function(){_this.flashBindEvent('uploadSuccess',arguments);},uploadComplete:function(){_this.flashBindEvent('uploadComplete',arguments);},debug:function(){_this.flashBindEvent('debug',arguments);}};window.SWFUpload.instances[this.params.movie_name]=events;window.SWFUpload.movieCount++;},flashEventQueue:[],flashBindEvent:function(evt,a){a=a||new Array();var _this=this;if($.isFunction(this.callbacks[evt])){this.flashEventQueue.push(function(){this.callbacks[evt].apply(this,a);});setTimeout(function(){_this.flashExecuteNextEvent();},0);}else if(this.callbacks[evt]!==null){throw'Event handler '+evt+' is unknown or is not a function';}},flashExecuteNextEvent:function(){var f=this.flashEventQueue?this.flashEventQueue.shift():null;if($.isFunction(f)){f.apply(this);}},destroy:function(){try{this.StopUpload();$(this.movie).remove();SWFUpload.instances[this.params.movie_name]=null;SWFUpload.movieCount--;delete SWFUpload.instances[this.movieName];delete window[this.movieName];return true;}catch(e){return false;}},StartUpload:function(file_id){return this.movie.StartUpload(file_id);},ReturnUploadStart:function(value){return this.movie.ReturnUploadStart(value);},StopUpload:function(){return this.movie.StopUpload();},CancelUpload:function(file_id){return this.movie.CancelUpload(file_id);},GetStats:function(){return this.movie.GetStats();},SetStats:function(stats){return this.movie.SetStats(stats);},GetFile:function(file_id){return this.movie.GetFile(file_id);},GetFileByIndex:function(file_index){return this.movie.GetFileByIndex(file_index);},getFileSizeLimit:function(size){var value=0;var unit='kb';size=$.trim(size.toLowerCase());var values=size.match(/^\d+/);if(values!=null&&values.length>0){value=parseInt(values[0]);}
|
|
var units=size.match(/(b|kb|mb|gb)/);if(units!=null&&units.length>0){unit=units[0];}
|
|
var multiplier=1024;if(unit==="b"){multiplier=1;}else if(unit==="mb"){multiplier=1048576;}else if(unit==="gb"){multiplier=1073741824;}
|
|
return value*multiplier;}};})(jQuery);(function($){$.fn.candyUpload=function(settings,callbacks){new $._candyUpload(this,settings,callbacks);return this;};$._candyUpload=function(target,settings,callbacks){var defaults={debug:false,upload_url:'',params:null,flash_movie:'',file_types:'*.*',file_types_description:'All files',file_size_limit:0,file_upload_limit:0,file_queue_limit:-1,callbacks:{}};this.params=$.extend(defaults,settings);this.params.movie_name='SWFU-'+(window.SWFUpload.instances.length+1);this.target=target;this.createControls();this.target.hide().after(this.ctrl.block).hide();this.params.target_element=this.ctrl.btn_browse.parent().get(0);var _this=this;this.upldr=$.uploader(this.params,{debug:function(msg){$('body').append('<pre class="debug">'+msg+'</pre>');_this.bindEvent('debug',arguments);},flashReady:function(){_this.initControls(this);_this.bindEvent('flashReady',arguments);this.movie.style.width=_this.ctrl.btn_browse.width()+'px';this.movie.style.height=_this.ctrl.btn_browse.height()+'px';},fileDialogComplete:function(num_ref_files,num_queue_files){_this.bindEvent('fileDialogComplete',arguments);},fileDialogStart:function(){_this.bindEvent('fileQueued',arguments);},fileQueued:function(o){_this.appendFile(this,o);_this.refreshControls(this);_this.bindEvent('fileQueued',arguments);},fileQueueError:function(o,code,msg){var codes=window.SWFUpload.QUEUE_ERROR;switch(code){case codes.QUEUE_LIMIT_EXCEEDED:_this.queueErrorMsg(_this.locales.limit_exceeded);break;case codes.FILE_EXCEEDS_SIZE_LIMIT:_this.queueErrorMsg(_this.locales.size_limit_exceeded);break;case codes.ZERO_BYTE_FILE:case codes.INVALID_FILETYPE:_this.queueErrorMsg(msg);break;}
|
|
_this.bindEvent('fileQueueError',arguments);},uploadStart:function(){this.ReturnUploadStart(true);_this.bindEvent('uploadStart',arguments);},uploadProgress:function(o,bytes,total){_this.fileProgressBar(o.id,bytes,total);_this.bindEvent('uploadProgress',arguments);},uploadError:function(o,code,msg){var codes=window.SWFUpload.UPLOAD_ERROR;switch(code){case codes.FILE_CANCELLED:_this.fileErrorMsg(o.id,_this.locales.canceled);break;case codes.HTTP_ERROR:_this.fileErrorMsg(o.id,_this.locales.http_error+' '+msg);break;case codes.MISSING_UPLOAD_URL:case codes.IO_ERROR:case codes.SECURITY_ERROR:case codes.UPLOAD_LIMIT_EXCEEDED:case codes.UPLOAD_FAILED:case codes.SPECIFIED_FILE_ID_NOT_FOUND:case codes.FILE_VALIDATION_FAILED:case codes.FILE_CANCELLED:case codes.UPLOAD_STOPPED:_this.fileErrorMsg(o.id,_this.locales.error+' '+msg);break;}
|
|
_this.refreshControls(this);_this.removeFileCancel(o);_this.bindEvent('uploadError',arguments);},uploadSuccess:function(o,data){_this.fileProgressBar(o.id,1,1);_this.refreshControls(this);_this.removeFileCancel(o);_this.bindEvent('uploadSuccess',arguments);},uploadComplete:function(o){this.StartUpload();_this.refreshControls(this);_this.bindEvent('uploadComplete',arguments);}});};$._candyUpload.prototype={locales:{max_file_size:'Maximum file size allowed:',limit_exceeded:'Limit exceeded.',size_limit_exceeded:'File size exceeds allowed limit.',canceled:'Canceled.',http_error:'HTTP Error:',error:'Error:',choose_file:'Choose file',choose_files:'Choose files',cancel:'Cancel',clean:'Clean',upload:'Upload',no_file_in_queue:'No file in queue.',file_in_queue:'1 file in queue.',files_in_queue:'%d files in queue.',queue_error:'Queue error:'},ctrl:{block:$('<div class="cu-ctrl"></div>'),files:null},createControls:function(){this.ctrl.btn_browse=$('<a href="#" class="button"> </a>').click(function(){return false;});this.ctrl.btn_cancel=$('<a href="#" class="button">'+this.locales.cancel+'</a>').click(function(){return false;});this.ctrl.btn_clean=$('<a href="#" class="button">'+this.locales.clean+'</a>').click(function(){return false;});this.ctrl.btn_upload=$('<a href="#" class="button">'+this.locales.upload+'</a>').click(function(){return false;});this.ctrl.msg=$('<div class="cu-msg">'+this.locales.no_file_in_queue+'</div>').appendTo(this.ctrl.block);var btn=$('<div class="cu-btn"></div>').appendTo(this.ctrl.block);var brw=$('<span class="cu-btn-browse"></span>').append(this.ctrl.btn_browse).appendTo(btn);$('<span class="cu-btn-upload"></span>').append(this.ctrl.btn_upload).appendTo(btn).hide();$('<span class="cu-btn-cancel"></span>').append(this.ctrl.btn_cancel).appendTo(btn).hide();$('<span class="cu-btn-clean"></span>').append(this.ctrl.btn_clean).appendTo(btn).hide();this.bindEvent('createControls');},initControls:function(upldr){if(this.params.file_queue_limit==1){this.ctrl.btn_browse.text(this.locales.choose_file);}else{this.ctrl.btn_browse.text(this.locales.choose_files);}
|
|
var _this=this;this.ctrl.btn_cancel.click(function(){_this.cancelQueue(upldr);return false;});this.ctrl.btn_clean.click(function(){_this.cleanQueue(upldr);return false;});this.ctrl.btn_upload.click(function(){_this.uploadQueue(upldr);return false;});var size=this.formatSize(upldr.params.file_size_limit);$('<p class="cu-maxsize form-note info">'+this.locales.max_file_size+' '+size+'</p>').appendTo(this.ctrl.block);},refreshControls:function(upldr){if(!this.ctrl.files||this.ctrl.files.length==0){return;}
|
|
var stats=upldr.GetStats();if(stats.files_queued>0){this.ctrl.btn_cancel.parent().show();this.ctrl.btn_upload.parent().show();if(this.params.file_queue_limit>0&&this.params.file_queue_limit==stats.files_queued){this.ctrl.btn_browse.hide();}else{this.ctrl.btn_browse.show();}
|
|
if(stats.files_queued>1){var msg=this.locales.files_in_queue.replace(/%d/,stats.files_queued);}else{var msg=this.locales.file_in_queue;}}else{this.ctrl.btn_browse.show();this.ctrl.btn_cancel.parent().hide();this.ctrl.btn_upload.parent().hide();var msg=this.locales.no_file_in_queue;}
|
|
this.ctrl.msg.removeClass('cu-error').text(msg);if(stats.successful_uploads>0||stats.upload_errors>0||stats.upload_cancelled>0){this.ctrl.btn_clean.parent().show();}else{this.ctrl.btn_clean.parent().hide();}},removeFileCancel:function(o){$('#'+o.id+' span.cu-filecancel',this.ctrl.files).remove();},appendFile:function(upldr,o){if(!this.ctrl.files){this.ctrl.files=$('<div class="cu-files"></div>');this.ctrl.msg.after(this.ctrl.files);}
|
|
var fileblock=$('<div class="cu-file" id="'+o.id+'">'+'<div class="cu-fileinfo"><span class="cu-filename">'+o.name+'</span> '+'<span class="cu-filesize">('+this.formatSize(o.size)+')</span> '+'<span class="cu-filecancel"><a href="#">cancel</a> </span> '+'<span class="cu-filemsg"></span>'+'</div>');$('span.cu-filecancel a',fileblock).click(function(){upldr.CancelUpload(o.id);return false;});this.ctrl.files.append(fileblock);},fileProgressBar:function(file_id,bytes,total){var bar=$('#'+file_id+' div.cu-progress>div',this.ctrl.files);if(bar.length==0){$('#'+file_id,this.ctrl.files).append('<div class="cu-progress"><div> </div></div>');bar=$('#'+file_id+' div.cu-progress>div',this.ctrl.files);}
|
|
var percent=Math.round((bytes*100)/total);bar.css('width',percent+'%').text(percent+'%');},fileMsg:function(file_id,msg,error){error=error||false;var span=$('#'+file_id+' span.cu-filemsg',this.ctrl.files).attr('class','cu-filemsg');if(error){span.addClass('cu-error');}
|
|
span.text(msg);},fileErrorMsg:function(file_id,msg){this.fileMsg(file_id,msg,true);},cancelQueue:function(upldr){if(!this.ctrl.files||this.ctrl.files.length==0){return;}
|
|
this.ctrl.files.children('div').each(function(){upldr.CancelUpload(this.id);});},uploadQueue:function(upldr){if(!this.ctrl.files||this.ctrl.files.length==0){return;}
|
|
upldr.StartUpload();},cleanQueue:function(upldr){var _this=this;var e=$('div.cu-file',this.ctrl.files).not(':has(span.cu-filecancel a)');e.filter(':last').slideUp(200,function(){$(this).remove();if(e.length==1){upldr.SetStats({successful_uploads:0,upload_errors:0,upload_cancelled:0});_this.refreshControls(upldr);}else if(e.length>1){_this.cleanQueue(upldr);}});},queueErrorMsg:function(msg){this.ctrl.msg.addClass('cu-error').text(this.locales.queue_error+' '+msg);},formatSize:function(s){var a_size=Array('B','KB','MB','GB','TB');var i_index=0;while(s>1024){i_index++;s/=1024;}
|
|
return(Math.round(s*100)/100)+' '+a_size[i_index];},bindEvent:function(evt,a){if(this.params.callbacks[evt]!=undefined&&$.isFunction(this.params.callbacks[evt])){a=a||new Array();this.params.callbacks[evt].apply(this,a);}}};})(jQuery); |