UNPKG

bootstrap-responsive-tabs

Version:

A simple jQuery plugin that switches the default bootstrap tabs to accordions on the viewports that you choose to.

113 lines (82 loc) 2.9 kB
/* * jQuery Bootstrap Responsive Tabs v2.0.1 | Valeriu Timbuc - vtimbuc.com * github.com/vtimbuc/bootstrap-responsive-tabs * @license WTFPL http://www.wtfpl.net/about/ */ ;(function($) { "use strict"; var defaults = { accordionOn: ['xs'] // xs, sm, md, lg }; $.fn.responsiveTabs = function (options) { var config = $.extend({}, defaults, options), accordion = ''; $.each(config.accordionOn, function (index, value) { accordion += ' accordion-' + value; }); return this.each(function () { var $self = $(this), $navTabs = $self.find('> li > a'), $tabContent = $($navTabs.first().attr('href')).parent('.tab-content'), $tabs = $tabContent.children('.tab-pane'); // Wrap the tabs $self.add($tabContent).wrapAll('<div class="responsive-tabs-container" />'); var $container = $self.parent('.responsive-tabs-container'); $container.addClass(accordion); // Duplicate links for accordion $navTabs.each(function (i) { var $this = $(this), id = $this.attr('href'), active = '', first = '', last = ''; // Add active class if ($this.parent('li').hasClass('active')) { active = ' active'; } // Add first class if (i === 0) { first = ' first'; } // Add last class if (i === $navTabs.length - 1) { last = ' last'; } $this.clone(false).addClass('accordion-link' + active + first + last).insertBefore(id); }); var $accordionLinks = $tabContent.children('.accordion-link'); // Tabs Click Event $navTabs.on('click', function (event) { event.preventDefault(); var $this = $(this), $li = $this.parent('li'), $siblings = $li.siblings('li'), id = $this.attr('href'), $accordionLink = $tabContent.children('a[href="' + id + '"]'); if (!$li.hasClass('active')) { $li.addClass('active'); $siblings.removeClass('active'); $tabs.removeClass('active'); $(id).addClass('active'); $accordionLinks.removeClass('active'); $accordionLink.addClass('active'); } }); // Accordion Click Event $accordionLinks.on('click', function (event) { event.preventDefault(); var $this = $(this), id = $this.attr('href'), $tabLink = $self.find('li > a[href="' + id + '"]').parent('li'); if (!$this.hasClass('active')) { $accordionLinks.removeClass('active'); $this.addClass('active'); $tabs.removeClass('active'); $(id).addClass('active'); $navTabs.parent('li').removeClass('active'); $tabLink.addClass('active'); } }); }); }; }(jQuery));