芝麻web文件管理V1.00
编辑当前文件:/home/ephorei/www/wp-content/themes/astra/assets/js/unminified/live-search.js
/** * 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).forEach(([postType, postsData]) => { let postTypeLabel = astra_search.search_post_types_labels[postType] ? astra_search.search_post_types_labels[postType] : postType + "s"; processedHtml += `
${postTypeLabel}
`; postsData.forEach((post) => { const searchPostTitle = decodeHTMLEntities(post.title.rendered); const headerCoverSearch = document.getElementById("ast-search-form"); const fullScreenSearch = document.getElementById("ast-seach-full-screen-form"); if (fullScreenSearch || headerCoverSearch) { processedHtml += `
${searchPostTitle}
`; } else { processedHtml += `
${searchPostTitle}
`; } }); }); return processedHtml; } window.addEventListener("load", function (e) { const searchInputs = document.querySelectorAll(".search-field"); searchInputs.forEach((searchInput) => { searchInput.addEventListener("input", function (event) { const searchForm = searchInput.closest("form.search-form"); const searchTerm = event.target.value.trim(); const postTypes = astra_search.search_page_condition ? astra_search.search_page_post_types : 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}` : "" }`; var xhr = new XMLHttpRequest(); xhr.open("GET", restRequest, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { const postsData = JSON.parse(xhr.responseText); let resultsContainer = ""; if (postsData.length > 0) { let formattedPostsData = {}; postsData.forEach((post) => { if (post.type in formattedPostsData) { formattedPostsData[post.type].push( post ); } else { formattedPostsData[post.type] = [post]; } }); let searchResultMarkup = getSearchResultPostMarkup( formattedPostsData ); resultsContainer = `
${searchResultMarkup}
`; } else { resultsContainer = `
${ astra_search.no_live_results_found }
`; } const searchResultsWrappers = document.querySelectorAll( ".ast-live-search-results" ); if (searchResultsWrappers) { searchResultsWrappers.forEach(function (wrap) { wrap.parentNode.removeChild(wrap); }); } searchForm.insertAdjacentHTML( "beforeend", resultsContainer ); } }; xhr.send(); } catch (error) { console.error("Error while fetching data:", error); } }); }); }); // Add a click event listener to the document. document.addEventListener("click", function (event) { const searchForm = event.target.closest("form.search-form"); // Check if the clicked element is the search bar or the results dropdown if (null !== searchForm) { // Clicked inside the search bar or dropdown, do nothing if (searchForm.querySelector(".ast-live-search-results")) { searchForm.querySelector( ".ast-live-search-results" ).style.display = "block"; } } else { // Clicked outside the search bar and dropdown, hide the dropdown const searchResultsWrappers = document.querySelectorAll( ".ast-live-search-results" ); if (searchResultsWrappers) { searchResultsWrappers.forEach(function (wrap) { wrap.style.display = "none"; }); } } }); })();