|
|
const initAlgoliaSearch=()=>{if("true"===document.documentElement.dataset.algoliaSearchInitialized)return;document.documentElement.dataset.algoliaSearchInitialized="true";const{indexName:e,appID:t,apiKey:a,hits:i}=CONFIG.algolia,r=window["algoliasearch/lite"].liteClient(t,a),n=document.querySelector(".search-input"),s=document.querySelector(".search-result-container"),c=e=>{const{title:t,excerpt:a,excerptStrip:i,contentStripTruncate:r}=e._highlightResult;let n=`<li><a href="${e.permalink}" class="search-result-title">${t.value}</a>`;const s=a?.value||i?.value||r?.value;if(s){const t=document.createElement("div");t.innerHTML=s,n+=`<a href="${e.permalink}"><p class="search-result">${t.textContent.substring(0,100)}...</p></a></li>`}return n};let l=0;const o=async(t,a,u)=>{if(u!==l)return;s.setAttribute("aria-busy","true");const d=Date.now();try{const p=await r.search({requests:[{indexName:e,page:a,query:t,hitsPerPage:i.per_page||10,attributesToRetrieve:["permalink"],attributesToHighlight:["title","excerpt","excerptStrip","contentStripTruncate"],highlightPreTag:'<mark class="search-keyword">',highlightPostTag:"</mark>"}]});if(u!==l)return;const h=p.results[0];if(0===h.nbHits)s.innerHTML='<div class="search-result-icon"><i class="far fa-frown fa-5x"></i></div>';else{const e=CONFIG.i18n.hits_time.replace("${hits}",h.nbHits).replace("${time}",Date.now()-d);let i="";if(h.nbPages>1){i+='<nav class="pagination algolia-pagination">';for(let e=0;e<h.nbPages;e++)i+=e===a?`<span class="page-number current">${e+1}</span>`:`<a class="page-number" href="#" data-index=${e}>${e+1}</a>`;i+="</nav>"}s.innerHTML=`<div class="search-stats">\n <span>${e}</span>\n <img src="${CONFIG.images}/logo-algolia-nebula-blue-full.svg" alt="Algolia">\n </div>\n <hr>\n <ul class="search-result-list">${h.hits.map(c).join("")}</ul>\n ${i}`,"object"==typeof pjax&&pjax.refresh(s),s.querySelectorAll(".page-number").forEach((e=>{e.addEventListener("click",(async a=>{if(a.preventDefault(),n.value.trim()!==t)return;const i=++l;await o(t,Number(e.dataset.index),i)}))}))}}catch(e){if(u!==l)return;console.warn("Algolia search failed:",e),s.innerHTML='<div class="search-result-icon"><i class="far fa-frown fa-5x"></i></div>'}finally{u===l&&s.removeAttribute("aria-busy")}},u=NexT.utils.debounce((async e=>{if(e!==l)return;const t=n.value.trim();""!==t&&await o(t,0,e)}),500);n.addEventListener("input",(()=>{const e=++l;""===n.value.trim()?(s.removeAttribute("aria-busy"),s.innerHTML='<div class="search-result-icon"><i class="fab fa-algolia fa-5x"></i></div>'):s.setAttribute("aria-busy","true"),u(e)})),document.querySelectorAll(".popup-trigger").forEach((e=>{e.addEventListener("click",(()=>{NexT.utils.setGutter(),document.body.classList.add("search-active"),setTimeout((()=>n.focus()),500)}))}));const d=()=>{NexT.utils.setGutter("0"),document.body.classList.remove("search-active")};document.querySelector(".search-pop-overlay").addEventListener("click",(e=>{e.target===document.querySelector(".search-pop-overlay")&&d()})),document.querySelector(".popup-btn-close").addEventListener("click",d),document.addEventListener("pjax:success",d),window.addEventListener("keydown",(e=>{(e.ctrlKey||e.metaKey)&&"k"===e.key&&(e.preventDefault(),NexT.utils.setGutter(),document.body.classList.add("search-active"),setTimeout((()=>n.focus()),500))})),window.addEventListener("keyup",(e=>{"Escape"===e.key&&d()}))};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",initAlgoliaSearch,{once:!0}):initAlgoliaSearch();
|