Remove/fix setTimeout logic in lints page (#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
This commit is contained in:
commit
0b784f8ed6
1 changed files with 14 additions and 36 deletions
|
|
@ -1,23 +1,12 @@
|
|||
"use strict";
|
||||
|
||||
window.searchState = {
|
||||
timeout: null,
|
||||
inputElem: document.getElementById("search-input"),
|
||||
lastSearch: '',
|
||||
clearInput: () => {
|
||||
searchState.inputElem.value = "";
|
||||
searchState.filterLints();
|
||||
},
|
||||
clearInputTimeout: () => {
|
||||
if (searchState.timeout !== null) {
|
||||
clearTimeout(searchState.timeout);
|
||||
searchState.timeout = null
|
||||
}
|
||||
},
|
||||
resetInputTimeout: () => {
|
||||
searchState.clearInputTimeout();
|
||||
setTimeout(searchState.filterLints, 50);
|
||||
},
|
||||
filterLints: () => {
|
||||
function matchesSearch(lint, terms, searchStr) {
|
||||
// Search by id
|
||||
|
|
@ -42,8 +31,6 @@ window.searchState = {
|
|||
return true;
|
||||
}
|
||||
|
||||
searchState.clearInputTimeout();
|
||||
|
||||
let searchStr = searchState.inputElem.value.trim().toLowerCase();
|
||||
if (searchStr.startsWith("clippy::")) {
|
||||
searchStr = searchStr.slice(8);
|
||||
|
|
@ -79,7 +66,7 @@ function handleInputChanged(event) {
|
|||
if (event.target !== document.activeElement) {
|
||||
return;
|
||||
}
|
||||
searchState.resetInputTimeout();
|
||||
searchState.filterLints();
|
||||
}
|
||||
|
||||
function handleShortcut(ev) {
|
||||
|
|
@ -149,27 +136,25 @@ function lintAnchor(event) {
|
|||
expandLint(id);
|
||||
}
|
||||
|
||||
const clipboardTimeouts = new Map();
|
||||
function copyToClipboard(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const clipboard = event.target;
|
||||
|
||||
let resetClipboardTimeout = null;
|
||||
const resetClipboardIcon = clipboard.innerHTML;
|
||||
|
||||
function resetClipboard() {
|
||||
resetClipboardTimeout = null;
|
||||
clipboard.innerHTML = resetClipboardIcon;
|
||||
}
|
||||
|
||||
navigator.clipboard.writeText("clippy::" + clipboard.parentElement.id.slice(5));
|
||||
|
||||
clipboard.innerHTML = "✓";
|
||||
if (resetClipboardTimeout !== null) {
|
||||
clearTimeout(resetClipboardTimeout);
|
||||
}
|
||||
resetClipboardTimeout = setTimeout(resetClipboard, 1000);
|
||||
clipboard.textContent = "✓";
|
||||
|
||||
clearTimeout(clipboardTimeouts.get(clipboard));
|
||||
clipboardTimeouts.set(
|
||||
clipboard,
|
||||
setTimeout(() => {
|
||||
clipboard.textContent = "📋";
|
||||
clipboardTimeouts.delete(clipboard);
|
||||
}, 1000)
|
||||
);
|
||||
}
|
||||
|
||||
function handleBlur(event, elementId) {
|
||||
|
|
@ -487,14 +472,6 @@ function generateSettings() {
|
|||
setupDropdown("version-filter");
|
||||
}
|
||||
|
||||
function generateSearch() {
|
||||
searchState.inputElem.addEventListener("change", handleInputChanged);
|
||||
searchState.inputElem.addEventListener("input", handleInputChanged);
|
||||
searchState.inputElem.addEventListener("keydown", handleInputChanged);
|
||||
searchState.inputElem.addEventListener("keyup", handleInputChanged);
|
||||
searchState.inputElem.addEventListener("paste", handleInputChanged);
|
||||
}
|
||||
|
||||
function scrollToLint(lintId) {
|
||||
const target = document.getElementById(lintId);
|
||||
if (!target) {
|
||||
|
|
@ -540,6 +517,8 @@ function parseURLFilters() {
|
|||
}
|
||||
|
||||
function addListeners() {
|
||||
searchState.inputElem.addEventListener("input", handleInputChanged);
|
||||
|
||||
disableShortcutsButton.addEventListener("change", () => {
|
||||
disableShortcuts = disableShortcutsButton.checked;
|
||||
storeValue("disable-shortcuts", disableShortcuts);
|
||||
|
|
@ -594,7 +573,6 @@ disableShortcutsButton.checked = disableShortcuts;
|
|||
addListeners();
|
||||
highlightLazily();
|
||||
generateSettings();
|
||||
generateSearch();
|
||||
parseURLFilters();
|
||||
scrollToLintByURL();
|
||||
filters.filterLints();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue