codefordayton/metroparks-tribute

View on GitHub
tribute_files/navigation.js

Summary

Maintainability
F
3 days
Test Coverage
function initNavigation() {
    var mainNav, mainNavItems, mainNavLinks, submenu
    mainNav = jQuery('.main-nav');
    mainNavItems = mainNav.children();
    mainNavLinks = mainNavItems.children('p');
    submenu = jQuery('.sub-menu');
    customSubmenu = jQuery('.custom-post-type-submenu');

    function fadeInNavigation() {
        if(isMd){
            jQuery('.main-navigations').fadeIn('slow');
        }
    } 
    //fadeInNavigation(); 

    // Reposition Custom Post Types inside menu items w/ corresponding data-attr & link, 
    // assign sub-menu class

    // Drop Misc items in Places to Go inside Nav List for Conservation Areas
    var customListMisc = jQuery('.custom-post-misc-areas');
    var customConservationList = jQuery('.custom-post-conservation-areas');

    customListMisc.children().addClass('custom-misc');
    customConservationList.prepend( customListMisc.children() );
    customListMisc.remove();

    // When on desktop, hover for submenus
    function setUpSubMenuHover () {

        // SubMenu for Utility Nav
        jQuery('.utility-nav').children('.menu-item-has-children').hover(function(){
            jQuery(this).addClass('open');
            jQuery(this).siblings().removeClass('open');
            var subMenu = jQuery(this).children('.sub-menu');
            if(!subMenu.hasClass('open')) {
                jQuery(this).addClass('open');
                subMenu.addClass('open');
                 jQuery(this).siblings().children('.sub-menu').removeClass('open');
            } else {
                return;
            }
        });

        jQuery('.utility-nav').children('.menu-item-has-children').mouseleave(function(){
            var subMenu = jQuery(this).children('.sub-menu');
            if(subMenu.hasClass('open')) {
                subMenu.removeClass('open');
                jQuery(this).removeClass('open');
            } 
        });

        // SubMenu for Main Nav
        mainNavItems.hover(function(){
            jQuery(this).addClass('open');
            jQuery(this).siblings().removeClass('open');
        var subMenu = jQuery(this).children('.sub-menu');
        if(!subMenu.hasClass('open')) {
            subMenu.addClass('open');
             jQuery(this).siblings().children('.sub-menu').removeClass('open');
        } else {
            return;
        }
    });

        /*jQuery('.sub-menu').mouseleave(function() {
            var thisSubMenu = jQuery(this); 
            if(jQuery('.sub-menu').hasClass('open')) {
                setTimeout(function() {
                jQuery('.sub-menu').addClass('close');
                thisSubMenu.parent().removeClass('open');
              }, 5);
              setTimeout(function() {
                  jQuery('.sub-menu').removeClass('close');
                  jQuery('.sub-menu').removeClass('open');
                }, 10);
              mainNavItems.removeClass('open');
            }
        });*/
    
    // Close sub-menus when mouseenters site-content
    jQuery( ".site-content" ).mouseenter(function() {
      setTimeout(function() {
        jQuery('.sub-menu').addClass('close');
      }, 500);
      setTimeout(function() {
          jQuery('.sub-menu').removeClass('close');
          jQuery('.sub-menu').removeClass('open');
        }, 800);
      mainNavItems.removeClass('open');
    });

    
    }

    // When on mobile, click for submenus
    function setUpSubMenuClick () {
         mainNavItems.click(function(event){
          var subMenu = jQuery(this).children('.sub-menu');
          if(subMenu.length > 0 &&!subMenu.hasClass('open')) {
            //event.preventDefault();
            subMenu.addClass('open');
            jQuery(this).addClass('open');
            jQuery(this).siblings().removeClass('open');
               jQuery(this).siblings().children('.sub-menu').removeClass('open');
          } else if (subMenu.length > 0 && subMenu.hasClass('open')){
              //event.preventDefault();
            subMenu.removeClass('open');
            jQuery(this).removeClass('open');
          }
        });

         jQuery('.utility-nav').children('.menu-item-has-children').children('a').click(function(e){
             if(!jQuery(this).parent().hasClass('open')) {
                 e.preventDefault();
                 jQuery(this).parent().addClass('open');
                jQuery(this).parent().siblings().removeClass('open');
                var subMenu = jQuery(this).parent().children('.sub-menu');
                if(!subMenu.hasClass('open')) {
                    jQuery(this).addClass('open');
                    subMenu.addClass('open');
                     jQuery(this).siblings().children('.sub-menu').removeClass('open');
                }
             }
            /*jQuery(this).addClass('open');
            jQuery(this).siblings().removeClass('open');
            var subMenu = jQuery(this).children('.sub-menu');
            if(!subMenu.hasClass('open')) {
                jQuery(this).addClass('open');
                subMenu.addClass('open');
                 jQuery(this).siblings().children('.sub-menu').removeClass('open');
            } else {
                return;
            }*/
        });
    }

    if(isMd) {
        setUpSubMenuHover();
    } else {
        setUpSubMenuClick();
    }

    // Mobile Navigation
    function setUpMobileNav() {
        var menuButton = jQuery('.header-mobile-menu-button');

        menuButton.click(function(){
            if(!jQuery(this).hasClass('menu-open')) {
                jQuery(this).addClass('menu-open');
                jQuery('.main-mobile-navigations').addClass('menu-open');
                jQuery('body').css('position', 'fixed');
                jQuery('body').css('top', '0');
                jQuery('body').css('right', '0');
                jQuery('body').css('left', '0');
                jQuery('body').css('width', '100%'); 
            } else {
                jQuery(this).removeClass('menu-open');
                jQuery('.main-mobile-navigations').removeClass('menu-open');
                jQuery('body').css('position', 'relative');
            }
        });

        jQuery('.header-utility-nav-button').click(function(){
            if(!jQuery(this).hasClass('open')) {
                jQuery(this).addClass('open');
                jQuery('.header-utility-navigation').addClass('open');
            } else {
                jQuery(this).removeClass('open');
                jQuery('.header-utility-navigation').removeClass('open');
            }
        });
    }
    setUpMobileNav();

    // Animate Navigation
    var header = jQuery('header');

    function setUpStickyNav () {
        jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > 50){  
            jQuery('header').addClass("sticky");
          }
          else{
            jQuery('header').removeClass("sticky");
          }
        });
      }
      setUpStickyNav();

      var utilityNav = jQuery('.header-utility-navigation');

      function hoverUtilityMenu() {
          utilityNav.mouseenter(function(){
              if(header.hasClass('sticky') && !utilityNav.hasClass('expanded')) {
                  utilityNav.addClass('expanded');
                  header.addClass('utility-expanded');
              }
          });

          utilityNav.mouseleave(function(){ 
              if(header.hasClass('sticky') && utilityNav.hasClass('expanded')) {
                  utilityNav.removeClass('expanded');
                  header.removeClass('utility-expanded');
              }
          });
      }
      hoverUtilityMenu();

      function showCurrentPage() {
          if (window.location.href.indexOf("places-to-go") > -1) {
            jQuery('.places-to-go').parent().addClass('current');
        }
        if (window.location.href.indexOf("things-to-do") > -1) {
            jQuery('.things-to-do').parent().addClass('current');
        }
          if (window.location.href.indexOf("make-a-difference") > -1) {
            jQuery('.make-a-difference').parent().addClass('current');
        }
          if (window.location.href.indexOf("rentals-permits") > -1) {
            jQuery('.rentals-permits').parent().addClass('current');
        }
        if (window.location.href.indexOf("what-we-do") > -1) {
            jQuery('.what-we-do').parent().addClass('current');
        }

        var pageSlug = jQuery('.site-content').attr('data-page-slug'); 
        if(pageSlug.length > 0) {
            jQuery('.sub-menu li a').each(function(){
                if(jQuery(this).attr('data-slug') === pageSlug){
                    jQuery(this).addClass('current');
                }
            });

            if(isMobile) {
                jQuery('.submenu-category-list > li[data-id]').each(function(){
                    var postID = jQuery(this).attr('data-id');
                    var link = jQuery(this).children('a');
                    if(!jQuery('body').hasClass(postID)) {
                        link.removeClass('current');
                    }
                });
            } else {
                jQuery('.submenu-category-list > li[data-page-id]').each(function(){
                    var postID = jQuery(this).attr('data-page-id');
                    var link = jQuery(this).children('a');
                    if(!jQuery('body').hasClass(postID)) {
                        link.removeClass('current');
                    }
                });
            }
        }
      }
      showCurrentPage() ;
}