Passer au contenu principal
Get 20% OFF ANY shoes SUMMER20OFF | Get 25% OFF apparel SUMMER25OFF
Menu
Give us a Call!
EN
FR
document.addEventListener('DOMContentLoaded', function() { const headerInner = document.querySelector('.ins-header_inner'); if (!headerInner) { console.warn('Header inner container not found. Check your theme structure.'); return; } // Find or create search container let searchWrap = document.querySelector('.ins-header_search-wrap') || document.createElement('div'); searchWrap.classList.add('ins-header_search-wrap', 'custom-search-container'); searchWrap.style.display = 'block !important'; // Ensure visibility // Create or select form and input let searchForm = searchWrap.querySelector('form') || document.createElement('form'); searchForm.action = '/search'; searchForm.method = 'GET'; searchForm.classList.add('custom-search-form'); searchForm.setAttribute('role', 'search'); // Accessibility let searchInput = searchWrap.querySelector('input[type="text"]') || document.createElement('input'); searchInput.type = 'text'; searchInput.name = 'q'; // Fallback for form submit searchInput.placeholder = 'Search products...'; searchInput.classList.add('ins-header_search-field', 'custom-search-input'); searchInput.setAttribute('aria-label', 'Search products'); // Accessibility searchInput.autocomplete = 'off'; // Prevent browser suggestions interfering // Create results dropdown let searchResults = searchWrap.querySelector('#search-results') || document.createElement('div'); searchResults.id = 'search-results'; searchResults.classList.add('custom-search-results'); searchResults.style.display = 'none'; searchResults.setAttribute('aria-live', 'polite'); // Accessibility for screen readers // Append elements if newly created searchForm.appendChild(searchInput); searchWrap.appendChild(searchForm); searchWrap.appendChild(searchResults); // Insert left of logo const logoCenter = headerInner.querySelector('.ins-header_center'); if (logoCenter) { headerInner.insertBefore(searchWrap, logoCenter); } else { headerInner.prepend(searchWrap); // Fallback to start of header } // Debounce function to limit API calls function debounce(func, delay) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), delay); }; } // Live search handler const performSearch = debounce(function() { const query = searchInput.value.trim(); if (query.length < 3) { searchResults.style.display = 'none'; return; } fetch(`/products.json?word=${encodeURIComponent(query)}`) .then(response => { if (!response.ok) throw new Error('API response error'); return response.json(); }) .then(data => { searchResults.innerHTML = ''; // Clear previous const products = data.products || []; if (products.length > 0) { searchResults.style.display = 'block'; products.slice(0, 10).forEach(product => { // Limit to 10 results const resultItem = document.createElement('div'); resultItem.classList.add('search-result-item'); resultItem.innerHTML = `
${product.title}
${product.price ? `
- $${product.price}
` : ''}
`; searchResults.appendChild(resultItem); }); } else { searchResults.style.display = 'none'; } }) .catch(error => { console.error('Live search error:', error); searchResults.style.display = 'none'; }); }, 300); // 300ms debounce searchInput.addEventListener('input', performSearch); // Hide dropdown on outside click document.addEventListener('click', function(event) { if (!searchWrap.contains(event.target)) { searchResults.style.display = 'none'; } }); // Form submit fallback (if no live select) searchForm.addEventListener('submit', function(event) { const query = searchInput.value.trim(); if (!query) { event.preventDefault(); alert('Please enter a search term.'); } }); });