animated progress bar to trick the user into thinking that we know what we're doing when actually, we DON'T HAVE ANY CLUE GUYS
parent
57105dcea8
commit
5b4a95f59b
@ -0,0 +1,102 @@ |
||||
/** |
||||
* @author Ryan Johnson <http://syntacticx.com/>
|
||||
* @copyright 2008 PersonalGrid Corporation <http://personalgrid.com/>
|
||||
* @package LivePipe UI |
||||
* @license MIT |
||||
* @url http://livepipe.net/control/progressbar
|
||||
* @require prototype.js, livepipe.js |
||||
*/ |
||||
|
||||
/*global document, Prototype, Ajax, Class, PeriodicalExecuter, $, $A, Control */ |
||||
|
||||
if(typeof(Prototype) == "undefined") { |
||||
throw "Control.ProgressBar requires Prototype to be loaded."; } |
||||
if(typeof(Event) == "undefined") { |
||||
throw "Control.ProgressBar requires Event to be loaded."; } |
||||
|
||||
Control.ProgressBar = Class.create({ |
||||
initialize: function(container,options){ |
||||
this.progress = 0; |
||||
this.executer = false; |
||||
this.active = false; |
||||
this.poller = false; |
||||
this.container = $(container); |
||||
this.containerWidth = this.container.getDimensions().width - (parseInt(this.container.getStyle('border-right-width').replace(/px/,''), 10) + parseInt(this.container.getStyle('border-left-width').replace(/px/,''), 10)); |
||||
this.progressContainer = $(document.createElement('div')); |
||||
this.progressContainer.setStyle({ |
||||
width: this.containerWidth + 'px', |
||||
height: '100%', |
||||
position: 'absolute', |
||||
top: '0px', |
||||
right: '0px' |
||||
}); |
||||
this.container.appendChild(this.progressContainer); |
||||
this.options = { |
||||
afterChange: Prototype.emptyFunction, |
||||
interval: 0.25, |
||||
step: 1, |
||||
classNames: { |
||||
active: 'progress_bar_active', |
||||
inactive: 'progress_bar_inactive' |
||||
} |
||||
}; |
||||
Object.extend(this.options,options || {}); |
||||
this.container.addClassName(this.options.classNames.inactive); |
||||
this.active = false; |
||||
}, |
||||
setProgress: function(value){ |
||||
this.progress = value; |
||||
this.draw(); |
||||
if(this.progress >= 100) { |
||||
this.stop(false); } |
||||
this.notify('afterChange',this.progress,this.active); |
||||
}, |
||||
poll: function (url, interval, ajaxOptions){ |
||||
// Extend the passed ajax options and success callback with our own.
|
||||
ajaxOptions = ajaxOptions || {}; |
||||
var success = ajaxOptions.onSuccess || Prototype.emptyFunction; |
||||
ajaxOptions.onSuccess = success.wrap(function (callOriginal, request) { |
||||
this.setProgress(parseInt(request.responseText, 10)); |
||||
if(!this.active) { this.poller.stop(); } |
||||
callOriginal(request); |
||||
}).bind(this); |
||||
|
||||
this.active = true; |
||||
this.poller = new PeriodicalExecuter(function(){ |
||||
var a = new Ajax.Request(url, ajaxOptions); |
||||
}.bind(this),interval || 3); |
||||
}, |
||||
start: function(){ |
||||
this.active = true; |
||||
this.container.removeClassName(this.options.classNames.inactive); |
||||
this.container.addClassName(this.options.classNames.active); |
||||
this.executer = new PeriodicalExecuter(this.step.bind(this,this.options.step),this.options.interval); |
||||
}, |
||||
stop: function(reset){ |
||||
this.active = false; |
||||
if(this.executer) { |
||||
this.executer.stop(); } |
||||
this.container.removeClassName(this.options.classNames.active); |
||||
this.container.addClassName(this.options.classNames.inactive); |
||||
if (typeof reset === 'undefined' || reset === true) { |
||||
this.reset(); } |
||||
}, |
||||
step: function(amount){ |
||||
this.active = true; |
||||
this.setProgress(Math.min(100,this.progress + amount)); |
||||
}, |
||||
reset: function(){ |
||||
this.active = false; |
||||
this.setProgress(0); |
||||
}, |
||||
draw: function(){ |
||||
this.progressContainer.setStyle({ |
||||
width: (this.containerWidth - Math.floor((parseInt(this.progress, 10) / 100) * this.containerWidth)) + 'px' |
||||
}); |
||||
}, |
||||
notify: function(event_name){ |
||||
if(this.options[event_name]) { |
||||
return [this.options[event_name].apply(this.options[event_name],$A(arguments).slice(1))]; } |
||||
} |
||||
}); |
||||
Event.extend(Control.ProgressBar); |
Loading…
Reference in new issue