|
26 | 26 | TabCollapse.DEFAULTS = { |
27 | 27 | accordionClass: 'visible-xs', |
28 | 28 | tabsClass: 'hidden-xs', |
29 | | - accordionTemplate: function(heading, groupId, parentId, active){ |
30 | | - return '<div class="panel panel-default">' + |
31 | | - ' <div class="panel-heading">' + |
32 | | - ' <h4 class="panel-title">' + |
33 | | - ' <a class="' + (active ? '' : 'collapsed') + '" data-toggle="collapse" data-parent="#' + parentId + '" href="#' + groupId + '">' + |
34 | | - ' ' + heading + |
35 | | - ' </a>' + |
36 | | - ' </h4>' + |
37 | | - ' </div>' + |
38 | | - ' <div id="' + groupId + '" class="panel-collapse collapse ' + (active ? 'in' : '') + '">' + |
39 | | - ' <div class="panel-body js-tabcollapse-panel-body">' + |
40 | | - ' </div>' + |
41 | | - ' </div>' + |
42 | | - '</div>'; |
| 29 | + accordionTemplate: function(heading, groupId, parentId, active) { |
| 30 | + return '<div class="panel panel-default">' + |
| 31 | + ' <div class="panel-heading">' + |
| 32 | + ' <h4 class="panel-title">' + |
| 33 | + ' </h4>' + |
| 34 | + ' </div>' + |
| 35 | + ' <div id="' + groupId + '" class="panel-collapse collapse ' + (active ? 'in' : '') + '">' + |
| 36 | + ' <div class="panel-body js-tabcollapse-panel-body">' + |
| 37 | + ' </div>' + |
| 38 | + ' </div>' + |
| 39 | + '</div>' |
| 40 | + |
43 | 41 | } |
44 | 42 | }; |
45 | 43 |
|
|
54 | 52 | }; |
55 | 53 |
|
56 | 54 | TabCollapse.prototype.showTabs = function(){ |
| 55 | + var view = this; |
57 | 56 | this.$tabs.trigger($.Event('show-tabs.bs.tabcollapse')); |
58 | 57 |
|
| 58 | + var $panelHeadings = this.$accordion.find('.js-tabcollapse-panel-heading').detach(); |
| 59 | + $panelHeadings.each(function() { |
| 60 | + var $panelHeading = $(this), |
| 61 | + $parentLi = $panelHeading.data('bs.tabcollapse.parentLi'); |
| 62 | + view._panelHeadingToTabHeading($panelHeading); |
| 63 | + $parentLi.append($panelHeading); |
| 64 | + }); |
| 65 | + |
59 | 66 | var $panelBodies = this.$accordion.find('.js-tabcollapse-panel-body'); |
60 | 67 | $panelBodies.each(function(){ |
61 | 68 | var $panelBody = $(this), |
|
73 | 80 | var $headings = this.$tabs.find('li:not(.dropdown) [data-toggle="tab"], li:not(.dropdown) [data-toggle="pill"]'), |
74 | 81 | view = this; |
75 | 82 | $headings.each(function(){ |
76 | | - var $heading = $(this); |
77 | | - view.$accordion.append(view._createAccordionGroup(view.$accordion.attr('id'), $heading)); |
| 83 | + var $heading = $(this), |
| 84 | + $parentLi = $heading.parent(); |
| 85 | + $heading.data('bs.tabcollapse.parentLi', $parentLi); |
| 86 | + view.$accordion.append(view._createAccordionGroup(view.$accordion.attr('id'), $heading.detach())); |
78 | 87 | }); |
79 | 88 |
|
80 | 89 | this.$tabs.trigger($.Event('shown-accordion.bs.tabcollapse')); |
81 | 90 | }; |
82 | 91 |
|
| 92 | + TabCollapse.prototype._panelHeadingToTabHeading = function($heading) { |
| 93 | + var href = $heading.attr('href').replace(/-collapse$/g, ''); |
| 94 | + $heading.attr({ |
| 95 | + 'data-toggle': 'tab', |
| 96 | + 'href': href, |
| 97 | + 'data-parent': '' |
| 98 | + }); |
| 99 | + return $heading; |
| 100 | + }; |
| 101 | + |
| 102 | + TabCollapse.prototype._tabHeadingToPanelHeading = function($heading, groupId, parentId, active) { |
| 103 | + $heading.addClass('js-tabcollapse-panel-heading ' + (active ? '' : 'collapsed')); |
| 104 | + $heading.attr({ |
| 105 | + 'data-toggle': 'collapse', |
| 106 | + 'data-parent': '#' + parentId, |
| 107 | + 'href': '#' + groupId |
| 108 | + }); |
| 109 | + return $heading; |
| 110 | + }; |
| 111 | + |
83 | 112 | TabCollapse.prototype._checkStateOnResize = function(){ |
84 | 113 | var view = this; |
85 | 114 | $(window).resize(function(){ |
|
100 | 129 |
|
101 | 130 | TabCollapse.prototype._createAccordionGroup = function(parentId, $heading){ |
102 | 131 | var tabSelector = $heading.attr('data-target'), |
103 | | - active = $heading.parent().is('.active'); |
| 132 | + active = $heading.data('bs.tabcollapse.parentLi').is('.active'); |
104 | 133 |
|
105 | 134 | if (!tabSelector) { |
106 | 135 | tabSelector = $heading.attr('href'); |
|
109 | 138 |
|
110 | 139 | var $tabPane = $(tabSelector), |
111 | 140 | groupId = $tabPane.attr('id') + '-collapse', |
112 | | - $panel = $(this.options.accordionTemplate($heading.html(), groupId, parentId, active)); |
| 141 | + $panel = $(this.options.accordionTemplate($heading, groupId, parentId, active)); |
| 142 | + $panel.find('.panel-heading > .panel-title').append(this._tabHeadingToPanelHeading($heading, groupId, parentId, active)); |
113 | 143 | $panel.find('.panel-body').append($tabPane.children('*').detach()) |
114 | 144 | .data('bs.tabcollapse.tabpane', $tabPane); |
115 | 145 |
|
|
0 commit comments