From d23fe49ae814f677fedd55cddd97768bddeffa12 Mon Sep 17 00:00:00 2001 From: Marian Rudzynski Date: Mon, 22 Nov 2010 08:49:47 -0500 Subject: [PATCH] Progressbar: Added max option. Fixes #6681 - Progressbar: add max option. --- .../unit/progressbar/progressbar_defaults.js | 3 ++- tests/unit/progressbar/progressbar_events.js | 13 +++++++++ tests/unit/progressbar/progressbar_options.js | 8 ++++++ ui/jquery.ui.progressbar.js | 27 +++++++++++++------ 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/tests/unit/progressbar/progressbar_defaults.js b/tests/unit/progressbar/progressbar_defaults.js index b663708ce..925510871 100644 --- a/tests/unit/progressbar/progressbar_defaults.js +++ b/tests/unit/progressbar/progressbar_defaults.js @@ -4,7 +4,8 @@ var progressbar_defaults = { disabled: false, - value: 0 + value: 0, + max: 100 }; commonWidgetTests('progressbar', { defaults: progressbar_defaults }); diff --git a/tests/unit/progressbar/progressbar_events.js b/tests/unit/progressbar/progressbar_events.js index 22b301abe..585c09091 100644 --- a/tests/unit/progressbar/progressbar_events.js +++ b/tests/unit/progressbar/progressbar_events.js @@ -5,6 +5,19 @@ module("progressbar: events"); +test("create", function() { + expect(1); + $("#progressbar").progressbar({ + value: 5, + create: function() { + same(5, $(this).progressbar("value") ); + }, + change: function() { + ok(false, 'create() has triggered change()'); + } + }) +}); + test("change", function() { expect(1); $("#progressbar").progressbar({ diff --git a/tests/unit/progressbar/progressbar_options.js b/tests/unit/progressbar/progressbar_options.js index 269f93779..70ad7abab 100644 --- a/tests/unit/progressbar/progressbar_options.js +++ b/tests/unit/progressbar/progressbar_options.js @@ -31,4 +31,12 @@ test("{ value : 105 }", function() { same( 100, $("#progressbar").progressbar("value") ); }); +test("{ max : 5, value : 10 }", function() { + $("#progressbar").progressbar({ + max: 5, + value: 10 + }); + same( 5, $("#progressbar").progressbar("value") ); +}); + })(jQuery); diff --git a/ui/jquery.ui.progressbar.js b/ui/jquery.ui.progressbar.js index 5347e026b..009049d27 100644 --- a/ui/jquery.ui.progressbar.js +++ b/ui/jquery.ui.progressbar.js @@ -15,11 +15,11 @@ $.widget( "ui.progressbar", { options: { - value: 0 + value: 0, + max: 100 }, min: 0, - max: 100, _create: function() { this.element @@ -27,13 +27,14 @@ $.widget( "ui.progressbar", { .attr({ role: "progressbar", "aria-valuemin": this.min, - "aria-valuemax": this.max, + "aria-valuemax": this.options.max, "aria-valuenow": this._value() }); this.valueDiv = $( "
" ) .appendTo( this.element ); + this.oldValue = this._value(); this._refreshValue(); }, @@ -63,8 +64,7 @@ $.widget( "ui.progressbar", { if ( key === "value" ) { this.options.value = value; this._refreshValue(); - this._trigger( "change" ); - if ( this._value() === this.max ) { + if ( this._value() === this.options.max ) { this._trigger( "complete" ); } } @@ -78,14 +78,25 @@ $.widget( "ui.progressbar", { if ( typeof val !== "number" ) { val = 0; } - return Math.min( this.max, Math.max( this.min, val ) ); + return Math.min( this.options.max, Math.max( this.min, val ) ); + }, + + _percentage: function() { + return 100 * this._value() / this.options.max; }, _refreshValue: function() { var value = this.value(); + var percentage = this._percentage(); + + if ( this.oldValue !== value ) { + this.oldValue = value; + this._trigger( "change" ); + } + this.valueDiv - .toggleClass( "ui-corner-right", value === this.max ) - .width( value + "%" ); + .toggleClass( "ui-corner-right", value === this.options.max ) + .width( percentage.toFixed(0) + "%" ); this.element.attr( "aria-valuenow", value ); } });