blob: dd508ff39430ed67828c13aaac60c0656e4437bf [file] [log] [blame]
/*
---
name: Fx.ProgressBar
description: Fx.ProgressBar
requires: [Core/Fx.Transitions, Core/Fx, Core/Class]
provides: [Fx.ProgressBar]
version: 1.1
license: MIT License
author: Harald Kirschner <http://digitarald.de>
...
*/
Fx.ProgressBar = new Class({
Extends: Fx,
options: {
text: null,
url: null,
transition: Fx.Transitions.Circ.easeOut,
fit: true,
link: 'cancel'
},
initialize: function(element, options) {
this.element = document.id(element);
this.parent(options);
var url = this.options.url;
if (url) {
this.element.setStyles({
'background-image': 'url(' + url + ')',
'background-repeat': 'no-repeat'
});
}
if (this.options.fit) {
url = url || this.element.getStyle('background-image').replace(/^url\(["']?|["']?\)$/g, '');
if (url) {
var fill = new Image();
fill.onload = function() {
this.fill = fill.width;
fill = fill.onload = null;
this.set(this.now || 0);
}.bind(this);
fill.src = url;
if (!this.fill && fill.width) fill.onload();
}
} else {
this.set(0);
}
},
start: function(to, total) {
return this.parent(this.now, (arguments.length == 1 || !total) ? to.limit(0, 100) : to / total * 100);
},
set: function(to) {
this.now = to;
var css = (this.fill)
? (((this.fill / -2) + (to / 100) * (this.element.width || 1) || 0).round() + 'px')
: ((100 - to) + '%');
this.element.setStyle('backgroundPosition', css + ' 0px').title = Math.round(to) + '%';
var text = document.id(this.options.text);
if (text) text.set('text', Math.round(to) + '%');
return this;
}
});