1
- window . addEventListener ( "DOMContentLoaded" , ( ) => {
1
+ let observer = null ;
2
+
3
+ function attachAllListeners ( ) {
4
+ if ( observer ) {
5
+ observer . disconnect ( )
6
+ }
2
7
3
- var toggler = document . getElementById ( "leftToggler" ) ;
4
- if ( toggler ) {
5
- toggler . onclick = function ( ) {
6
- document . getElementById ( "leftColumn" ) . classList . toggle ( "open" ) ;
7
- } ;
8
+ var scrollPosition = sessionStorage . getItem ( "scroll_value" ) ;
9
+ if ( scrollPosition ) {
10
+ var sideMenu = document . querySelector ( ".side-menu" ) ;
11
+ sideMenu . scrollTo ( 0 , scrollPosition ) ;
8
12
}
9
13
10
14
var elements = document . getElementsByClassName ( "documentableElement" )
@@ -25,7 +29,7 @@ window.addEventListener("DOMContentLoaded", () => {
25
29
var documentableLists = document . getElementsByClassName ( "documentableList" )
26
30
if ( documentableLists ) {
27
31
for ( i = 0 ; i < documentableLists . length ; i ++ ) {
28
- documentableLists [ i ] . children [ 0 ] . onclick = function ( e ) {
32
+ documentableLists [ i ] . children [ 0 ] . onclick = function ( e ) {
29
33
this . classList . toggle ( "expand" ) ;
30
34
this . parentElement . classList . toggle ( "expand" ) ;
31
35
}
@@ -36,14 +40,47 @@ window.addEventListener("DOMContentLoaded", () => {
36
40
if ( memberLists ) {
37
41
for ( i = 0 ; i < memberLists . length ; i ++ ) {
38
42
if ( $ ( memberLists [ i ] . children [ 0 ] ) . is ( "button" ) ) {
39
- memberLists [ i ] . children [ 0 ] . onclick = function ( e ) {
43
+ memberLists [ i ] . children [ 0 ] . onclick = function ( e ) {
40
44
this . classList . toggle ( "expand" ) ;
41
45
this . parentElement . classList . toggle ( "expand" ) ;
42
46
}
43
47
}
44
48
}
45
49
}
46
50
51
+ document . querySelectorAll ( 'a' ) . forEach ( el => {
52
+ const href = el . href
53
+ if ( href === "" ) { return }
54
+ const url = new URL ( href )
55
+ el . addEventListener ( 'click' , e => {
56
+ if ( url . href . replace ( / # .* / , "" ) === window . location . href . replace ( / # .* / , "" ) ) { return }
57
+ if ( url . origin !== window . location . origin ) { return }
58
+ if ( e . metaKey || e . ctrlKey || e . shiftKey || e . altKey || e . button !== 0 ) { return }
59
+ e . preventDefault ( )
60
+ e . stopPropagation ( )
61
+ $ . get ( href , function ( data ) {
62
+ const html = $ . parseHTML ( data )
63
+ const title = html . find ( node => node . nodeName === "TITLE" ) . innerText
64
+ const bodyDiv = html . find ( node => node . nodeName === "DIV" )
65
+ const { children } = document . body . firstChild
66
+ if ( window . history . state === null ) {
67
+ window . history . replaceState ( {
68
+ leftColumn : children [ 3 ] . innerHTML ,
69
+ mainDiv : children [ 6 ] . innerHTML ,
70
+ title : document . title ,
71
+ } , '' )
72
+ }
73
+ document . title = title
74
+ const leftColumn = bodyDiv . children [ 3 ] . innerHTML
75
+ const mainDiv = bodyDiv . children [ 6 ] . innerHTML
76
+ window . history . pushState ( { leftColumn, mainDiv, title } , '' , href )
77
+ children [ 3 ] . innerHTML = leftColumn
78
+ children [ 6 ] . innerHTML = mainDiv
79
+ attachAllListeners ( )
80
+ } )
81
+ } )
82
+ } )
83
+
47
84
$ ( ".ar" ) . on ( 'click' , function ( e ) {
48
85
$ ( this ) . parent ( ) . parent ( ) . toggleClass ( "expanded" )
49
86
$ ( this ) . toggleClass ( "expanded" )
@@ -70,7 +107,13 @@ window.addEventListener("DOMContentLoaded", () => {
70
107
el . firstChild . classList . toggle ( "expand" ) ;
71
108
} ) )
72
109
73
- const observer = new IntersectionObserver ( entries => {
110
+ document . querySelectorAll ( ".ni" ) . forEach ( link =>
111
+ link . addEventListener ( "mouseenter" , _e => {
112
+ sessionStorage . setItem ( "scroll_value" , link . offsetTop - window . innerHeight / 2 )
113
+ } )
114
+ )
115
+
116
+ observer = new IntersectionObserver ( entries => {
74
117
entries . forEach ( entry => {
75
118
const id = entry . target . getAttribute ( 'id' ) ;
76
119
if ( entry . intersectionRatio > 0 ) {
@@ -97,28 +140,9 @@ window.addEventListener("DOMContentLoaded", () => {
97
140
}
98
141
}
99
142
100
- var logo = document . getElementById ( "logo" ) ;
101
- if ( logo ) {
102
- logo . onclick = function ( ) {
103
- window . location = pathToRoot ; // global variable pathToRoot is created by the html renderer
104
- } ;
105
- }
106
-
107
- document . querySelectorAll ( '.documentableAnchor' ) . forEach ( elem => {
108
- elem . addEventListener ( 'click' , event => {
109
- var $temp = $ ( "<input>" )
110
- $ ( "body" ) . append ( $temp )
111
- var a = document . createElement ( 'a' )
112
- a . href = $ ( elem ) . attr ( "link" )
113
- $temp . val ( a . href ) . select ( ) ;
114
- document . execCommand ( "copy" )
115
- $temp . remove ( ) ;
116
- } )
117
- } )
118
-
119
- hljs . registerLanguage ( "scala" , highlightDotty ) ;
120
- hljs . registerAliases ( [ "dotty" , "scala3" ] , "scala" ) ;
121
- hljs . initHighlighting ( ) ;
143
+ document . querySelectorAll ( 'pre code' ) . forEach ( el => {
144
+ hljs . highlightBlock ( el ) ;
145
+ } ) ;
122
146
123
147
/* listen for the `F` key to be pressed, to focus on the member filter input (if it's present) */
124
148
document . body . addEventListener ( 'keydown' , e => {
@@ -134,32 +158,45 @@ window.addEventListener("DOMContentLoaded", () => {
134
158
}
135
159
} )
136
160
137
- // show/hide side menu on mobile view
138
- const sideMenuToggler = document . getElementById ( "mobile-sidebar-toggle" ) ;
139
- sideMenuToggler . addEventListener ( 'click' , _e => {
140
- document . getElementById ( "leftColumn" ) . classList . toggle ( "show" )
141
- document . getElementById ( "content" ) . classList . toggle ( "sidebar-shown" )
142
- const toc = document . getElementById ( "toc" ) ;
143
- if ( toc && toc . childElementCount > 0 ) {
144
- toc . classList . toggle ( "sidebar-shown" )
145
- }
146
- sideMenuToggler . classList . toggle ( "menu-shown" )
147
- } )
148
-
149
- // show/hide mobile menu on mobile view
150
- const mobileMenuOpenIcon = document . getElementById ( "mobile-menu-toggle" ) ;
151
- const mobileMenuCloseIcon = document . getElementById ( "mobile-menu-close" ) ;
152
- mobileMenuOpenIcon . addEventListener ( 'click' , _e => {
153
- document . getElementById ( "mobile-menu" ) . classList . add ( "show" )
154
- } )
155
- mobileMenuCloseIcon . addEventListener ( 'click' , _e => {
156
- document . getElementById ( "mobile-menu" ) . classList . remove ( "show" )
157
- } )
158
-
159
-
160
161
// when document is loaded graph needs to be shown
162
+ }
163
+
164
+ window . addEventListener ( "DOMContentLoaded" , ( ) => {
165
+ hljs . registerLanguage ( "scala" , highlightDotty ) ;
166
+ hljs . registerAliases ( [ "dotty" , "scala3" ] , "scala" ) ;
167
+ attachAllListeners ( )
161
168
} ) ;
162
169
170
+ // show/hide side menu on mobile view
171
+ const sideMenuToggler = document . getElementById ( "mobile-sidebar-toggle" )
172
+ sideMenuToggler . addEventListener ( 'click' , _e => {
173
+ document . getElementById ( "leftColumn" ) . classList . toggle ( "show" )
174
+ document . getElementById ( "content" ) . classList . toggle ( "sidebar-shown" )
175
+ const toc = document . getElementById ( "toc" ) ;
176
+ if ( toc && toc . childElementCount > 0 ) {
177
+ toc . classList . toggle ( "sidebar-shown" )
178
+ }
179
+ sideMenuToggler . classList . toggle ( "menu-shown" )
180
+ } )
181
+
182
+ // show/hide mobile menu on mobile view
183
+ document . getElementById ( "mobile-menu-toggle" ) . addEventListener ( 'click' , _e => {
184
+ document . getElementById ( "mobile-menu" ) . classList . add ( "show" )
185
+ } )
186
+ document . getElementById ( "mobile-menu-close" ) . addEventListener ( 'click' , _e => {
187
+ document . getElementById ( "mobile-menu" ) . classList . remove ( "show" )
188
+ } )
189
+
190
+ window . addEventListener ( 'popstate' , e => {
191
+ if ( e . state === null ) { return }
192
+ const { leftColumn, mainDiv, title } = e . state
193
+ document . title = title
194
+ const { children } = document . body . firstChild
195
+ children [ 3 ] . innerHTML = leftColumn
196
+ children [ 6 ] . innerHTML = mainDiv
197
+ attachAllListeners ( )
198
+ } )
199
+
163
200
var zoom ;
164
201
var transform ;
165
202
0 commit comments