From 714a77f202ee02b894992722d2e6b35b4089557e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 3 Feb 2011 09:54:11 -0500 Subject: [PATCH] Accordion: Properly handle collapsible: false and active: false by changing active to 0. --- tests/unit/accordion/accordion_options.js | 21 ++++++++++----------- ui/jquery.ui.accordion.js | 10 ++++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) 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" ) { -- 2.39.5