AI Docs Search

Search through our documentation using AI-powered natural language queries.

Search window.addEventListener('load', function() { function extractText(responseText) { try { console.log('responseText: ', responseText); const results = JSON.parse(responseText); const msg = results.message; if (!msg || msg.trim() === '') { return "No results found"; } return msg; } catch (error) { console.error('Error parsing results:', error); throw new Error("Failed parsing response message"); } } function displayResults(msg) { const resultsContainer = document.getElementById('results'); const spinner = document.getElementById('spinner'); const searchContainer = document.querySelector('.search-container'); // Hide spinner spinner.style.display = 'none'; // Scroll to search bar searchContainer.scrollIntoView({ behavior: 'smooth', block: 'start' }); try { marked.setOptions({ breaks: true, gfm: true, headerIds: false, sanitize: false }); const htmlContent = marked.parse(msg); resultsContainer.className = 'markdown-content'; resultsContainer.innerHTML = htmlContent; // Scroll after content is rendered setTimeout(() => { const searchContainer = document.querySelector('.search-container'); const offset = 55; // Offset from top in pixels const elementPosition = searchContainer.getBoundingClientRect().top; const offsetPosition = elementPosition + window.pageYOffset - offset; window.scrollTo({ top: offsetPosition, behavior: 'smooth' }); }, 100); } catch (error) { console.error('Error parsing results:', error); resultsContainer.innerHTML = '<div class="error-message">Cannot process results</div>'; } } async function performSearch() { const searchInput = document.getElementById('searchInput'); const resultsContainer = document.getElementById('results'); const spinner = document.getElementById('spinner'); const searchTerm = searchInput.value.trim(); if (!searchTerm) { resultsContainer.innerHTML = '<div class="error-message">Please enter a search term</div>'; return; } // Show spinner, clear results spinner.style.display = 'flex'; resultsContainer.innerHTML = ''; try { const data = { "query": searchTerm }; const options = { method: 'POST', headers: { 'accept': 'text/plain', 'content-type': 'application/json', }, body: JSON.stringify(data) }; //const API_ENDPOINT = 'http://0.0.0.0:3000/api/v1/docs_help'; const API_ENDPOINT = 'https://help.merge.qodo.ai/api/v1/docs_help'; const response = await fetch(API_ENDPOINT, options); const responseText = await response.text(); const msg = extractText(responseText); if (!response.ok) { throw new Error(`An error (${response.status}) occurred during search: "${msg}"`); } displayResults(msg); } catch (error) { spinner.style.display = 'none'; const errorDiv = document.createElement('div'); errorDiv.className = 'error-message'; errorDiv.textContent = error instanceof Error ? error.message : String(error); resultsContainer.replaceChildren(errorDiv); } } // Add event listeners const searchButton = document.getElementById('searchButton'); const searchInput = document.getElementById('searchInput'); if (searchButton) { searchButton.addEventListener('click', performSearch); } if (searchInput) { searchInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') { performSearch(); } }); } });

Last updated