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.