1
- window . addEventListener ( "DOMContentLoaded" , ( ) => {
1
+ let observer = null ;
2
2
3
- var toggler = document . getElementById ( "leftToggler" ) ;
4
- if ( toggler ) {
5
- toggler . onclick = function ( ) {
6
- document . getElementById ( "leftColumn" ) . classList . toggle ( "open" ) ;
7
- } ;
3
+ function attachAllListeners ( ) {
4
+ if ( observer ) {
5
+ observer . disconnect ( )
8
6
}
9
7
10
8
var elements = document . getElementsByClassName ( "documentableElement" )
@@ -25,7 +23,7 @@ window.addEventListener("DOMContentLoaded", () => {
25
23
var documentableLists = document . getElementsByClassName ( "documentableList" )
26
24
if ( documentableLists ) {
27
25
for ( i = 0 ; i < documentableLists . length ; i ++ ) {
28
- documentableLists [ i ] . children [ 0 ] . onclick = function ( e ) {
26
+ documentableLists [ i ] . children [ 0 ] . onclick = function ( e ) {
29
27
this . classList . toggle ( "expand" ) ;
30
28
this . parentElement . classList . toggle ( "expand" ) ;
31
29
}
@@ -36,14 +34,47 @@ window.addEventListener("DOMContentLoaded", () => {
36
34
if ( memberLists ) {
37
35
for ( i = 0 ; i < memberLists . length ; i ++ ) {
38
36
if ( $ ( memberLists [ i ] . children [ 0 ] ) . is ( "button" ) ) {
39
- memberLists [ i ] . children [ 0 ] . onclick = function ( e ) {
37
+ memberLists [ i ] . children [ 0 ] . onclick = function ( e ) {
40
38
this . classList . toggle ( "expand" ) ;
41
39
this . parentElement . classList . toggle ( "expand" ) ;
42
40
}
43
41
}
44
42
}
45
43
}
46
44
45
+ document . querySelectorAll ( 'a' ) . forEach ( el => {
46
+ const href = el . href
47
+ if ( href === "" ) { return }
48
+ const url = new URL ( href )
49
+ el . addEventListener ( 'click' , e => {
50
+ if ( url . href . replace ( "#" , "" ) === window . location . href . replace ( "#" , "" ) ) { return }
51
+ if ( url . origin !== window . location . origin ) { return }
52
+ if ( e . metaKey || e . ctrlKey || e . shiftKey || e . altKey || e . button !== 0 ) { return }
53
+ e . preventDefault ( )
54
+ e . stopPropagation ( )
55
+ $ . get ( href , function ( data ) {
56
+ const html = $ . parseHTML ( data )
57
+ const title = html . find ( node => node . nodeName === "TITLE" ) . innerText
58
+ const bodyDiv = html . find ( node => node . nodeName === "DIV" )
59
+ const { children } = document . body . firstChild
60
+ if ( window . history . state === null ) {
61
+ window . history . replaceState ( {
62
+ leftColumn : children [ 3 ] . innerHTML ,
63
+ mainDiv : children [ 6 ] . innerHTML ,
64
+ title : document . title ,
65
+ } , '' )
66
+ }
67
+ document . title = title
68
+ const leftColumn = bodyDiv . children [ 3 ] . innerHTML
69
+ const mainDiv = bodyDiv . children [ 6 ] . innerHTML
70
+ window . history . pushState ( { leftColumn, mainDiv, title } , '' , href )
71
+ children [ 3 ] . innerHTML = leftColumn
72
+ children [ 6 ] . innerHTML = mainDiv
73
+ attachAllListeners ( )
74
+ } )
75
+ } )
76
+ } )
77
+
47
78
$ ( ".ar" ) . on ( 'click' , function ( e ) {
48
79
$ ( this ) . parent ( ) . parent ( ) . toggleClass ( "expanded" )
49
80
$ ( this ) . toggleClass ( "expanded" )
@@ -70,7 +101,7 @@ window.addEventListener("DOMContentLoaded", () => {
70
101
el . firstChild . classList . toggle ( "expand" ) ;
71
102
} ) )
72
103
73
- const observer = new IntersectionObserver ( entries => {
104
+ observer = new IntersectionObserver ( entries => {
74
105
entries . forEach ( entry => {
75
106
const id = entry . target . getAttribute ( 'id' ) ;
76
107
if ( entry . intersectionRatio > 0 ) {
@@ -97,28 +128,9 @@ window.addEventListener("DOMContentLoaded", () => {
97
128
}
98
129
}
99
130
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 ( ) ;
131
+ document . querySelectorAll ( 'pre code' ) . forEach ( el => {
132
+ hljs . highlightBlock ( el ) ;
133
+ } ) ;
122
134
123
135
/* listen for the `F` key to be pressed, to focus on the member filter input (if it's present) */
124
136
document . body . addEventListener ( 'keydown' , e => {
@@ -134,32 +146,44 @@ window.addEventListener("DOMContentLoaded", () => {
134
146
}
135
147
} )
136
148
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
149
// when document is loaded graph needs to be shown
150
+ }
151
+
152
+ window . addEventListener ( "DOMContentLoaded" , ( ) => {
153
+ hljs . registerLanguage ( "scala" , highlightDotty ) ;
154
+ hljs . registerAliases ( [ "dotty" , "scala3" ] , "scala" ) ;
155
+ attachAllListeners ( )
161
156
} ) ;
162
157
158
+ // show/hide side menu on mobile view
159
+ const sideMenuToggler = document . getElementById ( "mobile-sidebar-toggle" )
160
+ sideMenuToggler . addEventListener ( 'click' , _e => {
161
+ document . getElementById ( "leftColumn" ) . classList . toggle ( "show" )
162
+ document . getElementById ( "content" ) . classList . toggle ( "sidebar-shown" )
163
+ const toc = document . getElementById ( "toc" ) ;
164
+ if ( toc && toc . childElementCount > 0 ) {
165
+ toc . classList . toggle ( "sidebar-shown" )
166
+ }
167
+ sideMenuToggler . classList . toggle ( "menu-shown" )
168
+ } )
169
+
170
+ // show/hide mobile menu on mobile view
171
+ document . getElementById ( "mobile-menu-toggle" ) . addEventListener ( 'click' , _e => {
172
+ document . getElementById ( "mobile-menu" ) . classList . add ( "show" )
173
+ } )
174
+ document . getElementById ( "mobile-menu-close" ) . addEventListener ( 'click' , _e => {
175
+ document . getElementById ( "mobile-menu" ) . classList . remove ( "show" )
176
+ } )
177
+
178
+ window . addEventListener ( 'popstate' , e => {
179
+ const { leftColumn, mainDiv, title } = e . state
180
+ document . title = title
181
+ const { children } = document . body . firstChild
182
+ children [ 3 ] . innerHTML = leftColumn
183
+ children [ 6 ] . innerHTML = mainDiv
184
+ attachAllListeners ( )
185
+ } )
186
+
163
187
var zoom ;
164
188
var transform ;
165
189
0 commit comments