Skip to content

Commit 96f6b1a

Browse files
adambaratzscottgonzalez
authored andcommitted
Core: reuse tabindex value. Fixed #7257 - optimize :tabbable.
(cherry picked from commit fe3b36b)
1 parent 5e095e9 commit 96f6b1a

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

ui/jquery.ui.core.js

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,27 @@ $.each( [ "Width", "Height" ], function( i, name ) {
174174
});
175175

176176
// selectors
177+
function focusable( element, isTabIndexNotNaN ) {
178+
var nodeName = element.nodeName.toLowerCase();
179+
if ( "area" === nodeName ) {
180+
var map = element.parentNode,
181+
mapName = map.name,
182+
img;
183+
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
184+
return false;
185+
}
186+
img = $( "img[usemap=#" + mapName + "]" )[0];
187+
return !!img && visible( img );
188+
}
189+
return ( /input|select|textarea|button|object/.test( nodeName )
190+
? !element.disabled
191+
: "a" == nodeName
192+
? element.href || isTabIndexNotNaN
193+
: isTabIndexNotNaN)
194+
// the element and all of its ancestors must be visible
195+
&& visible( element );
196+
}
197+
177198
function visible( element ) {
178199
return !$( element ).parents().andSelf().filter(function() {
179200
return $.curCSS( this, "visibility" ) === "hidden" ||
@@ -187,30 +208,13 @@ $.extend( $.expr[ ":" ], {
187208
},
188209

189210
focusable: function( element ) {
190-
var nodeName = element.nodeName.toLowerCase(),
191-
tabIndex = $.attr( element, "tabindex" );
192-
if ( "area" === nodeName ) {
193-
var map = element.parentNode,
194-
mapName = map.name,
195-
img;
196-
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
197-
return false;
198-
}
199-
img = $( "img[usemap=#" + mapName + "]" )[0];
200-
return !!img && visible( img );
201-
}
202-
return ( /input|select|textarea|button|object/.test( nodeName )
203-
? !element.disabled
204-
: "a" == nodeName
205-
? element.href || !isNaN( tabIndex )
206-
: !isNaN( tabIndex ))
207-
// the element and all of its ancestors must be visible
208-
&& visible( element );
211+
return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
209212
},
210213

211214
tabbable: function( element ) {
212-
var tabIndex = $.attr( element, "tabindex" );
213-
return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" );
215+
var tabIndex = $.attr( element, "tabindex" ),
216+
isTabIndexNaN = isNaN( tabIndex );
217+
return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
214218
}
215219
});
216220

0 commit comments

Comments
 (0)