-
Notifications
You must be signed in to change notification settings - Fork 0
/
SpryProgressBar-min.js
1 lines (1 loc) · 3.46 KB
/
SpryProgressBar-min.js
1
/* Copyright Arnout Kazemier, license: github.com/3rd-Eden/Spry-UI-ProgressBar, version: 0.0 for Spry 1.7 */(function(){if(typeof Spry==="undefined"||!Spry.Utils||!Spry.$$||!Spry.Effect)throw new Error("SpryProgessbar.js requires SpryDOMUtils.js and SpryDOMEffects.js");Spry.Widget.ProgressBar=function(a,b){var d=this;Spry.Widget.Base.call(this);this.setOptions(this,Spry.Widget.ProgressBar.config);this.setOptions(this,b);this.version="0.0.0";this.element=Spry.$$(a)[0];this.bar=Spry.$$("."+this.barClass,this.element);this.currentWidth=this.initialWidth=parseFloat(this.getStyleProp(this.bar[0],"width"));this.counter=0;this.setPercentage(this.percentage,1,this.autoStart?function(){d.setPercentage(100,d.duration)}:false);this.addObserver({onComplete:function(){d.hideOnComplete&&d.hide()}})};Spry.Widget.ProgressBar.defaultEaseFunc=function(a,b,d,c){if(a>c)return d+b;return b+a/c*d};Spry.Widget.ProgressBar.config={percentage:0,transition:Spry.Widget.ProgressBar.defaultEaseFunc,duration:2E3,autoStart:false,hideOnComplete:true,barClass:"bar"};Spry.Widget.ProgressBar.prototype=new Spry.Widget.Base;Spry.Widget.ProgressBar.prototype.constructor=Spry.Widget.ProgressBar;Spry.Widget.ProgressBar.prototype.setPercentage=function(a,b,d){a=this.cleanPercentage(a);b=typeof b!=="number"?this.duration:b;var c=this,h=a>=this.percentage,i=this.initialWidth/100*a,k=h?a-this.percentage:this.percentage-a;this.effect=new Spry.Effect.CSSAnimator(this.bar,"width:"+i+"px",{duration:b,easeFunc:this.transition||Spry.$$.Results.defaultEaseFunc,onComplete:d||null});this.currentWidth=i;this.percentage=a;this.effect.addObserver({onAnimationComplete:function(){a===100&&c.notifyObservers("onComplete");c.notifyObservers("onPercentageChanged",c.counter=a);c.notifyObservers("onPercentageSet",c.percentage)},onPostDraw:function(e,j){if(j.elapsed>=e.increase&&c.counter<100){e.increase=e.avg+e.increase;var f=Math.floor(j.elapsed/e.avg),g;if(!e.percent||e.percent<f){g=f-e.percent||1;e.percent=f;c.notifyObservers("onPercentageChanged",c.counter=c.cleanPercentage(h?c.counter+g:c.counter-g))}}}});this.effect.avg=this.effect.increase=Math.round(b/k);this.effect.start()};Spry.Widget.ProgressBar.prototype.stop=function(){this.effect&&!this.effect.stopped&&this.effect.stop()};Spry.Widget.ProgressBar.prototype.start=function(){this.effect&&this.effect.stopped&&this.effect.start()};Spry.Widget.ProgressBar.prototype.add=function(a,b){a=a?this.cleanPercentage(a):5;this.setPercentage(this.counter+a,b)};Spry.Widget.ProgressBar.prototype.remove=function(a,b){a=a?this.cleanPercentage(a):5;this.setPercentage(this.counter-a,b)};Spry.Widget.ProgressBar.prototype.reset=function(){var a=this;this.hidden&&this.show();this.counter=0;this.setPercentage(0,1,function(){a.notifyObservers("onReset")})};Spry.Widget.ProgressBar.prototype.complete=function(a){this.stop();this.setPercentage(100,a||200,false,true)};Spry.Widget.ProgressBar.prototype.cleanPercentage=function(a){a=typeof a==="number"?a:parseFloat(a.replace(/\%/g,""));return a>100?100:a<0?0:a};Spry.Widget.ProgressBar.prototype.getPercentage=function(a){return a?this.percentage:this.counter};Spry.Widget.ProgressBar.prototype.show=function(){if(this.hidden){this.hidden=false;this.element.style.display="";(new Spry.Effect.CSSAnimator(this.element,"opacity: 1",{duration:500})).start()}};Spry.Widget.ProgressBar.prototype.hide=function(){var a=this;this.hidden=true;(new Spry.Effect.CSSAnimator(this.element,"opacity: 0",{duration:500,onComplete:function(){a.element.style.display="none"}})).start()}})();