document.documentElement.classList.add('js'); const esc = v => String(v??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''})[c]); const menu=document.querySelector('.menu-toggle'); menu?.addEventListener('click',()=>{const open=menu.getAttribute('aria-expanded')!=='true';menu.setAttribute('aria-expanded',String(open));document.getElementById('main-nav').classList.toggle('open',open);}); menu?.addEventListener('keydown',event=>{if(event.key==='Escape'){menu.setAttribute('aria-expanded','false');document.getElementById('main-nav').classList.remove('open');}}); for(const el of document.querySelectorAll('[data-company-status]')){ const c=JSON.parse(el.dataset.companyStatus),now=new Date(),today=new Intl.DateTimeFormat('en-CA',{timeZone:'Asia/Kuala_Lumpur',year:'numeric',month:'2-digit',day:'2-digit'}).format(now); el.textContent=c.terms!=='final'?'Draft terms':c.listingConfirmed&&c.listingDate<=today?'Listed':!c.publicWindow?.opensAt||!c.publicWindow.closesAt?'Unannounced':now{ const params=new URLSearchParams(new FormData(form));if(!params.has('page'))params.set('page','1'); if(updateUrl){const clean=new URL(location.href);clean.search=params.toString();history.replaceState(null,'',clean);} try{ if(records===null){const response=await fetch('/search-index.json');if(!response.ok)throw new Error();records=await response.json();} const q=(params.get('q')||'').trim().toLowerCase(),month=params.get('month')||result.dataset.month||'',company=params.get('company')||'',date=params.get('date')||'',tag=params.get('tag')||''; const filtered=records.filter(r=>(!result.dataset.kind||r.kind===result.dataset.kind)&&(!q||[r.title,r.summary,...r.tags,...r.companies].join(' ').toLowerCase().includes(q))&&(!month||r.month.startsWith(month))&&(!date||r.date===date)&&(!company||r.companies.includes(company))&&(!tag||r.tags.includes(tag))); const size=Number(result.dataset.pageSize)||9,total=Math.max(1,Math.ceil(filtered.length/size)),page=Math.min(total,Math.max(1,Number(params.get('page'))||1)); result.innerHTML=filtered.length?filtered.slice((page-1)*size,page*size).map(r=>`
${labels[r.kind]}

${esc(r.title)}

${esc(r.summary)}

${r.tags.slice(0,2).map(esc).join(' · ')}Read ↗
`).join(''):`

${records.length?'No matching publications':'No publications yet'}

${records.length?'Try a different search or reset the filters.':'Reviewed publications will appear here when they are published.'}

`; count.textContent=`${filtered.length} ${filtered.length===1?'result':'results'}${filtered.length?` · Page ${page} of ${total}`:''}`; pages.innerHTML=total>1?Array.from({length:total},(_,i)=>{const p=new URLSearchParams(params);p.set('page',String(i+1));return `${i+1}`;}).join(''):''; pages.querySelectorAll('a').forEach(a=>a.addEventListener('click',event=>{event.preventDefault();const url=new URL(a.href);history.replaceState(null,'',url);fill();apply(false);})); }catch{count.textContent='Search is temporarily unavailable. Use the publication and archive links on this page.';} }; function fill(){const params=new URLSearchParams(location.search);for(const name of ['q','month','date','company','tag'])if(form.elements[name]){const value=params.get(name)||'';if(form.elements[name].tagName==='SELECT'&&value&&!Array.from(form.elements[name].options).some(o=>o.value===value)){const option=new Option(value,value);form.elements[name].add(option);}form.elements[name].value=value;}let pageInput=form.elements.page;if(!pageInput){pageInput=document.createElement('input');pageInput.type='hidden';pageInput.name='page';form.append(pageInput);}pageInput.value=params.get('page')||'1';} fill();if(location.search)apply(false); form.addEventListener('submit',event=>{event.preventDefault();form.elements.page.value='1';apply();}); form.addEventListener('reset',()=>setTimeout(()=>{for(const name of ['q','month','date','company','tag'])if(form.elements[name])form.elements[name].value='';form.elements.page.value='1';apply();},0)); window.addEventListener('popstate',()=>{fill();apply(false);}); } if(document.querySelector('[data-chart]')) import('/assets/chart.mjs');