@@ -396,38 +396,51 @@ function getSearchElement() {
396
396
397
397
document . onkeypress = handleShortcut ;
398
398
document . onkeydown = handleShortcut ;
399
- document . onclick = function ( ev ) {
400
- if ( hasClass ( ev . target , "collapse-toggle" ) ) {
401
- collapseDocs ( ev . target , "toggle" ) ;
402
- } else if ( hasClass ( ev . target . parentNode , "collapse-toggle" ) ) {
403
- collapseDocs ( ev . target . parentNode , "toggle" ) ;
404
- } else if ( ev . target . tagName === "SPAN" && hasClass ( ev . target . parentNode , "line-numbers" ) ) {
405
- var prev_id = 0 ;
406
399
407
- var set_fragment = function ( name ) {
408
- if ( browserSupportsHistoryApi ( ) ) {
409
- history . replaceState ( null , null , "#" + name ) ;
410
- highlightSourceLines ( ) ;
411
- } else {
412
- location . replace ( "#" + name ) ;
413
- }
414
- } ;
400
+ var handleSourceHighlight = ( function ( ) {
401
+ var prev_line_id = 0 ;
415
402
416
- var cur_id = parseInt ( ev . target . id , 10 ) ;
403
+ var set_fragment = function ( name ) {
404
+ var x = window . scrollX ,
405
+ y = window . scrollY ;
406
+ if ( browserSupportsHistoryApi ( ) ) {
407
+ history . replaceState ( null , null , "#" + name ) ;
408
+ highlightSourceLines ( ) ;
409
+ } else {
410
+ location . replace ( "#" + name ) ;
411
+ }
412
+ // Prevent jumps when selecting one or many lines
413
+ window . scrollTo ( x , y ) ;
414
+ } ;
415
+
416
+ return function ( ev ) {
417
+ var cur_line_id = parseInt ( ev . target . id , 10 ) ;
418
+ ev . preventDefault ( ) ;
417
419
418
- if ( ev . shiftKey && prev_id ) {
419
- if ( prev_id > cur_id ) {
420
- var tmp = prev_id ;
421
- prev_id = cur_id ;
422
- cur_id = tmp ;
420
+ if ( ev . shiftKey && prev_line_id ) {
421
+ // Swap selection if needed
422
+ if ( prev_line_id > cur_line_id ) {
423
+ var tmp = prev_line_id ;
424
+ prev_line_id = cur_line_id ;
425
+ cur_line_id = tmp ;
423
426
}
424
427
425
- set_fragment ( prev_id + "-" + cur_id ) ;
428
+ set_fragment ( prev_line_id + "-" + cur_line_id ) ;
426
429
} else {
427
- prev_id = cur_id ;
430
+ prev_line_id = cur_line_id ;
428
431
429
- set_fragment ( cur_id ) ;
432
+ set_fragment ( cur_line_id ) ;
430
433
}
434
+ }
435
+ } ) ( ) ;
436
+
437
+ document . onclick = function ( ev ) {
438
+ if ( hasClass ( ev . target , "collapse-toggle" ) ) {
439
+ collapseDocs ( ev . target , "toggle" ) ;
440
+ } else if ( hasClass ( ev . target . parentNode , "collapse-toggle" ) ) {
441
+ collapseDocs ( ev . target . parentNode , "toggle" ) ;
442
+ } else if ( ev . target . tagName === "SPAN" && hasClass ( ev . target . parentNode , "line-numbers" ) ) {
443
+ handleSourceHighlight ( ev ) ;
431
444
} else if ( hasClass ( getHelpElement ( ) , "hidden" ) === false ) {
432
445
var help = getHelpElement ( ) ;
433
446
var is_inside_help_popup = ev . target !== help && help . contains ( ev . target ) ;
0 commit comments