Skip to content

Commit f7ee130

Browse files
authored
Rollup merge of #64312 - GuillaumeGomez:rustdoc-better-esc-handling, r=Mark-Simulacrum
Unify escape usage Fixes #63443. I chose to keep the search text when pressing escape so when we focus on the search bar, we got the results again without needing to load them again. I also unified a bit a few things (maybe I should have done it in another commit, sorry...). r? @Mark-Simulacrum
2 parents 063740f + 0d34fe4 commit f7ee130

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

src/librustdoc/html/static/main.js

+29-18
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,14 @@ if (!DOMTokenList.prototype.remove) {
3939
};
4040
}
4141

42+
function getSearchInput() {
43+
return document.getElementsByClassName("search-input")[0];
44+
}
45+
46+
function getSearchElement() {
47+
return document.getElementById("search");
48+
}
49+
4250
(function() {
4351
"use strict";
4452

@@ -71,7 +79,7 @@ if (!DOMTokenList.prototype.remove) {
7179
"derive",
7280
"traitalias"];
7381

74-
var search_input = document.getElementsByClassName("search-input")[0];
82+
var search_input = getSearchInput();
7583

7684
// On the search screen, so you remain on the last tab you opened.
7785
//
@@ -158,7 +166,7 @@ if (!DOMTokenList.prototype.remove) {
158166
// If we're in mobile mode, we should add the sidebar in any case.
159167
hideSidebar();
160168
var elem;
161-
var search = document.getElementById("search");
169+
var search = getSearchElement();
162170
var i, from, to, match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);
163171
if (match) {
164172
from = parseInt(match[1], 10);
@@ -250,7 +258,12 @@ if (!DOMTokenList.prototype.remove) {
250258
return String.fromCharCode(c);
251259
}
252260

261+
function getHelpElement() {
262+
return document.getElementById("help");
263+
}
264+
253265
function displayHelp(display, ev, help) {
266+
var help = help ? help : getHelpElement();
254267
if (display === true) {
255268
if (hasClass(help, "hidden")) {
256269
ev.preventDefault();
@@ -264,9 +277,10 @@ if (!DOMTokenList.prototype.remove) {
264277
}
265278
}
266279

267-
function handleEscape(ev, help) {
280+
function handleEscape(ev) {
281+
var help = getHelpElement();
282+
var search = getSearchElement();
268283
hideModal();
269-
var search = document.getElementById("search");
270284
if (hasClass(help, "hidden") === false) {
271285
displayHelp(false, ev, help);
272286
} else if (hasClass(search, "hidden") === false) {
@@ -284,22 +298,21 @@ if (!DOMTokenList.prototype.remove) {
284298
return;
285299
}
286300

287-
var help = document.getElementById("help");
288301
if (document.activeElement.tagName === "INPUT") {
289302
switch (getVirtualKey(ev)) {
290303
case "Escape":
291-
handleEscape(ev, help);
304+
handleEscape(ev);
292305
break;
293306
}
294307
} else {
295308
switch (getVirtualKey(ev)) {
296309
case "Escape":
297-
handleEscape(ev, help);
310+
handleEscape(ev);
298311
break;
299312

300313
case "s":
301314
case "S":
302-
displayHelp(false, ev, help);
315+
displayHelp(false, ev);
303316
hideModal();
304317
ev.preventDefault();
305318
focusSearchBar();
@@ -314,7 +327,7 @@ if (!DOMTokenList.prototype.remove) {
314327
case "?":
315328
if (ev.shiftKey) {
316329
hideModal();
317-
displayHelp(true, ev, help);
330+
displayHelp(true, ev);
318331
}
319332
break;
320333
}
@@ -1281,9 +1294,7 @@ if (!DOMTokenList.prototype.remove) {
12811294
} else if (e.which === 16) { // shift
12821295
// Does nothing, it's just to avoid losing "focus" on the highlighted element.
12831296
} else if (e.which === 27) { // escape
1284-
removeClass(actives[currentTab][0], "highlighted");
1285-
search_input.value = "";
1286-
defocusSearchBar();
1297+
handleEscape(e);
12871298
} else if (actives[currentTab].length > 0) {
12881299
removeClass(actives[currentTab][0], "highlighted");
12891300
}
@@ -1434,7 +1445,7 @@ if (!DOMTokenList.prototype.remove) {
14341445
ret_others[0] + ret_in_args[0] + ret_returned[0] + "</div>";
14351446

14361447
addClass(main, "hidden");
1437-
var search = document.getElementById("search");
1448+
var search = getSearchElement();
14381449
removeClass(search, "hidden");
14391450
search.innerHTML = output;
14401451
var tds = search.getElementsByTagName("td");
@@ -1644,7 +1655,7 @@ if (!DOMTokenList.prototype.remove) {
16441655
if (hasClass(main, "content")) {
16451656
removeClass(main, "hidden");
16461657
}
1647-
var search_c = document.getElementById("search");
1658+
var search_c = getSearchElement();
16481659
if (hasClass(search_c, "content")) {
16491660
addClass(search_c, "hidden");
16501661
}
@@ -1691,7 +1702,7 @@ if (!DOMTokenList.prototype.remove) {
16911702
if (hasClass(main, "content")) {
16921703
removeClass(main, "hidden");
16931704
}
1694-
var search_c = document.getElementById("search");
1705+
var search_c = getSearchElement();
16951706
if (hasClass(search_c, "content")) {
16961707
addClass(search_c, "hidden");
16971708
}
@@ -2460,7 +2471,7 @@ if (!DOMTokenList.prototype.remove) {
24602471
var params = getQueryStringParams();
24612472
if (params && params.search) {
24622473
addClass(main, "hidden");
2463-
var search = document.getElementById("search");
2474+
var search = getSearchElement();
24642475
removeClass(search, "hidden");
24652476
search.innerHTML = "<h3 style=\"text-align: center;\">Loading search results...</h3>";
24662477
}
@@ -2545,10 +2556,10 @@ if (!DOMTokenList.prototype.remove) {
25452556

25462557
// Sets the focus on the search bar at the top of the page
25472558
function focusSearchBar() {
2548-
document.getElementsByClassName("search-input")[0].focus();
2559+
getSearchInput().focus();
25492560
}
25502561

25512562
// Removes the focus from the search bar
25522563
function defocusSearchBar() {
2553-
document.getElementsByClassName("search-input")[0].blur();
2564+
getSearchInput().blur();
25542565
}

0 commit comments

Comments
 (0)