1// ========================================================================== 2// 2025-11-25 3// ========================================================================== 4 5const internalNumberOfDropdownNavItems = { 6 '1440': typeof numberOfDropdownNavItemsXl === 'undefined' ? 3 : numberOfDropdownNavItemsXl, 7 '1500': typeof numberOfDropdownNavItemsXxl === 'undefined' ? 4 : numberOfDropdownNavItemsXxl 8} 9 10if (!navigationType) { 11 console.log('Navigation Type is not selected'); 12} 13 14if (!mobileNavigationType) { 15 console.log('Mobile Navigation Type is not selected'); 16} 17 18const CheckMobile = (sizeToCheck = 992, useSizeToCheckParameter = false) => { 19 20 if (!useSizeToCheckParameter) { 21 switch (mobileNavigationExpandSize) { 22 case mobileNavigationExpandSizes.None: 23 sizeToCheck = 0; 24 break; 25 case mobileNavigationExpandSizes.Small: 26 sizeToCheck = 556; 27 break; 28 case mobileNavigationExpandSizes.Medium: 29 sizeToCheck = 748; 30 break; 31 case mobileNavigationExpandSizes.Large: 32 sizeToCheck = 992; 33 break; 34 case mobileNavigationExpandSizes.ExtraLarge: 35 sizeToCheck = 1200; 36 break; 37 case mobileNavigationExpandSizes.ExtraExtraLarge: 38 sizeToCheck = 1400; 39 break; 40 41 default: 42 break; 43 } 44 } 45 46 return $(window).width() < sizeToCheck; 47} 48 49 50// Quick change expand to lg for testing 51$('.navbar.navbar-expand-md').removeClass('navbar-expand-md').addClass(`navbar-expand-${mobileNavigationExpandSize}`); 52 53let didThePrependAppend = false; 54 55const 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"> 56 <div class="mobile-nav-toggle-icon"><span class="navbar-toggler-icon"><div></div></span></div> 57 </button>`; 58 59const mobileSearchBar = `<div id="mobileSearchBar" class="search-bar d-block d-lg-none"> 60 <form action="Site-Search/index.html" method="get"> 61 <label class="site-search-label"> 62 <span class="ada">Search</span> 63 <input id="siteSearchInput" name="search_string" type="text" value="Search" placeholder="Search" onclick="if (this.value == 'Search') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search';}"> 64 </label> 65 <button class="mobile-search-submit-button" type="submit" onclick="forms.freedom_search_form.referring_page_url.value=location.href;forms.freedom_search_form.submit();" value="Search Site" alt="Search"><i class="fa fa-search" aria-hidden="true"></i><span class="ada">Submit</span></button> 66 </form> 67</div>`; 68 69function MobileNavInHeader() { 70 if (!separateMobileNav) { 71 navigationType === navigationTypes.UnderHeader ? $('.top-bar-logo-container').after(offCanvasToggle) : $('.navigation').after(offCanvasToggle); 72 $('.navigation .navbar-toggler').hide(); 73 } 74 $('.navigation .offcanvas > .offcanvas-body').prepend(mobileSearchBar); 75} 76 77function MobilePlacement() { 78 // $('.top-bar-grid').on('init', function (slick) { 79 if (CheckMobile()) { 80 const subpageOffCanvasHeaderHeight = $('.offcanvas-header.subpage-offcanvas-header').height(); 81 const subpageOffCanvasHeaderDifference = subpageOffCanvasHeaderHeight / 2; 82 const subpageOffCanvasHeaderPadding = ($('.navbar-toggler').position().top + ($('.navbar-toggler').outerHeight() / 2)) - subpageOffCanvasHeaderDifference; 83 $('.offcanvas-header.subpage-offcanvas-header').css('padding-top', subpageOffCanvasHeaderPadding); 84 $('.navigation > .navbar > .offcanvas > .offcanvas-body').css('padding-top', $('.top-bar-header').outerHeight()); 85 } 86 // }); 87 88 // $('.top-bar-grid').on('destroy', function (slick) { 89 else { 90 $('.navigation > .navbar > .offcanvas > .offcanvas-body').css('padding-top', ''); 91 } 92 // }); 93 94} 95 96function CheckSeparateMobileNav() { 97 if (!separateMobileNav && CheckMobile()) { 98 $('.navigation').css('height', '0'); 99 $('.top-bar-title-wrapper').addClass('hamburger-nav-padding'); 100 } 101 else { 102 $('.navigation').css('height', ''); 103 $('.top-bar-title-wrapper').removeClass('hamburger-nav-padding'); 104 } 105} 106 107const offCanvasHeader = `<div class="offcanvas-header main-offcanvas-header"> 108 <!-- <h5 class="offcanvas-title" id="offcanvasNavbarLabel">Offcanvas</h5> --> 109 <!-- <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> --> 110 </div>`; 111$('.navbar .navbar-toggler').attr('data-bs-toggle', 'offcanvas'); 112$('#mainNavigation').removeClass('collapse navbar-collapse').addClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', 'false'); 113$('#mainNavigation > .navbar-nav').wrap('<div class="offcanvas-body" />'); 114 115function OffCanvasMobileNav() { 116 117 if (mobileNavigationType === mobileNavigationTypes.OffCanvas && CheckMobile()) { 118 $('#mainNavigation .nav-item >
118 i:not(.more-dropdown-ellipsis)').addClass('mobile-dropdown-arrow'); 119 const allDropdownToggles = $('.mobile-dropdown-arrow'); 120 const subOffCanvasHeader = `<div class="offcanvas-header subpage-offcanvas-header"> 121 <!-- <h5 class="offcanvas-title" id="offcanvasNavbarLabel">Offcanvas</h5> --> 122 <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> 123 </div>`; 124 125 if (!didThePrependAppend) { 126 $('#mainNavigation .dropdown-menu').addClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', 'false').removeClass('dropdown-menu').prepend(subOffCanvasHeader); 127 } 128 129 else { 130 $('#mainNavigation .dropdown-menu').addClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', 'false').removeClass('dropdown-menu'); 131 } 132 133 try { 134 $('.mobile-dropdown-arrow').attr('tabindex', '0'); 135 } catch(error) { 136 console.log(error) 137 } 138 139 $('.subpage-offcanvas-header').each(function (index) { 140 const linkText = $(this).parent('.mobile-dropdown').siblings('a').text(); 141 if (!didThePrependAppend) { 142 $(this).append(`<div class="subpage-offcanvas-header-link-text">${linkText}</div>`); 143 } 144 145 }); 146 147 $(allDropdownToggles).each(function (index) { 148 $(this).attr('offcanvas-target', `offcanvas-toggle-${index}`); 149 $(this).parent('a').siblings('.mobile-dropdown').attr('id', `offcanvas-toggle-${index}`); 150 $(this).siblings('.mobile-dropdown').attr('id', `offcanvas-toggle-${index}`); 151 }); 152 153 $('.mobile-dropdown-arrow').on('click keydown', function (event) { 154 if (event.type === 'click' || (event.type === 'keydown' && event.key === 'Enter')) { 155 try { 156 if (event.type === 'click') { 157 event.preventDefault(); 158 } 159 160 if (event.type === 'keydown') { 161 if (event.key !== 'Enter') { 162 return; 163 } 164 } 165 166 const thisTarget = $(this).attr('offcanvas-target'); 167 const myOffcanvas = document.getElementById(thisTarget); 168 const bsOffcanvas = new bootstrap.Offcanvas(myOffcanvas); 169 bsOffcanvas.show(); 170 171 } catch (error) { 172 console.log(error); 173 } 174 } 175 }); 176 177 didThePrependAppend = true; 178 } 179 else { 180 $(`.offcanvas .${mobileOffCanvasNavigationSide}`).removeClass(`offcanvas ${mobileOffCanvasNavigationSide}`).attr('data-bs-backdrop', ''); 181 $('#mainNavigation .more-dropdown > ul').addClass('dropdown-menu'); 182 $('#mainNavigation .nav-link > i').removeClass('mobile-dropdown-arrow'); 183 } 184} 185 186function NavigationSocialLinks() { 187 const facebookLink = $('.navigation-social .social-facebook')[0].dataset.navigationSocial?.trim(); 188 const twitterLink = $('.navigation-social .social-twitter')[0].dataset.navigationSocial?.trim(); 189 const instagramLink = $('.navigation-social .social-instagram')[0].dataset.navigationSocial?.trim(); 190 const linkedInLink = $('.navigation-social .social-linkedin')[0].dataset.navigationSocial?.trim(); 191 const youtubeLink = $('.navigation-social .social-youtube')[0].dataset.navigationSocial?.trim(); 192 193 const parallelogramFooterLinks = $('.parallelogram-footer-link'); 194 let socialLinksObject = {}; 195 const socialWebsites = ['facebook', 'twitter', 'instagram', 'linkedin', 'youtube']; 196 197 $(parallelogramFooterLinks).each(function (index) { 198 let thisLinksHREF = $(this).attr('href').trim(); 199 200 for (let i = 0; i < socialWebsites.length; i++) { 201 if (thisLinksHREF.includes(socialWebsites[i])) { 202 socialLinksObject[socialWebsites[i]] = thisLinksHREF; 203 } 204 } 205 }); 206 207 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> 208 <a class="navigation-social-link" href="${socialLinksObject.twitter || twitterLink}" target="_blank"><span class="ada">Twitter</span><i class="fa-brands fa-square-x-twitter"></i></a> 209 <a class="navigation-social-link" href="${socialLinksObject.instagram || instagramLink}" target="_blank"><span class="ada">Instagram</span><i class="fa-brands fa-instagram"></i></a> 210 <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> 211 <a class="navigation-social-link" href="${socialLinksObject.youtube || youtubeLink}" target="_blank"><span class="ada">Youtube</span><i class="fa-brands fa-youtube"></i></a>`; 212 213 const desktopSocial = `<li class="inside-more-dropdown more-dropdown-social d-none d-lg-block"><div class="more-dropdown-social-text">CONNECT WITH US</div>${socialLinks}</li>`; 214 const mobileSocial = `<li class="mobile-navigation-social d-block d-lg-none">${socialLinks}</li>`; 215 216 $('.navbar .navbar-nav').append(mobileSocial) 217 $('.more-dropdown .dropdown-menu').append(desktopSocial); 218 219 const navigationSocialLinks = $('.navigation-social-link'); 220 let navigationSocialLinksExist = false; 221 $(navigationSocialLinks).each(function (index) { 222 const currentHref = $(this).attr('href'); 223 if (currentHref && currentHref !== 'undefined') { 224 navigationSocialLinksExist = true; 225 } 226 }); 227 228 navigationSocialLinksExist || $('.more-dropdown-social-text').hide(); 229} 230 231const navItemsWithDropdowns = $('.navbar-nav .dropdown-menu').parent('.nav-item'); 232const firstLevelNavItems = $('.navbar-nav > .nav-item'); 233const firstLevelDropdowns = $(firstLevelNavItems).children('.dropdown-menu'); 234const secondLevelDropdowns = $(firstLevelDropdowns).find('> li > .dropdown-menu'); 235const thirdLevelDropdowns = $(secondLevelDropdowns).find('> li > .dropdown-menu'); 236const fourthLevelDropdowns = $(thirdLevelDropdowns).find('> li > .dropdown-menu'); 237$(navItemsWithDropdowns).addClass('dropdown'); 238$(navItemsWithDropdowns).find('> .nav-link').addClass('dropdown-toggle').attr('data-bs-toggle', 'dropdown').attr('data-bs-auto-close', 'outside'); 239$(firstLevelNavItems).addClass('first-level-nav-item'); 240$(firstLevelDropdowns).addClass('first-level-dropdown'); 241$(secondLevelDropdowns).addClass('second-level-dropdown'); 242$(thirdLevelDropdowns).addClass('third-level-dropdown'); 243$(fourthLevelDropdowns).addClass('fourth-level-dropdown'); 244 245try { 246 $(firstLevelNavItems).each(function (index) { 247 let thisNavItemsHREF = $(this).children('a.nav-link').attr('href'); 248 249 if (thisNavItemsHREF === 'index.html') { 250 $(this).addClass('nav-home-link'); 251 252 if (!showHome) { 253 $(this).addClass('hide-home-link'); 254 numberOfTopNavItems++; 255 } 256 257 return false; 258 } 259 }); 260 261 let navLinkWidths = 0; 262 let navWidth = $('.navigation').innerWidth() - 100; 263 const navItemPadding = CheckMobile(1200, true) ? 30 : 64; 264 265 if (autoNavWidth && CheckMobile(1700, true) && $(window).width() > 992) { 266 $(firstLevelNavItems).each(function (index) { 267 let currentNavLinksWidth = $(this).innerWidth() + navItemPadding; 268 if ($(this).find('.second-level-dropdown')) { 269 currentNavLinksWidth += 30; 270 } 271 272 navLinkWidths += currentNavLinksWidth; 273 if (navLinkWidths >= navWidth) { 274 numberOfTopNavItems = index; 275 return false; 276 } 277 });
278 } 279 280 if (useMoreDropdown && firstLevelNavItems.length > numberOfTopNavItems || allowSingleMoreDropdownLink) { 281 $(firstLevelNavItems).each(function (index) { 282 if (index < numberOfTopNavItems - 1) { 283 $(this).addClass(`top-level-nav`); 284 } 285 else { 286 $(this).addClass('inside-more-dropdown').removeClass('nav-item first-level-nav-item'); 287 $(this).children('a').removeClass('nav-link dropdown-toggle').addClass('dropdown-item').attr('data-bs-toggle', ''); 288 } 289 }); 290 291 $('.inside-more-dropdown').wrapAll('<li class="nav-item dropdown more-dropdown top-level-nav"><ul class="dropdown-menu"></ul></li>'); 292 if (CheckMobile()) { 293 $('.more-dropdown ul').addClass('first-level-dropdown'); 294 } 295 else { 296 $('.more-dropdown ul').removeClass('first-level-dropdown'); 297 } 298 299 $('.more-dropdown').prepend('<a class="nav-link dropdown-toggle more-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>'); 300 } 301 302 else { 303 $(firstLevelNavItems).each(function (index) { 304 $(this).addClass(`top-level-nav`); 305 }); 306 } 307 308 $('.first-level-dropdown').each(function (index) { 309 let hasSecondLevel = false; 310 const secondLevelsToCheck = $(this).children('li'); 311 const navImagesInThisDropdown = $(this).find('.dropdown-item[data-featured-photo]').filter(function (index) { 312 return $(this).attr('data-featured-photo').trim().length; 313 }); 314 $(secondLevelsToCheck).each(function (index) { 315 if (($(this).find('.second-level-dropdown').length > 0 && index < numberOfDropdownNavItems - 1) || navImagesInThisDropdown.length > 1) { 316 hasSecondLevel = true; 317 } 318 }); 319 if (!hasSecondLevel && !twoLevelNav) { 320 $(this).addClass('no-second-level'); 321 $(this).find('.second-level-dropdown').hide(); 322 } 323 324 else if (twoLevelNav) { 325 $(this).addClass('no-second-level'); 326 $(this).find('.second-level-dropdown').addClass('d-lg-none'); 327 } 328 }); 329 330 if (!useTopLevelNavDividers) { 331 $('.navigation .navbar .navbar-nav').addClass('no-dividers'); 332 } 333} 334 335catch (error) { 336 console.log(error); 337} 338 339function MorePagesInDropdowns(numberOfDropdownNavItems) { 340 if (useMoreInDropdowns && !CheckMobile()) { 341 $(firstLevelDropdowns).each(function (index) { 342 const thisDropdownsSubPages = $(this).find('> li'); 343 const hasSecondLevelDropdowns = !$(this).hasClass('no-second-level'); 344 if ($(thisDropdownsSubPages).length > numberOfDropdownNavItems + 1 && hasSecondLevelDropdowns) { 345 $(thisDropdownsSubPages).each(function (index) { 346 if (index > numberOfDropdownNavItems - 1) { 347 $(this).clone().appendTo($(this).parents('.dropdown-menu')).addClass('cloned-sub-page under-more-subpage').css('width', '').find('.second-level-dropdown').hide(); 348 $(this).addClass('moved-under-more-pages').hide(); 349 } 350 }); 351 $(this).find('.under-more-subpage').wrapAll('<li class="more-subpages-container"><ul class="second-level-dropdown"></ul></li>'); 352 $(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>'); 353 } 354 }); 355 } 356} 357 358function responsiveMorePagesInDropdowns() { 359 const scrollbarWidth = (window.innerWidth - $(window).width()); 360 $('.moved-under-more-pages').show().removeClass('moved-under-more-pages'); 361 $('.more-subpages-container').remove(); 362 switch (true) { 363 case $(window).width() < 1024 - scrollbarWidth: 364 break; 365 case $(window).width() < 1440 - scrollbarWidth: 366 MorePagesInDropdowns(internalNumberOfDropdownNavItems['1440']); 367 break; 368 case $(window).width() < 1500 - scrollbarWidth: 369 MorePagesInDropdowns(internalNumberOfDropdownNavItems['1500']); 370 break; 371 default: 372 MorePagesInDropdowns(numberOfDropdownNavItems); 373 } 374 $('.more-subpages-container .second-level-dropdown').addClass('fa-ul'); 375 if (!$('.more-subpages-container > .second-level-dropdown > li').find('> span.fa-li').length) { 376 $('.more-subpages-container > .second-level-dropdown > li').prepend(`<span class="fa-li d-none d-${mobileNavigationExpandSize}-inline-block"><i class="fa-thin fa-angle-right"></i></span>`); 377 } 378} 379 380 381const firstLevelNavItemsWithDropdowns = $('.top-level-nav.dropdown > .dropdown-toggle').not('.more-dropdown-toggle'); 382 383$(firstLevelNavItemsWithDropdowns).on('show.bs.dropdown', function (event) { 384 mobileNavigationType !== mobileNavigationTypes.OffCanvas || !CheckMobile() && $(this).find('> i').toggleClass('fa-angle-down fa-angle-up'); 385}); 386 387$(firstLevelNavItemsWithDropdowns).on('hide.bs.dropdown', function (event) { 388 mobileNavigationType !== mobileNavigationTypes.OffCanvas || !CheckMobile() && $(this).find('> i').toggleClass('fa-angle-down fa-angle-up'); 389}); 390 391// Mobile 392// Toggle the class mobile-nav-active when the mobile nav toggler is clicked 393function MobileNavIconToX() { 394 $('.navbar-toggler').click(function (event) { 395 try { 396 $('body').css('padding-right', ''); 397 if ($(this).find('.navbar-toggler-icon').hasClass('mobile-nav-active')) { 398 $('.navigation .offcanvas').each(function () { 399 const thisOne = bootstrap.Offcanvas.getInstance(this); 400 thisOne?.hide(); 401 }); 402 } 403 mobileNavTogglerToX && $('.navbar-toggler-icon').toggleClass('mobile-nav-active'); 404 $('.top-bar').addClass('offcanvas-nav-active'); 405 406 } catch (error) { 407 console.log(error); 408 } 409 }); 410} 411 412// Adds Font Awesome Bullets to nav items with dropdowns 413function FontAwesomeNavigationBullets() { 414 try { 415 const mobileDropdownArrow = '<i class="fa-thin fa-angle-right nav-link dropdown-toggle mobile-dropdown-arrow" data-bs-toggle="dropdown" data-bs-auto-close
415="outside"></i>'; 416 $('.dropdown-menu.third-level-dropdown').parent('li').prepend(mobileDropdownArrow); 417 $('.dropdown-menu.fourth-level-dropdown').parent('li').prepend(mobileDropdownArrow); 418 $('.second-level-dropdown').addClass('fa-ul'); 419 $('.second-level-dropdown > li').prepend(`<span class="fa-li d-none d-${mobileNavigationExpandSize}-inline-block"><i class="fa-thin fa-angle-right"></i></span>`); 420 $('.top-level-nav:not(".nav-home-link") > .nav-link').after(`<i class="fa-thin fa-angle-right d-${mobileNavigationExpandSize}-none"></i>`); 421 $('.top-level-nav:not(".nav-home-link"):not(".more-dropdown") > .nav-link').append(`<i class="fa-thin fa-angle-down d-none d-${mobileNavigationExpandSize}-inline-block"></i>`); 422 $('.dropdown-menu.second-level-dropdown').parent('li:not(".uses-nav-image")').prepend(mobileDropdownArrow); 423 } 424 catch (error) { 425 console.log('Navigation font awesome bullets did not work'); 426 } 427} 428 429function FullWidthDropdownOffset() { 430 const firstLevelDropdowns = $('.first-level-dropdown:not(.no-second-level)'); 431 const firstLevelDropdownPadding = ($(window).width() - parseInt($('.navigation.container').css('max-width'))) / 2; 432 433 if (CheckMobile()) { 434 $(firstLevelDropdowns).css('top', ''); 435 $(firstLevelDropdowns).css('left', ''); 436 $(firstLevelDropdowns).css('padding-left', ''); 437 $(firstLevelDropdowns).css('padding-right', ''); 438 } 439 else { 440 setTimeout(function () { 441 $(firstLevelDropdowns).css('display', 'flex'); 442 const topBarHeaderHeight = $('.top-bar-header').height(); 443 const topBarHeaderTopOffset = $('.top-bar-header').offset().top; 444 $(firstLevelDropdowns).offset({ top: topBarHeaderTopOffset + topBarHeaderHeight - 2, left: 0 }); 445 firstLevelDropdownPadding > 0 ? $(firstLevelDropdowns).css('padding-left', firstLevelDropdownPadding) : $(firstLevelDropdowns).css('padding-left', ''); 446 firstLevelDropdownPadding > 0 ? $(firstLevelDropdowns).css('padding-right', firstLevelDropdownPadding) : $(firstLevelDropdowns).css('padding-right', ''); 447 $(firstLevelDropdowns).css('display', ''); 448 }, 200); 449 } 450} 451 452function AddMobileDropdownArrow() { 453 if (CheckMobile()) { 454 $('.second-level-dropdown').parent('li').addClass('nav-item dropdown'); 455 $('.third-level-dropdown').parent('li').addClass('nav-item dropdown'); 456 $('.fourth-level-dropdown').parent('li').addClass('nav-item dropdown'); 457 } 458 else { 459 $('.second-level-dropdown').parent('li').removeClass('nav-item dropdown'); 460 $('.third-level-dropdown').parent('li').removeClass('nav-item dropdown'); 461 $('.fourth-level-dropdown').parent('li').removeClass('nav-item dropdown'); 462 } 463} 464 465function AddMobileDropdownClass() { 466 if (CheckMobile()) { 467 $('.more-dropdown ul').addClass('first-level-dropdown'); 468 $('.first-level-dropdown').addClass('mobile-dropdown'); 469 $('.second-level-dropdown').addClass('mobile-dropdown').addClass('dropdown-menu').show(); 470 $('.third-level-dropdown').addClass('mobile-dropdown').show(); 471 $('.fourth-level-dropdown').addClass('mobile-dropdown').show(); 472 $('.top-level-nav:not(".nav-home-link") .nav-link').removeClass('dropdown-toggle').attr('data-bs-toggle', ''); 473 } 474 else { 475 $('.more-dropdown .inside-more-dropdown .mobile-dropdown').css('display', 'none'); 476 $('.more-dropdown ul').removeClass('first-level-dropdown mobile-dropdown'); 477 $('.more-dropdown > ul').css('visibility', 'visible'); 478 $('.first-level-dropdown').css('visibility', ''); 479 $('.second-level-dropdown').css('visibility', ''); 480 $('.third-level-dropdown').css('visibility', ''); 481 $('.fourth-level-dropdown').css('visibility', ''); 482 $('.first-level-dropdown').removeClass('mobile-dropdown').addClass('dropdown-menu'); 483 $('.second-level-dropdown').removeClass('mobile-dropdown').removeClass('dropdown-menu'); 484 $('.third-level-dropdown').removeClass('mobile-dropdown').addClass('dropdown-menu').hide(); 485 $('.fourth-level-dropdown').removeClass('mobile-dropdown').addClass('dropdown-menu').hide(); 486 $('.top-level-nav:not(".nav-home-link") .nav-link').each(function () { 487 if ($(this).parents('.first-level-nav-item').find('ul').length) { 488 $(this).addClass('dropdown-toggle').attr('data-bs-toggle', 'dropdown'); 489 } 490 });
491 492 } 493} 494 495// Checks if stringToCheck has any slashes in it. If it does it adds <wbr> after each one and then wraps it all in a span. 496// If stringToCheck doesn't have any slashes it just wraps the string in a span 497function breakOnSlashes(stringToCheck) { 498 if (stringToCheck.includes("/") && (typeof breakSlashes === 'undefined' || breakSlashes)) { 499 const stringToCheckBreakSlashes = stringToCheck.replace(/\//g, '/<wbr>'); 500 return `<span>${stringToCheckBreakSlashes}</span>`; 501 } 502 else { 503 return `<span>${stringToCheck}</span>`; 504 } 505} 506 507function LoadNavImages() { 508 const navItemsToCheck = $('.dropdown.first-level-nav-item'); 509 let navItemsWithImagesCount = 1; 510 const navImageVisitText = "Visit Web Page" 511 $(navItemsToCheck).each(function (index) { 512 const secondLevelNavItems = $(this).children('.first-level-dropdown').children('li'); 513 const allNavItemsToCheck = $(secondLevelNavItems).add($(this)); 514 let counter = 0; 515 $(allNavItemsToCheck).each(function (index) { 516 517 const theCurrentItem = $(this); 518 try { 519 const currentLink = $(this).children('a'); 520 const currentLinksHREF = $(currentLink).attr('href'); 521 const currentLinksText = $(currentLink).text(); 522 const currentLinksTextFirstSpace = currentLinksText.indexOf(' '); 523 let currentLinksFirstWord = currentLinksTextFirstSpace === -1 ? currentLinksText : currentLinksText.slice(0, currentLinksTextFirstSpace); 524 let currentLinksOtherWords = currentLinksTextFirstSpace === -1 ? '' : currentLinksText.slice(currentLinksTextFirstSpace + 1, currentLinksText.length); 525 const currentLinksFeaturedPhoto = $(currentLink).attr('data-featured-photo'); 526 const currentLinksPageIconPath = $(currentLink).attr('data-page-icon'); 527 const currentLinksPageIcon = currentLinksPageIconPath ? `<img src="${currentLinksPageIconPath}" class="page-icon" alt="...">` : `<i class="fa-thin fa-link-horizontal default-nav-icon"></i>`; 528 let currentLinksPageTagline = $(currentLink).attr('data-page-tagline'); 529 const navImageDisplayClasses = showMobileNavImages ? '' : 'd-none d-md-block'; 530 const navImageColorOverlayClass = index === 0 ? 'left' : 'right'; 531 let topNavImageText = currentLinksPageTagline ? currentLinksText : currentLinksFirstWord; 532 currentLinksFirstWord = currentLinksFirstWord && breakOnSlashes(currentLinksFirstWord); 533 currentLinksOtherWords = currentLinksOtherWords && breakOnSlashes(currentLinksOtherWords); 534 topNavImageText = topNavImageText && breakOnSlashes(topNavImageText); 535 currentLinksPageTagline = currentLinksPageTagline && breakOnSlashes(currentLinksPageTagline); 536 537 if (currentLinksFeaturedPhoto) { 538 const currentLinksNewElement = `<a class="dropdown-item nav-image ${navImageDisplayClasses}" href="${currentLinksHREF}" target="_self"><div class="card navigation-image-${navItemsWithImagesCount} nav-image-color-${navImageColorOverlayClass}"><img src="${currentLinksFeaturedPhoto}" class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title">${topNavImageText}${currentLinksPageIcon}</h5><p class="card-text">${currentLinksPageTagline || currentLinksOtherWords}</p><p class="card-text visit-website">${navImageVisitText}<i class="fa-thin fa-arrow-right-long"></i></p></div></div></a>`; 539 540 if ($(theCurrentItem).hasClass('first-level-nav-item')) { 541 const currentLinksNewElementWrapped = `<li class="uses-nav-image first-nav-image"><a class="dropdown-item nav-image ${navImageDisplayClasses}" href="${currentLinksHREF}" target="_self"><div class="card navigation-image-${navItemsWithImagesCount} nav-image-color-${navImageColorOverlayClass}"><img src="${currentLinksFeaturedPhoto}" class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title">${topNavImageText}${currentLinksPageIcon}</h5><p class="card-text">${currentLinksPageTagline || currentLinksOtherWords}</p><p class="card-text visit-website">${navImageVisitText}<i class="fa-thin fa-arrow-right-long"></i></p></div></div></a></li>`; 542 $(theCurrentItem).children('.first-level-dropdown').prepend(currentLinksNewElementWrapped); 543 } 544 else { 545 $(theCurrentItem).prepend(currentLinksNewElement); 546 547 counter === 0 && $(theCurrentItem).addClass('first-nav-image'); 548 if (showMobileNavImages) { 549 $(currentLink).addClass('d-none'); 550 } 551 else { 552 $(currentLink).addClass('d-block d-md-none'); 553 } 554 } 555 $(theCurrentItem).addClass('uses-nav-image'); 556 $(currentLink).addClass(`uses-sub-page-nav-image-${navItemsWithImagesCount}`); 557 $(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'); 558 navItemsWithImagesCount++; 559 counter++; 560 } 561 562 } 563 564 catch (error) { 565 console.log(error); 566 } 567 });
568 }); 569} 570 571function NoSubsSingleDropdown() { 572 $('.first-level-dropdown').each(function (index) { 573 if ($(this).find('.second-level-dropdown').length <= 0) { 574 $(this).addClass('no-second-level'); 575 } 576 }); 577} 578 579function FirstLevelDropdownItemWidths() { 580 const topLevelDropdowns = $('.first-level-dropdown').not('.no-second-level'); 581 $(topLevelDropdowns).each(function (index) { 582 const dropdownItems = $(this).children('li:not(.moved-under-more-pages)'); 583 const numberOfDropdownItems = $(dropdownItems).length; 584 const navImages = $(this).children('.uses-nav-image'); 585 $(navImages).css('max-width', '25%'); 586 const subWidth = 100 / (numberOfDropdownItems); 587 CheckMobile() ? $(dropdownItems).css('width', '') : $(dropdownItems).css('width', `${subWidth}%`); 588 if(CheckMobile(375, true)){ 589 $(navImages).css('max-width', '90%'); 590 } 591 else if(CheckMobile(425, true)){ 592 $(navImages).css('max-width', '80%'); 593 } 594 else if(CheckMobile(700, true)){ 595 $(navImages).css('max-width', '60%'); 596 } 597 else if(CheckMobile(992, true)){ 598 $(navImages).css('max-width', '40%'); 599 } 600 }); 601} 602 603// Moves the topbar right side links into the nav when in mobile (< 992) 604let topBarLinksForNav = $('.top-bar-link'); 605 606const topBarLinksForNavFiltered = $(topBarLinksForNav).filter(function (index) { 607 return $(this).find('.schools-dropdown').length <= 0 && $(this).find('.translate-dropdown').length <= 0; 608}); 609 610function MoveTopBarLinksToNav() { 611 try { 612 if (typeof separateMobileNav !== 'undefined' && separateMobileNav) { 613 elementEmptyCheck($('.top-bar-link'), '992'); 614 615 if (CheckMobile()) { 616 if ($(topBarLinksForNavFiltered).exists()) { 617 $('.navbar .container-fluid').append($(topBarLinksForNavFiltered)); 618 } 619 } 620 621 else if ($(window).width() > 992) { 622 if ($(topBarLinksForNavFiltered).exists()) { 623 $('.top-bar-title-wrapper').after($(topBarLinksForNavFiltered)); 624 } 625 } 626 } 627 } 628 catch (error) { 629 console.log('Top bar links to under banner did not work'); 630 } 631} 632 633function NavImageColorOverlay() { 634 const navImageCards = $('.navbar .card'); 635 $(navImageCards).each(function (index) { 636 if ($(this).css('background-color') == 'rgba(0, 0, 0, 0)') { 637 $(this).children('.card-img-top').css('opacity', '1'); 638 } 639 }); 640} 641 642function AddNavTopOnScroll() { 643 const topBar = $('.top-bar-header.home-page'); 644 const header = $(topBar).parent('header'); 645 const topBarHeader = $(topBar).add($(header)); 646 $(topBarHeader).addClass('navTop'); 647 648 $(window).scroll(function () { 649 if ($(window).scrollTop() >= 100) { 650 $(topBarHeader).removeClass('navTop'); 651 } 652 653 else { 654 $(topBarHeader).addClass('navTop'); 655 } 656 }); 657} 658 659function NavTypeClasses() { 660 if (navigationType === navigationTypes.InsideHeader) { 661 if (typeof insideHeaderTransparency === 'undefined' || insideHeaderTransparency) { 662 AddNavTopOnScroll(); 663 } 664 $('.navigation .navbar-nav').attr('id', 'navbarNav'); 665 $('.navigation').addClass('inside-header-nav'); 666 $('.top-bar-header').addClass('nav-inside'); 667 } 668 669 if (navigationType === navigationTypes.ElkGrove) { 670 $('.navigation').addClass('elk-grove-nav'); 671 } 672} 673 674function navGrid() { 675 if (navigationType === navigationTypes.InsideHeader) { 676 const gridTopBarLinks = $('.top-bar-grid .top-bar-logo-container').add('.top-bar-grid .top-bar-title-wrapper').add('.top-bar-grid .topbar-contrast-button').add('.top-bar-grid .top-bar-link'); 677 const gridTopBarLinksFiltered = $(gridTopBarLinks).filter(function (index) { 678 return $(this).css('display') != 'none'; 679 }); 680 const numberOfTopBarLinks = gridTopBarLinksFiltered.length + 1; 681 document.getElementById("navbarNav").style.gridColumnEnd = numberOfTopBarLinks; 682 } 683} 684 685function addSlashBreaks() { 686 const allLinks = $('.navbar .first-level-dropdown li:not(.uses-nav-image) .dropdown-item'); 687 $(allLinks).each(function () { 688 const newHtml = breakOnSlashes($(this).text()); 689 $(this).html(newHtml); 690 }); 691} 692 693function MoreDropdownPlacement() { 694 try { 695 if (typeof autoMoreDropdownPlacement === 'undefined' || autoMoreDropdownPlacement) { 696 const moreDropdown = $('.more-dropdown > .dropdown-menu'); 697 const mobileMoreDropdown = $('.more-dropdown > .first-level-dropdown'); 698 const scrollbarWidth = (window.innerWidth - $(window).width()); 699 $(moreDropdown).show(); 700 if (!CheckMobile()) { 701 const topbarHeaderBottomBorderWidth = parseInt($('.top-bar-header').css('border-bottom-width')); 702 const moreDropdownTopOffset = $('.navbar-nav').offset().top + ($('.navbar-nav').outerHeight() - topbarHeaderBottomBorderWidth);
703 $(moreDropdown).offset({ top: moreDropdownTopOffset }); 704 placeElementAgainstWindowEdge($(moreDropdown), 'right', scrollbarWidth); 705 // TODO: Add what to change display to after placeElementAgainstWindowEdge like the other placement functions 706 $(moreDropdown).show(); 707 const moreDropdownLeftOffset = $(window).width() - $(moreDropdown).offset().left; 708 $(moreDropdown).css('min-width', moreDropdownLeftOffset + scrollbarWidth); 709 } 710 else { 711 $(mobileMoreDropdown).removeClass('went-off-right'); 712 $(moreDropdown).removeClass('more-auto-placement'); 713 $(mobileMoreDropdown).css('left', ''); 714 $(mobileMoreDropdown).css('top', ''); 715 $(mobileMoreDropdown).css('min-width', ''); 716 } 717 $(moreDropdown).css('display', ''); 718 } 719 720 } 721 722 catch (error) { 723 console.log(error); 724 } 725} 726 727function lastSingleDropdownWidth() { 728 try { 729 const moreDropdown = $('.more-dropdown'); 730 const lastNavItem = $('.first-level-nav-item').last(); 731 const lastDropdown = $(lastNavItem).children('.first-level-dropdown.no-second-level'); 732 $(lastDropdown).css({ left: '', width: '' }); 733 $(lastDropdown).find('.dropdown-item').css('white-space', ''); 734 if (!CheckMobile()) { 735 if ($(moreDropdown).length && $(lastDropdown).is(':off-right')) { 736 $(lastDropdown).css('width', $(lastDropdown).width() - getOffScreenAmount(lastDropdown)); 737 $(lastDropdown).find('.dropdown-item').css('white-space', 'normal'); 738 } 739 else if ($(lastDropdown).is(':off-right')) { 740 moveOffScreenElementBackOnScreen(lastDropdown); 741 } 742 } 743 } 744 745 catch (error) { 746 console.log(error); 747 } 748} 749 750$(document).ready(function () { 751 responsiveMorePagesInDropdowns(); 752 FullWidthDropdownOffset(); 753 NavTypeClasses(); 754 // CheckSeparateMobileNav(); 755 useNavImages && LoadNavImages(); 756 FirstLevelDropdownItemWidths(); 757 NavigationSocialLinks(); 758 AddMobileDropdownArrow(); 759 FontAwesomeNavigationBullets(); 760 AddMobileDropdownClass(); 761 OffCanvasMobileNav(); 762 MobileNavInHeader(); 763 MoveTopBarLinksToNav(); 764 MobileNavIconToX(); 765 MobilePlacement(); 766 typeof breakSlashes === 'undefined' || breakSlashes && addSlashBreaks(); 767 NavImageColorOverlay(); 768 MoreDropdownPlacement(); 769 lastSingleDropdownWidth(); 770 CheckSeparateMobileNav(); 771 772 // Quickly fixing arrows next to links with no dropdowns for now 773 const allTopLevel = $('.first-level-nav-item'); 774 $(allTopLevel).each(function () { 775 if ($(this).find('.first-level-dropdown').length <= 0) { 776 $(this).find('.fa-angle-down').remove(); 777 $(this).find('.fa-angle-right').remove(); 778 $(this).find('a').removeClass('dropdown-toggle'); 779 $(this).find('a').attr('data-bs-toggle', ''); 780 } 781 }); 782}); 783 784$(window).debouncedResize(function () { 785 CheckMobile(); 786 // CheckSeparateMobileNav(); 787 AddMobileDropdownArrow(); 788 AddMobileDropdownClass(); 789 responsiveMorePagesInDropdowns(); 790 OffCanvasMobileNav(); 791 FirstLevelDropdownItemWidths(); 792 MoveTopBarLinksToNav(); 793 setTimeout(() => { MoreDropdownPlacement() }, 500); 794 FullWidthDropdownOffset(); 795 setTimeout(() => { lastSingleDropdownWidth() }, 500); 796 MobilePlacement(); 797}); 798 799window.addEventListener('load', (event) => { 800 FullWidthDropdownOffset(); 801 // navGrid(); 802 MoreDropdownPlacement(); 803});
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.