diff options
author | Martin Fischer <martin@push-f.com> | 2021-12-10 10:36:00 +0100 |
---|---|---|
committer | Martin Fischer <martin@push-f.com> | 2021-12-10 10:36:00 +0100 |
commit | 950ab4cba9cc05b5446aaf889568cfc270d2139c (patch) | |
tree | c8a61ce97eaf95fd9c5e69f89ce4ad3de37e5fec /script.js | |
parent | 8be7aa457cc8907acccb75bf5efcdc26c5b952ee (diff) |
split lib from non-lib features
Diffstat (limited to 'script.js')
-rw-r--r-- | script.js | 97 |
1 files changed, 60 insertions, 37 deletions
@@ -13,46 +13,69 @@ 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; - } - ); + const nonLibResults = search(data.features.non_lib_features, query); + const libResults = search(data.features.lib_features, query); + + const totalResultCount = nonLibResults.length + libResults.length; // so that release notes don't get in the way when <Tab>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) => `<code>${x}</code>`); - a.href = feat.url; - if (feat.flag) - a.title = feat.flag; - li.appendChild(a); - ul.appendChild(li); + document.body.classList.toggle('hide-release-notes', totalResultCount == 0); + + let list = document.getElementById(key + '-non-lib-list'); + if (list) { + list.replaceChildren(...renderList(nonLibResults).children); + list.hidden = nonLibResults.length == 0; + } + + list = document.getElementById(key + '-lib-list'); + if (list) { + list.replaceChildren(...renderList(libResults).children); + list.hidden = libResults.length == 0; + document.getElementById(key + '-lib').hidden = libResults.length == 0; } - const list = document.getElementById(key + '-list'); - list.replaceChildren(...ul.children); - list.hidden = results.length == 0; - heading.hidden = results.length == 0; + + // TODO: hide library heading if no lib results + + heading.hidden = totalResultCount == 0; } }); })(); + +function search(features, query) { + return Object.values(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; + } + ); +} + +function renderList(results) { + 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) => `<code>${x}</code>`); + a.href = feat.url; + if (feat.flag) + a.title = feat.flag; + li.appendChild(a); + ul.appendChild(li); + } + return ul; +} |