Ticket #3559: core.diff

File core.diff, 2.0 KB (added by trixta, 14 years ago)

some additions to the patch by colin: area is only focusable, if a href-attribute is available. + IE8 detection

  • ui.core.js

     
    11(function($) {
    2 
     2       
     3var normalizedTabindex = ($.browser.msie && parseInt($.browser.version, 10) < 8) ?
     4                'tabIndex' :
     5                'tabindex';
     6                 
     7function hasTabindexAttr(element) {
     8        var attributeNode = element.getAttributeNode(normalizedTabindex);
     9        return attributeNode ? attributeNode.specified : false;
     10}
    311function getTabIndex(element) {
    4         var index = parseInt(element.getAttribute('tabIndex'), 10);
    5         if (isNaN(index)) {
    6                 index = element.tabIndex;
    7         }
    8        
    9         return index;
     12        if (!hasTabindexAttr(element)) {
     13                return undefined;
     14        }
     15        var value = parseInt(element.getAttribute(normalizedTabindex), 10);
     16        return !isNaN(value) ? value : undefined;
    1017}
    1118
    1219$.extend($.expr[':'], {
    1320        focusable: function(element) {
    1421                var nodeName = element.nodeName.toLowerCase(),
    1522                        tabIndex = getTabIndex(element);
    16                
    17                 if ($(element).is(':hidden') || $(element).parents(':hidden').length) {
    18                         return false;
    19                 }
    20                
    21                 return (/input|select|textarea|button|object|area/.test(nodeName)
    22                         ? !('hidden' == element.type || element.disabled)
    23                         : 'a' == nodeName
     23                return (/input|select|textarea|button|object/.test(nodeName)
     24                        ? !(element.disabled)
     25                        : 'a' == nodeName || 'area' == nodeName
    2426                                ? element.href || !isNaN(tabIndex)
    25                                 : !isNaN(tabIndex));
     27                                : !isNaN(tabIndex)) && (!$(element).parents().andSelf().filter(':hidden').length) ? true : false;
    2628        },
    2729       
    2830        tabbable: function(element) {
    2931                var tabIndex = getTabIndex(element);
    30                
    31                 return !isNaN(tabIndex) && tabIndex >= 0 && $(element).is(':focusable');
     32                return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
    3233        }
    3334});
    3435
     
    3637        var element = this[0];
    3738       
    3839        if (element) {
    39                 if (!isNaN(getTabIndex(element))) {
    40                         $(element).attr('tabIndex', -1);
    41                 }
     40                //if (!isNaN(getTabIndex(element))) {
     41                $(element).attr('tabIndex', -1);
     42                //}
    4243               
    4344                setTimeout(function() {
    4445                        element.focus();