From 81a8e30c07a3663728c98b15775b5580fa806cdd Mon Sep 17 00:00:00 2001 From: Alexander Schmitz Date: Wed, 11 May 2016 11:49:37 -0400 Subject: [PATCH] Controlgroup: Fix issues with compatibility with spinner Fixes #14966 --- tests/unit/controlgroup/common.js | 3 ++- tests/unit/controlgroup/core.js | 9 +++++---- tests/unit/controlgroup/methods.js | 22 ++++++++++++++-------- tests/unit/controlgroup/options.js | 5 +++-- ui/widgets/controlgroup.js | 6 +++++- 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/tests/unit/controlgroup/common.js b/tests/unit/controlgroup/common.js index 1a62d971b..f04a018a8 100644 --- a/tests/unit/controlgroup/common.js +++ b/tests/unit/controlgroup/common.js @@ -3,7 +3,8 @@ define( [ "ui/widgets/controlgroup", "ui/widgets/checkboxradio", "ui/widgets/selectmenu", - "ui/widgets/button" + "ui/widgets/button", + "ui/widgets/spinner" ], function( common ) { common.testWidget( "controlgroup", { diff --git a/tests/unit/controlgroup/core.js b/tests/unit/controlgroup/core.js index 205633594..70d6267ad 100644 --- a/tests/unit/controlgroup/core.js +++ b/tests/unit/controlgroup/core.js @@ -4,7 +4,8 @@ define( [ "ui/widgets/controlgroup", "ui/widgets/checkboxradio", "ui/widgets/selectmenu", - "ui/widgets/button" + "ui/widgets/button", + "ui/widgets/spinner" ], function( QUnit, $ ) { QUnit.module( "Controlgroup: Core" ); @@ -75,11 +76,11 @@ QUnit.test( "selectmenu: controlgroupLabel", function( assert ) { } ); var assertSanatized = function( assert, initClasses, expectedClasses, message ) { - var selectmenu = $( "#select-sanatize" ).selectmenu({ + var selectmenu = $( "#select-sanatize" ).selectmenu( { classes: { "ui-selectmenu-button-open": initClasses } - }).selectmenu( "instance" ); + } ).selectmenu( "instance" ); var classes = { "ui-selectmenu-button-open": "ui-corner-top" }; @@ -87,7 +88,7 @@ var assertSanatized = function( assert, initClasses, expectedClasses, message ) assert.deepEqual( result, { "ui-selectmenu-button-open": expectedClasses + " ui-corner-top" }, message ); -} +}; QUnit.test( "_resolveClassesValues", function( assert ) { assert.expect( 6 ); diff --git a/tests/unit/controlgroup/methods.js b/tests/unit/controlgroup/methods.js index 9f1e4201e..a9d781f2e 100644 --- a/tests/unit/controlgroup/methods.js +++ b/tests/unit/controlgroup/methods.js @@ -4,7 +4,8 @@ define( [ "ui/widgets/controlgroup", "ui/widgets/checkboxradio", "ui/widgets/selectmenu", - "ui/widgets/button" + "ui/widgets/button", + "ui/widgets/spinner" ], function( QUnit, $ ) { QUnit.module( "Controlgroup: methods" ); @@ -13,6 +14,7 @@ QUnit.test( "destroy", function( assert ) { assert.expect( 1 ); assert.domEqual( ".controlgroup", function() { $( ".controlgroup" ).controlgroup().controlgroup( "destroy" ); + $( "#spinner" ).addClass( "ui-spinner-input" ); } ); } ); @@ -21,7 +23,7 @@ QUnit.test( "disable", function( assert ) { var element = $( ".controlgroup" ).controlgroup().controlgroup( "disable" ); assert.lacksClasses( element, "ui-state-disabled", "The widget does not get the disabled class, because we disable each child widget" ); - assert.strictEqual( element.find( ".ui-state-disabled" ).length, 6, + assert.strictEqual( element.find( ".ui-state-disabled" ).length, 9, "Child widgets are disabled" ); } ); @@ -37,7 +39,8 @@ QUnit.test( "enable", function( assert ) { var tests = { "checkboxradio": "", "selectmenu": "", - "button": "" + "button": "", + "spinner": "" }, orientations = { "horizontal": [ @@ -63,7 +66,7 @@ $.each( tests, function( widget, html ) { QUnit.test( "refresh: " + widget + ": " + name, function( assert ) { assert.expect( 41 ); - var i, control, currentClasses, + var i, control, label, currentClasses, controls = [], element = $( "
" ).controlgroup( { direction: name @@ -109,11 +112,11 @@ $.each( tests, function( widget, html ) { // Add a label for each element and then append the element to the control group for ( i = 0; i < 4; i++ ) { - control = $( html ).attr( "id", "id" + i ) - .add( $( "" ).clone().attr( "for", "id" + i ) ); + control = $( html ).attr( "id", "id" + i ); + label = $( "" ).attr( "for", "id" + i ); controls.push( control ); - element.append( control ); + element.append( control, label ); } // Refresh the controlgroup now that its populated @@ -136,6 +139,9 @@ $.each( tests, function( widget, html ) { iterateHidden(); // Disable the first control + if ( widget === "spinner" ) { + controls[ 0 ].spinner( "disable" ); + } controls[ 0 ].prop( "disabled", true ); element.controlgroup( "refresh" ); @@ -155,7 +161,7 @@ QUnit.test( "Child Classes Option: init", function( assert ) { "ui-selectmenu-button-closed": "test-class" } } ); - var controlgroup = $( ".controlgroup-pre" ).controlgroup(); + $( ".controlgroup-pre" ).controlgroup(); assert.hasClasses( selectmenu.selectmenu( "widget" ), "test-class" ); } ); diff --git a/tests/unit/controlgroup/options.js b/tests/unit/controlgroup/options.js index 674bc0d59..db9a29a2d 100644 --- a/tests/unit/controlgroup/options.js +++ b/tests/unit/controlgroup/options.js @@ -4,7 +4,8 @@ define( [ "ui/widgets/controlgroup", "ui/widgets/checkboxradio", "ui/widgets/selectmenu", - "ui/widgets/button" + "ui/widgets/button", + "ui/widgets/spinner" ], function( QUnit, $ ) { QUnit.module( "Controlgroup: options" ); @@ -13,7 +14,7 @@ QUnit.test( "disabled", function( assert ) { assert.expect( 4 ); var element = $( ".controlgroup" ).controlgroup().controlgroup( "option", "disabled", true ); assert.lacksClasses( element, "ui-state-disabled" ); - assert.equal( element.find( ".ui-state-disabled" ).length, 6, "Child widgets are disabled" ); + assert.equal( element.find( ".ui-state-disabled" ).length, 9, "Child widgets are disabled" ); element.controlgroup( "option", "disabled", false ); assert.lacksClasses( element, "ui-state-disabled" ); diff --git a/ui/widgets/controlgroup.js b/ui/widgets/controlgroup.js index 641a419ed..34b2ba9c7 100644 --- a/ui/widgets/controlgroup.js +++ b/ui/widgets/controlgroup.js @@ -112,6 +112,11 @@ return $.widget( "ui.controlgroup", { .each( function() { var element = $( this ); var instance = element[ widget ]( "instance" ); + + // If the button is the child of a spinner ignore it + if ( widget === "button" && element.parent( ".ui-spinner" ).length ) { + return; + } if ( instance ) { options.classes = that._resolveClassesValues( options.classes, instance ); } @@ -252,7 +257,6 @@ return $.widget( "ui.controlgroup", { if ( instance && that[ "_" + instance.widgetName + "Options" ] ) { var options = that[ "_" + instance.widgetName + "Options" ]( value ); - options.classes = that._resolveClassesValues( options.classes, instance ); instance.element[ instance.widgetName ]( options ); } else { -- 2.39.5