/* global kadenceConfig */ /** * File navigation.js. * * Handles toggling the navigation menu for small screens and enables TAB key * navigation support for dropdown menus. */ (function() { 'use strict'; window.kadence = { /** * Function to init different style of focused element on keyboard users and mouse users. */ initOutlineToggle: function() { document.body.addEventListener( 'keydown', function() { document.body.classList.remove( 'hide-focus-outline' ); }); document.body.addEventListener( 'mousedown', function() { document.body.classList.add( 'hide-focus-outline' ); }); }, /** * Get element's offset. */ getOffset: function( el ) { if ( el instanceof HTMLElement ) { var rect = el.getBoundingClientRect(); return { top: rect.top + window.pageYOffset, left: rect.left + window.pageXOffset } } return { top: null, left: null }; }, /** * traverses the DOM up to find elements matching the query * * @param {HTMLElement} target * @param {string} query * @return {NodeList} parents matching query */ findParents: function( target, query ) { var parents = []; // recursively go up the DOM adding matches to the parents array function traverse( item ) { var parent = item.parentNode; if ( parent instanceof HTMLElement ) { if ( parent.matches( query ) ) { parents.push( parent ); } traverse( parent ); } } traverse( target ); return parents; }, /** * Toggle an attribute. */ toggleAttribute: function( element, attribute, trueVal, falseVal ) { if ( trueVal === undefined ) { trueVal = true; } if ( falseVal === undefined ) { falseVal = false; } if ( element.getAttribute( attribute ) !== trueVal ) { element.setAttribute( attribute, trueVal ); } else { element.setAttribute( attribute, falseVal ); } }, /** * Initiate the script to process all * navigation menus with submenu toggle enabled. */ initNavToggleSubmenus: function() { var navTOGGLE = document.querySelectorAll( '.nav--toggle-sub' ); // No point if no navs. if ( ! navTOGGLE.length ) { return; } for ( let i = 0; i < navTOGGLE.length; i++ ) { window.kadence.initEachNavToggleSubmenu( navTOGGLE[ i ] ); } }, initEachNavToggleSubmenu: function( nav ) { // Get the submenus. var SUBMENUS = nav.querySelectorAll( '.menu ul' ); // No point if no submenus. if ( ! SUBMENUS.length ) { return; } for ( let i = 0; i < SUBMENUS.length; i++ ) { var parentMenuItem = SUBMENUS[ i ].parentNode; let dropdown = parentMenuItem.querySelector( '.dropdown-nav-toggle' ); // If dropdown. if ( dropdown ) { var dropdown_label = parentMenuItem.querySelector( '.nav-drop-title-wrap' ).firstChild.textContent.trim(); var dropdownBtn = document.createElement( 'BUTTON' ); // Create a