Terms & Conditions | WALoops
WALoops
Chat with us
${highlightMatch(item.title, query)} ${item.category}

${highlightMatch(item.desc, query)}

chevron_right `; }); resultsContainer.innerHTML = html; } function renderDefault() { clearBtn.classList.add('hidden'); suggestionsBox.classList.remove('hidden'); // Default show top 6 featured items renderItems(searchItems.slice(0, 6)); } function renderSearch(query) { const q = query.trim().toLowerCase(); if (!q) { renderDefault(); return; } clearBtn.classList.remove('hidden'); suggestionsBox.classList.add('hidden'); const words = q.split(/\s+/).filter(Boolean); const filtered = searchItems.filter(item => { const searchable = (item.title + ' ' + item.desc + ' ' + item.category + ' ' + (item.keywords || '')).toLowerCase(); return words.every(word => searchable.includes(word)); }).sort((a, b) => { // Prioritize title exact matches const aTitleMatch = a.title.toLowerCase().includes(q) ? 1 : 0; const bTitleMatch = b.title.toLowerCase().includes(q) ? 1 : 0; return bTitleMatch - aTitleMatch; }); renderItems(filtered.slice(0, 15), query); } function updateSelection() { const renderedElements = resultsContainer.querySelectorAll('.search-result-item'); renderedElements.forEach((el, i) => { if (i === selectedIndex) { el.classList.add('bg-emerald-50/80'); el.classList.remove('hover:bg-slate-50'); el.scrollIntoView({ block: 'nearest' }); } else { el.classList.remove('bg-emerald-50/80'); el.classList.add('hover:bg-slate-50'); } }); } // Event Listeners document.addEventListener('keydown', (e) => { // ⌘K or Ctrl+K shortcut if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'k') { e.preventDefault(); if (modal.classList.contains('hidden')) { openSearch(); } else { closeSearch(); } return; } // ESC to close if (e.key === 'Escape' && !modal.classList.contains('hidden')) { e.preventDefault(); closeSearch(); return; } // Arrow Up / Down navigation when modal is open if (!modal.classList.contains('hidden') && currentResults.length > 0) { if (e.key === 'ArrowDown') { e.preventDefault(); selectedIndex = (selectedIndex + 1) % currentResults.length; updateSelection(); } else if (e.key === 'ArrowUp') { e.preventDefault(); selectedIndex = (selectedIndex - 1 + currentResults.length) % currentResults.length; updateSelection(); } else if (e.key === 'Enter') { e.preventDefault(); if (currentResults[selectedIndex]) { window.location.href = currentResults[selectedIndex].url; } } } }); searchInput.addEventListener('input', (e) => { renderSearch(e.target.value); }); clearBtn.addEventListener('click', () => { searchInput.value = ''; renderDefault(); searchInput.focus(); }); backdrop.addEventListener('click', closeSearch); // Quick suggestion tags click handler document.querySelectorAll('.search-tag').forEach(tag => { tag.addEventListener('click', () => { const q = tag.getAttribute('data-query'); searchInput.value = q; renderSearch(q); searchInput.focus(); }); }); // Attach openSearch to buttons with data-open-search or id site-search-btn document.addEventListener('click', (e) => { const trigger = e.target.closest('#site-search-btn, [data-open-search]'); if (trigger) { e.preventDefault(); openSearch(); } }); // Expose globally window.openSiteSearch = openSearch; })();

Terms & Conditions

Last updated November 8, 2026