From 6e2a823a44063af96749d54560808656e007c2a8 Mon Sep 17 00:00:00 2001 From: Johann-S Date: Mon, 10 Sep 2018 11:01:14 +0200 Subject: [PATCH] collapse children with no data-parent --- js/src/collapse.js | 23 ++++++++++++++--------- js/tests/unit/collapse.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/js/src/collapse.js b/js/src/collapse.js index d3404630a4..ad98ffa6aa 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -127,7 +127,13 @@ const Collapse = (($) => { if (this._parent) { actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)) - .filter((elem) => elem.getAttribute('data-parent') === this._config.parent) + .filter((elem) => { + if (typeof this._config.parent === 'string') { + return elem.getAttribute('data-parent') === this._config.parent + } + + return elem.classList.contains(ClassName.COLLAPSE) + }) if (actives.length === 0) { actives = null @@ -282,7 +288,8 @@ const Collapse = (($) => { } _getParent() { - let parent = null + let parent + if (Util.isElement(this._config.parent)) { parent = this._config.parent @@ -309,14 +316,12 @@ const Collapse = (($) => { } _addAriaAndCollapsedClass(element, triggerArray) { - if (element) { - const isOpen = $(element).hasClass(ClassName.SHOW) + const isOpen = $(element).hasClass(ClassName.SHOW) - if (triggerArray.length) { - $(triggerArray) - .toggleClass(ClassName.COLLAPSED, !isOpen) - .attr('aria-expanded', isOpen) - } + if (triggerArray.length) { + $(triggerArray) + .toggleClass(ClassName.COLLAPSED, !isOpen) + .attr('aria-expanded', isOpen) } } diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js index 7f4cedd748..e7fb8893ed 100644 --- a/js/tests/unit/collapse.js +++ b/js/tests/unit/collapse.js @@ -855,4 +855,38 @@ $(function () { assert.ok(false, 'collapse not created') } }) + + QUnit.test('should find collapse children if they have collapse class too not only data-parent', function (assert) { + assert.expect(2) + var done = assert.async() + + var html = + '
' + + '
' + + ' Toggle item 1' + + '
Lorem ipsum 1
' + + '
' + + '
' + + ' Toggle item 2' + + '
Lorem ipsum 2
' + + '
' + + '
' + + $(html).appendTo('#qunit-fixture') + + var $parent = $('.my-collapse') + var $collapse2 = $('#collapse2') + $parent.find('.collapse').bootstrapCollapse({ + parent: $parent, + toggle: false + }) + + $collapse2.on('shown.bs.collapse', function () { + assert.ok($collapse2.hasClass('show')) + assert.ok(!$('#collapse1').hasClass('show')) + done() + }) + + $collapse2.bootstrapCollapse('toggle') + }) }) -- 2.47.2