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