diff --git a/CHANGES b/CHANGES index 9b34377a1..834db6bdc 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ Release 0.6.8 (in development) ============================== +* #445: Fix links to result pages when using the search function + of HTML built with the ``dirhtml`` builder. + * #444: In templates, properly re-escape values treated with the "striptags" Jinja filter. diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 322b9df30..c23c2bdee 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -750,6 +750,10 @@ class DirectoryHTMLBuilder(StandaloneHTMLBuilder): return outfilename + def prepare_writing(self, docnames): + StandaloneHTMLBuilder.prepare_writing(self, docnames) + self.globalcontext['no_search_suffix'] = True + class SerializingHTMLBuilder(StandaloneHTMLBuilder): """ diff --git a/sphinx/themes/basic/layout.html b/sphinx/themes/basic/layout.html index 92bd44b14..b641f7c56 100644 --- a/sphinx/themes/basic/layout.html +++ b/sphinx/themes/basic/layout.html @@ -109,7 +109,7 @@ URL_ROOT: '{{ url_root }}', VERSION: '{{ release|e }}', COLLAPSE_MODINDEX: false, - FILE_SUFFIX: '{{ file_suffix }}', + FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}', HAS_SOURCE: {{ has_source|lower }} }; diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js index f679a7544..cca09544e 100644 --- a/sphinx/themes/basic/static/searchtools.js +++ b/sphinx/themes/basic/static/searchtools.js @@ -424,10 +424,23 @@ var Search = { if (results.length) { var item = results.pop(); var listItem = $('
'); - listItem.append($('').attr( - 'href', - item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + - highlightstring + item[2]).html(item[1])); + if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') { + // dirhtml builder + var dirname = item[0] + '/'; + if (dirname.match(/\/index\/$/)) { + dirname = dirname.substring(0, dirname.length-6); + } else if (dirname == 'index/') { + dirname = ''; + } + listItem.append($('').attr('href', + DOCUMENTATION_OPTIONS.URL_ROOT + dirname + + highlightstring + item[2]).html(item[1])); + } else { + // normal html builders + listItem.append($('').attr('href', + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + + highlightstring + item[2]).html(item[1])); + } if (item[3]) { listItem.append($(' (' + item[3] + ')')); Search.output.append(listItem); @@ -437,8 +450,10 @@ var Search = { } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { $.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt', function(data) { - listItem.append($.makeSearchSummary(data, searchterms, hlterms)); - Search.output.append(listItem); + if (data != '') { + listItem.append($.makeSearchSummary(data, searchterms, hlterms)); + Search.output.append(listItem); + } listItem.slideDown(5, function() { displayNextItem(); });