staticsearch
Advanced tools
| import"./__SSDIR__/staticsearch-component.js";var t=document.body.querySelector('script[src$="staticsearch-here.js"]');if(t){let e=document.createElement("static-search");e.label="search",e.title="search Ctrl+K",e.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" width="1em" height="1em"><path d="M10 4a6 6 0 1 0 0 12 6 6 0 0 0 0-12Zm-8 6a8 8 0 1 1 14.3 5l5.4 5.3a1 1 0 0 1-1.4 1.4l-5.4-5.4A8 8 0 0 1 2 10Z"/></svg>',t.after(e)} |
@@ -1,1 +0,1 @@ | ||
| :host{--fsize: var(--staticsearch-fontsize, 1em);--dmax: var(--staticsearch-maxwidth, 60ch);--dmargin: var(--staticsearch-margin, 3vmin);--dpadding: var(--staticsearch-padding, 2vmin);--sheight: var(--staticsearch-fieldset-height, calc(3em + (2 * var(--dpadding))) );--colback0: var(--staticsearch-color-back, Canvas);--colbord0: var(--staticsearch-color-border, ButtonFace);--colfore0: var(--staticsearch-color-fore0, CanvasText);--colfore1: var(--staticsearch-color-fore1, color-mix(in oklab, CanvasText 80%, Canvas));--colfore2: var(--staticsearch-color-fore2, color-mix(in oklab, CanvasText 60%, Canvas));--collinkd: var(--staticsearch-color-link, color-mix(in oklab, LinkText 80%, CanvasText));--collinkv: var(--staticsearch-color-visited, color-mix(in oklab, VisitedText 80%, CanvasText));--colshad0: var(--staticsearch-color-shadow, #000);--colshad1: var(--staticsearch-color-backdrop, color-mix(in srgb, var(--colshad0), transparent 25%));--colblur0: var(--staticsearch-backdrop-blur, 3px)}template{display:none}*{box-sizing:border-box;font-size:inherit;padding:0;margin:0}@media(prefers-reduced-motion:reduce){*,*:before,*:after,::backdrop{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-behavior:normal!important;scroll-behavior:auto!important}}[part=activate]{color:var(--colfore2);outline:none;&:hover,&:active,&:focus{color:var(--collinkd)}}dialog{position:fixed;font-size:var(--fsize);inline-size:var(--dmax);block-size:100%;max-inline-size:calc(100dvi - (2 * var(--dmargin)));max-block-size:calc(100dvb - (2 * var(--dmargin)));margin:auto;padding:0;color:var(--colfore0);background-color:var(--colback0);border:1px solid var(--colbord0);border-radius:5px;box-shadow:0 2px 4px var(--colshad0);overflow:hidden;transform-origin:50% 0;&,&::backdrop{transition:all .3s ease-in-out;transition-behavior:allow-discrete}&[open]{opacity:1;transform:scale(1);@starting-style{display:block;opacity:.5;transform:scaleX(.5) scaleY(0)}&::backdrop{background-color:var(--colshad1);-webkit-backdrop-filter:blur(var(--colblur0));backdrop-filter:blur(var(--colblur0));@starting-style{background-color:#0000;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}}}&:not([open]){display:none;opacity:0;transform:scaleX(.5) scaleY(0)}}[part=close]{position:absolute;inset-inline-end:0;inset-block-start:0;block-size:1.4em;inline-size:1.4em;min-block-size:unset;min-inline-size:unset;padding:0;margin:0;background-color:transparent;border:0 none;cursor:pointer;z-index:3;&:is(:hover,:focus,:active){color:var(--collinkd)}}[part=search]{position:absolute;block-size:var(--sheight);inset-inline:0;inset-block-start:0;padding-inline:var(--dpadding);padding-block-start:var(--dpadding);box-shadow:0 1px 5px var(--colshad0);overflow:hidden;z-index:2;&:focus-within{label,input{color:var(--colfore0)}input{border-color:var(--colfore1)}}}[part=searchlabel]{display:block;font-size:.8em;padding-inline-start:.625em;padding-block-end:.2em;color:var(--colfore1);-webkit-user-select:none;user-select:none}input[part=searchinput]{display:block;inline-size:100%;line-height:1.5;padding-block:.2em;padding-inline:.5em;color:var(--colfore1);background-color:transparent;border:1px solid transparent;border-radius:3px;outline-style:none}[part=results]{position:absolute;inset-inline:0;inset-block:0;inset-block-start:var(--sheight);padding:var(--dpadding);overflow:hidden auto;scrollbar-width:thin;scrollbar-color:var(--colfore2) transparent;overscroll-behavior-block:contain;outline:none;&:after{position:fixed;content:"";block-size:5vb;inset-inline:var(--dpadding);inset-block-end:0;background:linear-gradient(transparent,var(--colback0));pointer-events:none}}[part=searchterm]{font-style:italic;&:before,&:after{content:'"'}}[part=item]{margin-block:1.5em;margin-inline-start:1.5em}[part=title]{font-weight:bolder;line-height:1.2;text-wrap:balance;text-underline-offset:.2em;margin-block-end:.1em}[part=meta]{font-size:.75em;line-height:1.4;color:var(--colfore2)}[part=description]{font-size:.85em;line-height:1.4;text-wrap:pretty;color:var(--colfore1)}a:focus-visible{outline-color:var(--collinkd);outline-style:solid;outline-offset:.2em;outline-width:.2rem}a:link{display:block;text-decoration:none;color:var(--collinkd)}a:visited{color:var(--collinkv)}a:hover,a:focus,a:active{color:var(--collinkd);[part=title]{text-decoration:underline}} | ||
| :host{--fsize: var(--staticsearch-fontsize, max(16px, 1em));--dmax: var(--staticsearch-maxwidth, 60ch);--dmargin: var(--staticsearch-margin, 3vmin);--dpadding: var(--staticsearch-padding, 2vmin);--sheight: var(--staticsearch-fieldset-height, calc(3em + (2 * var(--dpadding))) );--colback0: var(--staticsearch-color-back, Canvas);--colbord0: var(--staticsearch-color-border, ButtonFace);--colfore0: var(--staticsearch-color-fore0, CanvasText);--colfore1: var(--staticsearch-color-fore1, color-mix(in oklab, CanvasText 80%, Canvas));--colfore2: var(--staticsearch-color-fore2, color-mix(in oklab, CanvasText 60%, Canvas));--collinkd: var(--staticsearch-color-link, color-mix(in oklab, LinkText 80%, CanvasText));--collinkv: var(--staticsearch-color-visited, color-mix(in oklab, VisitedText 80%, CanvasText));--colshad0: var(--staticsearch-color-shadow, #000);--colshad1: var(--staticsearch-color-backdrop, color-mix(in srgb, var(--colshad0), transparent 25%));--colblur0: var(--staticsearch-backdrop-blur, 3px)}template{display:none}*{box-sizing:border-box;font-size:inherit;padding:0;margin:0}@media(prefers-reduced-motion:reduce){*,*:before,*:after,::backdrop{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;transition-behavior:normal!important;scroll-behavior:auto!important}}[part=activate]{color:var(--colfore2);outline:none;&:hover,&:active,&:focus{color:var(--collinkd)}}dialog{position:fixed;font-size:var(--fsize);inline-size:var(--dmax);block-size:100%;max-inline-size:calc(100dvi - (2 * var(--dmargin)));max-block-size:calc(100dvb - (2 * var(--dmargin)));margin:auto;padding:0;color:var(--colfore0);background-color:var(--colback0);border:1px solid var(--colbord0);border-radius:5px;box-shadow:0 2px 4px var(--colshad0);overflow:hidden;transform-origin:50% 0;&,&::backdrop{transition:all .3s ease-in-out;transition-behavior:allow-discrete}&[open]{opacity:1;transform:scale(1);@starting-style{display:block;opacity:.5;transform:scaleX(.5) scaleY(0)}&::backdrop{background-color:var(--colshad1);-webkit-backdrop-filter:blur(var(--colblur0));backdrop-filter:blur(var(--colblur0));@starting-style{background-color:#0000;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}}}&:not([open]){display:none;opacity:0;transform:scaleX(.5) scaleY(0)}}[part=close]{position:absolute;inset-inline-end:0;inset-block-start:0;block-size:1.4em;inline-size:1.4em;min-block-size:unset;min-inline-size:unset;padding:0;margin:0;background-color:transparent;border:0 none;cursor:pointer;z-index:3;&:is(:hover,:focus,:active){color:var(--collinkd)}}[part=search]{position:absolute;block-size:var(--sheight);inset-inline:0;inset-block-start:0;padding-inline:var(--dpadding);padding-block-start:var(--dpadding);box-shadow:0 1px 5px var(--colshad0);overflow:hidden;z-index:2;&:focus-within{label,input{color:var(--colfore0)}input{border-color:var(--colfore1)}}}[part=searchlabel]{display:block;font-size:.8em;padding-inline-start:.625em;padding-block-end:.2em;color:var(--colfore1);-webkit-user-select:none;user-select:none}input[part=searchinput]{display:block;inline-size:100%;line-height:1.5;padding-block:.2em;padding-inline:.5em;color:var(--colfore1);background-color:transparent;border:1px solid transparent;border-radius:3px;outline-style:none}[part=results]{position:absolute;inset-inline:0;inset-block-start:var(--sheight);inset-block-end:0;padding:var(--dpadding);overflow:hidden auto;scrollbar-width:thin;scrollbar-color:var(--colfore2) transparent;overscroll-behavior-block:contain;outline:none;&:after{position:fixed;content:"";block-size:3em;inset-inline:var(--dpadding);inset-block-end:0;background:linear-gradient(transparent 0%,var(--colback0) 66%,var(--colback0));pointer-events:none}}[part=searchterm]{font-style:italic;&:before,&:after{content:'"'}}[part=item]{margin-block:1.5em;margin-inline-start:1.5em}[part=title]{font-weight:bolder;line-height:1.2;text-wrap:balance;text-underline-offset:.2em;margin-block-end:.1em}[part=meta]{font-size:.7em;line-height:1.4;color:var(--colfore2)}[part=description]{font-size:.85em;line-height:1.4;text-wrap:pretty;color:var(--colfore1)}a:focus-visible{outline-color:var(--collinkd);outline-style:solid;outline-offset:.2em;outline-width:.2rem}a:link{display:block;text-decoration:none;color:var(--collinkd)}a:visited{color:var(--collinkv)}a:hover,a:focus,a:active{color:var(--collinkd);[part=title]{text-decoration:underline}}[part=poweredby]{position:absolute;inset-inline:var(--dpadding);inset-block-start:auto;inset-block-end:0;font-size:.6em;text-align:end;padding:.5em 0;&:link,&:visited{color:var(--colfore2)}&:hover,&:active,&:focus{color:var(--colfore0)}} |
@@ -1,1 +0,1 @@ | ||
| import{staticsearch as v}from"./__SSDIR__/staticsearch.js";var S="q",w=0,T="__AGENT__",y=Symbol(T),C=500,I={date:new Intl.DateTimeFormat([],{dateStyle:"long"}).format,number:new Intl.NumberFormat([],{maximumFractionDigits:0}).format};(()=>{let t=document.getElementById("staticsearch_search"),r=document.getElementById("staticsearch_result");r&&L(r,{minFound:r.getAttribute("minfound"),minScore:r.getAttribute("minscore"),maxResults:r.getAttribute("maxresults"),highlight:r.hasAttribute("highlight")}),t&&t.tagName==="INPUT"&&F(t,{fuzzy:t.getAttribute("fuzzy")})})();function x(){return new URLSearchParams(location.search).get(S)||""}function A(t,r){let a=new URL(location);t?a.searchParams.set(S,t):a.searchParams.delete(S),a.hash=r||"",history.replaceState({},"",a.href)}function F(t,r={}){if(t[y])return;t[y]=!0;let a=parseFloat(r.fuzzy);(isNaN(a)||a<0)&&(a=6),t.name&&(S=t.name);let p=x()||sessionStorage.getItem(T)||"";p&&(t.value=p);let h=t.value;h&&f(h);let d;t.addEventListener("input",n=>{let o=n.target.value;clearTimeout(d),d=setTimeout(()=>f(o),C)},!1);function f(n){sessionStorage.setItem(T,n),!(n.length<2)&&v.find(n,a).then(o=>{})}}function L(t,r={}){if(t[y])return;t[y]=!0;let a="",p=parseFloat(r.minFound)||0,h=parseFloat(r.minScore)||0,d=parseFloat(r.maxResults)||0,f=!!r.highlight,n=r.resultElement||"ol",o=r.messageTemplate||document.getElementById("staticsearch_resultmessage");o||(o=document.createElement("template"),o.innerHTML='<p part="resultmessage"><span part="resultcount">0</span> found for <span part="searchterm"></span>…</p>');let g=r.itemTemplate||document.getElementById("staticsearch_item");g||(g=document.createElement("template"),g.innerHTML='<li part="item"><a part="link"><h2 part="title"></h2><p part="meta"><time part="date"></time> – <span part="words">0</span> words</p><p part="description"></p></a></li>'),t.addEventListener("click",l=>{let c=l.target.closest("a");c&&a&&A(a,c.id)}),document.addEventListener("staticsearch:result",l=>{a=l.detail.search;let c=l.detail.result,E=f?"#:~:"+a.split(/\W+/).reverse().map(e=>"text="+encodeURIComponent(e.trim().toLowerCase())).join("&"):"";t.innerHTML="";let u=document.createElement(n);u.setAttribute("part","searchresult"),c.forEach((e,b)=>{if(e.found<p||h&&e.relevancy<h||d&&b>=d)return;let m=g.content.cloneNode(!0);i(m,"link",null,{href:e.url+E,id:`staticsearchresult-${e.id}`}),i(m,"title",e.title),i(m,"description",e.description),e.date&&i(m,"date",I.date(new Date(e.date)),{datetime:e.date}),e.words&&i(m,"words",I.number(e.words)),u.appendChild(m)});let s=o.content.cloneNode(!0);if(i(s,"resultcount",u.childElementCount),i(s,"searchterm",a),t.appendChild(s),t.appendChild(u),!w&&location.hash){let e=t.querySelector(location.hash);e&&(e.focus(),e.scrollIntoView({behavior:"smooth",block:"nearest"}))}else t.scrollTop=0;w++},!1);function i(l,c,E,u={}){l.querySelectorAll(`[part="${c}"]`).forEach(s=>{for(let[e,b]of Object.entries(u))s.setAttribute(e,b);if(E){for(;s.firstElementChild;)s=s.firstElementChild;s.textContent=E}})}}export{F as staticSearchInput,x as staticSearchQuery,L as staticSearchResult,A as staticSearchSetQuery}; | ||
| import{staticsearch as v}from"./__SSDIR__/staticsearch.js";var S="q",w=0,T="__AGENT__",y=Symbol(T),C=300,I={date:new Intl.DateTimeFormat([],{dateStyle:"long"}).format,number:new Intl.NumberFormat([],{maximumFractionDigits:0}).format};(()=>{let t=document.getElementById("staticsearch_search"),r=document.getElementById("staticsearch_result");r&&L(r,{minFound:r.getAttribute("minfound"),minScore:r.getAttribute("minscore"),maxResults:r.getAttribute("maxresults"),highlight:r.hasAttribute("highlight")}),t&&t.tagName==="INPUT"&&F(t,{fuzzy:t.getAttribute("fuzzy")})})();function x(){return new URLSearchParams(location.search).get(S)||""}function A(t,r){let a=new URL(location);t?a.searchParams.set(S,t):a.searchParams.delete(S),a.hash=r||"",history.replaceState({},"",a.href)}function F(t,r={}){if(t[y])return;t[y]=!0;let a=parseFloat(r.fuzzy);(isNaN(a)||a<0)&&(a=6),t.name&&(S=t.name);let p=x()||sessionStorage.getItem(T)||"";p&&(t.value=p);let h=t.value;h&&f(h);let d;t.addEventListener("input",n=>{let o=n.target.value;clearTimeout(d),d=setTimeout(()=>f(o),C)},!1);function f(n){sessionStorage.setItem(T,n),!(n.length<2)&&v.find(n,a).then(o=>{})}}function L(t,r={}){if(t[y])return;t[y]=!0;let a="",p=parseFloat(r.minFound)||0,h=parseFloat(r.minScore)||0,d=parseFloat(r.maxResults)||0,f=!!r.highlight,n=r.resultElement||"ol",o=r.messageTemplate||document.getElementById("staticsearch_resultmessage");o||(o=document.createElement("template"),o.innerHTML='<p part="resultmessage"><span part="resultcount">0</span> found for <span part="searchterm"></span>…</p>');let g=r.itemTemplate||document.getElementById("staticsearch_item");g||(g=document.createElement("template"),g.innerHTML='<li part="item"><a part="link"><h2 part="title"></h2><p part="meta"><time part="date"></time> – <span part="words">0</span> words</p><p part="description"></p></a></li>'),t.addEventListener("click",l=>{let c=l.target.closest("a");c&&a&&A(a,c.id)}),document.addEventListener("staticsearch:result",l=>{a=l.detail.search;let c=l.detail.result,E=f?"#:~:"+a.split(/\W+/).reverse().map(e=>"text="+encodeURIComponent(e.trim().toLowerCase())).join("&"):"";t.innerHTML="";let u=document.createElement(n);u.setAttribute("part","searchresult"),c.forEach((e,b)=>{if(e.found<p||h&&e.relevancy<h||d&&b>=d)return;let m=g.content.cloneNode(!0);i(m,"link",null,{href:e.url+E,id:`staticsearchresult-${e.id}`}),i(m,"title",e.title),i(m,"description",e.description),e.date&&i(m,"date",I.date(new Date(e.date)),{datetime:e.date}),e.words&&i(m,"words",I.number(e.words)),u.appendChild(m)});let s=o.content.cloneNode(!0);if(i(s,"resultcount",u.childElementCount),i(s,"searchterm",a),t.appendChild(s),t.appendChild(u),!w&&location.hash){let e=t.querySelector(location.hash);e&&(e.focus(),e.scrollIntoView({behavior:"smooth",block:"nearest"}))}else t.scrollTop=0;w++},!1);function i(l,c,E,u={}){l.querySelectorAll(`[part="${c}"]`).forEach(s=>{for(let[e,b]of Object.entries(u))s.setAttribute(e,b);if(E){for(;s.firstElementChild;)s=s.firstElementChild;s.textContent=E}})}}export{F as staticSearchInput,x as staticSearchQuery,L as staticSearchResult,A as staticSearchSetQuery}; |
@@ -1,1 +0,1 @@ | ||
| import{staticSearchQuery as h,staticSearchSetQuery as l,staticSearchInput as n,staticSearchResult as o}from"./__SSDIR__/staticsearch-bind.js";var a=class r extends HTMLElement{static path=new URL(import.meta.url).pathname.replace("__FILENAME__","");#t=null;#s=null;#a=null;connectedCallback(){let e=this.firstElementChild;if(this.tabIndex=0,this.attachShadow({mode:"open",delegatesFocus:!0}),!e)return;e.getAttribute("part")||e.setAttribute("part","activate");let s=document.createElement("link");s.rel="stylesheet",s.href=`${r.path}css/component.css`,this.shadowRoot.appendChild(s);let i=this.shadowRoot.appendChild(e);this.#r(),i.tabIndex=0,i.style.cursor="pointer",i.addEventListener("click",t=>this.#e(t)),i.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&this.#e(t)}),window.addEventListener("keydown",t=>{t.key==="k"&&(t.ctrlKey||t.metaKey)&&this.#e(t)}),window.addEventListener("click",t=>{!this.#t.open&&t.target.dataset.staticSearch&&this.#e(t)}),h()&&this.#e()}#e(e){e&&e.preventDefault(),this.#t.open?this.#i():(this.#t.showModal(),this.setAttribute("aria-expanded","true"),this.#s.select(),this.#s.focus())}#i(){this.#t.close(),this.removeAttribute("aria-expanded"),l()}#r(){let e=document.createElement("dialog");e.setAttribute("closedby","any"),e.setAttribute("part","dialog"),e.innerHTML=`<form method="dialog"><button part="close"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path xmlns="http://www.w3.org/2000/svg" fill="currentColor" d="M5.3 5.3a1 1 0 0 1 1.4 0l5.3 5.3 5.3-5.3a1 1 0 1 1 1.4 1.4L13.4 12l5.3 5.3a1 1 0 0 1-1.4 1.4L12 13.4l-5.3 5.3a1 1 0 0 1-1.4-1.4l5.3-5.3-5.3-5.3a1 1 0 0 1 0-1.4Z"/></svg></button></form><search part="search"><label for="search" part="searchlabel">${this.getAttribute("label")||"search"}</label><input type="search" id="search" name="q" minlength="2" maxlength="300" part="searchinput" /></search><div part="results"></div>`,this.#t=this.shadowRoot.appendChild(e),this.#s=this.shadowRoot.querySelector("#search"),this.#a=this.shadowRoot.querySelector('[part="results"]'),o(this.#a,{minFound:this.getAttribute("minfound"),minScore:this.getAttribute("minscore"),maxResults:this.getAttribute("maxresults"),highlight:this.hasAttribute("highlight")}),n(this.#s,{fuzzy:this.getAttribute("fuzzy")}),this.#t.addEventListener("close",()=>this.#i()),this.#t.addEventListener("click",s=>{this.#t.open&&s.target===this.#t&&this.#i()})}};customElements.define("static-search",a); | ||
| import{staticSearchQuery as h,staticSearchSetQuery as o,staticSearchInput as l,staticSearchResult as n}from"./__SSDIR__/staticsearch-bind.js";var a=class r extends HTMLElement{static path=new URL(import.meta.url).pathname.replace("__FILENAME__","");#t=null;#e=null;#a=null;connectedCallback(){let e=this.firstElementChild;if(this.tabIndex=0,this.attachShadow({mode:"open",delegatesFocus:!0}),!e)return;e.getAttribute("part")||e.setAttribute("part","activate");let s=document.createElement("link");s.rel="stylesheet",s.href=`${r.path}css/component.css`,this.shadowRoot.appendChild(s);let i=this.shadowRoot.appendChild(e);this.#r(),i.tabIndex=0,i.style.cursor="pointer",i.addEventListener("click",t=>this.#s(t)),i.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&this.#s(t)}),window.addEventListener("keydown",t=>{t.key==="k"&&(t.ctrlKey||t.metaKey)&&this.#s(t),t.key==="Escape"&&this.#t.open&&!this.#e.value&&this.#i()}),window.addEventListener("click",t=>{!this.#t.open&&t.target.dataset.staticSearch&&this.#s(t)}),h()&&this.#s()}#s(e){e&&e.preventDefault(),this.#t.open?this.#i():(this.#t.showModal(),this.setAttribute("aria-expanded","true"),this.#e.select(),this.#e.focus())}#i(){this.#t.close(),this.removeAttribute("aria-expanded"),o()}#r(){let e=document.createElement("dialog");e.setAttribute("closedby","any"),e.setAttribute("part","dialog"),e.innerHTML=`<form method="dialog"><button part="close"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path xmlns="http://www.w3.org/2000/svg" fill="currentColor" d="M5.3 5.3a1 1 0 0 1 1.4 0l5.3 5.3 5.3-5.3a1 1 0 1 1 1.4 1.4L13.4 12l5.3 5.3a1 1 0 0 1-1.4 1.4L12 13.4l-5.3 5.3a1 1 0 0 1-1.4-1.4l5.3-5.3-5.3-5.3a1 1 0 0 1 0-1.4Z"/></svg></button></form><search part="search"><label for="search" part="searchlabel">${this.getAttribute("label")||"search"}</label><input type="search" id="search" name="q" minlength="2" maxlength="300" part="searchinput" /></search><div part="results"></div><a part="poweredby" href="https://staticsearch.com/">powered by StaticSearch</a>`,this.#t=this.shadowRoot.appendChild(e),this.#e=this.shadowRoot.querySelector("#search"),this.#a=this.shadowRoot.querySelector('[part="results"]'),n(this.#a,{minFound:this.getAttribute("minfound"),minScore:this.getAttribute("minscore"),maxResults:this.getAttribute("maxresults"),highlight:this.hasAttribute("highlight")}),l(this.#e,{fuzzy:this.getAttribute("fuzzy")}),this.#t.addEventListener("close",()=>this.#i()),this.#t.addEventListener("click",s=>{this.#t.open&&s.target===this.#t&&this.#i()})}};customElements.define("static-search",a); |
+51
-1
@@ -0,1 +1,2 @@ | ||
| import pkg from './package.json' with { type: 'json' }; | ||
| import process from 'node:process'; | ||
@@ -26,3 +27,3 @@ import { readdir, readFile, cp } from 'node:fs/promises'; | ||
| #agent = 'staticsearch'; | ||
| #clientJS = ['staticsearch.js', 'staticsearch-bind.js', 'staticsearch-component.js']; | ||
| #clientJS = ['staticsearch.js', 'staticsearch-bind.js', 'staticsearch-component.js', 'staticsearch-here.js']; | ||
| #wordIndexChars = 2; | ||
@@ -83,2 +84,16 @@ #JSONspacing = ''; | ||
| const logLine = '─'.repeat(53); | ||
| concol.log([ | ||
| logLine, | ||
| ' ___ _ _ _ ___ _ ', | ||
| ' / __| |_ __ _| |_(_)__/ __| ___ __ _ _ _ __| |_ ', | ||
| ' \\__ \\ _/ _` | _| / _\\__ \\/ -_) _` | \'_/ _| \' \\ ', | ||
| ' |___/\\__\\__,_|\\__|_\\__|___/\\___\\__,_|_| \\__|_||_|', | ||
| '', | ||
| (`version ${ pkg.version } `).padStart(34, ' '), | ||
| ' https://staticsearch.com/', | ||
| '', | ||
| ], 2); | ||
| concol.log(['StaticSearch indexing started', '', ['processing HTML files in', workingBuildDir], ['writing index data to', workingSearchDir], '' ], 1); | ||
@@ -196,2 +211,4 @@ | ||
| let ssPresent = 0; | ||
| // create search word indexes | ||
@@ -246,2 +263,5 @@ buildFile.forEach((page, idx) => { | ||
| // StaticSearch client script found in at least one page | ||
| if (page.html.ssPresent) ssPresent += 1; | ||
| }); | ||
@@ -365,2 +385,32 @@ | ||
| // percentage of pages with staticsearch | ||
| const ssPercent = Math.round(ssPresent / buildFile.length * 100); | ||
| concol.log( | ||
| [ | ||
| `StaticSearch client-side functionality${ ssPresent ? '' : ' NOT'} found`, | ||
| '', | ||
| [ 'indexed pages with search', ssPresent ], | ||
| [ 'site search availability', ssPercent, '%' ], | ||
| ( | ||
| ssPercent > 50 ? '' : | ||
| ` | ||
| For options, see https://staticsearch.com/ | ||
| Example: put this code in every page where you want a search icon: | ||
| <script type="module" src="${ workingSearchDir.replace(workingBuildDir, '') }/staticsearch-here.js"></script> | ||
| ` | ||
| ), | ||
| logLine, | ||
| ], | ||
| 2 | ||
| ); | ||
| } | ||
@@ -367,0 +417,0 @@ |
+6
-1
@@ -61,3 +61,5 @@ // data parsing functions | ||
| // title: String, | ||
| // description, String, | ||
| // description: String, | ||
| // date: 'YYYY-MM-DD', | ||
| // ssPresent: true|false, // StaticSearch client script found | ||
| // word: { | ||
@@ -134,2 +136,5 @@ // title: Set(), | ||
| // static search client present? | ||
| res.ssPresent = !!dom.querySelector('script[src*="staticsearch"]'); | ||
| // extract words | ||
@@ -136,0 +141,0 @@ res.word = { |
+1
-1
| { | ||
| "name": "staticsearch", | ||
| "version": "0.7.0", | ||
| "version": "0.8.0", | ||
| "description": "Simple static site search system.", | ||
@@ -5,0 +5,0 @@ "type": "module", |
+9
-9
@@ -5,3 +5,3 @@ # StaticSearch | ||
| StaticSearch works with [Publican](https://publican.dev/) sites but you can use it on any static site built by any generator. It works best on English sites, but supports most Latin-based languages. | ||
| StaticSearch works with [Publican](https://publican.dev/) sites but you can use it with any static site generator that outputs HTML pages. It works best on English sites, but supports most Latin-based languages. | ||
@@ -56,20 +56,20 @@ **[Full documentation is available at staticsearch.com](https://staticsearch.com/)** | ||
| StaticSearch provides a [web component](https://publican.dev/tools/staticsearch/search-web-component/) to enable search facilities. Add the following snippet to your static site template, perhaps in the HTML `<header>`: | ||
| StaticSearch provides four ways to add a search facility on your site. The easiest is a single `<script>` tag placed inside your pages perhaps in the HTML `<header>`: | ||
| ```html | ||
| <script type="module" src="/search/staticsearch-component.js"></script> | ||
| <static-search title="press Ctrl+K to search"> | ||
| <p>search</p> | ||
| </static-search> | ||
| <script type="module" src="/search/staticsearch-here.js"></script> | ||
| ``` | ||
| Use any HTML element inside `<static-search>` to activate search when it's clicked. You can now rebuild your site to include the update and [re-run the indexer](#index-your-site) to ensure word indexes are up-to-date. | ||
| This displays a icon in the script's location on the page that opens a search dialog when clicked. | ||
| If necessary, you can now rebuild your site to include this update and [re-run the indexer](#index-your-site) to ensure word indexes are up-to-date. | ||
| For full help, refer to: | ||
| * [StaticSearch script](https://staticsearch.com/staticsearch-here/): adds search functionality with a single `<script>` | ||
| * [StaticSearch web component](https://staticsearch.com/search-web-component/): provides full search functionality | ||
| * [StaticSearch bind module](https://staticsearch.com/search-bind-module/): attach search functionality to HTML `<input>` and result elements | ||
| * [StaticSearch bind module](https://staticsearch.com/search-bind-module/): attach search functionality to custom HTML `<input>` and result elements | ||
| * [StaticSearch JavaScript search API](https://staticsearch.com/search-api/): create your own custom search functionality. |
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
138057
1.82%46
2.22%1145
3.9%7
16.67%