/** * Form uploading progress bar feature * http://rightjs.org/ui/uploader * * Copyright (C) 2010 Nikolay Nemshilov */ var Uploader=RightJS.Uploader=function(b){var m=b.$,n=b.$w,h=b.$E,o=b.Xhr,j=b.Form,k=b.RegExp,g=new (function(a,d){if(!d){d=a;a="DIV"}var e=new b.Wrapper(b.Element.Wrappers[a]||b.Element,{initialize:function(f,c){this.key=f;var l=[{"class":"rui-"+f}];this instanceof b.Input||this instanceof b.Form||l.unshift(a);this.$super.apply(this,l);if(b.isString(c))c=b.$(c);if(c instanceof b.Element){this._=c._;if("$listeners"in c)c.$listeners=c.$listeners;c={}}this.setOptions(c,this);return this},setOptions:function(f, c){c=c||this;b.Options.setOptions.call(this,b.Object.merge(f,eval("("+(c.get("data-"+this.key)||"{}")+")")));return this}});e=new b.Wrapper(e,d);b.Observer.createShortcuts(e.prototype,e.EVENTS||[]);return e})({extend:{version:"2.0.0",EVENTS:n("start update finish error"),Options:{url:"/progress",param:"X-Progress-ID",timeout:1E3,round:0,fxDuration:400,cssRule:"[data-uploader]"}},initialize:function(a,d){this.form=a=m(a);var e=a.first(".rui-uploader");this.$super("uploader",e).setOptions(d,this.form).addClass("rui-progress-bar").insert([this.bar= this.first(".bar")||h("div",{"class":"bar"}),this.num=this.first(".num")||h("div",{"class":"num"})]);e||this.insertTo(a)},start:function(){var a={state:"starting"};return this.paint(a).prepare().request().fire("start",{data:a})},update:function(a){this.paint(a).fire("update",{data:a});switch(a.state){case "starting":case "uploading":b(this.request).bind(this).delay(this.options.timeout);break;case "done":this.fire("finish",{data:a});break;case "error":this.fire("error",{data:a});break}return this}, paint:function(a){var d=(this.percent||0)/100;switch(a.state){case "starting":d=0;break;case "done":d=1;break;case "uploading":d=a.received/(a.size||1);break}this.percent=b(d*100).round(this.options.round);if(this.percent===0||!b.Fx||!this.options.fxDuration){this.bar._.style.width=this.percent+"%";this.num._.innerHTML=this.percent+"%"}else{this.bar.morph({width:this.percent+"%"},{duration:this.options.fxDuration});b(function(){this.num._.innerHTML=this.percent+"%"}).bind(this).delay(this.options.fxDuration/ 2)}this[a.state==="error"?"addClass":"removeClass"]("rui-progress-bar-failed");return this},request:function(){o.load(this.options.url+"?"+this.options.param+"="+this.uid,{evalJSON:false,onSuccess:b(function(a){this.update(eval("("+a.text+")"))}).bind(this)});return this},prepare:function(){this.uid="";for(i=0;i<32;i++)this.uid+=Math.random(0,15).toString(16);var a=this.options.param,d=this.form.get("action").replace(new k("(\\?|&)"+k.escape(a)+"=[^&]*","i"),"");this.form.set("action",(b(d).includes("?")? "&":"?")+a+"="+this.uid);this.show();return this}}),p=j.prototype.send;j.include({send:function(){if(!this.uploader&&(this.match(g.Options.cssRule)||this.first(".rui-uploader")))this.uploader=new g(this);this.uploader&&this.uploader.start();return p.apply(this,arguments)}});document.write(''); return g}(RightJS);