]> source.dussan.org Git - jquery-ui.git/commitdiff
Tabs: Deprecate templating (idPrefix, tabTemplate, panelTemplate options) Fixes ...
authorDavid Petersen <public@petersendidit.com>
Sun, 27 Mar 2011 19:12:53 +0000 (15:12 -0400)
committerDavid Petersen <public@petersendidit.com>
Sun, 27 Mar 2011 20:42:19 +0000 (16:42 -0400)
tests/unit/tabs/tabs_defaults.js
tests/unit/tabs/tabs_deprecated.js
tests/unit/tabs/tabs_options.js
ui/jquery.ui.tabs.js

index f7307b458671f82a091090886f75848f708bdc25..98cb99fb597cc56ccba298efab396669d6da1f20 100644 (file)
@@ -9,12 +9,9 @@ var tabs_defaults = {
        disabled: false,
        event: "click",
        fx: null,
-       idPrefix: "ui-tabs-",
        load: null,
-       panelTemplate: "<div></div>",
        select: null,
-       show: null,
-       tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+       show: null
 };
 
 // FAIL: falsy values break the cookie option
index ef03d84cbf54e209a80cfa788a04482555f5105d..7e481679319d57ebb9b2f0376046b21cabcb9969 100644 (file)
@@ -24,6 +24,18 @@ test('cache', function() {
        ok(false, "missing test - untested code is broken code.");
 });
 
+test('idPrefix', function() {
+       ok(false, "missing test - untested code is broken code.");
+});
+
+test('tabTemplate', function() {
+       ok(false, "missing test - untested code is broken code.");
+});
+
+test('panelTemplate', function() {
+       ok(false, "missing test - untested code is broken code.");
+});
+
 test('spinner', function() {
        expect(4);
        stop();
index 45fba8f3201c8a23d9d799e2524b51ad300fb76b..de6d7e74ecde8f389ccd62b3b9aaab6b94493a92 100644 (file)
@@ -79,14 +79,6 @@ test('fx', function() {
        ok(false, "missing test - untested code is broken code.");
 });
 
-test('idPrefix', function() {
-       ok(false, "missing test - untested code is broken code.");
-});
-
-test('panelTemplate', function() {
-       ok(false, "missing test - untested code is broken code.");
-});
-
 test('selected', function() {
        expect(8);
 
@@ -117,8 +109,4 @@ test('selected', function() {
        equals(el.tabs('option', 'selected'), 0, 'should not collapse tab if value is same as selected');
 });
 
-test('tabTemplate', function() {
-       ok(false, "missing test - untested code is broken code.");
-});
-
 })(jQuery);
index f3741f0a603229391ee422fff7e2446cba1b26ab..4a7ae39815af1f3b855d2e7fd3b069a5b60c79aa 100755 (executable)
@@ -32,12 +32,9 @@ $.widget( "ui.tabs", {
                disabled: false,
                event: "click",
                fx: null, // e.g. { height: 'toggle', opacity: 'toggle', duration: 200 }
-               idPrefix: "ui-tabs-",
                load: null,
-               panelTemplate: "<div></div>",
                select: null,
-               show: null,
-               tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
+               show: null
        },
 
        _create: function() {
@@ -135,7 +132,7 @@ $.widget( "ui.tabs", {
 
        _tabId: function( a ) {
                return ( $( a ).attr( "aria-controls" ) || "" ).replace( /^#/ , "" ) ||
-                       this.options.idPrefix + getNextTabId();
+                       "ui-tabs-" + getNextTabId();
        },
 
        _sanitizeSelector: function( hash ) {
@@ -253,11 +250,8 @@ $.widget( "ui.tabs", {
                                selector = "#" + id;
                                panel = self.element.find( selector );
                                if ( !panel.length ) {
-                                       panel = $( self.options.panelTemplate )
-                                               .attr( "id", id )
-                                               .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
-                                               .data( "destroy.tabs", true )
-                                               .insertAfter( self.panels[ i - 1 ] || self.list );
+                                       panel = self._createPanel( id );
+                                       panel.insertAfter( self.panels[ i - 1 ] || self.list );
                                }
                        // invalid tab href
                        } else {
@@ -271,6 +265,13 @@ $.widget( "ui.tabs", {
                });
        },
 
+       _createPanel: function( id ) {
+               return $( "<div></div>" )
+                                       .attr( "id", id )
+                                       .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+                                       .data( "destroy.tabs", true );
+       },
+
        _setupFx: function( fx ) {
                // set up animations
                if ( fx ) {
@@ -772,7 +773,8 @@ if ( $.uiBackCompat !== false ) {
        (function( $, prototype ) {
                $.extend( prototype.options, {
                        add: null,
-                       remove: null
+                       remove: null,
+                       tabTemplate: "<li><a href='#{href}'><span>#{label}</span></a></li>"
                });
 
                prototype.add = function( url, label, index ) {
@@ -790,9 +792,7 @@ if ( $.uiBackCompat !== false ) {
                        // try to find an existing element before creating a new one
                        var $panel = self.element.find( "#" + id );
                        if ( !$panel.length ) {
-                               $panel = $( o.panelTemplate )
-                                       .attr( "id", id )
-                                       .data( "destroy.tabs", true );
+                               $panel = self._createPanel( id );
                        }
                        $panel.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" );
 
@@ -868,10 +868,30 @@ if ( $.uiBackCompat !== false ) {
 
        // _tabId method
        (function( $, prototype ) {
+               $.extend( prototype.options, {
+                       idPrefix: "ui-tabs-"
+               });
+
                var _tabId = prototype._tabId;
                prototype._tabId = function( a ) {
-               return a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
-                       _tabId.apply( this, arguments );
+                       return ( $( a ).attr( "aria-controls" ) || "" ).replace( /^#/ , "" ) ||
+                               a.title && a.title.replace( /\s/g, "_" ).replace( /[^\w\u00c0-\uFFFF-]/g, "" ) ||
+                               this.options.idPrefix + getNextTabId();
+               };
+       }( jQuery, jQuery.ui.tabs.prototype ) );
+
+       // _tabId method
+       (function( $, prototype ) {
+               $.extend( prototype.options, {
+                       panelTemplate: "<div></div>"
+               });
+
+               var _createPanel = prototype._createPanel;
+               prototype._createPanel = function( id ) {
+                       return $( this.options.panelTemplate )
+                                       .attr( "id", id )
+                                       .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+                                       .data( "destroy.tabs", true );
                };
        }( jQuery, jQuery.ui.tabs.prototype ) );
 }