(async function(){ const res = await fetch('data.json'); const versions = await res.json(); const input = document.getElementById('search'); input.focus(); input.addEventListener('input', (e) => { const query = e.target.value.toLowerCase(); for (const [key, data] of Object.entries(versions)) { const heading = document.getElementById(key); if (data.features == undefined) { heading.hidden = query.length != 0; continue; } const results = Object.values(data.features).filter( feat => { if (feat.title.toLowerCase().replaceAll('`', '').includes(query)) { return true; } if (feat.flag && feat.flag.toLowerCase().includes(query)) { return true; } if (query.length > 1) { if (feat.aliases && feat.aliases.some(a => a.toLowerCase().includes(query))) { return true; } if (feat.items && feat.items.some(i => i.toLowerCase().includes(query))) { return true; } } return false; } ); // so that release notes don't get in the way when ing through results document.body.classList.toggle('hide-release-notes', results.length == 0); const ul = document.createElement('ul'); for (const feat of results) { const li = document.createElement('li'); const a = document.createElement('a'); a.textContent = feat.title; a.innerHTML = a.innerHTML.replaceAll(/`(.+?)`/g, (_, x) => `${x}`); a.href = feat.url; if (feat.flag) a.title = feat.flag; li.appendChild(a); ul.appendChild(li); } const list = document.getElementById(key + '-list'); list.replaceChildren(...ul.children); list.hidden = results.length == 0; heading.hidden = results.length == 0; } }); })();