From 67aca7fc09e94caaadbb31f5a14f16e622c163b1 Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Fri, 19 Dec 2025 17:18:43 +0000 Subject: [PATCH 1/2] Fix search dropdown behaviour After this change: | Scenario | Behavior | |----------|----------| | Type search, click result | Navigate without `?q=`, clean URL without dropdown | | Type search, press Enter | Navigate without `?q=`, clean URL without dropdown | | Land on URL with `?q=` param | Show dropdown with pre-filled query | | Click outside dropdown | Hide dropdown, keep input value | | Focus input with existing query | Show dropdown again | --- lib/rdoc/generator/template/aliki/js/aliki.js | 32 ++++++++++--------- .../template/aliki/js/search_controller.js | 9 ++++++ 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/rdoc/generator/template/aliki/js/aliki.js b/lib/rdoc/generator/template/aliki/js/aliki.js index 6b38c46266..525ca8ac64 100644 --- a/lib/rdoc/generator/template/aliki/js/aliki.js +++ b/lib/rdoc/generator/template/aliki/js/aliki.js @@ -67,15 +67,7 @@ function createSearchInstance(input, result) { } search.select = function(result) { - let href = result.firstChild.firstChild.href; - const query = this.input.value; - if (query) { - const url = new URL(href, window.location.origin); - url.searchParams.set('q', query); - url.searchParams.set('nav', '0'); - href = url.toString(); - } - window.location.href = href; + window.location.href = result.firstChild.firstChild.href; } search.scrollIntoView = search.scrollInWindow; @@ -97,15 +89,27 @@ function hookSearch() { const search = createSearchInstance(input, result); if (!search) return; + // Hide search results when clicking outside the search area + document.addEventListener('click', (e) => { + if (!e.target.closest('.navbar-search-desktop')) { + search.hide(); + } + }); + + // Show search results when focusing on input (if there's a query) + input.addEventListener('focus', () => { + if (input.value.trim()) { + search.show(); + } + }); + // Check for ?q= URL parameter and trigger search automatically if (typeof URLSearchParams !== 'undefined') { const urlParams = new URLSearchParams(window.location.search); const queryParam = urlParams.get('q'); if (queryParam) { - const navParam = urlParams.get('nav'); - const autoSelect = navParam !== '0'; input.value = queryParam; - search.search(queryParam, autoSelect); + search.search(queryParam, false); } } } @@ -378,9 +382,7 @@ function hookSearchModal() { if (queryParam && isSmallViewport) { openSearchModal(); searchInput.value = queryParam; - const navParam = urlParams.get('nav'); - const autoSelect = navParam !== '0'; - mobileSearch.search(queryParam, autoSelect); + mobileSearch.search(queryParam, false); } } } diff --git a/lib/rdoc/generator/template/aliki/js/search_controller.js b/lib/rdoc/generator/template/aliki/js/search_controller.js index 02078e0a65..e91bdbe93a 100644 --- a/lib/rdoc/generator/template/aliki/js/search_controller.js +++ b/lib/rdoc/generator/template/aliki/js/search_controller.js @@ -116,5 +116,14 @@ SearchController.prototype = Object.assign({}, SearchNavigation, new function() }); } + this.hide = function() { + this.result.setAttribute('aria-expanded', 'false'); + this.setNavigationActive(false); + } + + this.show = function() { + this.result.setAttribute('aria-expanded', 'true'); + this.setNavigationActive(true); + } }); From d461adf3724141bec514386d93442003c99b8559 Mon Sep 17 00:00:00 2001 From: Stan Lo Date: Fri, 19 Dec 2025 23:00:26 +0000 Subject: [PATCH 2/2] Bump RDoc version to 7.0.2 --- lib/rdoc/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rdoc/version.rb b/lib/rdoc/version.rb index 05ebd54c64..147cfc3d6b 100644 --- a/lib/rdoc/version.rb +++ b/lib/rdoc/version.rb @@ -5,6 +5,6 @@ module RDoc ## # RDoc version you are using - VERSION = '7.0.1' + VERSION = '7.0.2' end