88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
/*!
 | 
						|
 * jQuery UI Focusable 1.13.2
 | 
						|
 * http://jqueryui.com
 | 
						|
 *
 | 
						|
 * Copyright jQuery Foundation and other contributors
 | 
						|
 * Released under the MIT license.
 | 
						|
 * http://jquery.org/license
 | 
						|
 */
 | 
						|
 | 
						|
//>>label: :focusable Selector
 | 
						|
//>>group: Core
 | 
						|
//>>description: Selects elements which can be focused.
 | 
						|
//>>docs: http://api.jqueryui.com/focusable-selector/
 | 
						|
 | 
						|
( function( factory ) {
 | 
						|
    "use strict";
 | 
						|
 | 
						|
    if ( typeof define === "function" && define.amd ) {
 | 
						|
 | 
						|
        // AMD. Register as an anonymous module.
 | 
						|
        define( [ "jquery", "./version" ], factory );
 | 
						|
    } else {
 | 
						|
 | 
						|
        // Browser globals
 | 
						|
        factory( jQuery );
 | 
						|
    }
 | 
						|
} )( function( $ ) {
 | 
						|
    "use strict";
 | 
						|
 | 
						|
// Selectors
 | 
						|
    $.ui.focusable = function( element, hasTabindex ) {
 | 
						|
        var map, mapName, img, focusableIfVisible, fieldset,
 | 
						|
            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 + "']" );
 | 
						|
            return img.length > 0 && img.is( ":visible" );
 | 
						|
        }
 | 
						|
 | 
						|
        if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
 | 
						|
            focusableIfVisible = !element.disabled;
 | 
						|
 | 
						|
            if ( focusableIfVisible ) {
 | 
						|
 | 
						|
                // Form controls within a disabled fieldset are disabled.
 | 
						|
                // However, controls within the fieldset's legend do not get disabled.
 | 
						|
                // Since controls generally aren't placed inside legends, we skip
 | 
						|
                // this portion of the check.
 | 
						|
                fieldset = $( element ).closest( "fieldset" )[ 0 ];
 | 
						|
                if ( fieldset ) {
 | 
						|
                    focusableIfVisible = !fieldset.disabled;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } else if ( "a" === nodeName ) {
 | 
						|
            focusableIfVisible = element.href || hasTabindex;
 | 
						|
        } else {
 | 
						|
            focusableIfVisible = hasTabindex;
 | 
						|
        }
 | 
						|
 | 
						|
        return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
 | 
						|
    };
 | 
						|
 | 
						|
// Support: IE 8 only
 | 
						|
// IE 8 doesn't resolve inherit to visible/hidden for computed values
 | 
						|
    function visible( element ) {
 | 
						|
        var visibility = element.css( "visibility" );
 | 
						|
        while ( visibility === "inherit" ) {
 | 
						|
            element = element.parent();
 | 
						|
            visibility = element.css( "visibility" );
 | 
						|
        }
 | 
						|
        return visibility === "visible";
 | 
						|
    }
 | 
						|
 | 
						|
    $.extend( $.expr.pseudos, {
 | 
						|
        focusable: function( element ) {
 | 
						|
            return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
 | 
						|
        }
 | 
						|
    } );
 | 
						|
 | 
						|
    return $.ui.focusable;
 | 
						|
 | 
						|
} );
 |