From: Scott González Date: Thu, 3 Feb 2011 14:54:11 +0000 (-0500) Subject: Accordion: Properly handle collapsible: false and active: false by changing active... X-Git-Tag: 1.9m4~32 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=714a77f202ee02b894992722d2e6b35b4089557e;p=jquery-ui.git Accordion: Properly handle collapsible: false and active: false by changing active to 0. --- diff --git a/tests/unit/accordion/accordion_options.js b/tests/unit/accordion/accordion_options.js index 8fcfdb172..71154d57a 100644 --- a/tests/unit/accordion/accordion_options.js +++ b/tests/unit/accordion/accordion_options.js @@ -17,17 +17,16 @@ test( "{ active: false }", function() { equals( ac.find( ".ui-accordion-header.ui-state-active" ).size(), 0, "no headers selected" ); equals( ac.accordion( "option", "active" ), false ); - // TODO: fix active: false when not collapsible -// ac.accordion( "option", "collapsible", false ); -// state( ac, 1, 0, 0 ); -// equals( ac.accordion( "option", "active" ), 0 ); -// -// ac.accordion( "destroy" ); -// ac.accordion({ -// active: false -// }); -// state( ac, 1, 0, 0 ); -// strictEqual( ac.accordion( "option", "active" ), 0 ); + ac.accordion( "option", "collapsible", false ); + state( ac, 1, 0, 0 ); + equals( ac.accordion( "option", "active" ), 0 ); + + ac.accordion( "destroy" ); + ac.accordion({ + active: false + }); + state( ac, 1, 0, 0 ); + strictEqual( ac.accordion( "option", "active" ), 0 ); }); test( "{ active: Number }", function() { diff --git a/ui/jquery.ui.accordion.js b/ui/jquery.ui.accordion.js index 4357c435b..33c3a8505 100644 --- a/ui/jquery.ui.accordion.js +++ b/ui/jquery.ui.accordion.js @@ -44,6 +44,10 @@ $.widget( "ui.accordion", { self.headers.next() .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" ); + // don't allow collapsible: false and active: false + if ( !options.collapsible && options.active === false ) { + options.active = 0; + } self.active = self._findActive( options.active ) .addClass( "ui-state-default ui-state-active" ) .toggleClass( "ui-corner-all" ) @@ -149,12 +153,18 @@ $.widget( "ui.accordion", { this._super( "_setOption", key, value ); + // setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + if ( key === "icons" ) { this._destroyIcons(); if ( value ) { this._createIcons(); } } + // #5332 - opacity doesn't cascade to positioned elements in IE // so we need to add the disabled class to the headers and panels if ( key === "disabled" ) {