@@ -3800,6 +3800,7 @@ const sidebarSearchInfo = initInfo('sidebarSearchInfo', {
3800
3800
searchStage : null ,
3801
3801
3802
3802
stoppedTypingTimeout : null ,
3803
+ stoppedScrollingTimeout : null ,
3803
3804
3804
3805
indexDownloadStatuses : Object . create ( null ) ,
3805
3806
} ,
@@ -3818,10 +3819,15 @@ const sidebarSearchInfo = initInfo('sidebarSearchInfo', {
3818
3819
type : 'boolean' ,
3819
3820
default : false ,
3820
3821
} ,
3822
+
3823
+ resultsScrollOffset : {
3824
+ type : 'number' ,
3825
+ } ,
3821
3826
} ,
3822
3827
3823
3828
settings : {
3824
3829
stoppedTypingDelay : 800 ,
3830
+ stoppedScrollingDelay : 200 ,
3825
3831
3826
3832
maxActiveResultsStorage : 100000 ,
3827
3833
} ,
@@ -4056,6 +4062,19 @@ function addSidebarSearchListeners() {
4056
4062
possiblyHideSearchSidebarColumn ( ) ;
4057
4063
restoreSidebarSearchColumn ( ) ;
4058
4064
} ) ;
4065
+
4066
+ info . resultsContainer . addEventListener ( 'scroll' , ( ) => {
4067
+ const { settings, state} = info ;
4068
+
4069
+ if ( state . stoppedScrollingTimeout ) {
4070
+ clearTimeout ( state . stoppedScrollingTimeout ) ;
4071
+ }
4072
+
4073
+ state . stoppedScrollingTimeout =
4074
+ setTimeout ( ( ) => {
4075
+ saveSidebarSearchResultsScrollOffset ( ) ;
4076
+ } , settings . stoppedScrollingDelay ) ;
4077
+ } ) ;
4059
4078
}
4060
4079
4061
4080
function initializeSidebarSearchState ( ) {
@@ -4155,6 +4174,7 @@ async function activateSidebarSearch(query) {
4155
4174
4156
4175
session . activeQuery = query ;
4157
4176
session . activeQueryResults = results ;
4177
+ session . resultsScrollOffset = 0 ;
4158
4178
4159
4179
showSidebarSearchResults ( results ) ;
4160
4180
}
@@ -4177,6 +4197,7 @@ function clearSidebarSearch() {
4177
4197
4178
4198
session . activeQuery = null ;
4179
4199
session . activeQueryResults = null ;
4200
+ session . resultsScrollOffset = null ;
4180
4201
4181
4202
hideSidebarSearchResults ( ) ;
4182
4203
}
@@ -4320,6 +4341,8 @@ function showSidebarSearchResults(results) {
4320
4341
4321
4342
tidySidebarSearchColumn ( ) ;
4322
4343
}
4344
+
4345
+ restoreSidebarSearchResultsScrollOffset ( ) ;
4323
4346
}
4324
4347
4325
4348
function generateSidebarSearchResult ( result ) {
@@ -4475,6 +4498,10 @@ function generateSidebarSearchResultTemplate(slots) {
4475
4498
4476
4499
link . appendChild ( text ) ;
4477
4500
4501
+ link . addEventListener ( 'click' , ( ) => {
4502
+ saveSidebarSearchResultsScrollOffset ( ) ;
4503
+ } ) ;
4504
+
4478
4505
return link ;
4479
4506
}
4480
4507
@@ -4492,6 +4519,22 @@ function hideSidebarSearchResults() {
4492
4519
cssProp ( info . endSearchLine , 'display' , 'none' ) ;
4493
4520
}
4494
4521
4522
+ function saveSidebarSearchResultsScrollOffset ( ) {
4523
+ const info = sidebarSearchInfo ;
4524
+ const { session} = info ;
4525
+
4526
+ session . resultsScrollOffset = info . resultsContainer . scrollTop ;
4527
+ }
4528
+
4529
+ function restoreSidebarSearchResultsScrollOffset ( ) {
4530
+ const info = sidebarSearchInfo ;
4531
+ const { session} = info ;
4532
+
4533
+ if ( session . resultsScrollOffset ) {
4534
+ info . resultsContainer . scrollTop = session . resultsScrollOffset ;
4535
+ }
4536
+ }
4537
+
4495
4538
function showSearchSidebarColumn ( ) {
4496
4539
const info = sidebarSearchInfo ;
4497
4540
const { state} = info ;
0 commit comments