/** * Единое мобильное меню sprut61.ru: * — header.sprut-site-header (WP-страницы) * — header.site-header + .nav (статические лендинги /sprut/pages/) * — главная: .mobile-menu-toggle + .nav-links */ (function () { "use strict"; function repairSprutHeader(h) { if (!h || h.dataset.sprutRepaired) return; var burger = h.querySelector(".sprut-burger"); if (burger && burger.parentNode && burger.parentNode.tagName === "P") { var p = burger.parentNode; while (p.firstChild) p.parentNode.insertBefore(p.firstChild, p); p.parentNode.removeChild(p); } h.dataset.sprutRepaired = "1"; } function bindSprutHeaders() { document.querySelectorAll("header.sprut-site-header").forEach(function (h) { repairSprutHeader(h); if (h.dataset.sprutNavBound) return; var b = h.querySelector(".sprut-burger"); if (!b) return; h.dataset.sprutNavBound = "1"; b.setAttribute("type", "button"); b.setAttribute("aria-expanded", "false"); b.setAttribute("aria-label", "Меню"); b.addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); var open = h.classList.toggle("sprut-menu-open"); b.setAttribute("aria-expanded", open ? "true" : "false"); document.querySelectorAll("header.sprut-site-header").forEach(function (o) { if (o !== h) o.classList.remove("sprut-menu-open"); }); }); }); } function ensureLandingBurger(header) { if (!header || header.dataset.sprutLandingNav) return; var nav = header.querySelector("nav.nav, nav"); if (!nav) return; var inner = header.querySelector(".inner, .container") || header; if (inner.querySelector(".sprut-landing-burger")) { header.dataset.sprutLandingNav = "1"; return; } var btn = document.createElement("button"); btn.type = "button"; btn.className = "sprut-landing-burger"; btn.setAttribute("aria-label", "Меню"); btn.setAttribute("aria-expanded", "false"); for (var i = 0; i < 3; i++) { var s = document.createElement("span"); btn.appendChild(s); } inner.insertBefore(btn, nav); btn.addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); var open = header.classList.toggle("sprut-landing-menu-open"); btn.setAttribute("aria-expanded", open ? "true" : "false"); }); header.dataset.sprutLandingNav = "1"; } function bindLandingHeaders() { document.querySelectorAll("header.site-header").forEach(ensureLandingBurger); } function bindHomepageNav() { var toggle = document.querySelector("header .mobile-menu-toggle"); var navLinks = document.querySelector("header .nav-links"); if (!toggle || !navLinks || toggle.dataset.sprutHomeBound) return; toggle.dataset.sprutHomeBound = "1"; toggle.setAttribute("type", "button"); toggle.setAttribute("aria-label", "Меню"); toggle.addEventListener("click", function (e) { e.preventDefault(); e.stopPropagation(); navLinks.classList.toggle("active"); toggle.classList.toggle("active"); }); navLinks.addEventListener("click", function (e) { if (e.target.tagName === "A") { navLinks.classList.remove("active"); toggle.classList.remove("active"); } }); } document.addEventListener("click", function (e) { document.querySelectorAll("header.sprut-site-header.sprut-menu-open").forEach(function (h) { if (!h.contains(e.target)) { h.classList.remove("sprut-menu-open"); var b = h.querySelector(".sprut-burger"); if (b) b.setAttribute("aria-expanded", "false"); } }); document.querySelectorAll("header.site-header.sprut-landing-menu-open").forEach(function (h) { if (!h.contains(e.target)) { h.classList.remove("sprut-landing-menu-open"); var lb = h.querySelector(".sprut-landing-burger"); if (lb) lb.setAttribute("aria-expanded", "false"); } }); }); function init() { bindSprutHeaders(); bindLandingHeaders(); bindHomepageNav(); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); } else { init(); } })();