1const p=JSON.parse(document.getElementById("search-data")?.textContent||"{}");JSON.parse(document.getElementById("languages-data")?.textContent||"[]");function l(e){if(!e)return"";const s=document.createElement("div");return s.textContent=e,s.innerHTML}let d={contentType:"all",language:"all"};function g(e,s){if(!e||!s)return!1;const a=e.toLowerCase().trim(),i=s.toLowerCase();return i.includes(a)?!0:a.split(/\s+/).some(t=>t.length>2&&i.includes(t))}function L(e,s){let a=e,i=s;return d.contentType==="episodes"?i=[]:d.contentType==="guests"&&(a=[]),d.language!=="all"&&(a=a.filter(r=>r.language===d.language),i=i.filter(r=>r.languages&&r.languages.includes(d.language))),{episodes:a,guests:i}}function m(){document.querySelectorAll(".filter-btn").forEach(a=>{a.classList.remove("active","bg-primary-600","text-white"),a.classList.add("bg-gray-200","dark:bg-gray-700","text-gray-700","dark:text-gray-300")});const e=document.getElementById(`filter-${d.contentType}`);e&&(e.classList.add("active","bg-primary-600","text-white"),e.classList.remove("bg-gray-200","dark:bg-gray-700","text-gray-700","dark:text-gray-300")),document.querySelectorAll(".lang-filter").forEach(a=>{a.classList.remove("active","bg-primary-600","text-white"),a.classList.add("bg-gray-200","dark:bg-gray-700","text-gray-700","dark:text-gray-300")});const s=document.getElementById(d.language==="all"?"lang-all":`lang-${d.language}`);s&&(s.classList.add("active","bg-primary-600","text-white"),s.classList.remove("bg-gray-200","dark:bg-gray-700","text-gray-700","dark:text-gray-300"))}function u(e){if(!e||e.trim().length<2){b();return}const s=p.episodes.filter(r=>g(e,r.title)||g(e,r.description)||r.keywords&&r.keywords.some(t=>g(e,t))),a=p.guests.filter(r=>g(e,r.name)||g(e,r.bio)||g(e,r.company)||g(e,r.role)),i=L(s,a);E(i.episodes,i.guests,e)}function E(e,s,a){const i=document.getElementById("search-results"),r=document.getElementById("empty-state"),t=document.getElementById("no-results"),c=document.getElementById("results-count"),o=e.length+s.length;if(o===0){i.classList.add("hidden"),r.classList.add("hidden"),t.classList.remove("hidden");return}r.classList.add("hidden"),t.classList.add("hidden"),i.classList.remove("hidden"),c.textContent=`Found ${o} result${o!==1?"s":""} for "${l(a)}"`;const x=document.getElementById("search-status");x.textContent=`Showing ${o} result${o!==1?"s":""} for ${a}. ${e.length} episode${e.length!==1?"s":""} and ${s.length} guest${s.length!==1?"s":""}.`;const y=document.getElementById("episodes-section"),v=document.getElementById("episodes-results");e.length>0?(y.classList.remove("hidden"),v.innerHTML=e.map(n=>` 2 <a href="/${l(n.language)}/episodes/${l(n.id)}/" class="block"> 3 <article class="bg-white dark:bg-gray-800 rounded-lg shadow-md hover:shadow-lg transition-shadow p-6 h-full cursor-pointer"> 4 <div class="flex items-start justify-between mb-3"> 5 <span class="px-2 py-1 text-xs font-medium rounded-full bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-300"> 6 ${l(n.language.toUpperCase())} 7 </span> 8 <span class="text-sm text-gray-500 dark:text-gray-400"> 9 S${l(String(n.season))}E${l(String(n.episode))} 10 </span> 11 </div> 12 <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2 line-clamp-2 hover:text-primary-600 dark:hover:text-primary-400 transition-colors"> 13 ${l(n.title)} 14 </h3> 15 <p class="text-gray-600 dark:text-gray-400 text-sm line-clamp-3 mb-4"> 16 ${l(n.description)} 17 </p> 18 <div class="inline-flex items-center text-sm font-medium text-primary-600 dark:text-primary-400 hover:text-primary-700 dark:hover:text-primary-300"> 19 Listen now 20 <svg class="ml-1 w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 21 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path> 22 </svg> 23 </div> 24 </article> 25 </a> 26 `).join("")):y.classList.add("hidden");const h=document.getElementById("guests-section"),k=document.getElementById("guests-results");s.length>0?(h.classList.remove("hidden"),k.innerHTML=s.map(n=>` 27 <a href="/guests/${l(n.id)}/" class="block"> 28 <article class="bg-white dark:bg-gray-800 rounded-lg shadow-md hover:shadow-lg transition-shadow p-6 text-center h-full cursor-pointer"> 29 <div class="mb-4"> 30 <img 31 src="/images/guests/${l(n.id)}.jpeg" 32 alt="${l(n.name)}" 33 class="w-20 h-20 mx-auto rounded-full object-cover grayscale" 34 onerror="this.src='/images/placeholder-guest.jpg'" 35 /> 36 </div> 37 <h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2 hover:text-primary-600 dark:hover:text-primary-400 transition-colors"> 38 ${l(n.name)} 39 </h3> 40 ${n.company?`<p class="text-gray-600 dark:text-gray-400 text-sm mb-2">${l(n.company)}</p>`:""} 41 ${n.role?`<p class="text-gray-500 dark:text-gray-500 text-xs mb-3">${l(n.role)}</p>`:""} 42 <div class="text-xs text-gray-500 dark:text-gray-400"> 43 ${l(String(n.episodeCount))} episode${n.episodeCount!==1?"s":""} 44 </div> 45 </article> 46 </a> 47 `).join("")):h.classList.add("hidden")}function b(){document.getElementById("search-results").classList.add("hidden"),document.getElementById("no-results").classList.add("hidden"),document.getElementById("empty-state").classList.remove("hidden")}function f(){const e=document.getElementById("search-input"),s=document.querySelectorAll(".search-tag");if(!e){console.error("Search input not found");return}
47e.focus();let a;e.addEventListener("input",t=>{clearTimeout(a),a=setTimeout(()=>{u(t.target.value)},300)}),e.addEventListener("keydown",t=>{t.key==="Enter"&&(t.preventDefault(),clearTimeout(a),u(t.target.value))}),s.forEach(t=>{t.addEventListener("click",()=>{const c=t.dataset.query;e.value=c,u(c)})}),document.querySelectorAll(".filter-btn").forEach(t=>{t.addEventListener("click",()=>{const c=t.id.replace("filter-","");d.contentType=c,m();const o=e.value;o&&o.trim().length>=2&&u(o)})}),document.querySelectorAll(".lang-filter").forEach(t=>{t.addEventListener("click",()=>{const c=t.id==="lang-all"?"all":t.id.replace("lang-","");d.language=c,m();const o=e.value;o&&o.trim().length>=2&&u(o)})}),document.getElementById("clear-filters").addEventListener("click",()=>{d={contentType:"all",language:"all"},m();const t=e.value;t&&t.trim().length>=2&&u(t)});const r=new URLSearchParams(window.location.search).get("q");r&&(e.value=r,u(r))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",f):f();
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.