2 lines
6.2 KiB
JavaScript
2 lines
6.2 KiB
JavaScript
/*! elementor-pro - v3.21.0 - 15-04-2024 */
|
|
"use strict";(self.webpackChunkelementor_pro=self.webpackChunkelementor_pro||[]).push([[244],{6921:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class MenuTitleKeyboardHandler extends elementorModules.frontend.handlers.Base{__construct(){super.__construct(...arguments),this.focusableElementSelector="audio, button, canvas, details, iframe, input, select, summary, textarea, video, [accesskey], [contenteditable], a[href], area[href], [tabindex]",this.handleMenuToggleKeydown=this.handleMenuToggleKeydown.bind(this)}getDefaultSettings(){return{selectors:{widgetInnerWrapper:".e-n-menu",menuItemWrapper:".e-n-menu-title",menuItemElement:".e-focus",itemContainer:".e-n-menu-content > .e-con",menuToggle:".e-n-menu-toggle"},ariaAttributes:{titleStateAttribute:"aria-expanded",activeTitleSelector:'[aria-expanded="true"]',titleControlAttribute:"aria-controls"},datasets:{titleIndex:"data-focus-index"}}}getDefaultElements(){const e=this.getSettings("selectors");return{$menuItemWrappers:this.findElement(e.menuItemWrapper),$menuItemElements:this.findElement(e.menuItemElement),$itemContainers:this.findElement(e.itemContainer),$focusableContainerElements:this.getFocusableElements(this.findElement(e.itemContainer)),$menuToggle:this.findElement(e.menuToggle)}}getFocusableElements(e){return e.find(this.focusableElementSelector).not('[disabled], [inert], [tabindex="-1"]')}getTitleIndex(e){const{titleIndex:t}=this.getSettings("datasets");return parseInt(e?.getAttribute(t))}getTitleFilterSelector(e){const{titleIndex:t}=this.getSettings("datasets");return`[${t}="${e}"]`}getActiveTitleElement(){const e=this.getSettings("ariaAttributes").activeTitleSelector;return this.elements.$menuItemElements.filter(e)}onInit(){super.onInit(...arguments);let e=1;this.elements.$menuItemElements.each(((t,n)=>{n.setAttribute(this.getSettings("datasets").titleIndex,e++)}))}getTitleEvents(){return{keydown:this.handleTitleKeyboardNavigation.bind(this)}}getContentElementEvents(){return{keydown:this.handleContentElementKeyboardNavigation.bind(this)}}bindEvents(){this.elements.$menuItemElements.on(this.getTitleEvents()),this.elements.$focusableContainerElements.on(this.getContentElementEvents()),this.elements.$menuToggle.on("keydown",this.handleMenuToggleKeydown)}unbindEvents(){this.elements.$menuItemElements.off(),this.elements.$focusableContainerElements.off(this.getContentElementEvents()),this.elements.$menuToggle.off("keydown",this.handleMenuToggleKeydown)}handleMenuToggleKeydown(e){"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.closeMenuDropdown())}handleTitleKeyboardNavigation(e){switch(e.key){case"Tab":e.shiftKey?this.closeActiveContentElements():this.handleTitleTab(e);break;case"Home":case"End":this.handleTitleHomeOrEndKey(e);break;case"Enter":case" ":this.handleTitleActivationKey(e);break;case"Escape":this.handleTitleEscapeKey(e)}}handleTitleTab(e){const t=this.getTitleIndex(e.currentTarget);this.maybeFocusMenuToggle(e,t);const n=this.getActiveTitleElement(),s=t===(this.getTitleIndex(n[0])||!1),i=n.attr(this.getSettings("ariaAttributes").titleControlAttribute),l=this.elements.$itemContainers.filter(`#${i}`),o=0!==this.getFocusableElements(l).length;s&&o?this.focusFirstFocusableContainerElement(e,i):this.closeActiveContentElements()}maybeFocusMenuToggle(e,t){if(!this.isLastTitle(t)||!this.isDropdownLayout())return;const n=this.getSettings("ariaAttributes").titleStateAttribute,s="true"===e.currentTarget.getAttribute(n),i=0!==this.getFocusableElements(this.elements.$itemContainers.last()).length;s&&i||(this.setFocusToMenuToggle(),e.preventDefault(),e.stopPropagation())}setFocusToMenuToggle(){const e=this.getSettings("selectors");this.$element.find(e.menuToggle).trigger("focus")}isDropdownLayout(){const e=this.getSettings("selectors");return"dropdown"===this.$element.find(e.widgetInnerWrapper).attr("data-layout")}closeMenuDropdown(){elementorFrontend.elements.$window.trigger("elementor/mega-menu/dropdown-toggle-by-keyboard",{widgetId:this.getID(),show:!1})}handleTitleHomeOrEndKey(e){e.preventDefault();const t=this.getTitleIndex(e.currentTarget)||1,n=this.elements.$menuItemElements.length,s=this.getTitleIndexFocusUpdated(e,t,n);this.setTitleFocus(s),e.stopPropagation()}handleTitleActivationKey(e){if(e.preventDefault(),this.handleTitleLinkEnterOrSpaceEvent(e))return;const t=this.getTitleIndex(e.currentTarget);elementorFrontend.elements.$window.trigger("elementor/nested-elements/activate-by-keyboard",{widgetId:this.getID(),titleIndex:t})}setTitleFocus(e){this.elements.$menuItemElements.filter(this.getTitleFilterSelector(e)).trigger("focus")}isLastTitle(e){return this.elements.$menuItemElements.length===e}handleTitleLinkEnterOrSpaceEvent(e){const t="a"===e?.currentTarget?.tagName?.toLowerCase();return!elementorFrontend.isEditMode()&&t&&(e?.currentTarget?.click(),e.stopPropagation()),t}handleTitleEscapeKey(e){e.preventDefault(),e.stopPropagation(),this.isDropdownLayout()&&(elementorFrontend.elements.$window.trigger("elementor/mega-menu/dropdown-toggle-by-keyboard",{widgetId:this.getID()}),this.setFocusToMenuToggle()),elementorFrontend.elements.$window.trigger("elementor/nested-elements/activate-by-keyboard",{widgetId:this.getID()})}handleContentElementKeyboardNavigation(e){switch(e.key){case"Tab":const t=e.shiftKey?"previous":"next";this.handleContentElementTabEvents(e,t);break;case"Escape":e.preventDefault(),e.stopPropagation(),this.handleContentElementEscapeEvents(e)}}handleContentElementTabEvents(e,t){const n=jQuery(e.currentTarget),s=this.getSettings("selectors").itemContainer,i=n.closest(s),l=this.getFocusableElements(i);let o;o="previous"===t?l.first():l.last();if(!n.is(o))return;e.preventDefault();const r=this.getActiveTitleElement(),a=this.getTitleIndex(r[0]);this.setTitleFocus(a),e.stopPropagation()}handleContentElementEscapeEvents(){this.getActiveTitleElement().trigger("focus"),this.closeActiveContentElements()}focusFirstFocusableContainerElement(e,t){const n=`#${t}`,s=this.elements.$itemContainers.filter(n),i=this.getFocusableElements(s).first();0!==i.length&&(e.preventDefault(),i[0]?.focus(),e.stopPropagation())}closeActiveContentElements(){elementorFrontend.elements.$window.trigger("elementor/nested-elements/activate-by-keyboard",{widgetId:this.getID()})}}t.default=MenuTitleKeyboardHandler}}]); |