Skip to content

Commit e0853bc

Browse files
committed
Progressbar: Add classes option
1 parent 43d42d8 commit e0853bc

File tree

3 files changed

+42
-18
lines changed

3 files changed

+42
-18
lines changed

tests/unit/progressbar/progressbar_common.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
TestHelpers.commonWidgetTests( "progressbar", {
22
defaults: {
3+
classes: {
4+
"ui-progressbar": "ui-corner-all",
5+
"ui-progressbar-value": "ui-corner-left",
6+
"ui-progressbar-overlay": "",
7+
"ui-progressbar-indeterminate": "",
8+
"ui-progressbar-complete": "ui-corner-right"
9+
},
310
disabled: false,
411
max: 100,
512
value: 0,

tests/unit/progressbar/progressbar_core.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
module( "progressbar: core" );
22

33
test( "markup structure", function() {
4-
expect( 5 );
5-
var element = $( "#progressbar" ).progressbar();
6-
ok( element.hasClass( "ui-progressbar" ), "main element is .ui-progressbar" );
4+
expect( 7 );
5+
var element = $( "#progressbar" ).progressbar(),
6+
value = element.children().eq( 0 );
7+
ok( element.is( ".ui-progressbar.ui-widget.ui-widget-content.ui-corner-all" ),
8+
"main element has proper classes" );
9+
ok( !value.is( ".ui-progressbar-complete.ui-corner-right" ),
10+
"value does not have ui-corner-right or ui-progressbar-complete" );
11+
element.progressbar( "option", "value", 100 );
12+
ok( value.is( ".ui-progressbar-complete.ui-corner-right.ui-corner-left.ui-widget-header" ),
13+
"value has proper classes" );
14+
715
ok( !element.hasClass( "ui-progressbar-indeterminate" ),
816
"main element is not .ui-progressbar-indeterminate" );
917
equal( element.children().length, 1, "main element contains one child" );
10-
ok( element.children().eq( 0 ).hasClass( "ui-progressbar-value" ),
18+
ok( element.children().eq( 0 ).is( ".ui-progressbar-value" ),
1119
"child is .ui-progressbar-value" );
1220
equal( element.children().children().length, 0, "no overlay div" );
1321
});
1422

1523
test( "markup structure - indeterminate", function() {
16-
expect( 5 );
24+
expect( 4 );
1725
var element = $( "#progressbar" ).progressbar({ value: false });
18-
ok( element.hasClass( "ui-progressbar" ), "main element is .ui-progressbar" );
19-
ok( element.hasClass( "ui-progressbar-indeterminate" ),
20-
"main element is .ui-progressbar-indeterminate" );
26+
ok( element.is( ".ui-progressbar.ui-progressbar-indeterminate" ),
27+
"main element has proper classes" );
2128
equal( element.children().length, 1, "main element contains one child" );
2229
ok( element.children().eq( 0 ).hasClass( "ui-progressbar-value" ),
2330
"child is .ui-progressbar-value" );

ui/progressbar.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
return $.widget( "ui.progressbar", {
2828
version: "@VERSION",
2929
options: {
30+
classes: {
31+
"ui-progressbar": "ui-corner-all",
32+
"ui-progressbar-value": "ui-corner-left",
33+
"ui-progressbar-overlay": "",
34+
"ui-progressbar-indeterminate": "",
35+
"ui-progressbar-complete": "ui-corner-right"
36+
},
3037
max: 100,
3138
value: 0,
3239

@@ -40,29 +47,28 @@ return $.widget( "ui.progressbar", {
4047
// Constrain initial value
4148
this.oldValue = this.options.value = this._constrainedValue();
4249

43-
this.element
44-
.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
45-
.attr({
50+
this.element.attr({
4651
// Only set static values, aria-valuenow and aria-valuemax are
4752
// set inside _refreshValue()
4853
role: "progressbar",
4954
"aria-valuemin": this.min
5055
});
56+
this._addClass( "ui-progressbar", "ui-widget ui-widget-content" );
5157

52-
this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
53-
.appendTo( this.element );
54-
58+
this.valueDiv = $( "<div>" ).appendTo( this.element );
59+
this._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" );
5560
this._refreshValue();
5661
},
5762

5863
_destroy: function() {
5964
this.element
60-
.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
6165
.removeAttr( "role" )
6266
.removeAttr( "aria-valuemin" )
6367
.removeAttr( "aria-valuemax" )
6468
.removeAttr( "aria-valuenow" );
6569

70+
this._removeClass( "ui-progressbar", "ui-widget ui-widget-content" );
71+
6672
this.valueDiv.remove();
6773
},
6874

@@ -125,15 +131,19 @@ return $.widget( "ui.progressbar", {
125131

126132
this.valueDiv
127133
.toggle( this.indeterminate || value > this.min )
128-
.toggleClass( "ui-corner-right", value === this.options.max )
129134
.width( percentage.toFixed(0) + "%" );
130135

131-
this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
136+
this[ ( ( value === this.options.max ) ? "_add" : "_remove" ) + "Class" ]
137+
( this.valueDiv, "ui-progressbar-complete" );
138+
139+
this[ ( this.indeterminate ? "_add" : "_remove" ) + "Class" ]
140+
( "ui-progressbar-indeterminate" );
132141

133142
if ( this.indeterminate ) {
134143
this.element.removeAttr( "aria-valuenow" );
135144
if ( !this.overlayDiv ) {
136-
this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
145+
this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv );
146+
this._addClass( this.overlayDiv, "ui-progressbar-overlay" );
137147
}
138148
} else {
139149
this.element.attr({

0 commit comments

Comments
 (0)