/* * R&S Tabs - jQuery plug-in * * Copyright 2010, Darius Zylka * MIT License (http://www.opensource.org/licenses/mit-license.php) * * Depends: jQuery 1.4.2+ */ (function($) { var defaults = { 'cssNamespace': 'rsTabs', 'position': 'left', 'cufon': false, 'ajax': {} }; var methods = { init : function(options) { $.extend(defaults, options); return this.each(function() { var $this = $(this); var data = $this.data('rsTabs'); if (!data) { $(this).data('rsTabs', { 'target': $this }); } $this.addClass(defaults.cssNamespace); var $header = $('
').addClass(defaults.cssNamespace + '_Header'); var $body = $('
').addClass(defaults.cssNamespace + '_Body'); $(this).children('div[title]').each(function() { var $thisContent = $(this); if (defaults.ajax[$thisContent.attr('id')]) { $thisContent.addClass('isAjaxableRsTab'); } var $tab = $('
') .click(function() { if (!$(this).hasClass(defaults.cssNamespace + '_HeaderTabActive')) { $('.' + defaults.cssNamespace + '_HeaderTab', $this).removeClass(defaults.cssNamespace + '_HeaderTabActive'); $(this).addClass(defaults.cssNamespace + '_HeaderTabActive'); $('.' + defaults.cssNamespace + '_BodyElementActive', $this).removeClass(defaults.cssNamespace + '_BodyElementActive'); $(this).data('rsTabs').addClass(defaults.cssNamespace + '_BodyElementActive'); if (defaults.ajax[$thisContent.attr('id')]) { $('.isAjaxableRsTab *').unbind(); $('.isAjaxableRsTab').empty(); defaults.ajax[$thisContent.attr('id')]($thisContent); } } }) .addClass(defaults.cssNamespace + '_HeaderTab') .css({ 'float': defaults.position }) .append('' + $(this).attr('title') + '') .appendTo($header) .attr('data-idrel', $thisContent.attr('id')) ; $tab.data('rsTabs', $thisContent); $thisContent.bind('error', function(e, msg) { $('.error', $tab).remove(); $('
').addClass('error').html(msg).appendTo($tab); }); $thisContent.addClass(defaults.cssNamespace + '_BodyElement').appendTo($body); $thisContent.attr({ title: '' }); }); $header.children(':first').addClass(defaults.cssNamespace + '_HeaderTabActive'); $body.children(':first').addClass(defaults.cssNamespace + '_BodyElementActive'); $body.prependTo($this); $header.prependTo($this); if (typeof defaults.cufon === 'object') { Cufon.replace($header, defaults.cufon); } }); }, destroy : function() { return this.each(function() { }); } }; $.fn.rsTabs = function(method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || ! method) { return methods.init.apply(this, arguments); } else { $.error('Method ' + method + ' does not exist on jQuery.rsTabs'); return false; } }; })( jQuery );