1var initInternalNavigation = function () { 2 var $internalNav = $('.internal_nav'); 3 4 if ($internalNav.length) { 5 // static variables 6 7 var subnavSelector = '.internal_nav__list--second_level', 8 activeClass = 'active', 9 togglerClass = 'internal_nav__subnav_toggler', 10 togglerSelector = "." + togglerClass, 11 internalNavItem = $('.js-internalnavitem'); 12 13 // element variables 14 15 var $subnavTogglers = $internalNav.find('.js-subnav-toggle'), 16 $allSubnavs = $internalNav.find(subnavSelector), 17 $mobileMenuToggler = $internalNav.find('.js-toggle-internal-nav'), 18 $navList = $internalNav.find('.internal_nav__list--first_level') 19 20 // functions 21 22 var setAriaAttributes = function(element, state) { 23 element.closest('li').attr('aria-expanded', '' + state + '').find('button').attr('aria-expanded', '' + state + ''); 24 } 25 26 var toggleSubnavs = function ($subnavToggler, $subnav) { 27 closeSubnav($subnavTogglers, $allSubnavs); 28 openSubnav($subnavToggler, $subnav); 29 setAriaAttributes($subnavTogglers, false); 30 } 31 32 var openSubnav = function ($subnavToggler, $subnav) { 33 $subnavToggler.addClass(activeClass); 34 $subnavToggler.find(togglerSelector).addClass(activeClass); 35 $subnav.stop().slideDown(); 36 }; 37 38 var closeSubnav = function ($subnavToggler, $subnav) { 39 $subnavToggler.removeClass(activeClass); 40 $subnavToggler.find(togglerSelector).removeClass(activeClass); 41 $subnav.stop().slideUp(); 42 }; 43 44 // UI binfings 45 46 $subnavTogglers.on('click', function (e) { 47 48 var togglerHasBeenClicked = $(e.target).hasClass(togglerClass); 49 50 if (togglerHasBeenClicked) { 51 var $subnavToggler = $(this), 52 $subnav = $subnavToggler.siblings(subnavSelector).first(); 53 54 if ($subnavToggler.hasClass(activeClass)) { 55 // only closing current submenu 56 closeSubnav($subnavToggler, $subnav); 57 } else { 58 // close the rest and open this one 59 toggleSubnavs($subnavToggler, $subnav); 60 setAriaAttributes($subnavToggler, true); 61 } 62 63 e.preventDefault(); 64 } 65 66 }); 67 68 $subnavTogglers.each(function(){ 69 if ($(this).hasClass(activeClass)) { 70 setAriaAttributes($(this), true); 71 } 72 }); 73 74 $mobileMenuToggler.on('click', function () { 75 $(this).toggleClass(activeClass); 76 $(this).find('.menu_icon').toggleClass(activeClass); 77 $navList.stop().slideToggle(); 78 }); 79 } 80 81 $('#sitewide-links > li').hover(function() 82 { 83 $('#sitewide-links > li').addClass('faded'); 84 $(this).closest('li').removeClass('faded'); 85 }, function() 86 { 87 $('#sitewide-links > li').removeClass('faded'); 88 }); 89};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.