Skip to content

Commit 58a120b

Browse files
committed
Merge branch 'menuaria' into master
2 parents aa187f5 + 49f8550 commit 58a120b

File tree

4 files changed

+83
-18
lines changed

4 files changed

+83
-18
lines changed

tests/unit/menu/menu.html

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,22 @@ <h2 id="qunit-userAgent"></h2>
251251
</blockquote>
252252
</div>
253253

254+
<ul id="menu6">
255+
<li class="foo"><a class="foo" href="#">Aberdeen</a></li>
256+
<li class="foo ui-state-disabled"><a class="foo" href="#">Ada</a></li>
257+
<li class="foo"><a class="foo" href="#">Adamsville</a></li>
258+
<li class="foo"><a class="foo" href="#">Addyston</a></li>
259+
<li class="ui-state-disabled">
260+
<a href="#">Delphi</a>
261+
<ul>
262+
<li class="foo"><a class="foo" href="#">Ada</a></li>
263+
<li class="foo"><a class="foo" href="#">Saarland</a></li>
264+
<li class="foo"><a class="foo" href="#">Salzburg</a></li>
265+
</ul>
266+
</li>
267+
<li class="foo"><a class="foo" href="#">Saarland</a></li>
268+
</ul>
269+
254270
<div id="log"></div>
255271

256272
</div>

tests/unit/menu/menu_events.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,4 +467,56 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu
467467
}
468468
});
469469

470+
asyncTest("handle keyboard navigation and mouse click on menu with disabled items", function() {
471+
expect(6);
472+
var element = $('#menu6').menu({
473+
select: function(event, ui) {
474+
menu_log($(ui.item[0]).text());
475+
},
476+
focus: function( event, ui ) {
477+
menu_log($(event.target).find(".ui-state-focus").parent().index());
478+
}
479+
});
480+
481+
menu_log("keydown",true);
482+
element.one( "menufocus", function( event, ui ) {
483+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
484+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
485+
equal( $("#log").html(), "1,keydown,", "Keydown focus but not select disabled item");
486+
setTimeout( menukeyboard1, 50 );
487+
});
488+
element.focus();
489+
490+
491+
function menukeyboard1() {
492+
menu_log("keydown",true);
493+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
494+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
495+
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
496+
equal( $("#log").html(), "4,3,2,keydown,", "Keydown focus disabled item with submenu");
497+
498+
menu_log("keydown",true);
499+
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } );
500+
equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)");
501+
502+
menu_log("keydown",true);
503+
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } );
504+
505+
setTimeout( function() {
506+
equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect on disabled sub-menu)");
507+
508+
menu_log("keydown",true);
509+
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
510+
511+
setTimeout( function() {
512+
equal( $("#log").html(), "keydown,", "Keydown ENTER (no effect on disabled sub-menu)");
513+
menu_log("click",true);
514+
menu_click( element, "1" );
515+
equal( $("#log").html(), "click,", "Click disabled item (no effect)");
516+
start();
517+
}, 50);
518+
}, 50);
519+
}
520+
});
521+
470522
})(jQuery);

tests/visual/menu/menu.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
<li class="ui-state-disabled"><a href="#"><span class="ui-icon ui-icon-scissors"></span>Ada</a></li>
119119
<li><a href="#">Adamsville</a></li>
120120
<li><a href="#"><span class="ui-icon ui-icon-wrench"></span>Addyston</a></li>
121-
<li>
121+
<li class="ui-state-disabled">
122122
<a href="#">Delphi</a>
123123
<ul>
124124
<li><a href="#">Ada</a></li>

ui/jquery.ui.menu.js

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ $.widget( "ui.menu", {
9999
"mouseleave .ui-menu": "collapseAll",
100100
"focus": function( event ) {
101101
var menu = this.element,
102-
firstItem = menu.children( ".ui-menu-item" ).not( ".ui-state-disabled" ).eq( 0 );
102+
firstItem = menu.children( ".ui-menu-item" ).eq( 0 );
103103
if ( this._hasScroll() && !this.active ) {
104104
menu.children().each(function() {
105105
var currentItem = $( this );
@@ -196,15 +196,18 @@ $.widget( "ui.menu", {
196196
event.preventDefault();
197197
break;
198198
case $.ui.keyCode.RIGHT:
199-
this.expand( event );
199+
if ( !this.active.is( ".ui-state-disabled" ) ) {
200+
this.expand( event );
201+
}
200202
event.preventDefault();
201203
break;
202204
case $.ui.keyCode.ENTER:
203-
if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
204-
this.expand( event );
205-
}
206-
else {
207-
this.select( event );
205+
if ( !this.active.is( ".ui-state-disabled" ) ) {
206+
if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
207+
this.expand( event );
208+
} else {
209+
this.select( event );
210+
}
208211
}
209212
event.preventDefault();
210213
break;
@@ -442,7 +445,6 @@ $.widget( "ui.menu", {
442445
this.active
443446
.children( ".ui-menu " )
444447
.children( ".ui-menu-item" )
445-
.not( ".ui-state-disabled" )
446448
.first();
447449

448450
if ( newItem && newItem.length ) {
@@ -478,12 +480,10 @@ $.widget( "ui.menu", {
478480
if ( direction === "first" || direction === "last" ) {
479481
next = this.active
480482
[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
481-
.not( ".ui-state-disabled" )
482483
.eq( -1 );
483484
} else {
484485
next = this.active
485486
[ direction + "All" ]( ".ui-menu-item" )
486-
.not( ".ui-state-disabled" )
487487
.eq( 0 );
488488
}
489489
}
@@ -492,9 +492,6 @@ $.widget( "ui.menu", {
492492
}
493493

494494
this.focus( event, next );
495-
if ( next.is( ".ui-state-disabled" ) ) {
496-
this._move( direction, filter, event );
497-
}
498495
},
499496

500497
nextPage: function( event ) {
@@ -509,14 +506,14 @@ $.widget( "ui.menu", {
509506
var base = this.active.offset().top,
510507
height = this.element.height(),
511508
result;
512-
this.active.nextAll( ".ui-menu-item" ).not( ".ui-state-disabled" ).each(function() {
509+
this.active.nextAll( ".ui-menu-item" ).each(function() {
513510
result = $( this );
514511
return $( this ).offset().top - base - height < 0;
515512
});
516513

517514
this.focus( event, result );
518515
} else {
519-
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).not( ".ui-state-disabled" )
516+
this.focus( event, this.activeMenu.children( ".ui-menu-item" )
520517
[ !this.active ? "first" : "last" ]() );
521518
}
522519
},
@@ -533,14 +530,14 @@ $.widget( "ui.menu", {
533530
var base = this.active.offset().top,
534531
height = this.element.height(),
535532
result;
536-
this.active.prevAll( ".ui-menu-item" ).not( ".ui-state-disabled" ).each(function() {
533+
this.active.prevAll( ".ui-menu-item" ).each(function() {
537534
result = $( this );
538535
return $(this).offset().top - base + height > 0;
539536
});
540537

541538
this.focus( event, result );
542539
} else {
543-
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).not( ".ui-state-disabled" ).first() );
540+
this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
544541
}
545542
},
546543

0 commit comments

Comments
 (0)