Skip to content

Commit

Permalink
Update all collapse triggers with .collapsed class and aria-expanded
Browse files Browse the repository at this point in the history
Fixes #15741
Closes #15751 by merging it.
  • Loading branch information
ijcheung authored and cvrebert committed Feb 27, 2015
1 parent 984204c commit d5071b1
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 7 deletions.
8 changes: 4 additions & 4 deletions js/collapse.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Collapse.DEFAULTS, options)
this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]')
this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
'[data-toggle="collapse"][data-target="#' + element.id + '"]')
this.transitioning = null

if (this.options.parent) {
Expand All @@ -33,8 +34,7 @@
Collapse.TRANSITION_DURATION = 350

Collapse.DEFAULTS = {
toggle: true,
trigger: '[data-toggle="collapse"]'
toggle: true
}

Collapse.prototype.dimension = function () {
Expand Down Expand Up @@ -203,7 +203,7 @@

var $target = getTargetFromTrigger($this)
var data = $target.data('bs.collapse')
var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this })
var option = data ? 'toggle' : $this.data()

Plugin.call($target, option)
})
Expand Down
74 changes: 71 additions & 3 deletions js/tests/unit/collapse.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ $(function () {
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok(!$target.hasClass('collapsed'))
assert.ok(!$target.hasClass('collapsed'), 'target does not have collapsed class')
done()
})

Expand All @@ -95,7 +95,41 @@ $(function () {
$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
assert.ok($target.hasClass('collapsed'))
assert.ok($target.hasClass('collapsed'), 'target has collapsed class')
done()
})

$target.click()
})

QUnit.test('should remove "collapsed" class from all triggers targeting the collapse when the collapse is shown', function (assert) {
var done = assert.async()

var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')

$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok(!$target.hasClass('collapsed'), 'target trigger does not have collapsed class')
assert.ok(!$alt.hasClass('collapsed'), 'alt trigger does not have collapsed class')
done()
})

$target.click()
})

QUnit.test('should add "collapsed" class to all triggers targeting the collapse when the collapse is hidden', function (assert) {
var done = assert.async()

var $target = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')

$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
assert.ok($target.hasClass('collapsed'), 'target has collapsed class')
assert.ok($alt.hasClass('collapsed'), 'alt trigger has collapsed class')
done()
})

Expand Down Expand Up @@ -230,6 +264,40 @@ $(function () {
$target.click()
})

QUnit.test('should set aria-expanded="true" on all triggers targeting the collapse when the collapse is shown', function (assert) {
var done = assert.async()

var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')

$('<div id="test1"/>')
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.strictEqual($target.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
assert.strictEqual($alt.attr('aria-expanded'), 'true', 'aria-expanded on alt is "true"')
done()
})

$target.click()
})

QUnit.test('should set aria-expanded="false" on all triggers targeting the collapse when the collapse is hidden', function (assert) {
var done = assert.async()

var $target = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')

$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
.on('hidden.bs.collapse', function () {
assert.strictEqual($target.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
assert.strictEqual($alt.attr('aria-expanded'), 'false', 'aria-expanded on alt is "false"')
done()
})

$target.click()
})

QUnit.test('should change aria-expanded from active accordion target to "false" and set the newly active one to "true"', function (assert) {
var done = assert.async()

Expand Down Expand Up @@ -293,7 +361,7 @@ $(function () {
$target1.click()

setTimeout(function () {
assert.ok(!showFired, 'show event didn\'t fire')
assert.ok(!showFired, 'show event did not fire')
done()
}, 1)
})
Expand Down

0 comments on commit d5071b1

Please sign in to comment.