1
+ // dynamically load jQuery if not already present on the website
2
+ if ( typeof jQuery == 'undefined' ) {
3
+ document . write ( '<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>' ) ;
4
+ }
5
+
1
6
var diffidx = 0 ;
2
7
3
- $ ( document ) . ready ( function ( ) {
4
- // highlight and scroll to the first diff element
5
- var cur ;
6
- cur = $ ( ".diff:visible" ) . eq ( diffidx )
7
- cur . addClass ( "diff-selected" ) ;
8
- $ ( cur ) [ 0 ] . scrollIntoView ( { behavior : "smooth" , block : "center" , inline : "nearest" } ) ;
8
+ window . addEventListener ( 'load' , ( ) => {
9
+ scrollToFirstDiff ( diffidx ) ;
10
+ scrollToNextDiff ( diffidx ) ;
9
11
} ) ;
10
12
11
13
// Borrowed from https://stackoverflow.com/a/15203639
@@ -29,51 +31,66 @@ function isElementVisible(el) {
29
31
) ;
30
32
}
31
33
32
- $ ( document ) . on ( "keypress" , function ( e ) {
33
- var cur ;
34
- var next ;
35
- cur = $ ( ".diff:visible" ) . eq ( diffidx )
36
- cur . removeClass ( "diff-selected" ) ;
37
- if ( e . which == 110 ) {
38
-
39
- var diffidx_tmp = diffidx + 1 ;
40
- if ( diffidx_tmp > $ ( ".diff:visible" ) . length - 1 ) {
41
- diffidx_tmp = $ ( ".diff:visible" ) . length - 1 ;
42
- }
43
- var cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp ) ;
34
+ // Scroll to the center of first diff element on page
35
+ function scrollToFirstDiff ( diffidx ) {
36
+ var cur ;
37
+ cur = $ ( ".diff:visible" ) . eq ( diffidx )
38
+ if ( typeof cur [ 0 ] != "undefined" ) {
39
+ cur . addClass ( "diff-selected" ) ;
40
+ $ ( cur ) [ 0 ] . scrollIntoView ( { behavior : "smooth" , block : "center" , inline : "nearest" } ) ;
41
+ }
42
+ }
44
43
45
- while ( isElementVisible ( cur_tmp [ 0 ] ) ) {
46
- diffidx_tmp += 1 ;
47
- if ( diffidx_tmp > $ ( ".diff:visible" ) . length - 1 ) {
48
- diffidx_tmp = $ ( ".diff:visible" ) . length - 1 ;
49
- break
50
- }
51
- cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp )
44
+ // Scroll to the next diff element on pressing n, previous on pressing Shift + n
45
+ function scrollToNextDiff ( diffidx ) {
46
+ $ ( document ) . on ( "keypress" , function ( e ) {
47
+ var cur ;
48
+ var next ;
49
+ cur = $ ( ".diff:visible" ) . eq ( diffidx )
50
+ if ( typeof cur [ 0 ] == "undefined" ) {
51
+ return ;
52
52
}
53
- cur = cur_tmp
54
- diffidx = diffidx_tmp
55
- }
56
- if ( e . which == 78 ) {
53
+ cur . removeClass ( "diff-selected" ) ;
54
+ if ( e . which == 110 ) {
57
55
58
- var diffidx_tmp = diffidx - 1 ;
59
- if ( diffidx_tmp < 0 ) {
60
- diffidx_tmp = 0 ;
56
+ var diffidx_tmp = diffidx + 1 ;
57
+ if ( diffidx_tmp > $ ( ".diff:visible" ) . length - 1 ) {
58
+ diffidx_tmp = $ ( ".diff:visible" ) . length - 1 ;
61
59
}
62
60
var cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp ) ;
63
-
61
+
64
62
while ( isElementVisible ( cur_tmp [ 0 ] ) ) {
65
- diffidx_tmp - = 1 ;
66
- if ( diffidx_tmp < 0 ) {
67
- diffidx_tmp = 0 ;
68
- break
69
- }
70
- cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp )
63
+ diffidx_tmp + = 1 ;
64
+ if ( diffidx_tmp > $ ( ".diff:visible" ) . length - 1 ) {
65
+ diffidx_tmp = $ ( ".diff:visible" ) . length - 1 ;
66
+ break
67
+ }
68
+ cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp )
71
69
}
72
70
cur = cur_tmp
73
71
diffidx = diffidx_tmp
74
- }
75
- next = $ ( ".diff:visible" ) . eq ( diffidx )
76
- next . addClass ( "diff-selected" )
77
- $ ( next ) [ 0 ] . scrollIntoView ( { behavior : "smooth" , block : "center" , inline : "nearest" } ) ;
78
- } ) ;
79
-
72
+ }
73
+ if ( e . which == 78 ) {
74
+
75
+ var diffidx_tmp = diffidx - 1 ;
76
+ if ( diffidx_tmp < 0 ) {
77
+ diffidx_tmp = 0 ;
78
+ }
79
+ var cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp ) ;
80
+
81
+ while ( isElementVisible ( cur_tmp [ 0 ] ) ) {
82
+ diffidx_tmp -= 1 ;
83
+ if ( diffidx_tmp < 0 ) {
84
+ diffidx_tmp = 0 ;
85
+ break
86
+ }
87
+ cur_tmp = $ ( ".diff:visible" ) . eq ( diffidx_tmp )
88
+ }
89
+ cur = cur_tmp
90
+ diffidx = diffidx_tmp
91
+ }
92
+ next = $ ( ".diff:visible" ) . eq ( diffidx )
93
+ next . addClass ( "diff-selected" )
94
+ $ ( next ) [ 0 ] . scrollIntoView ( { behavior : "smooth" , block : "center" , inline : "nearest" } ) ;
95
+ } ) ;
96
+ }
0 commit comments