|
|
- /**
- 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;
- }
- });
|