mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
475ccefd97
Ref #9647
65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
/*!
|
|
* jQuery UI Focusable @VERSION
|
|
* http://jqueryui.com
|
|
*
|
|
* Copyright jQuery Foundation and other contributors
|
|
* Released under the MIT license.
|
|
* http://jquery.org/license
|
|
*/
|
|
|
|
//>>label: focusable
|
|
//>>group: Core
|
|
//>>description: Selects elements which can be focused.
|
|
//>>docs: http://api.jqueryui.com/focusable-selector/
|
|
|
|
( function( factory ) {
|
|
if ( typeof define === "function" && define.amd ) {
|
|
|
|
// AMD. Register as an anonymous module.
|
|
define( [ "jquery", "./version" ], factory );
|
|
} else {
|
|
|
|
// Browser globals
|
|
factory( jQuery );
|
|
}
|
|
} ( function( $ ) {
|
|
|
|
// selectors
|
|
$.ui.focusable = function( element, hasTabindex ) {
|
|
var map, mapName, img,
|
|
nodeName = element.nodeName.toLowerCase();
|
|
if ( "area" === nodeName ) {
|
|
map = element.parentNode;
|
|
mapName = map.name;
|
|
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
|
|
return false;
|
|
}
|
|
img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
|
|
return !!img && visible( img );
|
|
}
|
|
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;
|
|
}
|
|
|
|
$.extend( $.expr[ ":" ], {
|
|
focusable: function( element ) {
|
|
return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
|
|
}
|
|
} );
|
|
|
|
return $.ui.focusable;
|
|
|
|
} ) );
|