From 7dde5c9d75148cdca7cf86ff0c6e310fdc5a4054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 17 Sep 2015 08:47:08 -0400 Subject: [PATCH] Widget: Call `._setOptionDisabled()` on init if the widget is disabled Fixes #9151 Ref gh-1599 --- tests/unit/widget/core.js | 33 +++++++++++++++++++++++++++++++++ ui/widget.js | 23 ++++++++++++++++------- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/tests/unit/widget/core.js b/tests/unit/widget/core.js index 6ad1e74fc..93bfe875a 100644 --- a/tests/unit/widget/core.js +++ b/tests/unit/widget/core.js @@ -729,6 +729,39 @@ test( ".disable()", function() { $( "
" ).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" ); + }; + $( "
" ).testWidget(); + + method = function( value ) { + strictEqual( value, true, "._setOptionDisabled called on init when disabled" ); + }; + widget = $( "
" ).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", { diff --git a/ui/widget.js b/ui/widget.js index 247759579..1542cc88b 100644 --- a/ui/widget.js +++ b/ui/widget.js @@ -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 } ); },