]> source.dussan.org Git - jquery-ui.git/commitdiff
Widget: Call `._setOptionDisabled()` on init if the widget is disabled
authorScott González <scott.gonzalez@gmail.com>
Thu, 17 Sep 2015 12:47:08 +0000 (08:47 -0400)
committerScott González <scott.gonzalez@gmail.com>
Fri, 25 Sep 2015 17:46:25 +0000 (13:46 -0400)
Fixes #9151
Ref gh-1599

tests/unit/widget/core.js
ui/widget.js

index 6ad1e74fc4bb7c502a1a89a782a504cd9df8129c..93bfe875af687a161612857fb1da562bc52fa2b4 100644 (file)
@@ -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", {
index 2477595796a9d775935ce9279352558ff60547f0..1542cc88b5d675ab9eb46c2284a40e104a071f2e 100644 (file)
@@ -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 } );
        },