@@ -77,6 +77,7 @@ export const info = {
77
77
stoppedTypingTimeout : null ,
78
78
stoppedScrollingTimeout : null ,
79
79
focusFirstResultTimeout : null ,
80
+ dismissChangeEventTimeout : null ,
80
81
81
82
indexDownloadStatuses : Object . create ( null ) ,
82
83
} ,
@@ -106,6 +107,7 @@ export const info = {
106
107
stoppedScrollingDelay : 200 ,
107
108
108
109
pressDownToFocusFirstResultLatency : 200 ,
110
+ dismissChangeEventAfterFocusingFirstResultLatency : 50 ,
109
111
110
112
maxActiveResultsStorage : 100000 ,
111
113
} ,
@@ -305,33 +307,24 @@ export function mutatePageContent() {
305
307
info . searchBox . appendChild ( info . endSearchLine ) ;
306
308
}
307
309
308
- function trackSidebarSearchInputChanged ( ) {
309
- const { state} = info ;
310
-
311
- const newValue = info . searchInput . value ;
312
-
313
- if ( newValue === state . currentValue ) {
314
- return false ;
315
- } else {
316
- state . currentValue = newValue ;
317
- return ! ! newValue ;
318
- }
319
- }
320
-
321
310
export function addPageListeners ( ) {
322
311
if ( ! info . searchInput ) return ;
323
312
324
313
info . searchInput . addEventListener ( 'change' , _domEvent => {
325
- if ( trackSidebarSearchInputChanged ( ) ) {
326
- activateSidebarSearch ( info . searchInput . value ) ;
314
+ const { state} = info ;
315
+
316
+ if ( state . dismissChangeEventTimeout ) {
317
+ state . dismissChangeEventTimeout = null ;
318
+ clearTimeout ( state . dismissChangeEventTimeout ) ;
319
+ return ;
327
320
}
321
+
322
+ activateSidebarSearch ( info . searchInput . value ) ;
328
323
} ) ;
329
324
330
325
info . searchInput . addEventListener ( 'input' , _domEvent => {
331
326
const { settings, state} = info ;
332
327
333
- trackSidebarSearchInputChanged ( ) ;
334
-
335
328
if ( ! info . searchInput . value ) {
336
329
clearSidebarSearch ( ) ;
337
330
return ;
@@ -362,6 +355,10 @@ export function addPageListeners() {
362
355
clearTimeout ( state . stoppedTypingTimeout ) ;
363
356
state . stoppedTypingTimeout = null ;
364
357
358
+ if ( state . focusFirstResultTimeout ) {
359
+ clearTimeout ( state . focusFirstResultTimeout ) ;
360
+ }
361
+
365
362
state . focusFirstResultTimeout =
366
363
setTimeout ( ( ) => {
367
364
state . focusFirstResultTimeout = null ;
@@ -862,11 +859,22 @@ function hideSidebarSearchResults() {
862
859
}
863
860
864
861
function focusFirstSidebarSearchResult ( ) {
862
+ const { settings, state} = info ;
863
+
865
864
const elem = info . results . firstChild ;
866
865
if ( ! elem ?. classList . contains ( 'wiki-search-result' ) ) {
867
866
return ;
868
867
}
869
868
869
+ if ( state . dismissChangeEventTimeout ) {
870
+ clearTimeout ( state . dismissChangeEventTimeout ) ;
871
+ }
872
+
873
+ state . dismissChangeEventTimeout =
874
+ setTimeout ( ( ) => {
875
+ state . dismissChangeEventTimeout = null ;
876
+ } , settings . dismissChangeEventAfterFocusingFirstResultLatency ) ;
877
+
870
878
elem . focus ( { focusVisible : true } ) ;
871
879
}
872
880
0 commit comments