/** * Astra's Live Search * * @package Astra * @since x.x.x */ ( function() { function decodeHTMLEntities (string) { var doc = new DOMParser().parseFromString(string, 'text/html') return doc.documentElement.textContent } function getSearchResultPostMarkup(resultsData) { let processedHtml = ''; Object.entries( resultsData ).map( ( [ postType, postsData ] ) => { processedHtml += ``; postsData.map((post) => { const searchPostTitle = decodeHTMLEntities(post.title.rendered); processedHtml += ` ${searchPostTitle} `; }); }); return processedHtml; } window.addEventListener( "load", function(e) { const searchInputs = document.querySelectorAll('.search-field'); searchInputs.forEach(searchInput => { searchInput.addEventListener('input', async (event) => { const searchForm = searchInput.closest('form.search-form'); const searchTerm = event.target.value.trim(); const postTypes = astra_search.search_post_types; const searchResultsWrappers = document.querySelectorAll('.ast-live-search-results'); if ( searchResultsWrappers ) { searchResultsWrappers.forEach(function(wrap) { wrap.parentNode.removeChild(wrap); }); } try { const restRequest = `${astra_search.rest_api_url}wp/v2/posts${ astra_search.rest_api_url.indexOf('?') > -1 ? '&' : '?' }_embed=1&post_type=ast_queried:${postTypes.join(':')}&per_page=${ astra_search.search_posts_per_page }&search=${searchTerm}${astra_search.search_language ? `&lang=${astra_search.search_language}` : ''}`; const response = await fetch( restRequest ); const postsData = await response.json(); let resultsContainer = ''; if (postsData.length > 0) { let formattedPostsData = {} postsData.map((post) => { if ( post.type in formattedPostsData ) { formattedPostsData[post.type].push(post); } else { formattedPostsData[post.type] = [post]; } }); let searchResultMarkup = getSearchResultPostMarkup(formattedPostsData); resultsContainer = `