Skip to content

Commit 8bee28d

Browse files
committed
Core: Check computed visibility in addition to :visible
* Correct assertions according to fixed condition * Core: Add tests for nested visibility override
1 parent 1f49e53 commit 8bee28d

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

tests/unit/core/core.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@
8080
<div id="visibilityHiddenAncestor" style="visibility: hidden;">
8181
<input id="visibilityHiddenAncestor-input">
8282
<span tabindex="1" id="visibilityHiddenAncestor-span">.</span>
83+
84+
<span id="nestedVisibilityOverrideAncestor" style="visibility: visible">
85+
<input id="nestedVisibilityOverrideAncestor-input">
86+
<span tabindex="1" id="nestedVisibilityOverrideAncestor-span">.</span>
87+
</span>
8388
</div>
8489

8590
<span tabindex="1" id="displayNone-span" style="display: none;">.</span>

tests/unit/core/selector.js

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,19 +125,22 @@ test( "focusable - disabled elements", function() {
125125
});
126126

127127
test( "focusable - hidden styles", function() {
128-
expect( 8 );
128+
expect( 10 );
129129

130130
isNotFocusable( "#displayNoneAncestor-input", "input, display: none parent" );
131131
isNotFocusable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" );
132132

133-
isFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
134-
isFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
133+
isNotFocusable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
134+
isNotFocusable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
135+
136+
isFocusable( "#nestedVisibilityOverrideAncestor-input", "input, visibility: visible parent but visibility: hidden grandparent" );
137+
isFocusable( "#nestedVisibilityOverrideAncestor-span", "span with tabindex, visibility: visible parent but visibility: hidden grandparent " );
135138

136139
isNotFocusable( "#displayNone-input", "input, display: none" );
137-
isFocusable( "#visibilityHidden-input", "input, visibility: hidden" );
140+
isNotFocusable( "#visibilityHidden-input", "input, visibility: hidden" );
138141

139142
isNotFocusable( "#displayNone-span", "span with tabindex, display: none" );
140-
isFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
143+
isNotFocusable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
141144
});
142145

143146
test( "focusable - natively focusable with various tabindex", function() {
@@ -210,19 +213,22 @@ test( "tabbable - disabled elements", function() {
210213
});
211214

212215
test( "tabbable - hidden styles", function() {
213-
expect( 8 );
216+
expect( 10 );
214217

215218
isNotTabbable( "#displayNoneAncestor-input", "input, display: none parent" );
216219
isNotTabbable( "#displayNoneAncestor-span", "span with tabindex, display: none parent" );
217220

218-
isTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
219-
isTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
221+
isNotTabbable( "#visibilityHiddenAncestor-input", "input, visibility: hidden parent" );
222+
isNotTabbable( "#visibilityHiddenAncestor-span", "span with tabindex, visibility: hidden parent" );
223+
224+
isTabbable( "#nestedVisibilityOverrideAncestor-input", "input, visibility: visible parent but visibility: hidden grandparent" );
225+
isTabbable( "#nestedVisibilityOverrideAncestor-span", "span with tabindex, visibility: visible parent but visibility: hidden grandparent " );
220226

221227
isNotTabbable( "#displayNone-input", "input, display: none" );
222-
isTabbable( "#visibilityHidden-input", "input, visibility: hidden" );
228+
isNotTabbable( "#visibilityHidden-input", "input, visibility: hidden" );
223229

224230
isNotTabbable( "#displayNone-span", "span with tabindex, display: none" );
225-
isTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
231+
isNotTabbable( "#visibilityHidden-span", "span with tabindex, visibility: hidden" );
226232
});
227233

228234
test( "tabbable - natively tabbable with various tabindex", function() {

ui/focusable.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ $.ui.focusable = function( element, hasTabindex ) {
4242
"a" === nodeName ?
4343
element.href || hasTabindex :
4444
hasTabindex ) &&
45-
$( element ).is( ":visible" );
45+
$( element ).is( ":visible" ) && $( element ).css( "visibility" ) === "visible";
4646
};
4747

4848
$.extend( $.expr[ ":" ], {

0 commit comments

Comments
 (0)