@@ -8,24 +8,26 @@ function $clickaway(ev: MouseEvent) {
8
8
}
9
9
10
10
export function $focus ( elem : HTMLElement , bool : boolean ) {
11
- elem . toggleAttribute ( ' is-focus-visible' , bool ) ;
11
+ elem . toggleAttribute ( " is-focus-visible" , bool ) ;
12
12
if ( bool ) elem . focus ( ) ;
13
13
14
14
// if is topbar search input
15
15
if ( SEARCH_ID && SEARCH_ID . test ( elem . id ) ) {
16
16
SEARCH_INPUT = elem ;
17
17
18
- elem . parentElement . parentElement . toggleAttribute ( ' is-focused' , bool ) ;
19
- elem . setAttribute ( ' aria-expanded' , '' + bool ) ;
18
+ elem . parentElement . parentElement . toggleAttribute ( " is-focused" , bool ) ;
19
+ elem . setAttribute ( " aria-expanded" , "" + bool ) ;
20
20
21
- if ( bool ) addEventListener ( ' click' , $clickaway ) ;
22
- else removeEventListener ( ' click' , $clickaway ) ;
21
+ if ( bool ) addEventListener ( " click" , $clickaway ) ;
22
+ else removeEventListener ( " click" , $clickaway ) ;
23
23
}
24
24
}
25
25
26
26
export function $tabbable ( links : NodeListOf < Element > , bool : boolean ) {
27
27
for ( let i = 0 ; i < links . length ; i ++ ) {
28
- bool ? links [ i ] . removeAttribute ( 'tabindex' ) : links [ i ] . setAttribute ( 'tabindex' , '-1' ) ;
28
+ bool
29
+ ? links [ i ] . removeAttribute ( "tabindex" )
30
+ : links [ i ] . setAttribute ( "tabindex" , "-1" ) ;
29
31
}
30
32
}
31
33
@@ -34,38 +36,43 @@ export function $tabbable(links: NodeListOf<Element>, bool: boolean) {
34
36
export function load ( ) {
35
37
let hash = location . hash . substring ( 1 ) ;
36
38
let item = hash && document . getElementById ( hash ) ;
37
- let timer = item && setInterval ( ( ) => {
38
- if ( document . readyState !== 'complete' ) return ;
39
- clearInterval ( timer ) ;
40
- setTimeout ( ( ) => {
41
- item . scrollIntoView ( { behavior : 'smooth' } ) ;
42
- } , 250 ) ;
43
- } , 10 ) ;
39
+ let timer =
40
+ item &&
41
+ setInterval ( ( ) => {
42
+ if ( document . readyState !== "complete" ) return ;
43
+ clearInterval ( timer ) ;
44
+ setTimeout ( ( ) => {
45
+ item . scrollIntoView ( { behavior : "smooth" } ) ;
46
+ } , 250 ) ;
47
+ } , 10 ) ;
44
48
}
45
49
46
50
// mobile sidebar toggle
47
51
export function mobile ( ) {
48
52
let root = document . documentElement ;
49
- let btn = document . querySelector ( '.DocsMobileTitleHeader--sidebar-toggle-button' ) ;
53
+ let btn = document . querySelector (
54
+ ".DocsMobileTitleHeader--sidebar-toggle-button"
55
+ ) ;
50
56
if ( btn )
51
- btn . addEventListener ( ' click' , ( ) => {
52
- root . toggleAttribute ( ' is-mobile-sidebar-open' ) ;
57
+ btn . addEventListener ( " click" , ( ) => {
58
+ root . toggleAttribute ( " is-mobile-sidebar-open" ) ;
53
59
} ) ;
54
60
55
61
// clicking on mobile search icon
56
62
let input : HTMLInputElement =
57
- document . querySelector ( '#DocsSearch--input' ) || document . querySelector ( '#SiteSearch--input' ) ;
63
+ document . querySelector ( "#DocsSearch--input" ) ||
64
+ document . querySelector ( "#SiteSearch--input" ) ;
58
65
59
66
// register init handler
60
67
if ( input )
61
- input . addEventListener ( ' click' , ( ) => {
68
+ input . addEventListener ( " click" , ( ) => {
62
69
$focus ( input , true ) ;
63
70
} ) ;
64
71
}
65
72
66
73
function $copy ( ev : MouseEvent ) {
67
- let btn = ( ev . target as HTMLElement ) . closest ( ' button' ) ;
68
- let txt = btn . getAttribute ( ' data-clipboard' ) ;
74
+ let btn = ( ev . target as HTMLElement ) . closest ( " button" ) ;
75
+ let txt = btn . getAttribute ( " data-clipboard" ) ;
69
76
if ( txt ) {
70
77
try {
71
78
navigator . clipboard . writeText ( txt ) ;
@@ -76,32 +83,79 @@ function $copy(ev: MouseEvent) {
76
83
}
77
84
78
85
export function copy ( ) {
79
- let btns = document . querySelectorAll ( 'button[data-clipboard]' ) ;
80
- for ( let i = 0 ; i < btns . length ; i ++ ) btns [ i ] . addEventListener ( 'click' , $copy ) ;
86
+ let btns = document . querySelectorAll ( "button[data-clipboard]" ) ;
87
+ for ( let i = 0 ; i < btns . length ; i ++ )
88
+ btns [ i ] . addEventListener ( "click" , $copy ) ;
81
89
}
82
90
83
91
// add focus attribute to activeElement if keyboard trigger
84
92
export function focus ( ) {
85
93
let isTAB = false ;
86
- addEventListener ( ' keydown' , ev => {
94
+ addEventListener ( " keydown" , ( ev ) => {
87
95
isTAB = ev . which === 9 ;
88
96
} ) ;
89
97
90
- addEventListener ( ' focusin' , ev => {
98
+ addEventListener ( " focusin" , ( ev ) => {
91
99
if ( isTAB ) $focus ( ev . target as HTMLElement , true ) ;
92
100
} ) ;
93
101
94
- addEventListener ( ' focusout' , ev => {
102
+ addEventListener ( " focusout" , ( ev ) => {
95
103
$focus ( ev . target as HTMLElement , false ) ;
96
104
} ) ;
97
105
}
98
106
107
+ function $tab ( ev : MouseEvent ) {
108
+ ev . preventDefault ( ) ;
109
+
110
+ let tabs = document . querySelectorAll ( ".tab" ) ;
111
+
112
+ for ( let i = 0 ; i < tabs . length ; i ++ ) {
113
+ ( tabs [ i ] as HTMLElement ) . style . display = "none" ;
114
+ }
115
+
116
+ let target = ev . target ;
117
+ let link = ( target as HTMLElement ) . getAttribute ( "data-link" ) ;
118
+
119
+ document . getElementById ( link ) . style . display = "block" ;
120
+ }
121
+
122
+ export function tabs ( ) {
123
+ // Find all tab wrappers
124
+ let wrappers = document . querySelectorAll ( ".tabs-wrapper" ) ;
125
+
126
+ addEventListener ( "load" , ( ) => {
127
+ for ( let i = 0 ; i < wrappers . length ; i ++ ) {
128
+ const labels = wrappers [ i ] . querySelectorAll ( ".tab-label" ) ;
129
+ const tabs = wrappers [ i ] . querySelectorAll ( ".tab" ) ;
130
+
131
+ if ( tabs . length > 0 ) {
132
+ // Set the first tab in a group to display
133
+ ( tabs [ 0 ] as HTMLElement ) . style . display = "block" ;
134
+ for ( let i = 0 ; i < labels . length ; i ++ )
135
+ labels [ i ] . addEventListener ( "click" , $tab ) ;
136
+ }
137
+ }
138
+ } ) ;
139
+ }
140
+
141
+ export function activeTab ( ) {
142
+ var header = document . getElementById ( "tab-active" ) ;
143
+ var tabs = header . getElementsByClassName ( "tab-label" ) ;
144
+ for ( var i = 0 ; i < tabs . length ; i ++ ) {
145
+ ( tabs [ i ] as HTMLElement ) . addEventListener ( "click" , function name ( ) {
146
+ let current = document . getElementsByClassName ( "active" ) ;
147
+ current [ 0 ] . className = current [ 0 ] . className . replace ( " active" , "" ) ;
148
+ this . className += " active" ;
149
+ } ) ;
150
+ }
151
+ }
152
+
99
153
export function dropdowns ( ) {
100
- let attr = ' data-expanded' ;
154
+ let attr = " data-expanded" ;
101
155
102
- document . querySelectorAll ( ' .Dropdown' ) . forEach ( div => {
103
- let btn = div . querySelector ( ' button' ) ;
104
- let links = div . querySelectorAll < HTMLAnchorElement > ( ' li>a' ) ;
156
+ document . querySelectorAll ( " .Dropdown" ) . forEach ( ( div ) => {
157
+ let btn = div . querySelector ( " button" ) ;
158
+ let links = div . querySelectorAll < HTMLAnchorElement > ( " li>a" ) ;
105
159
let focused = 0 ; // index
106
160
107
161
if ( btn && links . length > 0 ) {
@@ -125,37 +179,37 @@ export function dropdowns() {
125
179
$focus ( links [ focused ] , true ) ;
126
180
} ;
127
181
128
- let close : EventListener = ev => {
182
+ let close : EventListener = ( ev ) => {
129
183
ev . stopPropagation ( ) ;
130
- removeEventListener ( ' click' , close ) ;
184
+ removeEventListener ( " click" , close ) ;
131
185
132
186
// tab-inactive sublinks
133
187
$tabbable ( links , false ) ;
134
188
135
- div . setAttribute ( attr , ' false' ) ;
136
- btn . setAttribute ( attr , ' false' ) ;
189
+ div . setAttribute ( attr , " false" ) ;
190
+ btn . setAttribute ( attr , " false" ) ;
137
191
138
- div . removeEventListener ( ' keydown' , arrows ) ;
192
+ div . removeEventListener ( " keydown" , arrows ) ;
139
193
} ;
140
194
141
- let open : EventListener = ev => {
195
+ let open : EventListener = ( ev ) => {
142
196
ev . stopPropagation ( ) ;
143
- addEventListener ( ' click' , close ) ;
197
+ addEventListener ( " click" , close ) ;
144
198
145
199
// tab-friendly sublinks
146
200
$tabbable ( links , true ) ;
147
201
148
- div . setAttribute ( attr , ' true' ) ;
149
- btn . setAttribute ( attr , ' true' ) ;
202
+ div . setAttribute ( attr , " true" ) ;
203
+ btn . setAttribute ( attr , " true" ) ;
150
204
151
205
// focus the first link
152
206
$focus ( links [ ( focused = 0 ) ] , true ) ;
153
207
154
- div . addEventListener ( ' keydown' , arrows ) ;
208
+ div . addEventListener ( " keydown" , arrows ) ;
155
209
} ;
156
210
157
- btn . addEventListener ( ' click' , ev => {
158
- if ( div . getAttribute ( attr ) === ' true' ) {
211
+ btn . addEventListener ( " click" , ( ev ) => {
212
+ if ( div . getAttribute ( attr ) === " true" ) {
159
213
close ( ev ) ;
160
214
} else {
161
215
open ( ev ) ;
0 commit comments