(() => { 'use strict'; const ready = (fn) => document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', fn, {once:true}) : fn(); ready(() => { const body = document.body; const header = document.querySelector('[data-site-header]'); const backdrop = document.querySelector('[data-screen-backdrop]'); const nav = document.querySelector('[data-nav-drawer]'); const search = document.querySelector('[data-search-overlay]'); const filter = document.querySelector('[data-filter-drawer]'); const panels = [nav, search].filter(Boolean); const lock = (value) => body.classList.toggle('no-scroll', value); const setBackdrop = (value) => { if (backdrop) backdrop.hidden = !value; }; const closePanels = () => { panels.forEach((panel) => { panel.hidden = true; panel.setAttribute('aria-hidden','true'); }); filter?.classList.remove('is-open'); document.querySelector('[data-nav-open]')?.setAttribute('aria-expanded','false'); setBackdrop(false); lock(false); }; const openPanel = (panel) => { if (!panel) return; closePanels(); panel.hidden = false; panel.setAttribute('aria-hidden','false'); setBackdrop(true); lock(true); panel.querySelector('input,button,a')?.focus({preventScroll:true}); }; document.querySelector('[data-nav-open]')?.addEventListener('click', (event) => { openPanel(nav); event.currentTarget.setAttribute('aria-expanded','true'); }); document.querySelector('[data-nav-close]')?.addEventListener('click', closePanels); document.querySelector('[data-search-open]')?.addEventListener('click', () => openPanel(search)); document.querySelector('[data-search-close]')?.addEventListener('click', closePanels); document.querySelector('[data-filter-open]')?.addEventListener('click', () => { if (!filter) return; closePanels(); filter.classList.add('is-open'); setBackdrop(true); lock(true); }); document.querySelector('[data-filter-close]')?.addEventListener('click', closePanels); backdrop?.addEventListener('click', closePanels); document.addEventListener('keydown', (event) => { if (event.key === 'Escape') closePanels(); }); const onScroll = () => header?.classList.toggle('is-scrolled', window.scrollY > 24); onScroll(); window.addEventListener('scroll', onScroll, {passive:true}); const input = document.querySelector('[data-live-search]'); const results = document.querySelector('[data-live-search-results]'); const searchForm = input?.closest('form'); const renderSearch = () => { if (!input || !results) return; const query = input.value.trim().toLocaleLowerCase('ru-RU'); const products = Array.isArray(window.NOVERA_CATALOG) ? window.NOVERA_CATALOG : []; if (query.length < 2) { results.innerHTML = '
Введите не менее двух символов.
'; return; } const matches = products.filter((item) => [item.title,item.category,item.sku].join(' ').toLocaleLowerCase('ru-RU').includes(query)).slice(0,8); results.innerHTML = matches.length ? matches.map((item) => `Товары не найдены.
'; }; input?.addEventListener('input', renderSearch); searchForm?.addEventListener('submit', () => renderSearch()); }); })();