summaryrefslogtreecommitdiff
path: root/script.js
diff options
context:
space:
mode:
Diffstat (limited to 'script.js')
-rw-r--r--script.js97
1 files changed, 60 insertions, 37 deletions
diff --git a/script.js b/script.js
index aa08083..1edfa13 100644
--- a/script.js
+++ b/script.js
@@ -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;
+}