11"use strict" ;
22
33window . 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
8572function handleShortcut ( ev ) {
@@ -149,27 +136,25 @@ function lintAnchor(event) {
149136 expandLint ( id ) ;
150137}
151138
139+ const clipboardTimeouts = new Map ( ) ;
152140function 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
175160function 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-
498475function scrollToLint ( lintId ) {
499476 const target = document . getElementById ( lintId ) ;
500477 if ( ! target ) {
@@ -540,6 +517,8 @@ function parseURLFilters() {
540517}
541518
542519function 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;
594573addListeners ( ) ;
595574highlightLazily ( ) ;
596575generateSettings ( ) ;
597- generateSearch ( ) ;
598576parseURLFilters ( ) ;
599577scrollToLintByURL ( ) ;
600578filters . filterLints ( ) ;
0 commit comments