You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

1 lines
2.1 KiB

document.addEventListener("DOMContentLoaded",(()=>{if(!CONFIG.path)return void console.warn("`hexo-generator-searchdb` plugin is not installed!");const e=new LocalSearch({path:CONFIG.path,top_n_per_article:CONFIG.localsearch.top_n_per_article,unescape:CONFIG.localsearch.unescape}),t=document.querySelector(".search-input"),s=()=>{if(!e.isfetched)return;const s=t.value.trim().toLowerCase(),c=s.split(/[-\s]+/),r=document.querySelector(".search-result-container");let n=[];if(s.length>0&&(n=e.getResultItems(c)),1===c.length&&""===c[0])r.classList.add("no-result"),r.innerHTML='<div class="search-result-icon"><i class="fa fa-search fa-5x"></i></div>';else if(0===n.length)r.classList.add("no-result"),r.innerHTML='<div class="search-result-icon"><i class="far fa-frown fa-5x"></i></div>';else{n.sort(((e,t)=>e.includedCount!==t.includedCount?t.includedCount-e.includedCount:e.hitCount!==t.hitCount?t.hitCount-e.hitCount:t.id-e.id));const e=CONFIG.i18n.hits.replace("${hits}",n.length);r.classList.remove("no-result"),r.innerHTML=`<div class="search-stats">${e}</div>\n <hr>\n <ul class="search-result-list">${n.map((e=>e.item)).join("")}</ul>`,"object"==typeof pjax&&pjax.refresh(r)}};e.highlightSearchWords(document.querySelector(".post-body")),CONFIG.localsearch.preload&&e.fetchData(),"auto"===CONFIG.localsearch.trigger?t.addEventListener("input",s):(document.querySelector(".search-icon").addEventListener("click",s),t.addEventListener("keypress",(e=>{"Enter"===e.key&&s()}))),window.addEventListener("search:loaded",s),document.querySelectorAll(".popup-trigger").forEach((s=>{s.addEventListener("click",(()=>{document.body.classList.add("search-active"),setTimeout((()=>t.focus()),500),e.isfetched||e.fetchData()}))}));const c=()=>{document.body.classList.remove("search-active")};document.querySelector(".search-pop-overlay").addEventListener("click",(e=>{e.target===document.querySelector(".search-pop-overlay")&&c()})),document.querySelector(".popup-btn-close").addEventListener("click",c),document.addEventListener("pjax:success",(()=>{e.highlightSearchWords(document.querySelector(".post-body")),c()})),window.addEventListener("keyup",(e=>{"Escape"===e.key&&c()}))}));