📄 Viewing: goldy-mex-navigation.js

/**
 * File navigation.js.
 *
 * Handles toggling the navigation menu for small screens and enables TAB key
 * navigation support for dropdown menus.
 */
( function() {
	const siteNavigation = document.getElementById( 'masthead' );

	// Return early if the navigation don't exist.
	if ( ! siteNavigation ) {
		return;
	}

	const button = siteNavigation.getElementsByClassName( 'menu-toggle' )[ 0 ];
	// Return early if the button don't exist.
	if ( 'undefined' === typeof button ) {
		return;
	}

	const menu = document.getElementById( 'primary-menu' );
	//const menu = siteNavigation.getElementsByTagName( 'ul' )[ 0 ];

	// Hide menu toggle button if menu is empty and return early.
	if ( 'undefined' === typeof menu ) {
		button.style.display = 'none';
		return;
	}

	if ( ! menu.classList.contains( 'nav-menu' ) ) {
		menu.classList.add( 'nav-menu' );
	}

	const mobile_menu = siteNavigation.getElementsByClassName( 'mobile_menu' );
	// Toggle the .toggled class and the aria-expanded value each time the button is clicked.
	button.addEventListener( 'click', function() {
		siteNavigation.classList.toggle( 'toggled' );
		if ( button.getAttribute( 'aria-expanded' ) === 'true' ) {
			jQuery(mobile_menu).hide();
			jQuery('.fa-bars').show();
			button.setAttribute( 'aria-expanded', 'false' );
		} else {
			button.setAttribute( 'aria-expanded', 'true' );
			jQuery(mobile_menu).show();
			jQuery('.fa-close').show();
			jQuery('.fa-bars').hide();
		}

	} );
	

	// Remove the .toggled class and set aria-expanded to false when the user clicks outside the navigation.
	document.addEventListener( 'click', function( event ) {
		const isClickInside = siteNavigation.contains( event.target );

		if ( ! isClickInside ) {
			siteNavigation.classList.remove( 'toggled' );
			button.setAttribute( 'aria-expanded', 'false' );
			jQuery(mobile_menu).hide();
		}
	} );

	// Get all the link elements within the menu.
	const links = menu.getElementsByTagName( 'a' );

	// Get all the link elements with children within the menu.
	const linksWithChildren = menu.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' );

	// Toggle focus each time a menu link is focused or blurred.
	for ( const link of links ) {
		link.addEventListener( 'focus', toggleFocus, true );
		link.addEventListener( 'blur', toggleFocus, true );
	}

	// Toggle focus each time a menu link with children receive a touch event.
	for ( const link of linksWithChildren ) {
		link.addEventListener( 'touchstart', toggleFocus, false );
	}

	/**
	 * Sets or removes .focus class on an element.
	 */
	function toggleFocus() {
		if ( event.type === 'focus' || event.type === 'blur' ) {
			let self = this;
			// Move up through the ancestors of the current link until we hit .nav-menu.
			while ( ! self.classList.contains( 'nav-menu' ) ) {
				// On li elements toggle the class .focus.
				if ( 'li' === self.tagName.toLowerCase() ) {
					self.classList.toggle( 'focus' );
				}
				self = self.parentNode;
			}
		}

		if ( event.type === 'touchstart' ) {
			const menuItem = this.parentNode;
			event.preventDefault();
			for ( const link of menuItem.parentNode.children ) {
				if ( menuItem !== link ) {
					link.classList.remove( 'focus' );
				}
			}
			menuItem.classList.toggle( 'focus' );
		}
	}
	/**
	 * Toggles `focus` class to allow submenu access on tablets.
	 */
	( function( siteNavigation) {
		var touchStartFn, i,
			parentLink = siteNavigation.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' );

		if ( 'ontouchstart' in window ) {
			touchStartFn = function( e ) {
				var menuItem = this.parentNode, i;

				if ( ! menuItem.classList.contains( 'focus' ) ) {
					e.preventDefault();
					for ( i = 0; i < menuItem.parentNode.children.length; ++i ) {
						if ( menuItem === menuItem.parentNode.children[i] ) {
							continue;
						}
						menuItem.parentNode.children[i].classList.remove( 'focus' );
					}
					menuItem.classList.add( 'focus' );
				} else {
					menuItem.classList.remove( 'focus' );
				}
			};

			for ( i = 0; i < parentLink.length; ++i ) {
				parentLink[i].addEventListener( 'touchstart', touchStartFn, false );
			}
		}
	}( siteNavigation ) );	
	

	var lastClick = null;
		jQuery("#searchlink").click(function(e) {
			jQuery('#cl_serch').toggleClass("open");
			jQuery('#cl_serch').removeClass("openlllll");
			return false;
		  lastClick = e.target;
		}).focus(function(e){
			if (e.target == lastClick) {
			 jQuery('#cl_serch').toggleClass("open");
	   			 return false;
			} else {
			  jQuery('#cl_serch').addClass("openlllll");
				jQuery('#cl_serch').removeClass("open");
				return false;
			}
			lastClick = null;

		});
	 	jQuery(".sbtn").focus(function(){
	       jQuery('#cl_serch').addClass("openlllll");
		  jQuery('#cl_serch').removeClass("open");
	  	}).blur(function(){
		   jQuery('#cl_serch').removeClass("openlllll");
	  	});


	//scroll button add js 
	 	jQuery(window).on('scroll', function () {
	        if (jQuery(this).scrollTop() > 200) {
	            jQuery('.scrollingUp').addClass('is-active');
	        } else {
	            jQuery('.scrollingUp').removeClass('is-active');
	        }
	    });
	    jQuery('.scrollingUp').on('click', function () {
	      	jQuery("html, body").animate({
		        scrollTop: 0
	        }, 600);
	      	return false;
	    });	
	    // Sticky Header
	    jQuery(window).on('scroll', function() {
            if (jQuery(window).scrollTop() >= 250) {
                jQuery('.main_site_header').addClass('is-sticky-menu');
            }
            else {
                jQuery('.main_site_header').removeClass('is-sticky-menu');
            }
            return false;
       });
}() );

