UNPKG

staticsearch

Version:
2 lines (1 loc) 3.06 kB
import{staticsearch as v}from"./__SSDIR__/staticsearch.js";var E="q",y=0,b="__AGENT__",S=Symbol(b),C=500,w={date:new Intl.DateTimeFormat([],{dateStyle:"long"}).format,number:new Intl.NumberFormat([],{maximumFractionDigits:0}).format};(()=>{let t=document.getElementById("staticsearch_search"),e=document.getElementById("staticsearch_result");e&&A(e,{minFound:e.getAttribute("minfound"),minScore:e.getAttribute("minscore"),maxResults:e.getAttribute("maxresults"),highlight:e.hasAttribute("highlight")}),t&&t.tagName==="INPUT"&&R(t)})();function x(){return new URLSearchParams(location.search).get(E)||""}function L(t,e){let a=new URL(location);t?a.searchParams.set(E,t):a.searchParams.delete(E),a.hash=e||"",history.replaceState({},"",a.href)}function R(t){if(t[S])return;t[S]=!0,t.name&&(E=t.name);let e=x()||sessionStorage.getItem(b)||"";e&&(t.value=e);let a=t.value;a&&m(a);let h;t.addEventListener("input",n=>{let d=n.target.value;clearTimeout(h),h=setTimeout(()=>m(d),C)},!1);function m(n){sessionStorage.setItem(b,n),!(n.length<2)&&v.find(n).then(d=>{})}}function A(t,e={}){if(t[S])return;t[S]=!0;let a="",h=parseFloat(e.minFound)||0,m=parseFloat(e.minScore)||0,n=parseFloat(e.maxResults)||0,d=!!e.highlight,I=e.resultElement||"ol",p=e.messageTemplate||document.getElementById("staticsearch_resultmessage");p||(p=document.createElement("template"),p.innerHTML='<p part="resultmessage"><span part="resultcount">0</span> found for <span part="searchterm"></span>&hellip;</p>');let f=e.itemTemplate||document.getElementById("staticsearch_item");f||(f=document.createElement("template"),f.innerHTML='<li part="item"><a part="link"><h2 part="title"></h2><p part="meta"><time part="date"></time> &ndash; <span part="words">0</span> words</p><p part="description"></p></a></li>'),t.addEventListener("click",i=>{let c=i.target.closest("a");c&&a&&L(a,c.id)}),document.addEventListener("staticsearch:result",i=>{a=i.detail.search;let c=i.detail.result,g=d?"#:~:"+a.split(/\W+/).reverse().map(r=>"text="+encodeURIComponent(r.trim().toLowerCase())).join("&"):"";t.innerHTML="";let l=document.createElement(I);l.setAttribute("part","searchresult"),c.forEach((r,T)=>{if(r.found<h||m&&r.relevancy<m||n&&T>=n)return;let u=f.content.cloneNode(!0);o(u,"link",null,{href:r.url+g,id:`staticsearchresult-${r.id}`}),o(u,"title",r.title),o(u,"description",r.description),r.date&&o(u,"date",w.date(new Date(r.date)),{datetime:r.date}),r.words&&o(u,"words",w.number(r.words)),l.appendChild(u)});let s=p.content.cloneNode(!0);if(o(s,"resultcount",l.childElementCount),o(s,"searchterm",a),t.appendChild(s),t.appendChild(l),!y&&location.hash){let r=t.querySelector(location.hash);r&&(r.focus(),r.scrollIntoView({behavior:"smooth",block:"nearest"}))}else t.scrollTop=0;y++},!1);function o(i,c,g,l={}){i.querySelectorAll(`[part="${c}"]`).forEach(s=>{for(let[r,T]of Object.entries(l))s.setAttribute(r,T);if(g){for(;s.firstElementChild;)s=s.firstElementChild;s.textContent=g}})}}export{R as staticSearchInput,x as staticSearchQuery,A as staticSearchResult,L as staticSearchSetQuery};