/** A control that shows the current progress of a process in a horizontal bar. {kind: "onyx.ProgressBar", progress: 10} To animate progress changes, call the *animateProgressTo* method: this.$.progressBar.animateProgressTo(50); You may customize the color of the bar by applying a style via the *barClasses* property, e.g.: {kind: "onyx.ProgressBar", barClasses: "onyx-dark"} When the *showStripes* property is true (the default), stripes are shown in the progress bar; when *animateStripes* is true (also the default), these stripes are animated. The animated stripes use CSS3 gradients and animation to produce the effects. In browsers that don't support these features, the effects will not be visible. */ enyo.kind({ name: "onyx.ProgressBar", classes: "onyx-progress-bar", published: { progress: 0, min: 0, max: 100, barClasses: "", showStripes: true, animateStripes: true }, events: { onAnimateProgressFinish: "" }, components: [ {name: "progressAnimator", kind: "Animator", onStep: "progressAnimatorStep", onEnd: "progressAnimatorComplete"}, {name: "bar", classes: "onyx-progress-bar-bar"} ], //* @protected create: function() { this.inherited(arguments); this.progressChanged(); this.barClassesChanged(); this.showStripesChanged(); this.animateStripesChanged(); }, barClassesChanged: function(inOld) { this.$.bar.removeClass(inOld); this.$.bar.addClass(this.barClasses); }, showStripesChanged: function() { this.$.bar.addRemoveClass("striped", this.showStripes); }, animateStripesChanged: function() { this.$.bar.addRemoveClass("animated", this.animateStripes); }, progressChanged: function() { this.progress = this.clampValue(this.min, this.max, this.progress); var p = this.calcPercent(this.progress); this.updateBarPosition(p); }, clampValue: function(inMin, inMax, inValue) { return Math.max(inMin, Math.min(inValue, inMax)); }, calcRatio: function(inValue) { return (inValue - this.min) / (this.max - this.min); }, calcPercent: function(inValue) { return this.calcRatio(inValue) * 100; }, updateBarPosition: function(inPercent) { this.$.bar.applyStyle("width", inPercent + "%"); }, //* @public //* Animates progress to the given value. animateProgressTo: function(inValue) { this.$.progressAnimator.play({ startValue: this.progress, endValue: inValue, node: this.hasNode() }); }, //* @protected progressAnimatorStep: function(inSender) { this.setProgress(inSender.value); return true; }, progressAnimatorComplete: function(inSender) { this.doAnimateProgressFinish(inSender); return true; } });