PageSourceSearch

https://www.cro.cafe/_astro/search.astro_astro_type_script_index_0_lang.DI5hjho9.js

js cro.cafe collected 2026-10-02 14:34:15 UTC 6,865 bytes, 47 lines download raw bytes

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.