apex4x
Version:
The Comprehensive ARIA Development Suite
9 lines (8 loc) • 2.66 kB
JavaScript
/*@license
ARIA Tab Module 2.0 for Apex 4X
Author: Bryan Garaventa (https://www.linkedin.com/in/bgaraventa)
Home: WhatSock.com : Download: https://github.com/whatsock/apex
License: MIT (https://opensource.org/licenses/MIT)
Required dependencies: RovingTabIndex.js
*/
"setTab"in $A||$A.import("RovingTabIndex",{name:"TabModule",props:props,once:!0,call:function(e){$A.addWidgetProfile("Tab",{configure:function(e){return{exposeBounds:!0,isTab:!0,ariaControls:!0,ariaLabelledby:!0,isToggle:!1,allowMultiple:!1,isFocusable:!0,returnFocus:!1,on:"activatetab",click:function(e,t){e.stopPropagation()},afterRender:function(e,t){e.trackPage&&$A.setPage(e.id)}}},role:function(e){return{role:"tabpanel"}},duringRender:function(e,t){$A.setAttr(e.triggerNode,{"aria-expanded":"true","aria-selected":"true"})},afterRender:function(e,t){$A.setAttr(e.triggerNode,{"aria-describedby":e.containerId})},afterRemove:function(e,t){$A.setAttr(e.triggerNode,{"aria-expanded":"false","aria-selected":"false"}),$A.remAttr(e.triggerNode,"aria-describedby")}}),$A.extend({setTab:function(e,o){if(this._4X&&(o=e,e=this._X),!(e=$A.isPlainObject(e)?(o=e).trigger||o.content||null:e))return null;var t=null,a=($A.isArray(e)?t=e:$A.isStr(e)&&(t=(o.context||document).querySelectorAll(e)),o.container&&$A.morph(o.container)||$A.closest(t[0],function(e){if("tablist"===$A.getAttr(e,"role"))return!0}));if(!$A.isNode(a)){for(var n=[],r=[],i=($A.closest(t[0],function(e){if($A.isNode(e)&&n.push(e),e===document.body)return!0}),$A.closest(t[t.length-1],function(e){if($A.isNode(e)&&r.push(e),e===document.body)return!0}),n=n.reverse(),r=r.reverse(),null),s=0;s<n.length;s++)if(n[s]===r[s])i=n[s];else if(n[s]!==r[s])break;a=i}$A.setAttr(a,"role","tablist");var l=[],d=null,u=0,e=($A.loop(t,function(e,t){$A.svgFix(t);var n=[],r=($A.isNode(a)&&$A.closest(t,function(e){if(e===a)return!0;n.push(e)}),a!==document.body&&$A.isNode(a)&&n.length&&$A.setAttr(n,"role","presentation"),t.id||(t.id=$A.genId()),$A.setAttr(t,{role:"tab","aria-expanded":"false","aria-selected":"false"}),$A.get($A.getAttr(t,"data-root"))),r=$A.toDC(t,$A.extend({widgetType:"Tab",root:r,append:!0},o||{}));l.push(r),$A.hasAttr(t,"data-active")&&(d=r,u=e)},"array"),$A.map({siblings:l}),new $A.RovingTabIndex($A.extend({nodes:t,startIndex:u,orientation:1,autoSwitch:o.autoSwitch||"full",autoLoop:!0,onClick:function(e,t,n,r){r.render(),e.preventDefault()},onSpace:function(e,t,n,r){n.onClick.apply(t,arguments),e.preventDefault()},onEnter:function(e,t,n,r){n.onClick.apply(t,arguments),e.preventDefault()}},o.extendRTI||{})));return $A.updateDisabled(e.nodes),!$A.hasHash(l)&&$A.isDC(d)&&d.render(),1===l.length?l[0]:l}})}});