r1692 - in trunk: tests/unit/tabs ui

r1692 - in trunk: tests/unit/tabs ui


Author: klaus.hartl
Date: Mon Jan 19 15:11:30 2009
New Revision: 1692
Modified:
trunk/tests/unit/tabs/tabs.html
trunk/tests/unit/tabs/tabs.js
trunk/ui/ui.tabs.js
Log:
UI Tabs: url containing a fragment identfier broke Ajax tab loading, fixes
#3627
Modified: trunk/tests/unit/tabs/tabs.html
==============================================================================
--- trunk/tests/unit/tabs/tabs.html    (original)
+++ trunk/tests/unit/tabs/tabs.html    Mon Jan 19 15:11:30 2009
@@ -16,9 +16,7 @@
    <script type="text/javascript" src="tabs.js"></script>
</head>
<body>
-
    <div id="main">
-
        <div id="tabs1">
            <ul>
                <li><a href="#fragment-1">1</a></li>
@@ -33,12 +31,11 @@
            <ul>
                <li><a href="#colon:test">1</a></li>
                <li><a href="#inline-style">2</a></li>
+                <li><a href="test.html#test">1</a></li>
            </ul>
            <div id="colon:test"></div>
            <div style="height: 300px;" id="inline-style"></div>
        </div>
-
    </div>
-
</body>
</html>
Modified: trunk/tests/unit/tabs/tabs.js
==============================================================================
--- trunk/tests/unit/tabs/tabs.js    (original)
+++ trunk/tests/unit/tabs/tabs.js    Mon Jan 19 15:11:30 2009
@@ -83,7 +83,8 @@
    test('remove', function() {
        expect(4);
-        var el = $('#tabs1 > ul').tabs();
+        var el = $('#tabs1').tabs();
+        
        el.tabs('remove', 0);
        equals(el.tabs('length'), 2, 'remove tab');
        equals($('li a[href$="fragment-1"]', el).length, 0, 'remove associated
list item');
@@ -92,10 +93,9 @@
        // TODO delete tab -> focus tab to right
        // TODO delete last tab -> focus tab to left
        
-        el = $('#tabs2 > ul').tabs({ selected: 1 });
+        el.tabs('select', 1);
        el.tabs('remove', 1);
-        equals(el.data('selected.tabs'), 0, 'update selected property');
-        
+        equals(el.data('selected.tabs'), 0, 'update selected property');        
    });
    test('enable', function() {
@@ -219,7 +219,7 @@
        };
        var expected = inlineStyle('height');
-        var el = $('#tabs2 > ul').tabs();
+        var el = $('#tabs2').tabs();
        equals(inlineStyle('height'), expected, 'init should not remove inline
style');
        el.tabs('select', 1);
@@ -232,6 +232,15 @@
            });
        });
+
+    });
+    
+    test('Ajax tab with url containing a fragment identifier fails to load,
#3627', function() { // http://ui.jquery.com/bugs/ticket/3627
+        expect(1);
+
+        var el = $('#tabs2').tabs();
+        
+        equals( $('a:eq(2)', el).data('load.tabs'), 'test.html', 'should ignore
fragment identifier' );
    });
Modified: trunk/ui/ui.tabs.js
==============================================================================
--- trunk/ui/ui.tabs.js    (original)
+++ trunk/ui/ui.tabs.js    Mon Jan 19 15:11:30 2009
@@ -93,17 +93,21 @@
        this.$lis = $('li:has(a[href])', this.list);
        this.$tabs = this.$lis.map(function() { return $('a', this)[0]; });
        this.$panels = $([]);
-
+        
        var self = this, o = this.options;
+        var fragmentId = /^#.+/; // Safari 2 reports '#' for an empty hash
        this.$tabs.each(function(i, a) {
+            var href = $(a).attr('href');
+
            // inline tab
-            if (a.hash && a.hash.replace('#', '')) // Safari 2 reports '#' for an
empty hash
-                self.$panels = self.$panels.add(self._sanitizeSelector(a.hash));
+            if (fragmentId.test(href))
+                self.$panels = self.$panels.add(self._sanitizeSelector(href));
+                
            // remote tab
-            else if ($(a).attr('href') != '#') { // prevent loading the page itself
if href is just "#"
-                $.data(a, 'href.tabs', a.href); // required for restore on destroy
-                $.data(a, 'load.tabs', a.href); // mutable
+            else if (href != '#') { // prevent loading the page itself if href is
just "#"
+                $.data(a, 'href.tabs', href); // required for restore on destroy
+                $.data(a, 'load.tabs', href.replace(/#.*$/, '')); // mutable data,
NOTE IE fails to load if url contains fragment identifier - TODO jQuery
Ajax bug?
                var id = self._tabId(a);
                a.href = '#' + id;
                var $panel = $('#' + id);
@@ -114,6 +118,7 @@
                }
                self.$panels = self.$panels.add($panel);
            }
+            
            // invalid tab href
            else
                o.disabled.push(i + 1);