PageSourceSearch

https://www.eurekausd.org/scripts/main-navigation.js

js eurekausd.org collected 2026-10-01 15:27:57 UTC 29,403 bytes, 655 lines download raw bytes

1const navigationTypes = {
2  ElkGrove: "elkGrove",
3  FullDropdown: "fullDropdown",
4  MegaMenu: "megaMenu",
5}
6
7const mobileNavigationToggleTypes = {
8  Collapse: "collapse",
9  OffCanvas: "offCanvas",
10}
11
12const mobileOffCanvasNavigationSides = {
13  Left: "offcanvas-start",
14  Right: "offcanvas-end",
15  Top: "offcanvas-top",
16  Bottom: "offcanvas-bottom",
17}
18
19const mobileNavigationTypes = {
20  Default: "default",
21  OffCanvas: "offCanvas",
22}
23
24const mobileNavigationExpandSizes = {
25  None: "",
26  Small: "sm",
27  Medium: "md",
28  Large: "lg",
29  ExtraLarge: "xl",
30  ExtraExtraLarge: "xxl",
31}
32
33const navigationType = navigationTypes.ElkGrove;
34const elkGroveheader = false; // Is it using the Elk Grove header? Example: Modoc COE is not
35const mobileNavigationToggleType = mobileNavigationToggleTypes.OffCanvas;
36const mobileOffCanvasNavigationSide = mobileOffCanvasNavigationSides.Left;
37const mobileNavigationType = mobileNavigationTypes.OffCanvas;
38const mobileNavigationExpandSize = mobileNavigationExpandSizes.Large;
39
40if (!navigationType) {
41  console.log('Navigation Type is not selected');
42}
43
44if (!mobileNavigationType) {
45  console.log('Mobile Navigation Type is not selected');
46}
47
48// Should the nav items beyond "numberOfTopNavItems" be placed inside a dropdown called "More"?
49const useMoreDropdown = true;
50
51// The number of top level nav items before they go inside the more dropdown
52let numberOfTopNavItems = 7;
53
54// Should the nav items beyond "numberOfDropdownNavItems" be placed under "More Pages" in dropdowns?
55const useMoreInDropdowns = true;
56
57const numberOfDropdownNavItems = 4;
58
59// Should home be shown in the first level navigation?
60const showHome = false;
61
62// Should the nav use nav images?
63const useNavImages = true;
64
65// Show nav images in mobile
66const showMobileNavImages = true;
67
68// Should mobile nav be in its own bar?
69const separateMobileNav = false;
70
71// const CheckMobile = () => $(window).width() < 992;
72
73const CheckMobile = () => {
74  let sizeToCheck = 992;
75  switch (mobileNavigationExpandSize) {
76    case mobileNavigationExpandSizes.None:
77      sizeToCheck = 0;
78      break;
79    case mobileNavigationExpandSizes.Small:
80      sizeToCheck = 556;
81      break;
82    case mobileNavigationExpandSizes.Medium:
83      sizeToCheck = 748;
84      break;
85    case mobileNavigationExpandSizes.Large:
86      sizeToCheck = 992;
87      break;
88    case mobileNavigationExpandSizes.ExtraLarge:
89      sizeToCheck = 1200;
90      break;
91    case mobileNavigationExpandSizes.ExtraExtraLarge:
92      sizeToCheck = 1400;
93      break;
94
95    default:
96      break;
97  }
98
99  return $(window).width() < sizeToCheck;
100}
101
102
103// Quick change expand to lg for testing
104$('.navbar.navbar-expand-md').removeClass('navbar-expand-md').addClass(`navbar-expand-${mobileNavigationExpandSize}`);
105
106const mobileNavTogglerToX = true;
107
108let didThePrependAppend = false;
109
110(function ($, sr) {
111
112  // debouncing function from John Hann
113  // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
114  var debounce = function (func, threshold, execAsap) {
115    var timeout;
116
117    return function debounced() {
118      var obj = this, args = arguments;
119      function delayed() {
120        if (!execAsap)
121          func.apply(obj, args);
122        timeout = null;
123      };
124
125      if (timeout)
126        clearTimeout(timeout);
127      else if (execAsap)
128        func.apply(obj, args);
129
130      timeout = setTimeout(delayed, threshold || 100);
131    };
132  }
133  // smartresize
134  jQuery.fn[sr] = function (fn) { return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
135
136})(jQuery, 'smartresize');
137
138const offCanvasToggle = `<button class="navbar-toggler d-inline-flex d-${mobileNavigationExpandSize}-none mobile-nav-toggle" type="button" data-bs-toggle="offcanvas" data-bs-target="#mainNavigation" aria-controls="mainNavigation" aria-expanded="false" aria-label="Toggle navigation">
139                                        <div class="mobile-nav-toggle-icon"><span class="navbar-toggler-icon"><div></div></span></div>
140                                    </button>`;
141
142const mobileSearchBar = `<div id="mobile-search-bar" class="search-bar d-block d-lg-none">
143<form action="Site-Search/index.html" method="get">
144  <label for="search"><span class="ada">Search</span></label>
145  <input id="search" name="search_string" type="text" value="Search" placeholder="Search"
146    onclick="if (this.value == 'Search') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search';}">
147  <button class="mobile-search-submit-button" type="submit"
148    onclick="forms.freedom_search_form.referring_page_url.value=location.href;forms.freedom_search_form.submit();"
149    value="Search Site" alt="Search"><i class="fa fa-search" aria-hidden="true"></i><span
150      class="ada">Submit</span></button>
151</form>
152</div>`;
153
154function MobileNavInHeader() {
155  if (!separateMobileNav) {
156//     $('.top-bar .container-xxl > .row').prepend(offCanvasToggle);
157    $('.navigation').after(offCanvasToggle);
158    $('.navigation .navbar-toggler').hide();
159  }
160  $('.navigation .offcanvas > .offcanvas-body').prepend(mobileSearchBar);
161}
162
163function CheckSeparateMobileNav() {
164  if (!separateMobileNav && CheckMobile()) {
165    $('.navigation').css('height', '0');
166    $('.top-bar-title-wrapper').addClass('hamburger-nav-padding');
167  }
168  else {
169    $('.navigation').css('height', '');
170    $('.top-bar-title-wrapper').removeClass('hamburger-nav-padding');
171  }
172}
173
174const offCanvasHeader = `<div class="offcanvas-header main-offcanvas-header">
175                              <!-- <h5 class="offcanvas-title" id="offcanvasNavbarLabel">Offcanvas</h5> -->
176                              <!-- <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> -->
177                           </div>`;
178$('.navbar .navbar-toggler').attr('data-bs-toggle', 'offcanvas');
179$('#mainNavigation').removeClass('collapse navbar-collapse').addClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', 'false').prepend(offCanvasHeader);
180$('#mainNavigation > .navbar-nav').wrap('<div class="offcanvas-body" />');
181
182function OffCanvasMobileNav() {
183
184  if (mobileNavigationType === mobileNavigationTypes.OffCanvas && CheckMobile()) {
185    $('#mainNavigation .dropdown-toggle > i').addClass('mobile-dropdown-arrow');
186    const allDropdownToggles = $('.mobile-dropdown-arrow');
187    const subOffCanvasHeader = `<div class="offcanvas-header subpage-offcanvas-header">
188                              <!-- <h5 class="offcanvas-title" id="offcanvasNavbarLabel">Offcanvas</h5> -->
189                              <button type="button" class="text-reset mobile-nav-off-canvas-back-button" data-bs-dismiss="offcanvas" aria-label="Back"><i class="fa-thin fa-angle-left"></i></button>
190                           </div>`;
191
192    if (!didThePrependAppend) {
193      $('#mainNavigation .dropdown-menu').addClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', 'false').removeClass('dropdown-menu').prepend(subOffCanvasHeader);
194    }
195
196    else {
197      $('#mainNavigation .dropdown-menu').addClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', 'false').removeClass('dropdown-menu');
198    }
199
200    $('.subpage-offcanvas-header').each(function (index) {
201      const linkText = $(this).parent('.mobile-dropdown').siblings('a').text();
202      const closeButton = '<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" data-bs-target="#mainNavigation" aria-label="Close"></button>'
203      if (!didThePrependAppend) {
204        $(this).append(`<div class="subpage-offcanvas-header-link-text">${linkText}</div>`); // .append(closeButton);
205      }
206
207    });
208
209    //  $('.mobile-dropdown-arrow').removeClass('dropdown-toggle').attr('data-bs-toggle', '');
210    // Testing not removing .dropdown-toggle
211    //     $('.mobile-dropdown-arrow').attr('data-bs-toggle', '');
212
213    $(allDropdownToggles).each(function (index) {
214      $(this).attr('offcanvas-target', `offcanvas-toggle-${index}`);
215      $(this).parent('a').siblings('.mobile-dropdown').attr('id', `offcanvas-toggle-${index}`);
216      $(this).siblings('.mobile-dropdown').attr('id', `offcanvas-toggle-${index}`);
217    });
218
219    $('.nav-link.dropdown-toggle').click(function (event) {
220      if (!CheckMobile()) {
221        try {
222          //         const thisTarget = $(this).attr('offcanvas-target');
223          const myDropdown = $(this).siblings('.dropdown-menu');
224          const theInstance = bootstrap.Offcanvas.getInstance(myDropdown);
225          //         console.log(theInstance);
226          //         theInstance && theInstance.dispose();
227          //         const bsDropdown = new bootstrap.Dropdown(myDropdown);
228          // bsDropdown.show();
229
230        } catch (error) {
231          console.log(error);
232        }
233      }
234    });
235
236    $('.mobile-dropdown-arrow').click(function (event) {
237      try {
238        const thisTarget = $(this).attr('offcanvas-target');
239        const myOffcanvas = document.getElementById(thisTarget);
240        const bsOffcanvas = new bootstrap.Offcanvas(myOffcanvas);
241        bsOffcanvas.show();
242
243      } catch (error) {
244        console.log(error);
245      }
246    });
247
248    didThePrependAppend = true;
249  }
250  else {
251    $(`.offcanvas .${mobileOffCanvasNavigationSide}`).removeClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', '');
252    $('#mainNavigation .more-dropdown > ul').addClass('dropdown-menu');
253    $('#mainNavigation .dropdown-toggle > i').removeClass('mobile-dropdown-arrow');
254  }
255}
256
257function NavigationSocialLinks() {
258  const facebookLink = $('.social-facebook').attr('href')?.trim();
259  const twitterLink = $('.social-twitter').attr('href')?.trim();
260  const instagramLink = $('.social-instagram').attr('href')?.trim();
261  const linkedInLink = $('.social-linkedin').attr('href')?.trim();
262  const youtubeLink = $('.social-youtube').attr('href')?.trim();
263
264  const parallelogramFooterLinks = $('.parallelogram-footer-link');
265  let socialLinksObject = {};
266  const socialWebsites = ['facebook', 'twitter', 'instagram', 'linkedin', 'youtube'];
267
268  $(parallelogramFooterLinks).each(function (index) {
269    let thisLinksHREF = $(this).attr('href').trim();
270
271    for (let i = 0; i < socialWebsites.length; i++) {
272      if (thisLinksHREF.includes(socialWebsites[i])) {
273        socialLinksObject[socialWebsites[i]] = thisLinksHREF;
274      }
275    }
276  });
277
278  const socialLinks = `<a class="navigation-social-link" href="${socialLinksObject.facebook || facebookLink}" target="_blank"><span class="ada">Facebook</span><i class="fa-brands fa-facebook-square"></i></a>
279                         <a class="navigation-social-link" href="${socialLinksObject.twitter || twitterLink}" target="_blank"><span class="ada">Twitter</span><i class="fa-brands fa-twitter-square"></i></a>
280                         <a class="navigation-social-link" href="${socialLinksObject.instagram || instagramLink}" target="_blank"><span class="ada">Instagram</span><i class="fa-brands fa-instagram"></i></a>
281                         <a class="navigation-social-link" href="${socialLinksObject.linkedin || linkedInLink}" target="_blank"><span class="ada">Linked In</span><i class="fa-brands fa-linkedin-in"></i></a>
282                         <a class="navigation-social-link" href="${socialLinksObject.youtube || youtubeLink}" target="_blank"><span class="ada">Youtube</span><i class="fa-brands fa-youtube"></i></a>`;
283
284  const desktopSocial = `<li class="inside-more-dropdown more-dropdown-social d-none d-md-block"><div class="more-dropdown-social-text">CONNECT WITH US</div>${socialLinks}</li>`;
285  const mobileSocial = `<li class="mobile-navigation-social d-block d-lg-none">${socialLinks}</li>`;
286
287  $('.navbar .navbar-nav').append(mobileSocial)
288  $('.more-dropdown .dropdown-menu').append(desktopSocial);
289
290}
291
292try {
293  const navItemsWithDropdowns = $('.navbar-nav .dropdown-menu').parent('.nav-item');
294  const firstLevelNavItems = $('.navbar-nav > .nav-item');
295  const firstLevelDropdowns = $(firstLevelNavItems).children('.dropdown-menu');
296  const secondLevelDropdowns = $(firstLevelDropdowns).find('> li > .dropdown-menu');
297  const thirdLevelDropdowns = $(secondLevelDropdowns).find('> li > .dropdown-menu');
298  const fourthLevelDropdowns = $(thirdLevelDropdowns).find('> li > .dropdown-menu');
299  $(navItemsWithDropdowns).addClass('dropdown');
300  $(navItemsWithDropdowns).find('> .nav-link').addClass('dropdown-toggle').attr('data-bs-toggle', 'dropdown').attr('data-bs-auto-close', 'outside');
301  $(firstLevelNavItems).addClass('first-level-nav-item');
302  $(firstLevelDropdowns).addClass('first-level-dropdown');
303  $(secondLevelDropdowns).addClass('second-level-dropdown');
304  $(thirdLevelDropdowns).addClass('third-level-dropdown');
305  $(fourthLevelDropdowns).addClass('fourth-level-dropdown');
306
307
308  //   if (navigationType === navigationTypes.ElkGrove && !CheckMobile()) {
309  //     //     !CheckMobile() && $(secondLevelDropdowns).removeClass('dropdown-menu');
310  //     $(secondLevelDropdowns).removeClass('dropdown-menu');
311  //   }
312
313  $(firstLevelNavItems).each(function (index) {
314    let thisNavItemsHREF = $(this).children('a.nav-link').attr('href');
315
316    if (thisNavItemsHREF === 'index.html') {
317      $(this).addClass('nav-home-link');
318
319      if (!showHome) {
320        $(this).addClass('hide-home-link');
321        numberOfTopNavItems++;
322      }
323
324      return false;
325    }
326  });
327
328  if (useMoreDropdown && firstLevelNavItems.length > numberOfTopNavItems) {
329    $(firstLevelNavItems).each(function (index) {
330      if (index < numberOfTopNavItems) {
331        $(this).addClass(`top-level-nav`);
332      }
333      else {
334        $(this).addClass('inside-more-dropdown').removeClass('nav-item first-level-nav-item');
335        $(this).children('a').removeClass('nav-link dropdown-toggle').addClass('dropdown-item').attr('data-bs-toggle', '');
336      }
337    });
338
339    $('.inside-more-dropdown').wrapAll('<li class="nav-item dropdown more-dropdown top-level-nav"><ul class="dropdown-menu"></ul></li>');
340
341    $('.more-dropdown').prepend('<a class="nav-link dropdown-toggle" href="javascript:void(0);" target="_self" data-bs-toggle="dropdown">More<i class="fa-regular fa-ellipsis-vertical more-dropdown-ellipsis"></i></a>');
342  }
343
344  else {
345    $(firstLevelNavItems).each(function (index) {
346      $(this).addClass(`top-level-nav`);
347    });
348  }
349
350  // Hard coded images and links inside of the dropdowns
351  // const navImageVisitText = "Visit Web Page"
352  // $('.navbar-nav > .top-level-nav:nth-child(2) > .first-level-dropdown').prepend(`<li><a class="dropdown-item nav-image" href="ParentsStudents/Resources-For-Parents/index.html" target="_self"><div class="card navigation-image-2"><img src="pictures/Nav Images/covid-19-dashboard.png" class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title">COVID-19<i class="fa-thin fa-chart-line"></i></h5><p class="card-text">DASHBOARD</p><p class="card-text visit-website">${navImageVisitText}<i class="fa-thin fa-arrow-right-long"></i></p></div></div></a></li>`);
353
354
355  // $('.navbar-nav > .top-level-nav:nth-child(2) > .first-level-dropdown').prepend(`<li><a class="dropdown-item nav-image" href="ParentsStudents/Resources-For-Parents/index.html" target="_self"><div class="card navigation-image-1"><img src="pictures/Nav Images/roadmap-to-reopening.png" class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title">ROADMAP<i class="fa-thin fa-chalkboard-user"></i></h5><p class="card-text">TO REOPENING</p><p class="card-text visit-website">${navImageVisitText}<i class="fa-thin fa-arrow-right-long"></i></p></div></div></a></li>`);
356
357  $('.first-level-dropdown').each(function (index) {
358    if ($(this).find('.second-level-dropdown').length <= 0) {
359      $(this).addClass('no-second-level');
360    }
361  });
362
363  function MorePagesInDropdowns() {
364    if (useMoreInDropdowns && !CheckMobile()) {
365      $(firstLevelDropdowns).each(function (index) {
366        const thisDropdownsSubPages = $(this).find('> li');
367        const hasSecondLevelDropdowns = !$(this).hasClass('no-second-level');
368        if ($(thisDropdownsSubPages).length > numberOfDropdownNavItems + 1 && hasSecondLevelDropdowns) {
369          $(thisDropdownsSubPages).each(function (index) {
370            if (index > numberOfDropdownNavItems - 1) {
371              $(this).addClass('under-more-subpage');
372              $(this).find('.second-level-dropdown').hide();
373            }
374          });
375          $(this).find('.under-more-subpage').wrapAll('<li class="more-subpages-container"><ul class="second-level-dropdown"></ul></li>');
376          $(this).find('.more-subpages-container').prepend('<span class="dropdown-item more-subpages-text">More Pages<i class="fa-regular fa-ellipsis-vertical more-subpages-ellipsis"></i></span>');
377        }
378      });
379    }
380  }
381
382  const mobileDropdownArrow = '<i class="fa-thin fa-angle-right nav-link dropdown-toggle mobile-dropdown-arrow" data-bs-toggle="dropdown" data-bs-auto-close="outside"></i>';
383  $('.dropdown-menu.second-level-dropdown').parent('li').prepend(mobileDropdownArrow);
384  $('.dropdown-menu.third-level-dropdown').parent('li').prepend(mobileDropdownArrow);
385  $('.dropdown-menu.fourth-level-dropdown').parent('li').prepend(mobileDropdownArrow);
386}
387
388catch (error) {
389  console.log(error);
390}
391
392
393const firstLevelNavItemsWithDropdowns = $('.top-level-nav.dropdown > .dropdown-toggle');
394
395$(firstLevelNavItemsWithDropdowns).on('show.bs.dropdown', function (event) {
396  //   !CheckMobile() && !$(this).parent('.dropdown').hasClass('more-dropdown') && $(this).siblings('.first-level-dropdown').css('visibility', 'visible');
397  mobileNavigationType !== mobileNavigationTypes.OffCanvas || !CheckMobile() && $(this).find('> i').toggleClass('fa-angle-down fa-angle-up');
398});
399
400$(firstLevelNavItemsWithDropdowns).on('hide.bs.dropdown', function (event) {
401  //   !CheckMobile() && $(this).siblings('.first-level-dropdown').css('visibility', 'hidden');
402  mobileNavigationType !== mobileNavigationTypes.OffCanvas || !CheckMobile() && $(this).find('> i').toggleClass('fa-angle-down fa-angle-up');
403});
404
405const mobileDropdowns = $('.mobile-dropdown-arrow');
406
407$(mobileDropdowns).on('show.bs.dropdown', function (event) {
408  $(this).toggleClass('fa-angle-right fa-angle-up');
409});
410
411$(mobileDropdowns).on('hide.bs.dropdown', function (event) {
412  $(this).toggleClass('fa-angle-right fa-angle-up');
413});
414
415// Mobile
416// Toggle the class mobile-nav-active when the mobile nav toggler is clicked
417function MobileNavIconToX() {
418$('.navbar-toggler').click(function (event) {
419  try {
420
421    mobileNavTogglerToX && $('.navbar-toggler-icon').toggleClass('mobile-nav-active');
422
423  } catch (error) {
424    console.log(error);
425  }
426});
427}
428
429// Adds Font Awesome Bullets to first level nav items with dropdowns
430// If the width of the window is less than 768px and there are dropdown arrows, they are changed from down arrows to arrows pointing right, otherwise right arrows are added
431// The opposite happens when in sizes greater than or equal to 768px
432function FontAwesomeNavigationBullets() {
433  try {
434    const navigationDropdownArrows = $('.top-level-nav > .dropdown-toggle i:not(".more-dropdown-ellipsis")');
435    //     console.log(navigationDropdownArrows);
436    const navigationDropdownArrowsExist = $(navigationDropdownArrows).length > 0;
437
438    if (CheckMobile()) {
439      if (navigationDropdownArrowsExist) {
440        if ($(navigationDropdownArrows).hasClass('fa-angle-down')) {
441          $(navigationDropdownArrows).toggleClass('fa-angle-down fa-angle-right');
442        }
443      }
444      else {
445        $('.top-level-nav > .dropdown-toggle').append('<i class="fa-thin fa-angle-right"></i>');
446      }
447    }
448
449    else {
450      $('.second-level-dropdown').addClass('fa-ul');
451      $('.second-level-dropdown > li').prepend('<span class="fa-li"><i class="fa-thin fa-angle-right"></i></span>');
452      if (navigationDropdownArrowsExist) {
453        if ($(navigationDropdownArrows).hasClass('fa-angle-right')) {
454          $(navigationDropdownArrows).toggleClass('fa-angle-down fa-angle-right');
455        }
456      }
457      else {
458        $('.top-level-nav > .dropdown-toggle').append('<i class="fa-thin fa-angle-down"></i>');
459      }
460    }
461  }
462  catch (error) {
463    console.log('Navigation font awesome bullets did not work');
464  }
465}
466
467function FullWidthDropdownOffset() {
468  let topBarHeaderHeight = $('.top-bar-header').height();
469  const topBarHeaderTopOffset = $('.top-bar-header').offset().top;
470  const firstLevelDropdowns = $('.dropdown-menu.first-level-dropdown:not(.no-second-level)');
471  const schoolsDropdownOffset = elkGroveheader ? $('.schools-dropdown').offset().left : 0;
472  const searchFieldColumn = elkGroveheader ? $('.search-field-column') : 0;
473  const searchFieldColumnOffsetLeft = elkGroveheader ? $(searchFieldColumn).offset().left : 0;
474  const searchFieldColumnWidth = elkGroveheader ? $(searchFieldColumn).outerWidth() : 0;
475  const searchFieldColumnOffsetRight = elkGroveheader ? $(window).width() - (searchFieldColumnOffsetLeft + searchFieldColumnWidth) : 0;
476  const mainLogoOffsetLeft = $('.main-logo').offset().left;
477  const searchFieldIcon = $('.search-icon');
478  const searchFieldIconOffsetLeft = $(searchFieldIcon).offset().left;
479  const searchFieldIconWidth = $(searchFieldIcon).outerWidth();
480  const searchFieldIconOffsetRight = $(window).width() - (searchFieldIconOffsetLeft + searchFieldIconWidth);
481  if (CheckMobile()) {
482    $(firstLevelDropdowns).css('top', '');
483    $(firstLevelDropdowns).css('left', '');
484    $(firstLevelDropdowns).css('padding-left', '');
485    $(firstLevelDropdowns).css('padding-right', '');
486  }
487  else {
488    $(firstLevelDropdowns).addClass('show');
489    $(firstLevelDropdowns).offset({ top: topBarHeaderTopOffset + topBarHeaderHeight - 2, left: 0 });
490    //      $(firstLevelDropdowns).css('margin-top', topBarHeaderHeight);
491    $(firstLevelDropdowns).css('padding-left', mainLogoOffsetLeft);
492    $(firstLevelDropdowns).css('padding-right', searchFieldIconOffsetRight);
493    $(firstLevelDropdowns).removeClass('show');
494  }
495}
496
497function AddMobileDropdownArrow() {
498  if (CheckMobile()) {
499    $('.second-level-dropdown').parent('li').addClass('nav-item dropdown');
500    $('.third-level-dropdown').parent('li').addClass('nav-item dropdown');
501    $('.fourth-level-dropdown').parent('li').addClass('nav-item dropdown');
502  }
503  else {
504    $('.second-level-dropdown').parent('li').removeClass('nav-item dropdown');
505    $('.third-level-dropdown').parent('li').removeClass('nav-item dropdown');
506    $('.fourth-level-dropdown').parent('li').removeClass('nav-item dropdown');
507  }
508}
509
510function AddMobileDropdownClass() {
511  if (CheckMobile()) {
512    $('.first-level-dropdown').addClass('mobile-dropdown');
513    $('.second-level-dropdown').addClass('mobile-dropdown').addClass('dropdown-menu');
514    $('.third-level-dropdown').addClass('mobile-dropdown').show();
515    $('.fourth-level-dropdown').addClass('mobile-dropdown').show();
516  }
517  else {
518    $('.first-level-dropdown').css('visibility', '');
519    $('.first-level-dropdown').removeClass('mobile-dropdown').addClass('dropdown-menu');
520    $('.second-level-dropdown').removeClass('mobile-dropdown').removeClass('dropdown-menu');;
521    $('.third-level-dropdown').removeClass('mobile-dropdown').addClass('dropdown-menu').hide();
522    $('.fourth-level-dropdown').removeClass('mobile-dropdown').addClass('dropdown-menu').hide();
523  }
524}
525
526function LoadNavImages() {
527  const navItemsToCheck = $('.dropdown.first-level-nav-item');
528  let navItemsWithImagesCount = 1;
529  const navImageVisitText = "Visit Web Page"
530  $(navItemsToCheck).each(function (index) {
531    const firstTwoItems = $(this).children('.first-level-dropdown').children('li');
532    $(firstTwoItems).each(function (index) {
533      const theCurrentItem = $(this);
534      if ($(this).children('.second-level-dropdown').length <= 0) {
535        try {
536          const thisLink = $(this).children('a');
537          const thisLinksHREF = $(thisLink).attr('href');
538          const thisLinksText = $(thisLink).text();
539          const thisLinksTextFirstSpace = thisLinksText.indexOf(' ');
540          const thisLinksFirstWord = thisLinksText.slice(0, thisLinksTextFirstSpace);
541          const thisLinksOtherWords = thisLinksText.slice(thisLinksTextFirstSpace + 1, thisLinksText.length);
542          if (thisLinksHREF) {
543            $('.nav-images .sub-page-nav-images-temp-holder').load(`${thisLinksHREF} .current-page-nav-image`, function () {
544              const thisImagesSource = $(this).children('.current-page-nav-image').attr('src');
545              const thisIconsSource = $(this).children('.current-page-nav-image').attr('data-page-icon');
546              const thisPageIcon = thisIconsSource ? `<img src="${thisIconsSource}" class="page-icon" alt="...">` : `<i class="fa-thin fa-link-horizontal default-nav-icon"></i>`;
547              const thisPageTagline = $(this).children('.current-page-nav-image').attr('data-page-tagline');
548              const navImageDisplayClasses = showMobileNavImages ? '' : 'd-none d-md-block';
549              const navImageColorOverlayClass = index === 0 ? 'left' : 'right';
550              const topNavImageText = thisPageTagline ? thisLinksText : thisLinksFirstWord;
551              if (thisImagesSource) {
552                const thisFullOne = `<a class="dropdown-item nav-image ${navImageDisplayClasses}" href="${thisLinksHREF}" target="_self"><div class="card navigation-image-${navItemsWithImagesCount} nav-image-color-${navImageColorOverlayClass}"><img src="${thisImagesSource}" class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title">${topNavImageText}${thisPageIcon}</h5><p class="card-text">${thisPageTagline || thisLinksOtherWords}</p><p class="card-text visit-website">${navImageVisitText}<i class="fa-thin fa-arrow-right-long"></i></p></div></div></a>`
553
554                $(theCurrentItem).prepend(thisFullOne);
555                $(thisLink).addClass(`uses-sub-page-nav-image-${navItemsWithImagesCount}`);
556                if (showMobileNavImages) {
557                  $(thisLink).addClass('d-none');
558                }
559                else {
560                  $(thisLink).addClass('d-block d-md-none');
561                }
562                $(this).children('.current-page-nav-image').removeClass('current-page-nav-image').addClass(`sub-page-nav-image-${navItemsWithImagesCount} loaded-nav-image`).appendTo('.nav-images .sub-page-nav-images');
563                navItemsWithImagesCount++;
564              }
565            });
566          }
567        }
568
569        catch (error) {
570          console.log(error);
571        }
572      }
573    });
574  });
575}
576
577function NoSubsSingleDropdown() {
578  $('.first-level-dropdown').each(function (index) {
579    if ($(this).find('.second-level-dropdown').length <= 0) {
580      $(this).addClass('no-second-level');
581    }
582  });
583}
584
585function FirstLevelDropdownItemWidths() {
586  const topLevelDropdowns = $('.first-level-dropdown').not('.no-second-level');
587  $(topLevelDropdowns).each(function (index) {
588    const dropdownItems = $(this).children('li');
589    const numberOfDropdownItems = $(dropdownItems).length;
590    const subWidth = 100 / (numberOfDropdownItems);
591    CheckMobile() ? $(dropdownItems).css('width', '') : $(dropdownItems).css('width', `${subWidth}%`);
592  });
593}
594
595// Moves the topbar right side links into the nav when in mobile (< 992)
596let topBarLinksForNav = $('.top-bar-link');
597
598const topBarLinksForNavFiltered = $(topBarLinksForNav).filter(function (index) {
599  return $(this).find('.schools-dropdown').length <= 0 && $(this).find('.translate-dropdown').length <= 0;
600});
601
602function MoveTopBarLinksToNav() {
603  try {
604    ElementEmptyCheck($('.top-bar-link'), '992');
605
606    if (CheckMobile()) {
607      if ($(topBarLinksForNavFiltered).exists()) {
608        $('.navbar .container-fluid').append($(topBarLinksForNavFiltered));
609      }
610    }
611
612    else if($(window).width() > 992) {
613      if ($(topBarLinksForNavFiltered).exists()) {
614        $('.top-bar-title-wrapper').after($(topBarLinksForNavFiltered));
615      }
616    }
617  }
618  catch (error) {
619    console.log('Top bar links to under banner did not work');
620  }
621}
622
623
624$(document).ready(function () {
625  CheckSeparateMobileNav();
626  useNavImages && LoadNavImages();
627  NavigationSocialLinks();
628  AddMobileDropdownArrow();
629  MorePagesInDropdowns();
630  FontAwesomeNavigationBullets();
631  AddMobileDropdownClass();
632  OffCanvasMobileNav();
633  MobileNavInHeader();
634  separateMobileNav && MoveTopBarLinksToNav();
635  MobileNavIconToX();
636});
637
638$(window).smartresize(function () {
639  CheckMobile();
640  CheckSeparateMobileNav();
641  MorePagesInDropdowns();
642  FullWidthDropdownOffset();
643  AddMobileDropdownArrow();
644  AddMobileDropdownClass();
645  OffCanvasMobileNav();
646  FontAwesomeNavigationBullets();
647  FullWidthDropdownOffset();
648  FirstLevelDropdownItemWidths();
649  separateMobileNav && MoveTopBarLinksToNav();
650});
651
652window.addEventListener('load', (event) => {
653  FullWidthDropdownOffset();
654  setTimeout(FirstLevelDropdownItemWidths, 200);
655});

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.