diff --git a/CHANGES.rst b/CHANGES.rst index f5dc2d3c4..31e0c8acb 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -139,6 +139,9 @@ Bugs fixed * #10786: improve the error message when a file to be copied (e.g., an asset) is removed during Sphinx execution. Patch by Bénédikt Tran. +* #12040: HTML Search: Ensure that document titles that are partially-matched by + the user search query are included in search results. + Patch by James Addison. Testing ------- diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js index 8e4650f22..388058dab 100644 --- a/sphinx/themes/basic/static/searchtools.js +++ b/sphinx/themes/basic/static/searchtools.js @@ -508,7 +508,7 @@ const Search = { if (!titleTerms.hasOwnProperty(word)) { Object.keys(titleTerms).forEach((term) => { if (term.match(escapedWord)) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); }); } } diff --git a/tests/js/searchtools.js b/tests/js/searchtools.js index 8cbd796b8..4f9984dd4 100644 --- a/tests/js/searchtools.js +++ b/tests/js/searchtools.js @@ -54,6 +54,31 @@ describe('Basic html theme search', function() { expect(Search.performTermsSearch(searchterms, excluded, terms, titleterms)).toEqual(hits); }); + it('should partially-match "sphinx" when in title index', function() { + index = { + docnames:["index"], + filenames:["index.rst"], + terms:{'useful': 0, 'utilities': 0}, + titles:["sphinx_utils module"], + titleterms:{'sphinx_utils': 0} + } + Search.setIndex(index); + searchterms = ['sphinx']; + excluded = []; + terms = index.terms; + titleterms = index.titleterms; + + hits = [[ + "index", + "sphinx_utils module", + "", + null, + 7, + "index.rst" + ]]; + expect(Search.performTermsSearch(searchterms, excluded, terms, titleterms)).toEqual(hits); + }); + }); });