Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/_includes/js/collapse.html23
-rw-r--r--docs/examples/carousel/index.html4
-rw-r--r--docs/examples/dashboard/index.html4
-rw-r--r--docs/examples/jumbotron/index.html4
-rw-r--r--docs/examples/navbar-fixed-top/index.html4
-rw-r--r--docs/examples/navbar-static-top/index.html4
-rw-r--r--docs/examples/navbar/index.html4
-rw-r--r--docs/examples/non-responsive/index.html4
-rw-r--r--docs/examples/offcanvas/index.html4
-rw-r--r--docs/examples/starter-template/index.html4
-rw-r--r--docs/examples/sticky-footer-navbar/index.html4
-rw-r--r--docs/examples/theme/index.html4
-rw-r--r--js/collapse.js7
-rw-r--r--js/tests/unit/collapse.js67
14 files changed, 106 insertions, 35 deletions
diff --git a/docs/_includes/js/collapse.html b/docs/_includes/js/collapse.html
index 4e7fb450a6..5239256a62 100644
--- a/docs/_includes/js/collapse.html
+++ b/docs/_includes/js/collapse.html
@@ -17,7 +17,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Collapsible Group Item #1
</a>
</h4>
@@ -31,7 +31,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Collapsible Group Item #2
</a>
</h4>
@@ -45,7 +45,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Collapsible Group Item #3
</a>
</h4>
@@ -63,7 +63,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Collapsible Group Item #1
</a>
</h4>
@@ -77,7 +77,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Collapsible Group Item #2
</a>
</h4>
@@ -91,7 +91,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
- <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Collapsible Group Item #3
</a>
</h4>
@@ -107,13 +107,18 @@
<p>You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.</p>
{% highlight html %}
-<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo">
+<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo" aria-expanded="true" aria-controls="demo">
simple collapsible
</button>
<div id="demo" class="collapse in">...</div>
{% endhighlight %}
+ <div class="bs-callout bs-callout-warning">
+ <h4>Make expand/collapse controls accessible</h4>
+ <p>Be sure to add <code>aria-expanded</code> to the control element. This attribute explicitly defines the current state of the collapsible element to screen readers and similar assistive technologies. If the collapsible element is closed by default, it should have a value of <code>aria-expanded="false"</code>. If you've set the collapsible element to be open by default using the <code>in</code> class, set <code>aria-expanded="true"</code> on the control instead. The plugin will automatically toggle this attribute based on whether or not the collapsible element has been opened or closed.</p>
+ <p>Additionally, if your control element is targetting a single collapsible element – i.e. the <code>data-target</code> attribute is pointing to an <code>id</code> selector – you may add an additional <code>aria-controls</code> attribute to the control element, containing the <code>id</code> of the collapsible element. Modern screen readers and similar assistive technologies make use of this attribute to provide users with additional shortcuts to navigate directly to the collapsible element itself.</p>
+ </div>
<h2 id="collapse-usage">Usage</h2>
<p>The collapse plugin utilizes a few classes to handle the heavy lifting:</p>
@@ -125,7 +130,7 @@
<p>These classes can be found in <code>component-animations.less</code>.</p>
<h3>Via data attributes</h3>
- <p>Just add <code>data-toggle="collapse"</code> and a <code>data-target</code> to element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a CSS selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.</p>
+ <p>Just add <code>data-toggle="collapse"</code> and a <code>data-target</code> to the element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a CSS selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.</p>
<p>To add accordion-like group management to a collapsible control, add the data attribute <code>data-parent="#selector"</code>. Refer to the demo to see this in action.</p>
<h3>Via JavaScript</h3>
@@ -151,7 +156,7 @@ $('.collapse').collapse()
<td>parent</td>
<td>selector</td>
<td>false</td>
- <td>If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this dependent on the <code>panel</code> class)</td>
+ <td>If a selector is provided, then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this is dependent on the <code>panel</code> class)</td>
</tr>
<tr>
<td>toggle</td>
diff --git a/docs/examples/carousel/index.html b/docs/examples/carousel/index.html
index 193a92657e..3b185dcd92 100644
--- a/docs/examples/carousel/index.html
+++ b/docs/examples/carousel/index.html
@@ -35,7 +35,7 @@
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -43,7 +43,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/dashboard/index.html b/docs/examples/dashboard/index.html
index 6554d329be..f69735da15 100644
--- a/docs/examples/dashboard/index.html
+++ b/docs/examples/dashboard/index.html
@@ -32,7 +32,7 @@
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -40,7 +40,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Dashboard</a></li>
<li><a href="#">Settings</a></li>
diff --git a/docs/examples/jumbotron/index.html b/docs/examples/jumbotron/index.html
index 084dcfba13..81b8bfc495 100644
--- a/docs/examples/jumbotron/index.html
+++ b/docs/examples/jumbotron/index.html
@@ -32,7 +32,7 @@
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -40,7 +40,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<form class="navbar-form navbar-right" role="form">
<div class="form-group">
<input type="text" placeholder="Email" class="form-control">
diff --git a/docs/examples/navbar-fixed-top/index.html b/docs/examples/navbar-fixed-top/index.html
index 9d6fc3da3b..09022528ce 100644
--- a/docs/examples/navbar-fixed-top/index.html
+++ b/docs/examples/navbar-fixed-top/index.html
@@ -33,7 +33,7 @@
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -41,7 +41,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/navbar-static-top/index.html b/docs/examples/navbar-static-top/index.html
index 7bf0612a4c..77eba75edb 100644
--- a/docs/examples/navbar-static-top/index.html
+++ b/docs/examples/navbar-static-top/index.html
@@ -33,7 +33,7 @@
<nav class="navbar navbar-default navbar-static-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -41,7 +41,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/navbar/index.html b/docs/examples/navbar/index.html
index 18602664d4..77e4c50cfe 100644
--- a/docs/examples/navbar/index.html
+++ b/docs/examples/navbar/index.html
@@ -35,7 +35,7 @@
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -43,7 +43,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
diff --git a/docs/examples/non-responsive/index.html b/docs/examples/non-responsive/index.html
index 9438a4079f..dd95192562 100644
--- a/docs/examples/non-responsive/index.html
+++ b/docs/examples/non-responsive/index.html
@@ -35,7 +35,7 @@
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -43,7 +43,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/offcanvas/index.html b/docs/examples/offcanvas/index.html
index aaf875ba24..74d249d958 100644
--- a/docs/examples/offcanvas/index.html
+++ b/docs/examples/offcanvas/index.html
@@ -31,7 +31,7 @@
<nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -39,7 +39,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="collapse navbar-collapse">
+ <div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/starter-template/index.html b/docs/examples/starter-template/index.html
index 11b6c8c7b4..ec4deb3914 100644
--- a/docs/examples/starter-template/index.html
+++ b/docs/examples/starter-template/index.html
@@ -32,7 +32,7 @@
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -40,7 +40,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="collapse navbar-collapse">
+ <div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/sticky-footer-navbar/index.html b/docs/examples/sticky-footer-navbar/index.html
index 5633ca21f0..2e596ccd22 100644
--- a/docs/examples/sticky-footer-navbar/index.html
+++ b/docs/examples/sticky-footer-navbar/index.html
@@ -33,7 +33,7 @@
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -41,7 +41,7 @@
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
- <div class="collapse navbar-collapse">
+ <div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/docs/examples/theme/index.html b/docs/examples/theme/index.html
index 8e8c72a1d9..16f4fa3e3e 100644
--- a/docs/examples/theme/index.html
+++ b/docs/examples/theme/index.html
@@ -35,7 +35,7 @@
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
- <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
@@ -43,7 +43,7 @@
</button>
<a class="navbar-brand" href="#">Bootstrap theme</a>
</div>
- <div class="navbar-collapse collapse">
+ <div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
diff --git a/js/collapse.js b/js/collapse.js
index f96be28607..6a8377615e 100644
--- a/js/collapse.js
+++ b/js/collapse.js
@@ -56,6 +56,7 @@
this.$element
.removeClass('collapse')
.addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
this.transitioning = 1
@@ -91,6 +92,7 @@
this.$element
.addClass('collapsing')
.removeClass('collapse in')
+ .attr('aria-expanded', false)
this.transitioning = 1
@@ -161,8 +163,9 @@
var $parent = parent && $(parent)
if (!data || !data.transitioning) {
- if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
- $this.toggleClass('collapsed', $target.hasClass('in'))
+ if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed').attr('aria-expanded', false)
+ var isCollapsed = $target.hasClass('in')
+ $this.toggleClass('collapsed', isCollapsed).attr('aria-expanded', !isCollapsed)
}
Plugin.call($target, option)
diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js
index ffa8f7e6db..5d5849388c 100644
--- a/js/tests/unit/collapse.js
+++ b/js/tests/unit/collapse.js
@@ -75,7 +75,7 @@ $(function () {
test('should remove "collapsed" class from target when collapse is shown', function () {
stop()
- var $target = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
+ var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
@@ -200,4 +200,67 @@ $(function () {
$target3.click()
})
-})
+ test('should set aria-expanded="true" on target when collapse is shown', function () {
+ stop()
+
+ var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
+
+ $('<div id="test1"/>')
+ .appendTo('#qunit-fixture')
+ .on('show.bs.collapse', function () {
+ equal($target.attr('aria-expanded'), 'true', 'aria-expanded on target is "true"')
+ start()
+ })
+
+ $target.click()
+ })
+
+ test('should set aria-expanded="false" on target when collapse is hidden', function () {
+ stop()
+
+ var $target = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
+
+ $('<div id="test1" class="in"/>')
+ .appendTo('#qunit-fixture')
+ .on('hide.bs.collapse', function () {
+ equal($target.attr('aria-expanded'), 'false', 'aria-expanded on target is "false"')
+ start()
+ })
+
+ $target.click()
+ })
+
+ test('should change aria-expanded from active accordion target to "false" and set the newly active one to "true"', function () {
+ stop()
+
+ var accordionHTML = '<div id="accordion">'
+ + '<div class="accordion-group"/>'
+ + '<div class="accordion-group"/>'
+ + '<div class="accordion-group"/>'
+ + '</div>'
+ var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.accordion-group')
+
+ var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
+
+ $('<div id="body1" aria-expanded="true" class="in"/>').appendTo($groups.eq(0))
+
+ var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
+
+ $('<div id="body2" aria-expanded="false"/>').appendTo($groups.eq(1))
+
+ var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))
+
+ $('<div id="body3" aria-expanded="false"/>')
+ .appendTo($groups.eq(2))
+ .on('show.bs.collapse', function () {
+ equal($target1.attr('aria-expanded'), 'false', 'inactive target 1 has aria-expanded="false"')
+ equal($target2.attr('aria-expanded'), 'false', 'inactive target 2 has aria-expanded="false"')
+ equal($target3.attr('aria-expanded'), 'true', 'active target 3 has aria-expanded="false"')
+
+ start()
+ })
+
+ $target3.click()
+ })
+
+}) \ No newline at end of file