--- /dev/null
+<ul class="accordion" data-accordion role="tablist">
+ <li class="accordion-navigation">
+ <a href="#panel1d" role="tab" id="panel1d-heading" aria-controls="panel1d">Accordion 1</a>
+ <div id="panel1d" class="content active" role="tabpanel" aria-labelledby="panel1d-heading">
+ Panel 1. Lorem ipsum dolor
+ </div>
+ </li>
+ <li class="accordion-navigation">
+ <a href="#panel2d" role="tab" id="panel2d-heading" aria-controls="panel2d">Accordion 2</a>
+ <div id="panel2d" class="content" role="tabpanel" aria-labelledby="panel2d-heading">
+ Panel 2. Lorem ipsum dolor
+ </div>
+ </li>
+ <li class="accordion-navigation">
+ <a href="#panel3d" role="tab" id="panel3d-heading" aria-controls="panel3d">Accordion 3</a>
+ <div id="panel3d" class="content" role="tabpanel" aria-labelledby="panel3d-heading">
+ Panel 3. Lorem ipsum dolor
+ </div>
+ </li>
+</ul>
\ No newline at end of file
***
+## Accessibility
+
+For accessible accordions use the markup below, which adds a some of ARIA attributes and roles. Some attributes are automatically added and toggled by the JavaScript.
+
+<div class="row">
+ <div class="large-6 columns">
+ <h4>HTML</h4>
+{{#markdown}}
+```html
+{{> examples_accordion_aria}}
+```
+{{/markdown}}
+ </div>
+ <div class="large-6 columns">
+ <h4>Rendered HTML</h4>
+ {{> examples_accordion_aria}}
+ </div>
+</div>
+
+***
+
### Callbacks
There are two ways to bind to callbacks in your tabs.
this.bindings(method, options);
},
- events : function () {
+ events : function (instance) {
var self = this;
var S = this.S;
+ self.create(this.S(instance));
+
S(this.scope)
.off('.fndtn.accordion')
.on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) {
if (settings.toggleable && target.is(active_content)) {
target.parent('.accordion-navigation').toggleClass(settings.active_class, false);
target.toggleClass(settings.active_class, false);
+ S(this).attr('aria-expanded', function(i, attr){
+ return attr === 'true' ? 'false' : 'true';
+ });
settings.callback(target);
target.triggerHandler('toggled', [accordion]);
accordion.triggerHandler('toggled', [target]);
if (!settings.multi_expand) {
siblings.removeClass(settings.active_class);
aunts.removeClass(settings.active_class);
+ aunts.children('a').attr('aria-expanded','false');
}
target.addClass(settings.active_class).parent().addClass(settings.active_class);
settings.callback(target);
target.triggerHandler('toggled', [accordion]);
accordion.triggerHandler('toggled', [target]);
+ S(this).attr('aria-expanded','true');
});
},
+ create: function($instance) {
+ var self = this,
+ accordion = $instance,
+ aunts = $('> .accordion-navigation', accordion),
+ settings = accordion.data(self.attr_name(true) + '-init') || self.settings;
+
+ aunts.children('a').attr('aria-expanded','false');
+ aunts.has('.' + settings.content_class + '.' + settings.active_class).children('a').attr('aria-expanded','true');
+
+ if (settings.multi_expand) {
+ $instance.attr('aria-multiselectable','true');
+ }
+ },
+
off : function () {},
reflow : function () {}