+1 (778) 771 5550 info@retyre-x.com

Our Vision

/* ========================================================== RETYRE-X — DIVI 4 FULLSCREEN MENU BEHAVIOUR Adds accessible submenu arrows and synchronises the X icon. ========================================================== */ (function () { "use strict"; var menuObserver = null; var bodyObserver = null; var currentContainer = null; function syncMenuIcon() { var container = document.querySelector(".et_slide_in_menu_container"); if (!container) { document.body.classList.remove("rx-menu-open"); return; } var isOpen = container.classList.contains("et_pb_fullscreen_menu_opened") || document.body.classList.contains("et_pb_fullscreen_menu_opened"); document.body.classList.toggle("rx-menu-open", isOpen); } function initialiseSubmenus() { var menu = document.querySelector( ".et_header_style_fullscreen #mobile_menu_slide" ); if (!menu) { return; } var parentItems = menu.querySelectorAll( "li.menu-item-has-children" ); parentItems.forEach(function (item, index) { var link = Array.from(item.children).find(function (child) { return child.tagName === "A"; }); var submenu = Array.from(item.children).find(function (child) { return child.tagName === "UL" && child.classList.contains("sub-menu"); }); if (!link || !submenu) { return; } /* Give each submenu a stable ID for accessibility. */ if (!submenu.id) { submenu.id = "rx-submenu-" + index + "-" + Math.random().toString(36).slice(2, 8); } /* Reuse an existing toggle rather than creating duplicates. */ var toggle = Array.from(item.children).find(function (child) { return child.classList.contains("rx-submenu-toggle"); }); if (!toggle) { toggle = document.createElement("button"); toggle.type = "button"; toggle.className = "rx-submenu-toggle"; toggle.setAttribute("aria-controls", submenu.id); toggle.setAttribute("aria-expanded", "false"); toggle.setAttribute( "aria-label", "Show submenu for " + link.textContent.trim() ); item.appendChild(toggle); } /* Keep the visual and accessibility states in sync. */ var expanded = item.classList.contains("rx-submenu-open"); toggle.setAttribute("aria-expanded", String(expanded)); submenu.setAttribute("aria-hidden", String(!expanded)); if (!toggle.dataset.rxBound) { toggle.addEventListener("click", function (event) { event.preventDefault(); event.stopPropagation(); var willOpen = !item.classList.contains( "rx-submenu-open" ); item.classList.toggle("rx-submenu-open", willOpen); toggle.setAttribute( "aria-expanded", String(willOpen) ); submenu.setAttribute( "aria-hidden", String(!willOpen) ); toggle.setAttribute( "aria-label", (willOpen ? "Hide submenu for " : "Show submenu for ") + link.textContent.trim() ); }); toggle.dataset.rxBound = "true"; } }); } function watchMenuContainer() { var container = document.querySelector( ".et_slide_in_menu_container" ); if (!container || container === currentContainer) { syncMenuIcon(); return; } if (menuObserver) { menuObserver.disconnect(); } currentContainer = container; menuObserver = new MutationObserver(function () { syncMenuIcon(); }); menuObserver.observe(container, { attributes: true, attributeFilter: ["class"] }); syncMenuIcon(); } function initialiseRetyreMenu() { initialiseSubmenus(); watchMenuContainer(); } function startRetyreMenu() { initialiseRetyreMenu(); /* Divi can insert or rebuild its menu after the page loads. */ bodyObserver = new MutationObserver(function () { initialiseRetyreMenu(); }); bodyObserver.observe(document.body, { childList: true, subtree: true }); /* Also detect a menu-open class applied directly to the body. */ var bodyClassObserver = new MutationObserver(function () { syncMenuIcon(); }); bodyClassObserver.observe(document.body, { attributes: true, attributeFilter: ["class"] }); } if (document.readyState === "loading") { document.addEventListener( "DOMContentLoaded", startRetyreMenu, { once: true } ); } else { startRetyreMenu(); } })();