(function () { var BREAKPOINT = 1050; var NAV_SELECTOR = '.navbar-nav'; var POSITIONS = ['center', 'left', 'right']; var MAX_TRIES = 80; var RETRY_INTERVAL = 100; /* ========================================================================== BASE TEMPLATE - NAV LOGO INSERT (combined, loadable, shared file) Do not edit. Position is auto-detected from whichever .baseTemplateSpecialLogo--(left|center|right) block exists on the page. Optional per-site styling overrides (put in a separate style tag, anywhere on the page, before or after this script): :root { --baseTemplateNavLogo-gap: 60px; --baseTemplateNavLogo-dropdown-min-width: 180px; --baseTemplateNavLogo-logo-flex-basis: 20%; } ========================================================================== */ /* ---- CSS (uses var(--x, fallback) so per-site :root overrides always work, regardless of load order) ---- */ var css = '.baseTemplateSpecialLogo {' + ' display: none;' + '}' + '.baseTemplateNavLogo-mobile .baseTemplateSpecialLogo {' + ' display: block !important;' + '}' + '.baseTemplateNavLogo-desktop .menubg,' + '.baseTemplateNavLogo-desktop .menubg .container,' + '.baseTemplateNavLogo-desktop .menubg .container nav {' + ' width: 100% !important;' + '}' + '.baseTemplateNavLogo-desktop .navbar-nav .dropdown-menu,' + '.baseTemplateNavLogo-desktop .baseTemplateNavLeft .dropdown-menu,' + '.baseTemplateNavLogo-desktop .baseTemplateNavRight .dropdown-menu {' + ' position: absolute;' + ' top: 100%;' + ' left: 0;' + ' z-index: 1000;' + ' display: none;' + ' min-width: var(--baseTemplateNavLogo-dropdown-min-width, 160px) !important;' + ' padding: 5px 0;' + ' margin: 2px 0 0;' + ' font-size: 14px;' + ' text-align: left;' + ' list-style: none;' + '}' + '.baseTemplateNavLogo-desktop .navbar-nav .dropdown:hover .dropdown-menu,' + '.baseTemplateNavLogo-desktop .baseTemplateNavLeft .dropdown:hover .dropdown-menu,' + '.baseTemplateNavLogo-desktop .baseTemplateNavRight .dropdown:hover .dropdown-menu {' + ' display: block !important;' + '}' + /* ---- Center layout ---- */ '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="center"] .navbar-nav {' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + ' gap: var(--baseTemplateNavLogo-gap, 40px);' + ' width: 100%;' + ' list-style: none;' + ' padding: 0;' + ' margin: 0;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="center"] .baseTemplateNavLeft,' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="center"] .baseTemplateNavRight {' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + ' gap: 20px;' + ' flex: 1;' + ' list-style: none;' + ' padding: 0;' + ' margin: 0;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="center"] .baseTemplateLogoWrapper {' + ' flex: 0 0 auto;' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + '}' + /* ---- Left / Right layout ---- */ '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="left"] .baseTemplateDesktopHeaderWrap,' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="right"] .baseTemplateDesktopHeaderWrap {' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + ' gap: var(--baseTemplateNavLogo-gap, 40px);' + ' width: 100%;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="left"] .baseTemplateDesktopHeaderWrap .navbar-nav,' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="right"] .baseTemplateDesktopHeaderWrap .navbar-nav {' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + ' gap: 20px;' + ' flex: 1;' + ' list-style: none;' + ' margin: 0;' + ' padding: 0;' + ' flex-wrap: wrap !important;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="left"] .baseTemplateLogoWrapper {' + ' flex: 0 0 auto;' + ' flex-basis: var(--baseTemplateNavLogo-logo-flex-basis, 25%);' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + ' order: 1;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="left"] .baseTemplateDesktopHeaderWrap .navbar-nav {' + ' order: 2;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="right"] .baseTemplateLogoWrapper {' + ' flex: 0 0 auto;' + ' flex-basis: var(--baseTemplateNavLogo-logo-flex-basis, 25%);' + ' display: flex;' + ' align-items: center;' + ' justify-content: center;' + ' order: 2;' + '}' + '.baseTemplateNavLogo-desktop[data-basetemplate-nav-position="right"] .baseTemplateDesktopHeaderWrap .navbar-nav {' + ' order: 1;' + '}'; function addStyleSheet(styles) { var stylesheet = document.createElement('style'); stylesheet.setAttribute('data-basetemplate', 'nav-logo'); stylesheet.appendChild(document.createTextNode(styles)); document.head.appendChild(stylesheet); } /* ---- DOM logic ---- */ function findLogoSource() { for (var i = 0; i < POSITIONS.length; i++) { var pos = POSITIONS[i]; var el = document.querySelector('.baseTemplateSpecialLogo--' + pos); if (el) return { el: el, position: pos }; } return null; } function runWithRetry(fn, maxTries, interval) { var tries = 0; var t = setInterval(function () { tries++; var done = fn(); if (done || tries >= maxTries) clearInterval(t); }, interval); } function init() { var found = findLogoSource(); var currentNavCheck = document.querySelector(NAV_SELECTOR); if (!found || !currentNavCheck) return false; var position = found.position; var logoSource = found.el; var currentNav = currentNavCheck; var originalItems = Array.prototype.map.call(currentNav.children, function (li) { return li.cloneNode(true); }); document.documentElement.setAttribute('data-basetemplate-nav-position', position); function buildLogo() { var logo = logoSource.cloneNode(true); logo.className = 'baseTemplateLogoWrapper'; logo.style.display = 'flex'; return logo; } function freshNavList(className) { var ul = document.createElement('ul'); ul.className = className; originalItems.forEach(function (li) { ul.appendChild(li.cloneNode(true)); }); return ul; } function buildCenter() { if (document.querySelector('.baseTemplateLogoWrapper')) return; var splitIndex = Math.ceil(originalItems.length / 2); var leftUl = document.createElement('ul'); leftUl.className = 'baseTemplateNavLeft'; var rightUl = document.createElement('ul'); rightUl.className = 'baseTemplateNavRight'; originalItems.forEach(function (li, idx) { (idx < splitIndex ? leftUl : rightUl).appendChild(li.cloneNode(true)); }); currentNav.innerHTML = ''; currentNav.appendChild(leftUl); currentNav.appendChild(buildLogo()); currentNav.appendChild(rightUl); } function buildLeftOrRight() { if (document.querySelector('.baseTemplateDesktopHeaderWrap')) return; var wrapper = document.createElement('div'); wrapper.className = 'baseTemplateDesktopHeaderWrap'; var newNav = freshNavList('nav navbar-nav'); var logo = buildLogo(); if (position === 'left') { wrapper.appendChild(logo); wrapper.appendChild(newNav); } else { wrapper.appendChild(newNav); wrapper.appendChild(logo); } currentNav.parentNode.replaceChild(wrapper, currentNav); currentNav = newNav; } function restoreMobile() { var wrap = document.querySelector('.baseTemplateDesktopHeaderWrap'); var restoredNav = freshNavList('nav navbar-nav'); if (wrap) { wrap.parentNode.replaceChild(restoredNav, wrap); currentNav = restoredNav; } else if (currentNav.querySelector('.baseTemplateLogoWrapper')) { currentNav.parentNode.replaceChild(restoredNav, currentNav); currentNav = restoredNav; } } function manageNav() { var isDesktop = window.innerWidth >= BREAKPOINT; document.documentElement.classList.toggle('baseTemplateNavLogo-desktop', isDesktop); document.documentElement.classList.toggle('baseTemplateNavLogo-mobile', !isDesktop); if (isDesktop) { position === 'center' ? buildCenter() : buildLeftOrRight(); } else { restoreMobile(); } } manageNav(); window.addEventListener('resize', manageNav); return true; } addStyleSheet(css); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { runWithRetry(init, MAX_TRIES, RETRY_INTERVAL); }); } else { runWithRetry(init, MAX_TRIES, RETRY_INTERVAL); } })();