1(function () { 2(function($, Drupal1, window1, document1) { 3 "use strict"; 4 // Example of Drupal behavior loaded. 5 Drupal1.behaviors.menu = { 6 attach: function menuMountAllison(context, settings) { 7 if (typeof context["location"] !== "undefined") { 8 var openMenu = function openMenu() { 9 mobileNavPanel.attr("aria-hidden", "false"); 10 mobileNavPanel.find("> ul:first-of-type > li:first-of-type > a").focus(); 11 mobileNavToggle.attr("aria-expanded", "true"); 12 $("body").addClass("no-scroll"); 13 }; 14 var closeMenu = function closeMenu() { 15 mobileNavPanel.find(".block").removeClass("open"); 16 mobileNavPanel.attr("aria-hidden", "true"); 17 mobileNavToggle.focus(); 18 mobileNavToggle.attr("aria-expanded", "false"); 19 $("body").removeClass("no-scroll"); 20 }; 21 // Only fire on document load. 22 /* 23 * Scroll pin 24 */ $(window1).on("load", function() { 25 var hasFixedAdminToolbar = $("body").hasClass("toolbar-fixed"); 26 var adminToolbarHeight = hasFixedAdminToolbar ? parseInt($("body").css("padding-top"), 10) : 0; 27 // Pin desktop navbar 28 var zp_nav = new $.Zebra_Pin($(".pinnedNavbar"), { 29 class_name: "navbar-pin", 30 z_index: 490, 31 top_spacing: adminToolbarHeight 32 }); 33 // Pin mobile navbar 34 var zp_nav_mobile = new $.Zebra_Pin($(".pinnedMobileNavbar"), { 35 class_name: "navbar-mobile-pin", 36 z_index: 490, 37 top_spacing: adminToolbarHeight 38 }); 39 // Update zebra pin on resize 40 function resize() { 41 var hasFixedAdminToolbar = $("body").hasClass("toolbar-fixed"); 42 var adminToolbarHeight = hasFixedAdminToolbar ? parseInt($("body").css("padding-top"), 10) : 0; 43 // Set updated navbar height on viewport change 44 zp_nav.settings.top_spacing = adminToolbarHeight; 45 zp_nav.update(); 46 // Set updated mobile navbar height on viewport change 47 zp_nav_mobile.settings.top_spacing = adminToolbarHeight; 48 zp_nav_mobile.update(); 49 } 50 function toggle() { 51 if (parseInt($("body").css("padding-top"), 10) === 79) { 52 zp_nav.settings.top_spacing = 39; 53 zp_nav_mobile.settings.top_spacing = 39; 54 zp_nav_mobile.update(); 55 zp_nav.update(); 56 } else { 57 zp_nav.settings.top_spacing = 79; 58 zp_nav_mobile.settings.top_spacing = 79; 59 zp_nav_mobile.update(); 60 zp_nav.update(); 61 } 62 } 63 // Debounce screen resize event 64 window1.addEventListener("resize", function() { 65 return Drupal1.debounce(resize, 100); 66 }); 67 // toggle on click event 68 $(".toolbar-icon-menu ").on("click", toggle); 69 }); 70 /* 71 * Desktop Navigation - Sub-navigation logic 72 */ var primaryNavigationLinks = $(".region-navigation .nav__link.is-top-level"); 73 $(primaryNavigationLinks, context).on("click keyup", function(e) { 74 // Stop event propagation 75 e.preventDefault(); 76 // Target subnav element 77 var subnav = $(this).parent().children(".nav__subnav"); 78 var prevSubnav = $(this).parent().prev().children(".nav__subnav"); 79 var isNextNavItem = $(this).hasClass("is-top-level", "has-subnav");
80 var openSubnavs = primaryNavigationLinks.siblings(".open"); 81 var currentSubnav = $(this).siblings(".nav__subnav"); 82 // Hide any subnavs currently open 83 $(openSubnavs).not(currentSubnav).removeClass("open"); 84 // Toggle display (set open class, add aria-hidden: false. Reverse if unselected.) 85 subnav.hasClass("open") ? subnav.removeClass("open").attr("aria-hidden", "true") : subnav.addClass("open").attr("aria-hidden", "false"); 86 // Hide previous subnav when no longer focused 87 isNextNavItem && prevSubnav.blur().removeClass("open").attr("aria-hidden", "true"); 88 }); 89 // When ESC key is pressed, close primary navigation dropdown(s) 90 $(document1).on("keyup", function(e) { 91 var subnavs = $(".region-navigation .navigation").find(".nav__subnav"); 92 // Close dropdown when ESC is pressed 93 if (e.which === 27) subnavs.removeClass("open").attr("aria-hidden", "true"); 94 }); 95 // Dynamically open dropdowns to right if too close to edge of screen 96 $.each(primaryNavigationLinks, function(index, value) { 97 // Nav position 98 var elPos = value.getBoundingClientRect();
99 // Window position 100 var screenPos = $("body")[0].getBoundingClientRect(); 101 // Subnav dropdown width 102 var subnav = $(this).next(); 103 var subnavWidth = $(this).siblings(".nav__subnav").width(); 104 // If menu will expand off screen, force menu to right align 105 if (elPos.right + subnavWidth > screenPos.right) subnav.addClass("menu-right"); 106 }); 107 /* 108 * Mobile Navigation - Mobile Menu Button logic 109 */ var mobileNavPanel = $(".region-mobile-navigation__content"); 110 var mobileNavToggle = $(".togglePanel"); 111 // When esc key is pressed, close menu 112 $(document1).on("keyup", function(e) { 113 e.which === 27 && closeMenu(); 114 // Down arrow press, focus next item 115 if (e.which == 39 || e.which == 40) $(":focus").parent().next().children(".nav__link").focus(); 116 // Up arrow press, focus previous item 117 if (e.which == 37 || e.which == 38) $(":focus").parent().prev().children(".nav__link").focus(); 118 // Hide or show tools menu on focus/blur 119 var toolsNav = $(".block--tools"); 120 var toolsNavButtonHasFocus = $(".block__tools_desktop__title").is(":focus"); 121 var toolsNavLinkHasFocus = $(".block--tools.desktop .nav__link").is(":focus"); 122 var toolsNavOpen = $(".block--tools").hasClass("open"); 123 toolsNavButtonHasFocus && toolsNavOpen || toolsNavLinkHasFocus ? toolsNav.addClass("open") : toolsNav.removeClass("open"); 124 }); 125 $(document1).on("click", function(e) { 126 var menuClick = $(e.target).not(primaryNavigationLinks).length > 0 ? true : false; 127 if (menuClick) primaryNavigationLinks.siblings(".nav__subnav.open").removeClass("open").attr("aria-expanded", false); 128 }); 129 // On mobile, Close the menu if focus is out of the dropdown. 130 $(document1).on("focusin", function(e) { 131 var isFocusInMenu = Boolean($(e.target).parents(".region-mobile-navigation__content").length); 132 if (!isFocusInMenu && $("body").hasClass("keyboard-focus")) { 133 mobileNavToggle.attr("aria-expanded", "false"); 134 mobileNavPanel.attr("aria-hidden", "true"); 135 mobileNavPanel.find(".subnav__button").attr("aria-expanded", false); 136 mobileNavPanel.find(".nav__subnav").attr("aria-hidden", true); 137 } 138 }); 139 // When mobile menu is closed, collapse all navigation items 140 $(document1).on("mouseup", function(e) { 141 // if the target of the click isn't the container nor a descendant of the container 142 if (!mobileNavPanel.is(e.target) && mobileNavPanel.has(e.target).length === 0) { 143 if ($(window1).width < 768) closeMenu(); 144 else { 145 // Get mobile nav items that have been expanded 146 mobileNavPanel.find(".nav__item.has-subnav.subnav-expanded").removeClass("is-expanded").addClass("is-collapsed").attr("aria-expanded", false); 147 mobileNavPanel.find(".nav__item.has-subnav .nav__link.subnav-expanded").removeClass("subnav-expanded").addClass("subnav-collapsed").attr("aria-expanded", false); 148 mobileNavPanel.find(".subnav__button").attr("aria-expanded", false); 149 mobileNavPanel.find(".nav__subnav").attr("aria-hidden", true); 150 } 151 } 152 }); 153 // Set aria-expand value when mobile menu button is selected. 154 $(mobileNavToggle).on("click keyup", function(e) { 155 var expandedValue = $(this).attr("aria-expanded"); 156 if (expandedValue == "true") { 157 expandedValue = "false"; 158 closeMenu(); 159 } else { 160 expandedValue = "true"; 161 openMenu(); 162 } 163 $(this).attr("aria-expanded", expandedValue); 164 }); 165 /* 166 * Tools menu 167 */ // Tools dekstop menu - To expand 168 // Dropdown toggle fuction 169 $(".block--tools.desktop .block__tools_desktop__title, .block--tools.desktop .nav__link").on("click keyup", function(e) { 170 var block = $(".block--tools.desktop"); 171 block.hasClass("open") ? block.removeClass("open") : block.addClass("open"); 172 }); 173 // Hide dropdown on page click 174 $(document1).on("click", function(e) { 175 if (!$("a.block__tools_desktop__title").is(e.target) && !$("a.block__tools_desktop__title").has(e.target).length) $(".block--tools.desktop").removeClass("open"); 176 }); 177 // End tools desktop 178 // Search desktop - To expand\ 179 $(document1).on("click", ".nav__search", function(e) { 180 e.preventDefault(); 181 if ($(this).hasClass("open")) { 182 $(this).removeClass("open"); 183 $(".block--search").removeClass("open"); 184 } else { 185 $(this).addClass("open"); 186 $(".block--search").addClass("open"); 187 } 188 }); 189 // End Search desktop 190 /* 191 * Mobile Sub-Panels (Tools, Search) 192 */ $(".toggleSubPanel").on("click", function(e) { 193 e.preventDefault(); 194 var block = $(this).parents(".block"); 195 block.hasClass("open") ? block.removeClass("open") : block.addClass("open"); 196 }); 197 /* 198 * Mobile Navigation -- Sub-Navigation Logic 199 */ $(".region-mobile-navigation__content .nav__link.has-subnav.is-expanded", context).each(function() { 200 // replace all special characters 201 var navTitle = $(this).children("a").text().replace(/[^a-z0-9\s]/gi, "").replace(/[_\s]/g, "-").toLowerCase(); 202 $(this).children("a").attr("id", "mobile-menu--" + navTitle); 203 $(this).children("button").attr("aria-controls", "mobile-menu-accordion--" + navTitle); 204 $(this).children("ul").attr({ 205 id: "mobile-menu-accordion--" + navTitle, 206 "aria-labelledby": "mobile-menu--" + navTitle 207 }); 208 }); 209 $(".subnav__button, .is-top-level.subnav-collapsed", context).on("click keyup", function(e) { 210 // Stop event propagation 211 e.preventDefault(); 212 // Close other dropdowns 213 $(this).parent().siblings(".subnav-expanded").find(".nav__link").attr("aria-expanded", false).removeClass("subnav-expanded").addClass("subnav-collapsed"); 214 $(this).parent().siblings().find(".nav__subnav").attr("aria-hidden", true); 215 var expandedValue = $(this).attr("aria-expanded"); 216 // Collapse all open items 217 var mobileNavItems = $(".region-mobile-navigation__content .navigation"); 218 $(this).siblings(".nav__item").removeClass("subnav-expanded").addClass("subnav-collapsed").attr("aria-expanded", false).children().removeClass("subnav-expanded").addClass("subnav-collapsed").attr("aria-expanded", false); 219 if (expandedValue == "true") { 220 expandedValue = "false"; 221 $(this).siblings("ul").attr("aria-hidden", true); 222 $(this).parent(".nav__item").removeClass("subnav-expanded").addClass("subnav-collapsed"); 223 $(this).removeClass("subnav-expanded").addClass("subnav-collapsed"); 224 } else { 225 expandedValue = "true"; 226 $(this).siblings("ul").attr("aria-hidden", false); 227 $(this).parent(".nav__item").removeClass("subnav-collapsed").addClass("subnav-expanded"); 228 $(this).removeClass("subnav-collapsed").addClass("subnav-expanded"); 229 } 230 $(this).attr("aria-expanded", expandedValue); 231 }); 232 } 233 } 234 }; 235})(jQuery, Drupal, window, document); 236 237})(); 238//# sourceMappingURL=menu.js.map
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.