hexo-theme-async
Version:
🎈 A simple, lightweight Hexo theme
2 lines (1 loc) • 2.08 kB
JavaScript
(()=>{var C=(()=>{let n=null;return()=>{if(!!LocalSearch){if(!n){let{search:r,root:c}=window.ASYNC_CONFIG;n=new LocalSearch({path:c+r.path,top_n_per_article:r.top_n_per_article,unescape:r.unescape})}return n}}})();function w(){let{search:n,i18n:r}=window.ASYNC_CONFIG;if(n){if(!n.path){console.warn("`hexo-generator-searchdb` plugin is not installed!");return}let c=document.querySelector(".trm-search-popup"),d=document.querySelector("#trm-search-btn"),p=document.querySelector(".trm-search-btn-close"),s=document.querySelector(".trm-search-input"),o=C();n.preload&&!o.isfetched&&o.fetchData();let l=()=>{if(!o.isfetched)return;let e=s.value.trim().toLowerCase(),y=e.split(/[-\s]+/),f=document.querySelector(".trm-search-result-container"),E=document.querySelector(".trm-search-stats"),i=[];if(e.length>0&&(i=o.getResultItems(y)),i.length>0)i.sort((t,a)=>t.includedCount!==a.includedCount?a.includedCount-t.includedCount:t.hitCount!==a.hitCount?a.hitCount-t.hitCount:a.id-t.id),f.innerHTML=`<ul class="search-result-list">${i.map(t=>t.item).join("")}</ul>`,E.innerHTML=r.hits.replace(/\$\{hits}/,i.length.toString());else{let t=r.empty.replace(/\$\{query}/,e);f.innerHTML=`<div class="trm-search-empty">${t}</div>`,E.innerHTML=""}},h=()=>{c.classList.add("show"),setTimeout(()=>s.focus(),500),o.isfetched||o.fetchData()},u=function(){c.classList.remove("show")},m=function(e){e.key==="Escape"&&(u(),e.preventDefault(),e.stopPropagation())},v=function(e){e.key==="Enter"&&l()};n.trigger==="auto"?s.addEventListener("input",l):s.addEventListener("keypress",v);let L=e=>{e.target===c&&u()};p.addEventListener("click",u),d.addEventListener("click",h),window.addEventListener("keydown",m),c.addEventListener("click",L),document.addEventListener("swup:contentReplaced",()=>{d.removeEventListener("click",h),p.removeEventListener("click",u),s.removeEventListener("input",l),s.removeEventListener("keypress",v),window.removeEventListener("keydown",m),c.removeEventListener("click",L)})}}w();window.ASYNC_CONFIG.swup&&document.addEventListener("swup:contentReplaced",function(){w()});})();