r943 - branches/experimental/tabbable

r943 - branches/experimental/tabbable


Author: scott.gonzalez
Date: Sat Nov 15 05:47:32 2008
New Revision: 943
Modified:
branches/experimental/tabbable/ui.core.js
Log:
Tabbable: Applied patch from Colin/Alex.
Modified: branches/experimental/tabbable/ui.core.js
==============================================================================
--- branches/experimental/tabbable/ui.core.js    (original)
+++ branches/experimental/tabbable/ui.core.js    Sat Nov 15 05:47:32 2008
@@ -1,34 +1,35 @@
(function($) {
-
-function getTabIndex(element) {
-    var index = parseInt(element.getAttribute('tabIndex'), 10);
-    if (isNaN(index)) {
-        index = element.tabIndex;
-    }
    
-    return index;
+var normalizedTabindex = ($.browser.msie && parseInt($.browser.version,
10) < 8) ?
+        'tabIndex' :
+        'tabindex';
+    
+function hasTabindexAttr(element) {
+    var attributeNode = element.getAttributeNode(normalizedTabindex);
+    return attributeNode ? attributeNode.specified : false;
+}
+function getTabIndex(element) {
+    if (!hasTabindexAttr(element)) {
+        return undefined;
+    }
+    var value = parseInt(element.getAttribute(normalizedTabindex), 10);
+     return !isNaN(value) ? value : undefined;
}
$.extend($.expr[':'], {
    focusable: function(element) {
        var nodeName = element.nodeName.toLowerCase(),
            tabIndex = getTabIndex(element);
-        
-        if ($(element).is(':hidden') || $(element).parents(':hidden').length) {
-            return false;
-        }
-        
-        return (/input|select|textarea|button|object|area/.test(nodeName)
-            ? !('hidden' == element.type || element.disabled)
-            : 'a' == nodeName
+        return (/input|select|textarea|button|object/.test(nodeName)
+            ? !(element.disabled)
+            : 'a' == nodeName || 'area' == nodeName
                ? element.href || !isNaN(tabIndex)
-                : !isNaN(tabIndex));
+                : !isNaN(tabIndex)) &&
(!$(element).parents().andSelf().filter(':hidden').length) ? true : false;
    },
    
    tabbable: function(element) {
        var tabIndex = getTabIndex(element);
-        
-        return !isNaN(tabIndex) && tabIndex >= 0 && $(element).is(':focusable');
+        return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is(':focusable');
    }
});
@@ -36,9 +37,9 @@
    var element = this[0];
    
    if (element) {
-        if (!isNaN(getTabIndex(element))) {
-            $(element).attr('tabIndex', -1);
-        }
+        //if (!isNaN(getTabIndex(element))) {
+        $(element).attr('tabIndex', -1);
+        //}
        
        setTimeout(function() {
            element.focus();