PageSourceSearch

https://mta.ca/themes/custom/mount_allison/dist/js/menu.js?v=10.6.17

js mta.ca collected 2026-10-01 09:19:23 UTC 14,504 bytes, 238 lines download raw bytes

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.