diff options
author | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2011-09-12 23:54:19 +0200 |
---|---|---|
committer | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2011-09-12 23:54:19 +0200 |
commit | ae0c4e44ff4adee60ad4e9662661ce9564031c16 (patch) | |
tree | 5af1662a221a68c276fe77dc9d14638cc78f935a /ui | |
parent | bf26bf1ac4b2be791c2f283a60453fc59ee389bb (diff) | |
parent | 94317d7aa4ed439cb825d006fb461145a6d2aa5d (diff) | |
download | jquery-ui-ae0c4e44ff4adee60ad4e9662661ce9564031c16.tar.gz jquery-ui-ae0c4e44ff4adee60ad4e9662661ce9564031c16.zip |
Merge remote branch 'kborchers/menu_autoCollapse'
Diffstat (limited to 'ui')
-rw-r--r-- | ui/jquery.ui.menu.js | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/ui/jquery.ui.menu.js b/ui/jquery.ui.menu.js index 050112db5..bfe35efb5 100644 --- a/ui/jquery.ui.menu.js +++ b/ui/jquery.ui.menu.js @@ -61,6 +61,8 @@ $.widget( "ui.menu", { target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" ); this.focus( event, target ); }, + "mouseleave": "_mouseleave", + "mouseleave .ui-menu": "_mouseleave", "mouseout .ui-menu-item": "blur", "focus": function( event ) { this.focus( event, $( event.target ).children( ".ui-menu-item:first" ) ); @@ -341,21 +343,30 @@ $.widget( "ui.menu", { }, collapseAll: function( event ) { - this.element - .find( "ul" ) - .hide() - .attr( "aria-hidden", "true" ) - .attr( "aria-expanded", "false" ) - .end() - .find( "a.ui-state-active" ) - .removeClass( "ui-state-active" ); + var currentMenu = false; + if ( event ) { + var target = $( event.target ); + if ( target.is( "ui.menu" ) ) { + currentMenu = target; + } else if ( target.closest( ".ui-menu" ).length ) { + currentMenu = target.closest( ".ui-menu" ); + } + } - this.blur( event ); - this.activeMenu = this.element; + this._close( currentMenu ); + + if( !currentMenu ) { + this.blur( event ); + this.activeMenu = this.element; + } }, - _close: function() { - this.active.parent() + _close: function( startMenu ) { + if( !startMenu ) { + startMenu = this.active ? this.active.parent() : this.element; + } + + startMenu .find( "ul" ) .hide() .attr( "aria-hidden", "true" ) @@ -368,10 +379,7 @@ $.widget( "ui.menu", { collapse: function( event ) { var newItem = this.active && this.active.parents("li:not(.ui-menubar-item)").first(); if ( newItem && newItem.length ) { - this.active.parent() - .attr("aria-hidden", "true") - .attr("aria-expanded", "false") - .hide(); + this._close(); this.focus( event, newItem ); return true; } @@ -480,6 +488,11 @@ $.widget( "ui.menu", { return this.element.height() < this.element.prop( "scrollHeight" ); }, + _mouseleave: function( event ) { + this.collapseAll( event ); + this.blur(); + }, + select: function( event ) { // save active reference before collapseAll triggers blur var ui = { |