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
---
+
+
+
+
+
No upcoming conferences matched your search.
+
-
+
{% for current in site.data.current %}
-
@@ -15,3 +27,4 @@
{% endfor %}
+
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 past conferences matched your search.
+
+
+
{% for past in site.data.past %}
-
@@ -16,4 +29,5 @@
Videos{% endif %}
{% endfor %}
-
\ No newline at end of file
+
+
\ 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 @@
No upcoming conferences matched your search.
-
+
{% for current in site.data.current %}
-
diff --git a/past.html b/past.html
index 9177655e..9cc14b3d 100644
--- a/past.html
+++ b/past.html
@@ -17,7 +17,7 @@
No past conferences matched your search.
-
+
{% for past in site.data.past %}
-
From 31104610ebdae300289a5df4562a2b1f753b109c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 29 Aug 2026 23:39:24 +0000
Subject: [PATCH 6/6] fix: guard search initialization
Co-authored-by: ckenst <6896787+ckenst@users.noreply.github.com>
---
assets/conference-search.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/assets/conference-search.js b/assets/conference-search.js
index 9d805157..d7a6ab0b 100644
--- a/assets/conference-search.js
+++ b/assets/conference-search.js
@@ -11,6 +11,9 @@ document.addEventListener('DOMContentLoaded', function () {
var items = Array.from(list.querySelectorAll('li'));
var searchContainer = input.closest('.conference-search');
+ if (!searchContainer) {
+ return;
+ }
var results = searchContainer.querySelector('[data-conference-search-results]');
var emptyState = searchContainer.querySelector('[data-conference-search-empty]');