]> source.dussan.org Git - jquery-ui.git/commitdiff
Accordion: Handle invalid values for the active option.
authorScott González <scott.gonzalez@gmail.com>
Wed, 12 Jan 2011 02:24:41 +0000 (21:24 -0500)
committerScott González <scott.gonzalez@gmail.com>
Wed, 12 Jan 2011 02:24:41 +0000 (21:24 -0500)
ui/jquery.ui.accordion.js

index e58c5d6211da659e989a704895e052559fda4eba..e0acd76a8d9ea80cc4f442c95ddd6c2eb08f01a2 100644 (file)
@@ -173,11 +173,14 @@ $.widget( "ui.accordion", {
        },
 
        _setOption: function( key, value ) {
-               $.Widget.prototype._setOption.apply( this, arguments );
-               
                if ( key == "active" ) {
+                       // _activate() will handle invalid values and update this.options
                        this._activate( value );
+                       return;
                }
+               
+               $.Widget.prototype._setOption.apply( this, arguments );
+               
                if ( key == "icons" ) {
                        this._destroyIcons();
                        if ( value ) {
@@ -273,20 +276,28 @@ $.widget( "ui.accordion", {
        },
 
        _activate: function( index ) {
-               // TODO: handle invalid values
-               this.options.active = index;
                var active = this._findActive( index )[ 0 ];
+               if ( !active ) {
+                       if ( !this.options.collapsible ) {
+                               return;
+                       }
+                       index = false;
+               }
+               this.options.active = index;
                this._eventHandler( { target: active, currentTarget: active } );
        },
 
        _findActive: function( selector ) {
-               return selector
-                       ? typeof selector === "number"
-                               ? this.headers.filter( ":eq(" + selector + ")" )
-                               : this.headers.not( this.headers.not( selector ) )
-                       : selector === false
-                               ? $( [] )
-                               : this.headers.filter( ":eq(0)" );
+               // handle -1 separately, we should drop support for this
+               // so that we can allow selecting via negative index, like .eq()
+               if ( selector === -1 ) {
+                       selector = undefined;
+               }
+               return typeof selector === "number" ?
+                       this.headers.eq( selector ) :
+                       selector ?
+                               this.headers.filter( selector ) : 
+                               $( [] );
        },
 
        _eventHandler: function( event ) {