Skip to content

Commit

Permalink
Core: Remove ancestor visibility requirement from :focusable selector
Browse files Browse the repository at this point in the history
  • Loading branch information
westonruter committed Aug 5, 2015
1 parent cd6c751 commit 956eaf7
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 20 deletions.
16 changes: 8 additions & 8 deletions tests/unit/core/selector.js
Expand Up @@ -127,14 +127,14 @@ test( "focusable - hidden styles", function() {
isNotFocusable( "#displayNoneAncestor-input", "input, display: none parent" );
isNotFocusable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" );

isNotFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
isNotFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
isFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
isFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );

isNotFocusable( "#displayNone-input", "input, display: none" );
isNotFocusable( "#visibilityHidden-input", "input, visibility: hidden" );
isFocusable( "#visibilityHidden-input", "input, visibility: hidden" );

isNotFocusable( "#displayNone-span", "span with tabindex, display: none" );
isNotFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
isFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
});

test( "focusable - natively focusable with various tabindex", function() {
Expand Down Expand Up @@ -212,14 +212,14 @@ test( "tabbable - hidden styles", function() {
isNotTabbable( "#displayNoneAncestor-input", "input, display: none parent" );
isNotTabbable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" );

isNotTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
isNotTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
isTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
isTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );

isNotTabbable( "#displayNone-input", "input, display: none" );
isNotTabbable( "#visibilityHidden-input", "input, visibility: hidden" );
isTabbable( "#visibilityHidden-input", "input, visibility: hidden" );

isNotTabbable( "#displayNone-span", "span with tabindex, display: none" );
isNotTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
isTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
});

test( "tabbable - natively tabbable with various tabindex", function() {
Expand Down
15 changes: 3 additions & 12 deletions ui/core.js
Expand Up @@ -189,23 +189,14 @@ function focusable( element, hasTabindex ) {
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
return false;
}
img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
return !!img && visible( img );
img = $( "img[usemap='#" + mapName + "']" );
return img.length && img.is( ":visible" );
}
return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
!element.disabled :
"a" === nodeName ?
element.href || hasTabindex :
hasTabindex ) &&
// the element and all of its ancestors must be visible
visible( element );
}

function visible( element ) {
return $.expr.filters.visible( element ) &&
!$( element ).parents().addBack().filter( function() {
return $.css( this, "visibility" ) === "hidden";
} ).length;
hasTabindex ) && $( element ).is( ":visible" );
}

$.extend( $.expr[ ":" ], {
Expand Down

0 comments on commit 956eaf7

Please sign in to comment.