From ac0f99c03f5535d67f1d93d9a60408d908c3e958 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 24 Apr 2018 20:23:57 +0200 Subject: [PATCH] Some JS improvements --- src/librustdoc/html/static/main.js | 56 +++++++++++++----------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index ef8bf2244d977..58a57f43d3745 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -40,6 +40,8 @@ "union", "foreigntype"]; + var search_input = document.getElementsByClassName('search-input')[0]; + // On the search screen, so you remain on the last tab you opened. // // 0 for "In Names" @@ -411,8 +413,8 @@ // but only if the input bar is empty. This avoid the obnoxious issue // where you start trying to do a search, and the index loads, and // suddenly your search is gone! - if (document.getElementsByClassName("search-input")[0].value === "") { - document.getElementsByClassName("search-input")[0].value = params.search || ''; + if (search_input.value === "") { + search_input.value = params.search || ''; } /** @@ -1118,7 +1120,6 @@ }); }); - var search_input = document.getElementsByClassName('search-input')[0]; search_input.onkeydown = function(e) { // "actives" references the currently highlighted item in each search tab. // Each array in "actives" represents a tab. @@ -1169,7 +1170,7 @@ // Does nothing, it's just to avoid losing "focus" on the highlighted element. } else if (e.which === 27) { // escape removeClass(actives[currentTab][0], 'highlighted'); - document.getElementsByClassName('search-input')[0].value = ''; + search_input.value = ''; defocusSearchBar(); } else if (actives[currentTab].length > 0) { removeClass(actives[currentTab][0], 'highlighted'); @@ -1206,7 +1207,6 @@ return; } - console.log(item); shown.push(id_ty); name = item.name; type = itemTypes[item.ty]; @@ -1268,7 +1268,7 @@ } function showResults(results) { - var output, query = getQuery(document.getElementsByClassName('search-input')[0].value); + var output, query = getQuery(search_input.value); currentResults = query.id; output = '

Results for ' + escape(query.query) + @@ -1375,14 +1375,13 @@ function search(e) { var params = getQueryStringParams(); - var search_input = document.getElementsByClassName('search-input')[0]; var query = getQuery(search_input.value.trim()); if (e) { e.preventDefault(); } - if (!query.query || query.id === currentResults) { + if (query.query.length === 0 || query.id === currentResults) { if (query.query.length > 0) { putBackSearch(search_input); } @@ -1468,9 +1467,6 @@ function startSearch() { var searchTimeout; var callback = function() { - var search_input = document.getElementsByClassName('search-input'); - if (search_input.length < 1) { return; } - search_input = search_input[0]; clearTimeout(searchTimeout); if (search_input.value.length === 0) { if (browserSupportsHistoryApi()) { @@ -1488,7 +1484,6 @@ searchTimeout = setTimeout(search, 500); } }; - var search_input = document.getElementsByClassName("search-input")[0]; search_input.onkeyup = callback; search_input.oninput = callback; document.getElementsByClassName("search-form")[0].onsubmit = function(e) { @@ -1538,9 +1533,9 @@ // nothing there, which lets you really go back to a // previous state with nothing in the bar. if (params.search) { - document.getElementsByClassName('search-input')[0].value = params.search; + search_input.value = params.search; } else { - document.getElementsByClassName('search-input')[0].value = ''; + search_input.value = ''; } // Some browsers fire 'onpopstate' for every page load // (Chrome), while others fire the event only when actually @@ -1950,28 +1945,14 @@ return wrapper; } - onEach(document.getElementById('main').getElementsByClassName('docblock'), function(e) { - if (e.parentNode.id === "main") { - var otherMessage; - if (hasClass(e, "type-decl")) { - otherMessage = ' Show type declaration'; - } - e.parentNode.insertBefore(createToggle(otherMessage), e); - if (otherMessage && getCurrentValue('rustdoc-item-declarations') !== "false") { - collapseDocs(e.previousSibling.childNodes[0], "toggle"); - } - } - }); - onEach(document.getElementsByClassName('docblock'), function(e) { if (hasClass(e, 'autohide')) { var wrap = e.previousElementSibling; if (wrap && hasClass(wrap, 'toggle-wrapper')) { var toggle = wrap.childNodes[0]; + var extra = false; if (e.childNodes[0].tagName === 'H3') { - onEach(toggle.getElementsByClassName('toggle-label'), function(i_e) { - i_e.innerHTML = " Show " + e.childNodes[0].innerHTML; - }); + extra = true; } e.style.display = 'none'; addClass(wrap, 'collapsed'); @@ -1980,9 +1961,22 @@ }); onEach(toggle.getElementsByClassName('toggle-label'), function(e) { e.style.display = 'inline-block'; + if (extra === true) { + i_e.innerHTML = " Show " + e.childNodes[0].innerHTML; + } }); } } + if (e.parentNode.id === "main") { + var otherMessage; + if (hasClass(e, "type-decl")) { + otherMessage = ' Show type declaration'; + } + e.parentNode.insertBefore(createToggle(otherMessage), e); + if (otherMessage && getCurrentValue('rustdoc-item-declarations') !== "false") { + collapseDocs(e.previousSibling.childNodes[0], "toggle"); + } + } }) autoCollapseAllImpls(getPageId()); @@ -2088,8 +2082,6 @@ } } - var search_input = document.getElementsByClassName("search-input")[0]; - if (search_input) { search_input.onfocus = function() { putBackSearch(this);