Skip to content

Commit 0b784f8

Browse files
authored
Remove/fix setTimeout logic in lints page (rust-lang#15983)
If you double clicked the clipboard icon it would become permanently stuck as the tick, it now resets correctly The search timeout looks intended to implement debouncing but as `searchState.timeout` is never assigned to it just delays the update by 50ms. The logic and delay are removed, so the search is now 50ms more responsive changelog: none
2 parents e415911 + 88554d6 commit 0b784f8

File tree

1 file changed

+14
-36
lines changed

1 file changed

+14
-36
lines changed

util/gh-pages/script.js

Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
11
"use strict";
22

33
window.searchState = {
4-
timeout: null,
54
inputElem: document.getElementById("search-input"),
65
lastSearch: '',
76
clearInput: () => {
87
searchState.inputElem.value = "";
98
searchState.filterLints();
109
},
11-
clearInputTimeout: () => {
12-
if (searchState.timeout !== null) {
13-
clearTimeout(searchState.timeout);
14-
searchState.timeout = null
15-
}
16-
},
17-
resetInputTimeout: () => {
18-
searchState.clearInputTimeout();
19-
setTimeout(searchState.filterLints, 50);
20-
},
2110
filterLints: () => {
2211
function matchesSearch(lint, terms, searchStr) {
2312
// Search by id
@@ -42,8 +31,6 @@ window.searchState = {
4231
return true;
4332
}
4433

45-
searchState.clearInputTimeout();
46-
4734
let searchStr = searchState.inputElem.value.trim().toLowerCase();
4835
if (searchStr.startsWith("clippy::")) {
4936
searchStr = searchStr.slice(8);
@@ -79,7 +66,7 @@ function handleInputChanged(event) {
7966
if (event.target !== document.activeElement) {
8067
return;
8168
}
82-
searchState.resetInputTimeout();
69+
searchState.filterLints();
8370
}
8471

8572
function handleShortcut(ev) {
@@ -149,27 +136,25 @@ function lintAnchor(event) {
149136
expandLint(id);
150137
}
151138

139+
const clipboardTimeouts = new Map();
152140
function copyToClipboard(event) {
153141
event.preventDefault();
154142
event.stopPropagation();
155143

156144
const clipboard = event.target;
157145

158-
let resetClipboardTimeout = null;
159-
const resetClipboardIcon = clipboard.innerHTML;
160-
161-
function resetClipboard() {
162-
resetClipboardTimeout = null;
163-
clipboard.innerHTML = resetClipboardIcon;
164-
}
165-
166146
navigator.clipboard.writeText("clippy::" + clipboard.parentElement.id.slice(5));
167147

168-
clipboard.innerHTML = "✓";
169-
if (resetClipboardTimeout !== null) {
170-
clearTimeout(resetClipboardTimeout);
171-
}
172-
resetClipboardTimeout = setTimeout(resetClipboard, 1000);
148+
clipboard.textContent = "✓";
149+
150+
clearTimeout(clipboardTimeouts.get(clipboard));
151+
clipboardTimeouts.set(
152+
clipboard,
153+
setTimeout(() => {
154+
clipboard.textContent = "📋";
155+
clipboardTimeouts.delete(clipboard);
156+
}, 1000)
157+
);
173158
}
174159

175160
function handleBlur(event, elementId) {
@@ -487,14 +472,6 @@ function generateSettings() {
487472
setupDropdown("version-filter");
488473
}
489474

490-
function generateSearch() {
491-
searchState.inputElem.addEventListener("change", handleInputChanged);
492-
searchState.inputElem.addEventListener("input", handleInputChanged);
493-
searchState.inputElem.addEventListener("keydown", handleInputChanged);
494-
searchState.inputElem.addEventListener("keyup", handleInputChanged);
495-
searchState.inputElem.addEventListener("paste", handleInputChanged);
496-
}
497-
498475
function scrollToLint(lintId) {
499476
const target = document.getElementById(lintId);
500477
if (!target) {
@@ -540,6 +517,8 @@ function parseURLFilters() {
540517
}
541518

542519
function addListeners() {
520+
searchState.inputElem.addEventListener("input", handleInputChanged);
521+
543522
disableShortcutsButton.addEventListener("change", () => {
544523
disableShortcuts = disableShortcutsButton.checked;
545524
storeValue("disable-shortcuts", disableShortcuts);
@@ -594,7 +573,6 @@ disableShortcutsButton.checked = disableShortcuts;
594573
addListeners();
595574
highlightLazily();
596575
generateSettings();
597-
generateSearch();
598576
parseURLFilters();
599577
scrollToLintByURL();
600578
filters.filterLints();

0 commit comments

Comments
 (0)