I did this for a client, but he says I can share it.  When a tab is
shown, and it contains internal links, those links are rewritten to be
tab panel show actions.  Also, as you hover over the link, the
corresponding tab is hover-colored.  Quite cool.


// must be loaded *after* jquery-ui
(function($){
    $.extend($.ui.tabs.prototype,{
            _original_init: $.ui.tabs.prototype._init,
                _init: function() {

                var bindInternalLinks = function (event, ui) {
                    // alert('calling bindInternalLinks');
                    var $tabs = $(this);            // our toplevel
                    var $data = $tabs.data('tabs'); // tabs object on that
                    var $anchors = $data.anchors; // jquery list of known 
anchors
                    var $lis = $data.lis; // jquery list of corresponding tabs
                    var $panel = $(ui.panel); // jquery object on body
                    // look for anchors that might be to another tab
                    // if so, overlay them as 'select' triggers
                    $panel.find('a').each(function() {
                            var $a = $(this);
                            var $href = $a.attr('href');
                            var $index = 
$anchors.index($anchors.filter('[href='+$href
+']'));
                            if ($index > -1) {
                                var $li = $lis.eq($index);
                                $a.click(
                                         function () 
{$tabs.tabs('select',$index)}
                                         );
                                // add hover-highlight as well
                                $a.hover(
                                         function () {
                                             $li.addClass('ui-state-hover');
                                         },
                                         function () {
                                             $li.removeClass('ui-state-hover');
                                         }
                                         );
                            }; // end if
                        }); // end foreach a
                }; // end bindInternalLinks

                if(this.option('bindInternalLinks')){
                    this.element.bind('tabsshow', bindInternalLinks);
                }; // end if

                this._original_init();
            }, // end _init
                });

    $.extend($.ui.tabs.defaults, {
            bindInternalLinks:false
                });
})(jQuery);

--

You received this message because you are subscribed to the Google Groups 
"jQuery UI" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jquery-ui?hl=en.


Reply via email to