From: Marius Olbertz Date: Thu, 5 Mar 2015 11:13:23 +0000 (+0100) Subject: Accessibility for accordions X-Git-Tag: v5.5.2~68^2~7^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F6365%2Fhead;p=thirdparty%2Ffoundation%2Ffoundation-sites.git Accessibility for accordions --- diff --git a/doc/includes/accordion/examples_accordion_aria.html b/doc/includes/accordion/examples_accordion_aria.html new file mode 100644 index 000000000..7cc4edc6e --- /dev/null +++ b/doc/includes/accordion/examples_accordion_aria.html @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/doc/pages/components/accordion.html b/doc/pages/components/accordion.html index 1a61edfd4..78317d89a 100644 --- a/doc/pages/components/accordion.html +++ b/doc/pages/components/accordion.html @@ -54,6 +54,27 @@ You can name the accordion so that it can be spread across different parent cont *** +## 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. + +
+
+

HTML

+{{#markdown}} +```html +{{> examples_accordion_aria}} +``` +{{/markdown}} +
+
+

Rendered HTML

+ {{> examples_accordion_aria}} +
+
+ +*** + ### Callbacks There are two ways to bind to callbacks in your tabs. diff --git a/js/foundation/foundation.accordion.js b/js/foundation/foundation.accordion.js index a2ae623f6..5ee4c6a70 100644 --- a/js/foundation/foundation.accordion.js +++ b/js/foundation/foundation.accordion.js @@ -18,9 +18,11 @@ 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) { @@ -42,6 +44,9 @@ 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]); @@ -51,15 +56,31 @@ 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 () {}