apex4x
Version:
The Comprehensive ARIA Development Suite
9 lines (8 loc) • 4.7 kB
JavaScript
/*@license
ARIA Button Module 1.1 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
*/
"setButton"in $A||($A.extend({setButton:function(t,c){this._4X&&(c=t,t=this._X),$A.isPlainObject(t)&&(t=(c=t).trigger||null);function l(a,t,e,i,r){var s,A,o;return!!e&&(s="radio"===(e=$A.getAttr(a,"role")),e="switch"===e,A=$A.hasAttr(a,"aria-pressed"),o=0,"true"===t?o=1:s||A||e||"mixed"!==t?t="false":o=2,$A.data(a,"check",o),i&&(s&&$A.isArray(r)&&$A.loop(r,function(t,e){e!==a&&$A.setAttr(e,"aria-checked","false")},"array"),$A.setAttr(a,A?"aria-pressed":"aria-checked",t),"mixed"===t?($A.remClass(a,c.toggleClassName||"pressed checked"),$A.toggleClass(a,c.partialClassName||"partially-checked",!0)):($A.remClass(a,c.partialClassName||"partially-checked"),$A.toggleClass(a,c.toggleClassName||(A?"pressed":"checked"),"true"===t))),o)}var u=[];if($A.query(t,c.context||document,function(t,e){var a,i,r,s,A,o=$A.isNode(e)&&($A.hasAttr(e,"data-controls")&&$A.morph($A.getAttr(e,"data-controls"))||$A.isFn(e.querySelector)&&e.querySelector("input"))||!1,d=$A.isNative(o)?o:$A.isNative(e)?e:null,n=$A.isNode(o)&&!$A.isNative(o)?o:$A.isNative(e)?null:e,$=!$A.isNode(d)&&$A.isNode(o)&&n!==e?o:null;$===n&&(n=e),$A.isNode(n)&&($A.isNode(d)&&$A.isNode(n)&&$A.bindObjects(d,n),o=l(n,$A.getAttr(n,"data-radio"),$A.hasAttr(n,"data-radio"),!0),e=l(n,$A.getAttr(n,"data-check"),$A.hasAttr(n,"data-check"),!0),a=l(n,$A.getAttr(n,"data-toggle"),$A.hasAttr(n,"data-toggle"),!0),i=l(n,$A.getAttr(n,"data-switch"),$A.hasAttr(n,"data-switch"),!0),r=$A.hasAttr(n,"data-required"),s=$A.hasAttr(n,"data-disabled"),$A.isNum(o)?($A.setAttr(n,{role:"radio","aria-checked":o?"true":"false"}),u.push(n)):$A.isNum(e)?($A.isNode(d)&&d.checked&&(e=1),$A.isNode($)&&($.id||($.id=$A.genId()),$A.setAttr(n,{"aria-flowto":$.id,"aria-controls":$.id})),A="false",1===e?A="true":2===e&&(A="mixed"),$A.setKBA11Y(n,"checkbox",function(t,e){var a=this,i=$A.isDisabled(a),r=l(a,$A.getAttr(a,"aria-checked"),$A.hasAttr(a,"aria-checked"));!i&&$A.isFn(c.onActivate)&&c.onActivate.apply(a,[t,a,e||d,r,function(t){l(a,t,!0,!0)}])}),$A.setAttr(n,{"aria-checked":A})):$A.isNum(i)?($A.isNode(d)&&d.checked&&(i=1),$A.isNode($)&&($.id||($.id=$A.genId()),$A.setAttr(n,{"aria-flowto":$.id,"aria-controls":$.id})),A=1===i?"true":"false",$A.setKBA11Y(n,"switch",function(t,e){var a=this,i=$A.isDisabled(a),r=l(a,$A.getAttr(a,"aria-checked"),$A.hasAttr(a,"aria-checked"));!i&&$A.isFn(c.onActivate)&&c.onActivate.apply(a,[t,a,e||d,r,function(t){l(a,t,!0,!0)}])}),$A.setAttr(n,{"aria-checked":A})):(!1!==a&&($A.setAttr(n,"aria-pressed",a?"true":"false"),$A.isNode($))&&($.id||($.id=$A.genId()),$A.setAttr(n,{"aria-flowto":$.id,"aria-controls":$.id})),$A.setKBA11Y(n,"button",function(t,e){var a=this,i=$A.isDisabled(a),r=l(a,$A.getAttr(a,"aria-pressed"),$A.hasAttr(a,"aria-pressed")),r=!1!==r?[t,a,e||$,r,function(t){l(a,t,!0,!0)}]:[t,a,e||$];!i&&$A.isFn(c.onActivate)&&c.onActivate.apply(a,r)})),!1===o&&!1===e&&!1===a&&!1===i||$A.on(n,"attributeChange",function(t,e,a,i,r,s,A){$A.isNode(d)&&(e=l(e,i,!0),d.checked=!!e)},{attributeFilter:["aria-checked","aria-pressed"]}),$A.svgFix(n),c.label&&$A.setAttr(n,"aria-label",c.label),($A.isNode(d)&&d.required||c.required||r)&&($A.setAttr(n,"aria-required","true"),$A.isNode(d))&&!d.required&&(d.required=!0),($A.isNode(d)&&d.disabled||c.disabled||s)&&($A.setAttr(n,"aria-disabled","true"),$A.isNode(d))&&!d.disabled&&(d.disabled=!0),$A.updateDisabled(n))}),u.length){var e=c.container&&$A.morph(c.container)||$A.closest(u[0],function(t){if("radiogroup"===$A.getAttr(t,"role"))return!0});if(!$A.isNode(e)){for(var a=u,i=[],r=[],s=($A.closest(a[0],function(t){if($A.isNode(t)&&i.push(t),t===document.body)return!0}),$A.closest(a[a.length-1],function(t){if($A.isNode(t)&&r.push(t),t===document.body)return!0}),i=i.reverse(),r=r.reverse(),null),A=0;A<i.length;A++)if(i[A]===r[A])s=i[A];else if(i[A]!==r[A])break;e=s}$A.setAttr(e,"role","radiogroup");new $A.RovingTabIndex($A.extend({nodes:u,startIndex:0,orientation:0,autoLoop:!0,onClick:function(t,e,a,i){var r=e,e=$A.isDisabled(r),s=l(r,$A.getAttr(r,"aria-checked"),$A.hasAttr(r,"aria-checked"));!e&&$A.isFn(c.onActivate)&&c.onActivate.apply(r,[t,r,i,s,function(t){l(r,t,!0,!0,a.nodes)}])},onSpace:function(t,e,a,i){a.onClick.apply(e,arguments)},onFocus:function(t,e,a,i){a.arrowPressed&&!$A.isTouch&&a.onClick.apply(e,arguments)}},c.extendRTI||{}))}return $A._XR.call(this,t)}}),$A.extend({setCheckbox:$A.setButton,setRadio:$A.setButton,setSwitch:$A.setButton,setToggle:$A.setButton}));