PageSourceSearch

https://www.thehewittfertilitycentre.org.uk/_frontend/js/main/functions/internal-navigation.js

js thehewittfertilitycentre.org.uk collected 2026-10-04 13:27:16 UTC 3,174 bytes, 89 lines download raw bytes

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.