PageSourceSearch

https://www.pirineo-frances.es/app/dist/pyreneesbearnaises/addons/…ddon-search-engine-component.e33b07851b.mjs

js pirineo-frances.es collected 2026-09-26 12:47:34 UTC 5,815 bytes, 1 lines download raw bytes

1import m from"woody_library_woody_component";import{fetchSearch as c}from"woody_addon_search_data_controller";class p extends m{#d={results_limit:globals?.search?.api?.args?.size??15,threshold:globals?.search?.api?.args?.threshold??.5};#r;#e;#a;#n=0;#s="";#t=[];#h=this.#n;#l=!1;#i;#o;constructor(){super()}async init(e){if(super.init(e),this.config=Object.assign(this.#d,e),this.#i=new URL(window.location.href),this.#r=this.querySelector("woody-search-engine-input"),!this.#r)throw new Error("SearchEngineComponent - init - input component is missed");if(await customElements.whenDefined(this.#r.tagName.toLowerCase()),this.onCmpInputDefined(),this.#a=this.querySelector("woody-search-engine-results"),!this.#a)throw new Error("SearchEngineComponent - init - results component is missed");await customElements.whenDefined(this.#a.tagName.toLowerCase()),this.onCmpResultsDefined(),this.#e=this.querySelector("woody-search-engine-filters"),this.#e&&(await customElements.whenDefined(this.#e.tagName.toLowerCase()),this.onCmpFiltersDefined()),this.#f()&&this.#p()}#f(){return this.classList.contains("embed-results")}#m(e){return e.composedPath().includes(this)}#p(){this.addEventListener("click",()=>{this.#l&&this.updateUrlParams()}),this.#o=e=>{this.#m(e)||this.clearUrlParams()},document.addEventListener("click",this.#o)}async checkUrlParams(){const e=this.#i.searchParams.get("search_query");if(!e)return;const t=this.#i.searchParams.get("search_filter");if(this.#s=e,await customElements.whenDefined(this.#r.tagName.toLowerCase()),this.#r.setInputValue(e),this.#e&&await customElements.whenDefined(this.#e.tagName.toLowerCase()),t&&this.#e){const s=this.decodeFilterParam(t);s?(this.selectFilterVisually(s),this.#t=s,await this.search({fetchGlobalCounts:!0,updateUrl:!1})):await this.search({updateUrl:!1})}else await this.search({updateUrl:!1})}applyFilter(e){!this.#e||!e||Object.keys(e).forEach(t=>{const s=JSON.stringify(e[t]),r=`[data-woody-filter-group="${t}"][data-woody-filter-match='${s}']`,i=this.#e.querySelector(r);i&&i.click()})}selectFilterVisually(e){!this.#e||!e||Object.keys(e).forEach(t=>{const s=JSON.stringify(e[t]);this.#e.querySelectorAll(`[data-woody-filter-group="${t}"]`).forEach(a=>a.classList.remove("is-active"));const i=`[data-woody-filter-group="${t}"][data-woody-filter-match='${s}']`,h=this.#e.querySelector(i);h&&h.classList.add("is-active")})}#g(e,t,s,r,i=!1){r&&this.updateUrlParams(),this.#a&&this.#a.updateResults(e,t,this.config.results_limit,this.#h,s),this.#e&&this.#e.updateResults(e,t,this.config.results_limit,this.#h,i?!1:s)}#c(e){if(!this.#e)return[];const t=this.#e.querySelectorAll(`[data-woody-filter-group="${e}"][data-woody-filter-match]`);for(const s of t){const r=s.getAttribute("data-woody-filter-match");if(r)try{const i=JSON.parse(r);if(i&&typeof i=="object"&&Object.keys(i).length>0)return Object.keys(i)}catch{return[]}}return[]}encodeFilterParam(e){return!e||Object.keys(e).length===0?"":Object.entries(e).map(([t,s])=>{if(!s||typeof s!="object")return null;const r=this.#c(t),h=(r.length>0?r:Object.keys(s)).map(a=>s[a]).filter(a=>a!=null&&a!=="").map(a=>encodeURIComponent(a)).join(".");return h?`${encodeURIComponent(t)}:${h}`:null}).filter(Boolean).join("|")}decodeFilterParam(e){if(!e)return null;const t={};return e.split("|").forEach(s=>{const[r,i]=s.split(":"),h=decodeURIComponent(r||"");if(!h||!i)return;const a=i.split(".").map(l=>decodeURIComponent(l)).filter(Boolean),n=this.#c(h);if(!n.length||!a.length)return;const o=a.reduce((l,d,f)=>{const u=n[f];return u&&(l[u]=d),l},{});Object.keys(o).length>0&&(t[h]=o)}),Object.keys(t).length>0?t:null}#u(){window.history.replaceState({},"",this.#i.toString())}updateUrlParams(){this.#s&&this.#s.length>0?this.#i.searchParams.set("search_query",this.#s):this.#i.searchParams.delete("search_query"),this.#t&&Object.keys(this.#t).length>0?this.#i.searchParams.set("search_filter",this.encodeFilterParam(this.#t)):this.#i.searchParams.delete("search_filter"),this.#u()}clearUrlParams(){this.#i.searchParams.delete("search_query"),this.#i.searchParams.delete("search_filter"),this.#u()}async onShow(e=!1){this.dispatchEvent(new CustomEvent("search-show",{bubbles:!0})),this.#l?e&&this.updateUrlParams():(await customElements.whenDefined(this.#r.tagName.toLowerCase()),e&&this.#r.focus(),await this.checkUrlParams())}onHide(){this.clearUrlParams(),this.dispatchEvent(new CustomEvent("search-hide",{bubbles:!0}))}onCmpInputDefined(){this.#r.addEventListener("submit",e=>{this.#h=this.#n,this.#s=e.detail.value,this.#e?this.resetFiltering():this.search()}),this.#r.addEventListener("escape",()=>{this.dispatchEvent(new Event("close"))})}onCmpResultsDefined(){this.#a.addEventListener("loadMore",()=>{this.#h++,this.search()}),this.#a.addEventListener("scrollTop",()=>{this.scrollTo({top:0,behavior:"smooth"})})}
1onCmpFiltersDefined(){this.#e.addEventListener("filtering",e=>{this.#h=this.#n,this.#t=e.detail.value,this.search()}),this.#t=this.#e.getCurrentFiltering()}resetFiltering(){this.#e&&this.#e.resetFiltering()}async search(e={}){const{updateUrl:t=!0,fetchGlobalCounts:s=!1}=e;this.#l=!0;let r=[],i={};if(this.#s&&this.#s!==""&&this.#s.length>2){const a=this.#t&&Object.keys(this.#t).length>0;if(s&&a){const n=await c(this.#s,{},{size:this.config.results_limit,offset:0,threshold:this.config.threshold});i.total={count:n.count},n.types&&(i.types=n.types),r=(await c(this.#s,this.#t,{size:this.config.results_limit,offset:this.#h*this.config.results_limit,threshold:this.config.threshold})).results}else{const n=await c(this.#s,this.#t,{size:this.config.results_limit,offset:this.#h*this.config.results_limit,threshold:this.config.threshold});r=n.results,i.total={count:n.count},n.types&&(i.types=n.types)}}const h=this.#t&&Object.keys(this.#t).length>0;this.#g(r,i,h,t,s)}}export{p as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.