From 94e63d35d5bd58d5483473c2a7d47b6260bfc3ab Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 26 Aug 2026 04:10:54 +0000 Subject: [PATCH 1/6] Initial plan From 82c70b3f5d175c97ddd1f1352d438da5b58c7979 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Aug 2026 23:35:49 +0000 Subject: [PATCH 2/6] feat: add client-side conference search Co-authored-by: ckenst <6896787+ckenst@users.noreply.github.com> --- _sass/_layout.scss | 29 ++++++++++++++++++++ assets/conference-search.js | 54 +++++++++++++++++++++++++++++++++++++ index.html | 15 ++++++++++- past.html | 18 +++++++++++-- 4 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 assets/conference-search.js diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 80cd9a3c..34e0c542 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -230,6 +230,35 @@ font-size: 20px; } +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.conference-search { + margin-bottom: $spacing-unit / 2; +} + +.conference-search__input { + width: 100%; + padding: 10px 12px; + border: 1px solid $grey-color-light; + border-radius: 4px; + box-sizing: border-box; +} + +.conference-search__results, +.conference-search__empty { + margin: 10px 0 0; +} + .post-list { margin-left: 0; list-style: none; diff --git a/assets/conference-search.js b/assets/conference-search.js new file mode 100644 index 00000000..54994dc7 --- /dev/null +++ b/assets/conference-search.js @@ -0,0 +1,54 @@ +document.addEventListener('DOMContentLoaded', function () { + var searchInputs = document.querySelectorAll('[data-conference-search-input]'); + + searchInputs.forEach(function (input) { + var listId = input.getAttribute('aria-controls'); + var list = document.getElementById(listId); + + if (!list) { + return; + } + + var items = Array.from(list.querySelectorAll('li')); + var searchContainer = input.closest('.conference-search'); + var results = searchContainer.querySelector('[data-conference-search-results]'); + var emptyState = searchContainer.querySelector('[data-conference-search-empty]'); + var label = list.dataset.searchLabel || 'conferences'; + + items.forEach(function (item) { + item.dataset.searchText = item.textContent.replace(/\s+/g, ' ').trim().toLowerCase(); + }); + + function resultText(visibleCount, query) { + var noun = visibleCount === 1 ? 'result' : 'results'; + + if (query) { + return visibleCount + ' ' + noun + ' for "' + query + '"'; + } + + return 'Showing all ' + visibleCount + ' ' + label; + } + + function filterItems() { + var query = input.value.replace(/\s+/g, ' ').trim().toLowerCase(); + var visibleCount = 0; + + items.forEach(function (item) { + var isMatch = !query || item.dataset.searchText.indexOf(query) !== -1; + + item.hidden = !isMatch; + + if (isMatch) { + visibleCount += 1; + } + }); + + results.textContent = resultText(visibleCount, input.value.trim()); + emptyState.hidden = visibleCount !== 0; + } + + input.addEventListener('input', filterItems); + input.addEventListener('search', filterItems); + filterItems(); + }); +}); diff --git a/index.html b/index.html index ace0eeb2..2c992281 100644 --- a/index.html +++ b/index.html @@ -2,8 +2,20 @@ layout: default ---
+ -
+ diff --git a/past.html b/past.html index 90ce5e56..9177655e 100644 --- a/past.html +++ b/past.html @@ -4,7 +4,20 @@ title: Past Software Testing Conferences --- - + \ No newline at end of file From ad64f16a25d04e0c252200011f6ad8a7ac9bbf8e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Aug 2026 23:36:41 +0000 Subject: [PATCH 3/6] fix: refine conference search feedback Co-authored-by: ckenst <6896787+ckenst@users.noreply.github.com> --- _sass/_layout.scss | 2 +- assets/conference-search.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 34e0c542..4b46e4a9 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -243,7 +243,7 @@ } .conference-search { - margin-bottom: $spacing-unit / 2; + margin-bottom: 15px; } .conference-search__input { diff --git a/assets/conference-search.js b/assets/conference-search.js index 54994dc7..f35898dd 100644 --- a/assets/conference-search.js +++ b/assets/conference-search.js @@ -26,7 +26,7 @@ document.addEventListener('DOMContentLoaded', function () { return visibleCount + ' ' + noun + ' for "' + query + '"'; } - return 'Showing all ' + visibleCount + ' ' + label; + return ''; } function filterItems() { From 6df032396ca87b25fcffe49c8907091586e51505 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Aug 2026 23:38:04 +0000 Subject: [PATCH 4/6] fix: polish conference search behavior Co-authored-by: ckenst <6896787+ckenst@users.noreply.github.com> --- _sass/_layout.scss | 1 + assets/conference-search.js | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 4b46e4a9..357fffa5 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -238,6 +238,7 @@ margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); + clip-path: inset(50%); white-space: nowrap; border: 0; } diff --git a/assets/conference-search.js b/assets/conference-search.js index f35898dd..fea31d11 100644 --- a/assets/conference-search.js +++ b/assets/conference-search.js @@ -30,7 +30,8 @@ document.addEventListener('DOMContentLoaded', function () { } function filterItems() { - var query = input.value.replace(/\s+/g, ' ').trim().toLowerCase(); + var displayQuery = input.value.replace(/\s+/g, ' ').trim(); + var query = displayQuery.toLowerCase(); var visibleCount = 0; items.forEach(function (item) { @@ -43,8 +44,8 @@ document.addEventListener('DOMContentLoaded', function () { } }); - results.textContent = resultText(visibleCount, input.value.trim()); - emptyState.hidden = visibleCount !== 0; + results.textContent = resultText(visibleCount, displayQuery); + emptyState.hidden = visibleCount !== 0 || !query; } input.addEventListener('input', filterItems); From 40ba487226a29d7d0295eeef66a5a07aadfa138c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 29 Aug 2026 23:38:50 +0000 Subject: [PATCH 5/6] refactor: clean up search markup Co-authored-by: ckenst <6896787+ckenst@users.noreply.github.com> --- assets/conference-search.js | 1 - index.html | 2 +- past.html | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/assets/conference-search.js b/assets/conference-search.js index fea31d11..9d805157 100644 --- a/assets/conference-search.js +++ b/assets/conference-search.js @@ -13,7 +13,6 @@ document.addEventListener('DOMContentLoaded', function () { var searchContainer = input.closest('.conference-search'); var results = searchContainer.querySelector('[data-conference-search-results]'); var emptyState = searchContainer.querySelector('[data-conference-search-empty]'); - var label = list.dataset.searchLabel || 'conferences'; items.forEach(function (item) { item.dataset.searchText = item.textContent.replace(/\s+/g, ' ').trim().toLowerCase(); diff --git a/index.html b/index.html index 2c992281..adfd7e68 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,7 @@ -