@@ -325,6 +325,16 @@ export function addPageListeners() {
325
325
} , settings . stoppedTypingDelay ) ;
326
326
} ) ;
327
327
328
+ info . searchInput . addEventListener ( 'keydown' , domEvent => {
329
+ if ( domEvent . key === 'ArrowDown' && info . searchInput . value . length === info . searchInput . selectionStart ) {
330
+ const elem = info . results ?. firstChild ;
331
+ if ( elem && ! elem . classList . contains ( 'wiki-search-no-results' ) ) {
332
+ domEvent . preventDefault ( ) ;
333
+ elem . focus ( ) ;
334
+ }
335
+ }
336
+ } ) ;
337
+
328
338
info . endSearchLink . addEventListener ( 'click' , domEvent => {
329
339
domEvent . preventDefault ( ) ;
330
340
clearSidebarSearch ( ) ;
@@ -589,7 +599,7 @@ function showSidebarSearchResults(results) {
589
599
}
590
600
591
601
for ( const result of flatResults ) {
592
- const el = generateSidebarSearchResult ( result ) ;
602
+ const el = generateSidebarSearchResult ( result , info ) ;
593
603
if ( ! el ) continue ;
594
604
595
605
info . results . appendChild ( el ) ;
@@ -605,7 +615,7 @@ function showSidebarSearchResults(results) {
605
615
restoreSidebarSearchResultsScrollOffset ( ) ;
606
616
}
607
617
608
- function generateSidebarSearchResult ( result ) {
618
+ function generateSidebarSearchResult ( result , info ) {
609
619
const preparedSlots = {
610
620
color :
611
621
result . data . color ?? null ,
@@ -676,7 +686,7 @@ function generateSidebarSearchResult(result) {
676
686
return null ;
677
687
}
678
688
679
- return generateSidebarSearchResultTemplate ( preparedSlots ) ;
689
+ return generateSidebarSearchResultTemplate ( preparedSlots , info ) ;
680
690
}
681
691
682
692
function getSearchResultImageSource ( result ) {
@@ -689,7 +699,7 @@ function getSearchResultImageSource(result) {
689
699
'rebaseThumb' ) ) ;
690
700
}
691
701
692
- function generateSidebarSearchResultTemplate ( slots ) {
702
+ function generateSidebarSearchResultTemplate ( slots , info ) {
693
703
const link = document . createElement ( 'a' ) ;
694
704
link . classList . add ( 'wiki-search-result' ) ;
695
705
@@ -771,6 +781,24 @@ function generateSidebarSearchResultTemplate(slots) {
771
781
saveSidebarSearchResultsScrollOffset ( ) ;
772
782
} ) ;
773
783
784
+ link . addEventListener ( 'keydown' , domEvent => {
785
+ if ( domEvent . key === 'ArrowDown' ) {
786
+ const elem = link . nextElementSibling ;
787
+ if ( elem ) {
788
+ domEvent . preventDefault ( ) ;
789
+ elem . focus ( ) ;
790
+ }
791
+ } else if ( domEvent . key === 'ArrowUp' ) {
792
+ domEvent . preventDefault ( ) ;
793
+ const elem = link . previousElementSibling ;
794
+ if ( elem ) {
795
+ elem . focus ( ) ;
796
+ } else {
797
+ info . searchInput . focus ( ) ;
798
+ }
799
+ }
800
+ } ) ;
801
+
774
802
return link ;
775
803
}
776
804
0 commit comments