Skip to content

Commit 81a8e30

Browse files
committed
Controlgroup: Fix issues with compatibility with spinner
Fixes #14966
1 parent 04b670e commit 81a8e30

File tree

5 files changed

+29
-16
lines changed

5 files changed

+29
-16
lines changed

tests/unit/controlgroup/common.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ define( [
33
"ui/widgets/controlgroup",
44
"ui/widgets/checkboxradio",
55
"ui/widgets/selectmenu",
6-
"ui/widgets/button"
6+
"ui/widgets/button",
7+
"ui/widgets/spinner"
78
], function( common ) {
89

910
common.testWidget( "controlgroup", {

tests/unit/controlgroup/core.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ define( [
44
"ui/widgets/controlgroup",
55
"ui/widgets/checkboxradio",
66
"ui/widgets/selectmenu",
7-
"ui/widgets/button"
7+
"ui/widgets/button",
8+
"ui/widgets/spinner"
89
], function( QUnit, $ ) {
910

1011
QUnit.module( "Controlgroup: Core" );
@@ -75,19 +76,19 @@ QUnit.test( "selectmenu: controlgroupLabel", function( assert ) {
7576
} );
7677

7778
var assertSanatized = function( assert, initClasses, expectedClasses, message ) {
78-
var selectmenu = $( "#select-sanatize" ).selectmenu({
79+
var selectmenu = $( "#select-sanatize" ).selectmenu( {
7980
classes: {
8081
"ui-selectmenu-button-open": initClasses
8182
}
82-
}).selectmenu( "instance" );
83+
} ).selectmenu( "instance" );
8384
var classes = {
8485
"ui-selectmenu-button-open": "ui-corner-top"
8586
};
8687
var result = $.ui.controlgroup.prototype._resolveClassesValues( classes, selectmenu );
8788
assert.deepEqual( result, {
8889
"ui-selectmenu-button-open": expectedClasses + " ui-corner-top"
8990
}, message );
90-
}
91+
};
9192

9293
QUnit.test( "_resolveClassesValues", function( assert ) {
9394
assert.expect( 6 );

tests/unit/controlgroup/methods.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ define( [
44
"ui/widgets/controlgroup",
55
"ui/widgets/checkboxradio",
66
"ui/widgets/selectmenu",
7-
"ui/widgets/button"
7+
"ui/widgets/button",
8+
"ui/widgets/spinner"
89
], function( QUnit, $ ) {
910

1011
QUnit.module( "Controlgroup: methods" );
@@ -13,6 +14,7 @@ QUnit.test( "destroy", function( assert ) {
1314
assert.expect( 1 );
1415
assert.domEqual( ".controlgroup", function() {
1516
$( ".controlgroup" ).controlgroup().controlgroup( "destroy" );
17+
$( "#spinner" ).addClass( "ui-spinner-input" );
1618
} );
1719
} );
1820

@@ -21,7 +23,7 @@ QUnit.test( "disable", function( assert ) {
2123
var element = $( ".controlgroup" ).controlgroup().controlgroup( "disable" );
2224
assert.lacksClasses( element, "ui-state-disabled",
2325
"The widget does not get the disabled class, because we disable each child widget" );
24-
assert.strictEqual( element.find( ".ui-state-disabled" ).length, 6,
26+
assert.strictEqual( element.find( ".ui-state-disabled" ).length, 9,
2527
"Child widgets are disabled" );
2628
} );
2729

@@ -37,7 +39,8 @@ QUnit.test( "enable", function( assert ) {
3739
var tests = {
3840
"checkboxradio": "<input type='checkbox'>",
3941
"selectmenu": "<select><option>foo</option></select>",
40-
"button": "<button>button text</button>"
42+
"button": "<button>button text</button>",
43+
"spinner": "<input class='ui-spinner-input'>"
4144
},
4245
orientations = {
4346
"horizontal": [
@@ -63,7 +66,7 @@ $.each( tests, function( widget, html ) {
6366
QUnit.test( "refresh: " + widget + ": " + name, function( assert ) {
6467
assert.expect( 41 );
6568

66-
var i, control, currentClasses,
69+
var i, control, label, currentClasses,
6770
controls = [],
6871
element = $( "<div>" ).controlgroup( {
6972
direction: name
@@ -109,11 +112,11 @@ $.each( tests, function( widget, html ) {
109112

110113
// Add a label for each element and then append the element to the control group
111114
for ( i = 0; i < 4; i++ ) {
112-
control = $( html ).attr( "id", "id" + i )
113-
.add( $( "<label>label text</label>" ).clone().attr( "for", "id" + i ) );
115+
control = $( html ).attr( "id", "id" + i );
116+
label = $( "<label>label text</label>" ).attr( "for", "id" + i );
114117

115118
controls.push( control );
116-
element.append( control );
119+
element.append( control, label );
117120
}
118121

119122
// Refresh the controlgroup now that its populated
@@ -136,6 +139,9 @@ $.each( tests, function( widget, html ) {
136139
iterateHidden();
137140

138141
// Disable the first control
142+
if ( widget === "spinner" ) {
143+
controls[ 0 ].spinner( "disable" );
144+
}
139145
controls[ 0 ].prop( "disabled", true );
140146

141147
element.controlgroup( "refresh" );
@@ -155,7 +161,7 @@ QUnit.test( "Child Classes Option: init", function( assert ) {
155161
"ui-selectmenu-button-closed": "test-class"
156162
}
157163
} );
158-
var controlgroup = $( ".controlgroup-pre" ).controlgroup();
164+
$( ".controlgroup-pre" ).controlgroup();
159165
assert.hasClasses( selectmenu.selectmenu( "widget" ), "test-class" );
160166
} );
161167

tests/unit/controlgroup/options.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ define( [
44
"ui/widgets/controlgroup",
55
"ui/widgets/checkboxradio",
66
"ui/widgets/selectmenu",
7-
"ui/widgets/button"
7+
"ui/widgets/button",
8+
"ui/widgets/spinner"
89
], function( QUnit, $ ) {
910

1011
QUnit.module( "Controlgroup: options" );
@@ -13,7 +14,7 @@ QUnit.test( "disabled", function( assert ) {
1314
assert.expect( 4 );
1415
var element = $( ".controlgroup" ).controlgroup().controlgroup( "option", "disabled", true );
1516
assert.lacksClasses( element, "ui-state-disabled" );
16-
assert.equal( element.find( ".ui-state-disabled" ).length, 6, "Child widgets are disabled" );
17+
assert.equal( element.find( ".ui-state-disabled" ).length, 9, "Child widgets are disabled" );
1718

1819
element.controlgroup( "option", "disabled", false );
1920
assert.lacksClasses( element, "ui-state-disabled" );

ui/widgets/controlgroup.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ return $.widget( "ui.controlgroup", {
112112
.each( function() {
113113
var element = $( this );
114114
var instance = element[ widget ]( "instance" );
115+
116+
// If the button is the child of a spinner ignore it
117+
if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
118+
return;
119+
}
115120
if ( instance ) {
116121
options.classes = that._resolveClassesValues( options.classes, instance );
117122
}
@@ -252,7 +257,6 @@ return $.widget( "ui.controlgroup", {
252257

253258
if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
254259
var options = that[ "_" + instance.widgetName + "Options" ]( value );
255-
256260
options.classes = that._resolveClassesValues( options.classes, instance );
257261
instance.element[ instance.widgetName ]( options );
258262
} else {

0 commit comments

Comments
 (0)