Skip to content

Commit 491bb9c

Browse files
committed
Slider: Add classes option
Ref #7053 Ref gh-1411
1 parent 3483486 commit 491bb9c

File tree

4 files changed

+53
-43
lines changed

4 files changed

+53
-43
lines changed

tests/unit/slider/slider.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<script src="../../../external/qunit/qunit.js"></script>
1010
<script src="../../../external/jquery-simulate/jquery.simulate.js"></script>
1111
<script src="../testsuite.js"></script>
12+
<script src="../../../external/qunit-assert-classes/qunit-assert-classes.js"></script>
1213
<script>
1314
TestHelpers.loadResources({
1415
css: [ "core", "slider" ],

tests/unit/slider/slider_common.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ TestHelpers.commonWidgetTests( "slider", {
22
defaults: {
33
animate: false,
44
cancel: "input,textarea,button,select,option",
5-
classes: {},
5+
classes: {
6+
"ui-slider": "ui-corner-all",
7+
"ui-slider-handle": "ui-corner-all",
8+
"ui-slider-range": "ui-corner-all ui-widget-header"
9+
},
610
delay: 0,
711
disabled: false,
812
distance: 0,

tests/unit/slider/slider_core.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ function handle() {
1212
// Slider Tests
1313
module( "slider: core" );
1414

15+
test( "markup structure", function( assert ) {
16+
expect( 4 );
17+
var element = $( "<div>" ).slider({ range: true }),
18+
handle = element.find( "span" ),
19+
range = element.find( "div" );
20+
21+
assert.hasClasses( element, "ui-slider ui-slider-horizontal ui-widget ui-widget-content" );
22+
assert.hasClasses( range, "ui-slider-range ui-widget-header" );
23+
assert.hasClasses( handle[ 0 ], "ui-slider-handle" );
24+
assert.hasClasses( handle[ 1 ], "ui-slider-handle" );
25+
});
26+
1527
test( "keydown HOME on handle sets value to min", function() {
1628
expect( 2 );
1729
element = $( "<div></div>" );

ui/slider.js

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ return $.widget( "ui.slider", $.ui.mouse, {
3939

4040
options: {
4141
animate: false,
42+
classes: {
43+
"ui-slider": "ui-corner-all",
44+
"ui-slider-handle": "ui-corner-all",
45+
46+
// Note: ui-widget-header isn't the most fittingly semantic framework class for this
47+
// element, but worked best visually with a variety of themes
48+
"ui-slider-range": "ui-corner-all ui-widget-header"
49+
},
4250
distance: 0,
4351
max: 100,
4452
min: 0,
@@ -68,12 +76,8 @@ return $.widget( "ui.slider", $.ui.mouse, {
6876
this._mouseInit();
6977
this._calculateNewMax();
7078

71-
this.element
72-
.addClass( "ui-slider" +
73-
" ui-slider-" + this.orientation +
74-
" ui-widget" +
75-
" ui-widget-content" +
76-
" ui-corner-all");
79+
this._addClass( "ui-slider ui-slider-" + this.orientation,
80+
"ui-widget ui-widget-content" );
7781

7882
this._refresh();
7983
this._setOption( "disabled", this.options.disabled );
@@ -91,8 +95,8 @@ return $.widget( "ui.slider", $.ui.mouse, {
9195
_createHandles: function() {
9296
var i, handleCount,
9397
options = this.options,
94-
existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
95-
handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
98+
existingHandles = this.element.find( ".ui-slider-handle" ),
99+
handle = "<span tabindex='0'></span>",
96100
handles = [];
97101

98102
handleCount = ( options.values && options.values.length ) || 1;
@@ -108,6 +112,8 @@ return $.widget( "ui.slider", $.ui.mouse, {
108112

109113
this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
110114

115+
this._addClass( this.handles, "ui-slider-handle", "ui-state-default" );
116+
111117
this.handle = this.handles.eq( 0 );
112118

113119
this.handles.each(function( i ) {
@@ -116,8 +122,7 @@ return $.widget( "ui.slider", $.ui.mouse, {
116122
},
117123

118124
_createRange: function() {
119-
var options = this.options,
120-
classes = "";
125+
var options = this.options;
121126

122127
if ( options.range ) {
123128
if ( options.range === true ) {
@@ -131,24 +136,22 @@ return $.widget( "ui.slider", $.ui.mouse, {
131136
}
132137

133138
if ( !this.range || !this.range.length ) {
134-
this.range = $( "<div></div>" )
139+
this.range = $( "<div>" )
135140
.appendTo( this.element );
136141

137-
classes = "ui-slider-range" +
138-
// note: this isn't the most fittingly semantic framework class for this element,
139-
// but worked best visually with a variety of themes
140-
" ui-widget-header ui-corner-all";
142+
this._addClass( this.range, "ui-slider-range" );
141143
} else {
142-
this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
143-
// Handle range switching from true to min/max
144-
.css({
145-
"left": "",
146-
"bottom": ""
147-
});
148-
}
144+
this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );
149145

150-
this.range.addClass( classes +
151-
( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
146+
// Handle range switching from true to min/max
147+
this.range.css({
148+
"left": "",
149+
"bottom": ""
150+
});
151+
}
152+
if ( options.range === "min" || options.range === "max" ) {
153+
this._addClass( this.range, "ui-slider-range-" + options.range );
154+
}
152155
} else {
153156
if ( this.range ) {
154157
this.range.remove();
@@ -170,14 +173,6 @@ return $.widget( "ui.slider", $.ui.mouse, {
170173
this.range.remove();
171174
}
172175

173-
this.element
174-
.removeClass( "ui-slider" +
175-
" ui-slider-horizontal" +
176-
" ui-slider-vertical" +
177-
" ui-widget" +
178-
" ui-widget-content" +
179-
" ui-corner-all" );
180-
181176
this._mouseDestroy();
182177
},
183178

@@ -218,9 +213,8 @@ return $.widget( "ui.slider", $.ui.mouse, {
218213

219214
this._handleIndex = index;
220215

221-
closestHandle
222-
.addClass( "ui-state-active" )
223-
.focus();
216+
this._addClass( closestHandle, null, "ui-state-active" );
217+
closestHandle.focus();
224218

225219
offset = closestHandle.offset();
226220
mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
@@ -254,7 +248,7 @@ return $.widget( "ui.slider", $.ui.mouse, {
254248
},
255249

256250
_mouseStop: function( event ) {
257-
this.handles.removeClass( "ui-state-active" );
251+
this._removeClass( this.handles, null, "ui-state-active" );
258252
this._mouseSliding = false;
259253

260254
this._stop( event, this._handleIndex );
@@ -451,17 +445,16 @@ return $.widget( "ui.slider", $.ui.mouse, {
451445
}
452446

453447
if ( key === "disabled" ) {
454-
this.element.toggleClass( "ui-state-disabled", !!value );
448+
this._toggleClass( null, "ui-state-disabled", !!value );
455449
}
456450

457451
this._super( key, value );
458452

459453
switch ( key ) {
460454
case "orientation":
461455
this._detectOrientation();
462-
this.element
463-
.removeClass( "ui-slider-horizontal ui-slider-vertical" )
464-
.addClass( "ui-slider-" + this.orientation );
456+
this._removeClass( "ui-slider-horizontal ui-slider-vertical" )
457+
._addClass( "ui-slider-" + this.orientation );
465458
this._refreshValue();
466459

467460
// Reset positioning from previous orientation
@@ -659,7 +652,7 @@ return $.widget( "ui.slider", $.ui.mouse, {
659652
event.preventDefault();
660653
if ( !this._keySliding ) {
661654
this._keySliding = true;
662-
$( event.target ).addClass( "ui-state-active" );
655+
this._addClass( $( event.target ), null, "ui-state-active" );
663656
allowed = this._start( event, index );
664657
if ( allowed === false ) {
665658
return;
@@ -716,7 +709,7 @@ return $.widget( "ui.slider", $.ui.mouse, {
716709
this._keySliding = false;
717710
this._stop( event, index );
718711
this._change( event, index );
719-
$( event.target ).removeClass( "ui-state-active" );
712+
this._removeClass( $( event.target ), null, "ui-state-active" );
720713
}
721714
}
722715
}

0 commit comments

Comments
 (0)