diff --git a/bootstrap-tabcollapse.js b/bootstrap-tabcollapse.js index 76e1279..ca73aee 100644 --- a/bootstrap-tabcollapse.js +++ b/bootstrap-tabcollapse.js @@ -36,8 +36,7 @@ '
' + '
' + ' ' + - '' - + ''; } }; @@ -81,7 +80,7 @@ }); if (!$('li').hasClass('active')) { - $('li').first().addClass('active') + $('li').first().addClass('active'); } var $panelBodies = this.$accordion.find('.js-tabcollapse-panel-body'); @@ -117,6 +116,17 @@ return $tabContents; }; + TabCollapse.prototype.tabSync = function (event) { + var tabId = event.data.tabCollapse.$accordion.find('.panel-collapse.in').attr('id'); + if (tabId === undefined || tabId === null) { + return; + } + tabId = tabId.substring(0, tabId.length - 9); //remove -collapse from identifier + + event.data.tabCollapse.getTabContentElement().find('.active').removeClass('active'); + $('#' + tabId).addClass('active in'); + } + TabCollapse.prototype.showAccordion = function(){ this.$tabs.trigger($.Event('show-accordion.bs.tabcollapse')); @@ -129,7 +139,7 @@ view.$accordion.append(view._createAccordionGroup(view.$accordion.attr('id'), $heading.detach())); }); - if(this.options.updateLinks) { + if (this.options.updateLinks) { var parentId = this.$accordion.attr('id'); var $selector = this.$accordion.find('.js-tabcollapse-panel-body'); $selector.find('[data-toggle="tab"], [data-toggle="pill"]').each(function() { @@ -195,6 +205,9 @@ this.$tabs.after(this.$accordion); this.$tabs.addClass(this.options.tabsClass); this.getTabContentElement().addClass(this.options.tabsClass); + if (this.options.syncTabs) { + this.$accordion.on('shown.bs.collapse', { tabCollapse: this }, this.tabSync); + } }; TabCollapse.prototype._createAccordionGroup = function(parentId, $heading){ diff --git a/readme.md b/readme.md index 6871eb1..91ceace 100644 --- a/readme.md +++ b/readme.md @@ -52,6 +52,13 @@ You can also use multiple Bootstrap classes in order to, for example, show accor tabsClass: 'hidden-sm hidden-xs', accordionClass: 'visible-sm visible-xs' }); + +By default, accordion panels do not sync with tabs: the correct panel will be shown based on the active tab, but changing the active accordion panel does not change the active tab. +To enable tab syncing, pass options as follows: + + $('#myTab').tabCollapse({ + syncTabs: true + }); Events ------------