mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
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;
|
||
|
|
||
|
} ) );
|