( function( $ ) {
	var body, masthead, menuToggle, siteNavigation, socialNavigation, siteHeaderMenu, resizeTimer;

	function initMainNavigation( siteNavigation ) {

		// Add dropdown toggle that displays child menu items.
		var dropdownToggle = $( '<button />', {
			'class': 'dropdown-toggle',
			'aria-expanded': false
		} ).append( $( '<span />', {
			'class': 'screen-reader-text',
			text: 'expand child menu'
		} ) );
		siteNavigation.find( '.menu-item-has-children > a' ).after( dropdownToggle );

		// Toggle buttons and submenu items with active children menu items.
		siteNavigation.find( '.current-menu-ancestor > button' ).addClass( 'toggled-on' );
		siteNavigation.find( '.current-menu-ancestor > .sub-menu' ).addClass( 'toggled-on' );

		// Add menu items with submenus to aria-haspopup="true".
		siteNavigation.find( '.menu-item-has-children' ).attr( 'aria-haspopup', 'true' );

		siteNavigation.find( '.dropdown-toggle' ).click( function( e ) {
			var _this            = $( this ),
				screenReaderSpan = _this.find( '.screen-reader-text' );

			e.preventDefault();
			_this.toggleClass( 'toggled-on' );
			_this.next( '.children, .sub-menu' ).toggleClass( 'toggled-on' );

			// jscs:disable
			_this.attr( 'aria-expanded', _this.attr( 'aria-expanded' ) === 'false' ? 'true' : 'false' );
			// jscs:enable
			screenReaderSpan.text( screenReaderSpan.text() === 'expand child menu' ? 'collapse child menu' : 'expand child menu' );
		} );
		
	}
	initMainNavigation( $( '.main-navigation' ) );


	const  focusableElements =
    'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
	const modal = document.querySelector('#mobile_primary'); // select the modal by it's id
	if (!modal) {
    	// console.error('Cannot find modal element');
    	return;
  	}
	const firstFocusableElement = modal.querySelectorAll(focusableElements)[0]; // get first element to be focused inside modal
	const focusableContent = modal.querySelectorAll(focusableElements);
	const lastFocusableElement = focusableContent[focusableContent.length - 1]; // get last element to be focused inside modal
	
	document.addEventListener('keydown', function(e) {
		//console.log("fff")
	  let isTabPressed = e.key === 'Tab' || e.keyCode === 9;

	  if (!isTabPressed) {
	    return;
	  }

	  if (e.shiftKey) { // if shift key pressed for shift + tab combination
	    if (document.activeElement === firstFocusableElement) {
	      lastFocusableElement.focus(); // add focus for the last focusable element
	      e.preventDefault();
	    }
	  } else { // if tab key is pressed
	    if (document.activeElement === lastFocusableElement) { // if focused has reached to last focusable element then focus first focusable element after pressing tab
	      firstFocusableElement.focus(); // add focus for the first focusable element
	      e.preventDefault();
	    }
	  }
	});

	firstFocusableElement.focus();

	jQuery("#mobilepop").click(function(e) {
		jQuery("#navbar-toggle").click();
		return false;
	});




} )( jQuery );



🌑 DarkStealth — WP Plugin Edition

Directory: /home/httpd/html/matrixmodels.com/public_html/wp-content/themes/goldy-mex/assets/js