diff --git a/lib/rdoc/generator/template/darkfish/js/darkfish.js b/lib/rdoc/generator/template/darkfish/js/darkfish.js index 4c15efde66..6b6e688afb 100644 --- a/lib/rdoc/generator/template/darkfish/js/darkfish.js +++ b/lib/rdoc/generator/template/darkfish/js/darkfish.js @@ -72,10 +72,30 @@ function hookSearch() { } search.select = function(result) { - window.location.href = result.firstChild.firstChild.href; + var href = result.firstChild.firstChild.href; + var query = this.input.value; + if (query) { + var url = new URL(href, window.location.origin); + url.searchParams.set('q', query); + url.searchParams.set('nav', '0'); + href = url.toString(); + } + window.location.href = href; } search.scrollIntoView = search.scrollInWindow; + + // Check for ?q= URL parameter and trigger search automatically + if (typeof URLSearchParams !== 'undefined') { + var urlParams = new URLSearchParams(window.location.search); + var queryParam = urlParams.get('q'); + if (queryParam) { + var navParam = urlParams.get('nav'); + var autoSelect = navParam !== '0'; + input.value = queryParam; + search.search(queryParam, autoSelect); + } + } }; function hookFocus() { diff --git a/lib/rdoc/generator/template/darkfish/js/search.js b/lib/rdoc/generator/template/darkfish/js/search.js index d3cded1d57..68e1f77ff8 100644 --- a/lib/rdoc/generator/template/darkfish/js/search.js +++ b/lib/rdoc/generator/template/darkfish/js/search.js @@ -34,6 +34,8 @@ Search.prototype = Object.assign({}, Navigation, new function() { } this.search = function(value, selectFirstMatch) { + this.selectFirstMatch = selectFirstMatch; + value = value.trim().toLowerCase(); if (value) { this.setNavigationActive(true); @@ -76,7 +78,15 @@ Search.prototype = Object.assign({}, Navigation, new function() { //TODO: ECMAScript //if (jQuery.browser.msie) this.$element[0].className += ''; - if (isLast) this.result.setAttribute('aria-busy', 'false'); + if (this.selectFirstMatch && this.current) { + this.selectFirstMatch = false; + this.select(this.current); + } + + if (isLast) { + this.selectFirstMatch = false; + this.result.setAttribute('aria-busy', 'false'); + } } this.move = function(isDown) {