apex4x
Version:
The Comprehensive ARIA Development Suite
9 lines (8 loc) • 5.69 kB
JavaScript
/*@license
ARIA Menu Module 3.4 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
*/
!function(){var t;"setMenu"in $A||($A.dcMenus=[],$A.addWidgetProfile("Menu",{configure:function(e){return{horizontalHelpTip:"To move through items, press left or right arrow.",verticalHelpTip:"To move through items, press up or down arrow.",toggleHide:!0,forceFocus:!0,forceFocusWithin:!0,returnFocus:!0,preload:!0,preloadImages:!0,preloadCSS:!0,className:"menu",escToClose:!0,click:function(e,t){e.stopPropagation()},storeData:!0}},role:function(e){return{role:"menu","aria-orientation":$A.getOrientation(e.RTI.nodes).orientation}},beforeRender:function(e){if(e.isTopMenu)for(var t=0;t<$A.dcMenus.length;t++){var n=$A.dcMenus[t];n&&e!==n&&(n.loaded?n.bypass():n.isAnimating&&n.loading&&$A.Velocity&&(n.abortLoad=!0,$A.Velocity.animate(n.wrapper,"finish"),n.css(n.style)))}},afterRender:function(e){$A.isTouch||setTimeout(function(){$A.announce(e["horizontal"===e.getAttr("aria-orientation")?"horizontalHelpTip":"verticalHelpTip"])},1),e.isTopMenu||$A.setAttr(e.triggerNode,"aria-expanded","true")},beforeRemove:function(e){$A.loop(e.RTI.children,function(e,t){t.DC.remove()},"map")},afterRemove:function(e){e.isTopMenu||$A.setAttr(e.triggerNode,"aria-expanded","false")}}),t=$A.isIE(),$A.extend({setMenu:function(e,u){if(this._4X&&(u=e,e=this._X),!(e=$A.isPlainObject(e)?(u=e).trigger||null:e))return null;u=u||{};var a=null,o=$A.extend(!0,{parent:"ul",child:"a",parse:function(e){var n;return t?(n=[],$A.query(e.children,function(e,t){t=$A.first(t,function(e){if(e.nodeName.toLowerCase()===o.child)return!0});$A.isNode(t)&&n.push(t)}),n):e.querySelectorAll(":scope > * > "+o.child)}},u.tag||{}),c=function(n,e,t,r,o){var i;return t?(t="menuitemradio"===$A.getAttr(n,"role"),i=0,"true"===e?i=1:t||"mixed"!==e?e="false":i=2,$A.data(n,"check",i),r&&(t&&$A.isArray(o)&&$A.loop(o,function(e,t){$A.hasAttr(t,"aria-checked")&&t!==n&&$A.setAttr(t,"aria-checked","false")},"array"),$A.setAttr(n,"aria-checked",e)),i):(r=$A.data(n,"check"),!!$A.isNum(r)&&r)},s=function(e,t,n,r){if($A.isNode(e)){var i,a=n||$A.getAttr(e,"data-menu")||$A.next(e,function(e){if(e.nodeName.toLowerCase()===o.parent)return!0}),a=$A.morph(a);if($A.isNode(a))return $A.setAttr(e,"aria-haspopup","true"),r||$A.setAttr(e,"aria-expanded","false"),n=o.parse(a),$A.svgFix(a),i=$A.toDC($A.extend({trigger:e,content:a,on:"openmenu",widgetType:"Menu",isTopMenu:r,autoCloseSameWidget:!1,toggleHide:!0,getState:c},u)),t&&i.map({parent:t.DC}),i.RTI=new $A.RovingTabIndex($A.extend({DC:i,parent:t,trigger:e,nodes:n,startIndex:0,orientation:2,autoSwitch:u.autoSwitch||"semi",autoLoop:!0,onOpen:function(e,r,o,t,n){var i=$A.isDisabled(this),a=c(r);i&&!n?$A.isDC(o.DC)&&o.DC.top.remove():$A.isDC(t)?(t.render(),e.preventDefault()):n||$A.isFn(u.onActivate)&&u.onActivate.apply(this,[e,r,o,t||$A.boundTo(r),a,function(e){var t=$A.getAttr(r,"role"),n=-1!==["menuitemradio"].indexOf(t),t=-1!==["menuitemcheckbox"].indexOf(t);(n||t)&&c(r,e,!0,!0,n?o.nodes:null)},"menuitemradio"===$A.getAttr(r,"role")])},onSpace:function(e,t,n,r){$A.isDC(r)&&r.render(),e.preventDefault()},onEnter:function(e,t,n,r){$A.isDC(r)&&r.render(),e.preventDefault()},onClose:function(e,t,n,r,o){$A.isDC(n.DC)&&n.parent&&n.DC.remove(function(){setTimeout(function(){$A.announce(n.parent.DC["horizontal"===n.parent.DC.getAttr("aria-orientation")?"horizontalHelpTip":"verticalHelpTip"])},1)}),e.preventDefault()},onEsc:function(e,t,n,r){$A.isDC(n.DC)&&n.DC.remove(),e.preventDefault()},onShiftTab:function(e,t,n,r){$A.isDC(n.DC)&&n.DC.top.remove(),e.preventDefault()},onTab:function(e,t,n,r){$A.isDC(n.DC)&&n.DC.top.remove(),e.preventDefault()}},u.extendRTI||{})),$A.loop(n,function(e,t){s(t,i.RTI);var n,r=c(t,$A.getAttr(t,"data-radio"),$A.hasAttr(t,"data-radio")),o=c(t,$A.getAttr(t,"data-check"),$A.hasAttr(t,"data-check")),u=$A.isFn(t.querySelector)&&t.querySelector("input")||!1;$A.isNum(r)?(u&&u.checked&&(r=1),$A.setAttr(t,{role:"menuitemradio","aria-checked":r?"true":"false"})):$A.isNum(o)?(n="false",1===(o=u&&u.checked?1:o)?n="true":2===o&&(n="mixed"),$A.setAttr(t,{role:"menuitemcheckbox","aria-checked":n})):$A.setAttr(t,"role","menuitem"),!1===r&&!1===o||$A(t).on("attributeChange",function(e,t,n,r,o,i,a){$A.isNode(u)&&(t=c(t,r,!0),u.checked=!!t)},{attributeFilter:["aria-checked"]}),$A.closest(t,function(e){if(e===a)return!0;$A.setAttr(e,"role","presentation")})},"array"),$A.updateDisabled(n),i}},A=null;return $A.query(e,u.context||document,function(e,n){function t(e){var t;A=s(n,null,e,!0),$A.isDC(A.top)&&-1===$A.inArray(A.top,$A.dcMenus)&&$A.dcMenus.push(A.top),$A.on(window.document,"click.closemenus",function(){A.top.remove()}),u.rightClick||(u.leftClick=!0),u.leftClick&&(t={keydown:function(e,t){var n=$A.keyEvent(e);40!==n&&13!==n&&32!==n||(t.render(),e.stopPropagation(),e.preventDefault())},click:function(e,t){t.render(),e.stopPropagation(),e.preventDefault()}}),u.rightClick&&(t={contextmenu:function(e,t){e.preventDefault()},mouseup:function(e,t){2===($A.isNum(e.which)?e.which<2?1:2===e.which?3:2:e.button<2?1:4===e.button?3:2)&&(t.render(),e.preventDefault())},keydown:function(e,t){var n=$A.keyEvent(e);(93===n||e.shiftKey&&121===n)&&(t.render(),e.preventDefault())}}),$A.on(n,t)}var r=u.fetch&&u.fetch.url||$A.getAttr(n,"data-menu"),o=u.fetch&&u.fetch.data&&u.fetch.data.selector||$A.getSelectorFromURI(r),i=!(!o||!$A.isPath(r));u.fetch=null,i?(u.toggleHide=!1,i=$A.toNode(),$A.load(r,i,{selector:o},function(e){t(a=e)})):t(a)}),$A._XR.call(this,A)}}))}();