0
0
mirror of https://github.com/twbs/bootstrap.git synced 2024-12-01 13:24:25 +01:00

Merge branch 'collapse' of https://github.com/Johann-S/bootstrap into Johann-S-collapse

This commit is contained in:
Mark Otto 2017-03-19 18:43:13 -07:00
commit 3730c5dbf5
2 changed files with 34 additions and 3 deletions

View File

@ -57,7 +57,8 @@ const Collapse = (($) => {
const Selector = { const Selector = {
ACTIVES : '.card > .show, .card > .collapsing', ACTIVES : '.card > .show, .card > .collapsing',
DATA_TOGGLE : '[data-toggle="collapse"]' DATA_TOGGLE : '[data-toggle="collapse"]',
DATA_CHILDREN : 'data-children'
} }
@ -77,13 +78,20 @@ const Collapse = (($) => {
`[data-toggle="collapse"][href="#${element.id}"],` + `[data-toggle="collapse"][href="#${element.id}"],` +
`[data-toggle="collapse"][data-target="#${element.id}"]` `[data-toggle="collapse"][data-target="#${element.id}"]`
)) ))
this._parent = this._config.parent ? this._getParent() : null this._parent = this._config.parent ? this._getParent() : null
if (!this._config.parent) { if (!this._config.parent) {
this._addAriaAndCollapsedClass(this._element, this._triggerArray) this._addAriaAndCollapsedClass(this._element, this._triggerArray)
} }
this._selectorActives = Selector.ACTIVES
if (this._parent) {
const childrenSelector = this._parent.hasAttribute(Selector.DATA_CHILDREN) ? this._parent.getAttribute(Selector.DATA_CHILDREN) : null
if (childrenSelector !== null) {
this._selectorActives = `${childrenSelector} > .show, ${childrenSelector} > .collapsing`
}
}
if (this._config.toggle) { if (this._config.toggle) {
this.toggle() this.toggle()
} }
@ -124,7 +132,7 @@ const Collapse = (($) => {
let activesData let activesData
if (this._parent) { if (this._parent) {
actives = $.makeArray($(this._parent).find(Selector.ACTIVES)) actives = $.makeArray($(this._parent).find(this._selectorActives))
if (!actives.length) { if (!actives.length) {
actives = null actives = null
} }

View File

@ -490,4 +490,27 @@ $(function () {
.bootstrapCollapse('show') .bootstrapCollapse('show')
}) })
QUnit.test('should allow accordion to use children other than card', function (assert) {
assert.expect(2)
var done = assert.async()
var accordionHTML = '<div id="accordion" data-children=".item">'
+ '<div class="item">'
+ '<a id="linkTrigger" data-parent="#accordion" data-toggle="collapse" href="#collapseOne" aria-expanded="false" aria-controls="collapseOne"></a>'
+ '<div id="collapseOne" class="collapse" role="tabpanel" aria-labelledby="headingThree"></div>'
+ '</div>'
+ '<div class="item">'
+ '<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"></a>'
+ '<div id="collapseTwo" class="collapse show" role="tabpanel" aria-labelledby="headingTwo"></div>'
+ '</div>'
+ '</div>'
$(accordionHTML).appendTo('#qunit-fixture')
var $target = $('#linkTrigger')
$('#collapseOne').on('shown.bs.collapse', function () {
assert.ok($(this).hasClass('show'))
assert.ok(!$('#collapseTwo').hasClass('show'))
done()
})
$target.trigger($.Event('click'))
})
}) })