diff --git a/src/librustdoc/html/layout.rs b/src/librustdoc/html/layout.rs index 873d978b9cb..79eaabe31e8 100644 --- a/src/librustdoc/html/layout.rs +++ b/src/librustdoc/html/layout.rs @@ -101,6 +101,8 @@ r##"
Move up in search results
Move down in search results
+
+
Switch tab
Go to active search result
+
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index e9a3cfd908e..04bf466a780 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -712,41 +712,56 @@ }); var search_input = document.getElementsByClassName('search-input')[0]; - search_input.onkeydown = null; search_input.onkeydown = function(e) { - var actives = []; + // "actives" references the currently highlighted item in each search tab. + // Each array in "actives" represents a tab. + var actives = [[], [], []]; + // "current" is used to know which tab we're looking into. + var current = 0; onEach(document.getElementsByClassName('search-results'), function(e) { - onEach(document.getElementsByClassName('highlighted'), function(e) { - actives.push(e); + onEach(e.getElementsByClassName('highlighted'), function(e) { + actives[current].push(e); }); + current += 1; }); if (e.which === 38) { // up - if (!actives.length || !actives[0].previousElementSibling) { + if (!actives[currentTab].length || + !actives[currentTab][0].previousElementSibling) { return; } - addClass(actives[0].previousElementSibling, 'highlighted'); - removeClass(actives[0], 'highlighted'); + addClass(actives[currentTab][0].previousElementSibling, 'highlighted'); + removeClass(actives[currentTab][0], 'highlighted'); } else if (e.which === 40) { // down - if (!actives.length) { + if (!actives[currentTab].length) { var results = document.getElementsByClassName('search-results'); if (results.length > 0) { - var res = results[0].getElementsByClassName('result'); + var res = results[currentTab].getElementsByClassName('result'); if (res.length > 0) { addClass(res[0], 'highlighted'); } } - } else if (actives[0].nextElementSibling) { - addClass(actives[0].nextElementSibling, 'highlighted'); - removeClass(actives[0], 'highlighted'); + } else if (actives[currentTab][0].nextElementSibling) { + addClass(actives[currentTab][0].nextElementSibling, 'highlighted'); + removeClass(actives[currentTab][0], 'highlighted'); } } else if (e.which === 13) { // return - if (actives.length) { - document.location.href = actives[0].getElementsByTagName('a')[0].href; + if (actives[currentTab].length) { + document.location.href = + actives[currentTab][0].getElementsByTagName('a')[0].href; } - } else if (actives.length > 0) { - removeClass(actives[0], 'highlighted'); + } else if (e.which === 9) { // tab + if (e.shiftKey) { + printTab(currentTab > 0 ? currentTab - 1 : 2); + } else { + printTab(currentTab > 1 ? 0 : currentTab + 1); + } + e.preventDefault(); + } else if (e.which === 16) { // shift + // Does nothing, it's just to avoid losing "focus" on the highlighted element. + } else if (actives[currentTab].length > 0) { + removeClass(actives[currentTab][0], 'highlighted'); } }; } diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index a132223a051..18270654aa9 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -552,7 +552,7 @@ body.blur > :not(#help) { flex: 0 0 auto; box-shadow: 0 0 6px rgba(0,0,0,.2); width: 550px; - height: 330px; + height: 354px; border: 1px solid; } #help dt {