-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathjquery.accAccordion.min.js
11 lines (11 loc) · 5.27 KB
/
jquery.accAccordion.min.js
1
2
3
4
5
6
7
8
9
10
11
/*!
* jQuery Accessible Accordion
*
* @description: Creates an accessible accordion - collapsible content panels
* @source: https://github.com/nomensa/jquery.accessible-accordion.git
* @version: '0.1.0'
*
* @author: Nomensa
* @license: licenced under MIT - http://opensource.org/licenses/mit-license.php
*/
!function(a,b){"use strict";function c(c,d){function g(){a("> div",k.element).each(function(b,c){a(c).addClass(k.options.panelClass).attr({"aria-hidden":"true","aria-labelledby":k.options.panelControlId+f+b,id:k.options.panelId+f+b}).hide(),a(c).prev().addClass(k.options.panelControlClass).attr({"aria-controls":k.options.panelId+f+b,"aria-expanded":"false","aria-pressed":"false",id:k.options.panelControlId+f+b,role:"button",tabindex:0}).click(h(k)).keydown(i(k)).wrapInner("<span />")}),k.options.defaultPanel!==!1&&k.open(a("."+k.options.panelControlClass,k.element).eq(k.options.defaultPanel)),k.element.addClass(k.options.containerClass),k.options.horizontal===!0&&(k.element.addClass(k.options.containerClassHorizontal),k.options.activeControlHidden===!0&&j(),k.calculateWidths(),k.calculateHeights()),f++,k.options.callbackCreate()}function h(){return k.handleClick=function(b){b.preventDefault(),k.toggle(a(this))},k.handleClick}function i(){return k.handleKeyDown=function(b){switch(b.which){case 37:case 38:b.preventDefault(),0!==a(this).prevAll("."+k.options.panelControlClass).eq(0).length?a(this).prevAll("."+k.options.panelControlClass).eq(0).focus():a(k.element).find("."+k.options.panelControlClass).last().focus();break;case 39:case 40:b.preventDefault(),0!==a(this).nextAll("."+k.options.panelControlClass).eq(0).length?a(this).nextAll("."+k.options.panelControlClass).eq(0).focus():a(k.element).find("."+k.options.panelControlClass).first().focus();break;case 32:case 13:b.preventDefault(),k.toggle(a(this))}},k.handleKeyDown}function j(){var b;k.element.find("."+k.options.panelClass).each(function(){b=a(this).prev("."+k.options.panelControlClass).text(),a(this).prepend('<p aria-hidden="true" class="'+k.options.panelTitleClass+'">'+b+"</p>")})}var k=this;k.element=a(c),k.options=a.extend({},e,d),k.section=k.element.find("."+k.options.sectionClass),k.options.horizontal===!0&&a(b).on("debouncedresize",function(){k.calculateWidths(),k.calculateHeights()}),g()}var d,e,f=0;d="accAccordion",e={activeControlHidden:!1,defaultPanel:!1,callbackCreate:function(){},callbackDestroy:function(){},containerClass:"js-accordion",containerClassHorizontal:"js-accordion--horizontal",horizontal:!1,panelClass:"js-accordion_panel",panelId:"js-accordion_panel--",panelControlClass:"js-accordion_control",panelControlActiveClass:"js-accordion_control--active",panelControlHiddenClass:"js-accordion_control--hidden",panelControlId:"js-accordion_control--",panelTitleClass:"js-accordion_panel-title",panelWidth:33},c.prototype.calculateWidths=function(){var a,b=this.element.find("."+this.options.panelControlClass),c=100/a,d=this.element.find("."+this.options.panelClass),e=this.options.panelWidth;a=this.options.activeControlHidden===!0?b.length-1:b.length,c=(100-e)/a,d.css("width",e+"%"),b.css("width",c+"%")},c.prototype.calculateHeights=function(){var a,b,c=this.element.find("."+this.options.panelControlClass);c.css("min-height",0),b=this.element.find('[aria-hidden="false"]'),a=b.outerHeight(),c.css("min-height",a)},c.prototype.toggle=function(a){"false"===a.attr("aria-pressed")?this.open(a):this.close(a)},c.prototype.open=function(b){var c=this.options.panelControlActiveClass,d="#"+a(b).attr("aria-controls");0!==a('> [aria-pressed="true"]',this.element).length&&(a('> [aria-pressed="true"]',this.element).attr({"aria-expanded":"false","aria-pressed":"false"}).removeClass(c),a('> [aria-hidden="false"]',this.element).attr("aria-hidden","true").hide()),a(d,this.element).attr("aria-hidden","false").show(),a(b,this.element).addClass(c).attr({"aria-expanded":"true","aria-pressed":"true"}),this.options.horizontal===!0&&(this.options.activeControlHidden===!0&&(a("."+this.options.panelControlHiddenClass,this.element).removeClass(this.options.panelControlHiddenClass).attr("tabindex",0),a(b,this.element).addClass(this.options.panelControlHiddenClass).attr("tabindex",-1)),this.calculateWidths(),this.calculateHeights())},c.prototype.close=function(b){if(this.options.activeControlHidden)return!1;var c=this.options.panelControlActiveClass,d="#"+a(b).attr("aria-controls");a(d,this.element).attr("aria-hidden","true").hide(),a(b,this.element).attr({"aria-expanded":"false","aria-pressed":"false"}).removeClass(c)},c.prototype.destroy=function(){var b=this;this.element.removeAttr("style").removeClass(this.options.containerClass).removeClass(this.options.containerClassHorizontal),a("> div",this.element).prev().each(function(c,d){var e=a(d).text();a(d).removeAttr("aria-controls aria-expanded aria-pressed id role style tabindex").removeClass(b.options.panelControlClass).removeClass(b.options.panelControlActiveClass).removeClass(b.options.panelControlHiddenClass).off().empty().text(e)}),a("> div",this.element).each(function(c,d){a(d).removeAttr("aria-hidden aria-labelledby id style").removeClass(b.options.panelClass)}),a(this.element).find("."+this.options.panelTitleClass).remove(),this.options.callbackDestroy()},a.fn[d]=function(b){return this.each(function(){a.data(this,"plugin_"+d)||a.data(this,"plugin_"+d,new c(this,b))})}}(jQuery,window,document);