var dwProgressBar = new Class({
//implements
Implements: [Options],
//options
options: {
container: $$('body')[0],
boxID:'',
percentageID:'',
displayID:'',
startPercentage: 0,
displayText: false,
speed:10
},
//initialization
initialize: function(options) {
//set options
this.setOptions(options);
//create elements
this.createElements();
},
//creates the box and percentage elements
createElements: function() {
var box = new Element('div', {
id:this.options.boxID + this.options.id,
'class' : this.options.boxID
});
var perc = new Element('div', {
id:this.options.percentageID + this.options.id,
'style':'width:0px;',
'class' : this.options.percentageID
});
perc.inject(box);
box.inject(this.options.container);
if(this.options.displayText) {
var text = new Element('div', {
id:this.options.displayID + this.options.id,
'class' : this.options.displayID
});
text.inject(this.options.container);
}
this.set(this.options.startPercentage);
},
//calculates width in pixels from percentage
calculate: function(percentage) {
return (document.id(this.options.boxID+ this.options.id).getStyle('width').replace('px','') * (percentage / 100)).toInt();
},
//animates the change in percentage
animate: function(to) {
document.id(this.options.percentageID+ this.options.id).set('morph', {
duration: this.options.speed,
link:'cancel'
}).morph({
width:this.calculate(to.toInt())
});
if(this.options.displayText) {
document.id(this.options.displayID+ this.options.id).set('text', to.toInt() + '%');
}
},
//sets the percentage from its current state to desired percentage
set: function(to) {
this.animate(to);
}
});
req = new Request.JSON({
onSuccess: renderTable,
method: 'get',
url: '/json/links',
initialDelay: 0,
delay: 1000,
limit: 20000
});
var dls = []
var pbs = []
function renderTable(data){
data.downloads.each(function(dl){
if (dls.contains(dl.id)){
var div = $('dl'+dl.id)
pbs[dl.id].set(dl.percent)
div.getChildren("b")[0].textContent = dl.name
size = Math.round((dl.size - dl.kbleft) / 1024) + "/" + Math.round(dl.size / 1024) + " MB"
div.getChildren(".dlsize")[0].textContent = size
speed = Math.round(dl.speed) + " kb/s"
div.getChildren(".dlspeed")[0].textContent = speed
div.getChildren(".dltime")[0].textContent = dl.eta
}else{
dls.push(dl.id)
container = $("dlcontainer")
dldiv = new Element('div', {
'id' : 'dl'+dl.id,
'class': 'download',
'styles': {
'display': 'None'
}
})
new Element('p').inject(dldiv)
new Element('b', {
'html': dl.name
}).inject(dldiv)
new Element('br').inject(dldiv)
dldiv.inject(container)
pbs[dl.id] = new dwProgressBar({
container: $(dldiv),
startPercentage: 0,
speed: 1000,
id: dl.id,
boxID: 'box',
percentageID: 'perc',
displayText: true,
displayID: 'boxtext'
});
new Element('div', {
'class': 'dlsize',
'html': Math.round((dl.size - dl.kbleft) / 1024) + "/" + Math.round(dl.size / 1024) + " MB"
}).inject(dldiv)
new Element('div', {
'class': 'dlspeed',
'html': Math.round(dl.speed) + " kb/s"
}).inject(dldiv)
new Element('div', {
'class': 'dltime',
'html': dl.eta
}).inject(dldiv)
//dldiv.dissolve({duration : 0})
dldiv.reveal()
}
})
dls.each(function(id, index){
if (data.ids.contains(id)){
}else{
//$("dl"+id).reveal()
dls.erase(id)
$('dl'+id).nix()
}
})
}
window.addEvent('domready', function(){
/*
//create the progress bar for example 1
pb = new dwProgressBar({
container: $$('.level1 p')[0],
startPercentage: 25,
speed: 1000,
id: 1,
boxID: 'box',
percentageID: 'perc',
displayText: true,
displayID: 'boxtext'
});
*/
req.startTimer();
});