Skip to content
Permalink
Browse files

Widget: Call `._setOptionDisabled()` on init if the widget is disabled

Fixes #9151
Ref gh-1599
  • Loading branch information
scottgonzalez committed Sep 25, 2015
1 parent 0db243a commit 7dde5c9d75148cdca7cf86ff0c6e310fdc5a4054
Showing with 49 additions and 7 deletions.
  1. +33 −0 tests/unit/widget/core.js
  2. +16 −7 ui/widget.js
@@ -729,6 +729,39 @@ test( ".disable()", function() {
$( "<div>" ).testWidget().testWidget( "disable" );
} );

test( "._setOptionDisabled()", function() {
expect( 3 );

var method;
var widget;

$.widget( "ui.testWidget", {
_setOptionDisabled: function( value ) {
method( value );
}
} );

method = function() {
ok( false, "._setOptionDisabled() called on init when not disabled" );
};
$( "<div>" ).testWidget();

method = function( value ) {
strictEqual( value, true, "._setOptionDisabled called on init when disabled" );
};
widget = $( "<div>" ).testWidget( { disabled: true } );

method = function( value ) {
strictEqual( value, false, "._setOptionDisabled called when enabling" );
};
widget.testWidget( "enable" );

method = function( value ) {
strictEqual( value, true, "._setOptionDisabled called when disabling" );
};
widget.testWidget( "option", "disabled", true );
} );

test( ".widget() - base", function() {
expect( 2 );
var constructor = $.widget( "ui.testWidget", {
@@ -318,6 +318,11 @@ $.Widget.prototype = {
options );

this._create();

if ( this.options.disabled ) {
this._setOptionDisabled( this.options.disabled );
}

this._trigger( "create", null, this._getCreateEventData() );
this._init();
},
@@ -419,13 +424,7 @@ $.Widget.prototype = {
this.options[ key ] = value;

if ( key === "disabled" ) {
this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );

// If the widget is becoming disabled, then nothing is interactive
if ( value ) {
this._removeClass( this.hoverable, null, "ui-state-hover" );
this._removeClass( this.focusable, null, "ui-state-focus" );
}
this._setOptionDisabled( value );
}

return this;
@@ -462,6 +461,16 @@ $.Widget.prototype = {
}
},

_setOptionDisabled: function( value ) {
this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );

// If the widget is becoming disabled, then nothing is interactive
if ( value ) {
this._removeClass( this.hoverable, null, "ui-state-hover" );
this._removeClass( this.focusable, null, "ui-state-focus" );
}
},

enable: function() {
return this._setOptions( { disabled: false } );
},

0 comments on commit 7dde5c9

Please sign in to comment.
You can’t perform that action at this time.