From bcf57d8f20830683d0b66e231010903146a298e7 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 28 May 2020 14:51:12 +0200 Subject: [PATCH 1/2] Fix escape key handling --- src/librustdoc/html/static/main.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index 9869c50fbb0cf..c349b59e562a9 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -81,6 +81,7 @@ function getSearchElement() { var disableShortcuts = getCurrentValue("rustdoc-disable-shortcuts") === "true"; var search_input = getSearchInput(); + var searchTimeout = null; // On the search screen, so you remain on the last tab you opened. // @@ -344,6 +345,10 @@ function getSearchElement() { if (hasClass(help, "hidden") === false) { displayHelp(false, ev, help); } else if (hasClass(search, "hidden") === false) { + if (searchTimeout !== null) { + clearTimeout(searchTimeout); + searchTimeout = null; + } ev.preventDefault(); hideSearchResults(search); document.title = titleBeforeSearch; @@ -1799,7 +1804,6 @@ function getSearchElement() { } function startSearch() { - var searchTimeout; var callback = function() { clearTimeout(searchTimeout); if (search_input.value.length === 0) { @@ -1815,7 +1819,10 @@ function getSearchElement() { search_input.oninput = callback; document.getElementsByClassName("search-form")[0].onsubmit = function(e) { e.preventDefault(); - clearTimeout(searchTimeout); + if (searchTimeout !== null) { + clearTimeout(searchTimeout); + searchTimeout = null; + } search(); }; search_input.onchange = function(e) { @@ -1824,7 +1831,10 @@ function getSearchElement() { return; } // Do NOT e.preventDefault() here. It will prevent pasting. - clearTimeout(searchTimeout); + if (searchTimeout !== null) { + clearTimeout(searchTimeout); + searchTimeout = null; + } // zero-timeout necessary here because at the time of event handler execution the // pasted content is not in the input field yet. Shouldn’t make any difference for // change, though. From 7a2efa3a106389e9cd5c8bf3ab8f809398e77053 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 31 May 2020 14:27:33 +0200 Subject: [PATCH 2/2] Put input timeout clearance inside a function --- src/librustdoc/html/static/main.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js index c349b59e562a9..6169d5ce8e85c 100644 --- a/src/librustdoc/html/static/main.js +++ b/src/librustdoc/html/static/main.js @@ -92,6 +92,13 @@ function getSearchElement() { var titleBeforeSearch = document.title; + function clearInputTimeout() { + if (searchTimeout !== null) { + clearTimeout(searchTimeout); + searchTimeout = null; + } + } + function getPageId() { var id = document.location.href.split("#")[1]; if (id) { @@ -345,10 +352,7 @@ function getSearchElement() { if (hasClass(help, "hidden") === false) { displayHelp(false, ev, help); } else if (hasClass(search, "hidden") === false) { - if (searchTimeout !== null) { - clearTimeout(searchTimeout); - searchTimeout = null; - } + clearInputTimeout(); ev.preventDefault(); hideSearchResults(search); document.title = titleBeforeSearch; @@ -1805,7 +1809,7 @@ function getSearchElement() { function startSearch() { var callback = function() { - clearTimeout(searchTimeout); + clearInputTimeout(); if (search_input.value.length === 0) { if (browserSupportsHistoryApi()) { history.replaceState("", window.currentCrate + " - Rust", "?search="); @@ -1819,10 +1823,7 @@ function getSearchElement() { search_input.oninput = callback; document.getElementsByClassName("search-form")[0].onsubmit = function(e) { e.preventDefault(); - if (searchTimeout !== null) { - clearTimeout(searchTimeout); - searchTimeout = null; - } + clearInputTimeout(); search(); }; search_input.onchange = function(e) { @@ -1831,10 +1832,7 @@ function getSearchElement() { return; } // Do NOT e.preventDefault() here. It will prevent pasting. - if (searchTimeout !== null) { - clearTimeout(searchTimeout); - searchTimeout = null; - } + clearInputTimeout(); // zero-timeout necessary here because at the time of event handler execution the // pasted content is not in the input field yet. Shouldn’t make any difference for // change, though.