@@ -52,6 +52,22 @@ function preventParentSelection(e) {
52
52
}
53
53
}
54
54
55
+ function traverseAnchors ( elements , level ) {
56
+ var html = "<ul>" ;
57
+
58
+ elements . each ( function ( index , anchor ) {
59
+ if ( ! anchor . textContent . startsWith ( "Example" ) ) {
60
+ html += '<li><a href="' + anchor . hash + '">' + anchor . textContent + '</a>' ;
61
+
62
+ html += traverseAnchors ( $ ( anchor . parentElement ) . nextUntil ( 'h' + level , 'h' + ( level + 1 ) ) . children ( "a" ) , level + 1 ) ;
63
+
64
+ html += "</li>" ;
65
+ }
66
+ } ) ;
67
+
68
+ return html + "</ul>" ;
69
+ }
70
+
55
71
$ ( function ( ) {
56
72
57
73
$ ( "pre[lang]" ) . each ( function ( ) {
@@ -72,15 +88,19 @@ $(function(){
72
88
73
89
tabs [ 0 ] . addClass ( "k-state-active" ) ;
74
90
75
- var tabstrip = $ ( "<div>" )
91
+ var tabstrip = $ ( "<div class='nd-code-container' >" )
76
92
. insertBefore ( this )
77
93
. append ( $ ( "<ul>" ) . append ( tabs ) )
78
94
. append ( langs ) ;
79
95
80
96
langs . wrap ( "<div>" ) ;
81
97
82
98
tabstrip . kendoTabStrip ( {
83
- animation : false
99
+ animation : {
100
+ open : {
101
+ effects : "fadeIn"
102
+ }
103
+ }
84
104
} ) ;
85
105
} ) ;
86
106
@@ -203,22 +223,124 @@ $(function(){
203
223
204
224
ul . appendTo ( this ) ;
205
225
} ) ;
206
- } ) ;
207
226
208
- $ ( function ( ) {
209
- $ ( document . body )
210
- . on ( "click" , ".hamb" , function ( e ) {
211
- e . preventDefault ( ) ;
212
- $ ( "#page-nav" ) . toggleClass ( "expanded" ) ;
213
- } )
214
- . kendoTouch ( {
215
- tap : function ( e ) {
216
- var navigation = $ ( "#page-nav" ) ;
217
- if ( ! $ . contains ( navigation [ 0 ] , e . target ) ) {
218
- navigation . removeClass ( "expanded" ) ;
227
+ var options = {
228
+ root : null ,
229
+ rootMargin : "0px" ,
230
+ threshold : 1.0
231
+ } ;
232
+
233
+ window . addEventListener ( "scroll" , function ( e ) {
234
+ e . target . documentElement . classList [ e . target . scrollingElement . scrollTop !== 0 ? "add" : "remove" ] ( "ns-state-scrolled" ) ;
235
+ } , { passive : true } ) ;
236
+
237
+ var visibleElements = [ ] ;
238
+
239
+ var observer = new IntersectionObserver ( function ( entries ) {
240
+ entries . forEach ( function ( entry ) {
241
+ if ( entry . intersectionRatio < 1 ) {
242
+ visibleElements . splice ( visibleElements . indexOf ( entry . target ) , 1 ) ;
243
+ } else {
244
+ visibleElements [ entry . intersectionRect . y < entry . rootBounds . height ? "unshift" : "push" ] ( entry . target ) ;
245
+ }
246
+ } ) ;
247
+
248
+ if ( visibleElements [ 0 ] ) {
249
+ var topElement = { offsetTop : 9999999 } ;
250
+
251
+ visibleElements . forEach ( function ( element ) {
252
+ if ( element . offsetTop < topElement . offsetTop ) {
253
+ topElement = element ;
219
254
}
255
+ } ) ;
256
+
257
+ topElement = $ ( '.right-nav__tree [href$="#' + topElement . id + '"]' ) ;
258
+
259
+ if ( topElement [ 0 ] ) {
260
+ $ ( ".right-nav__tree a" ) . removeClass ( "ns-state-selected" ) ;
261
+
262
+ topElement . addClass ( "ns-state-selected" ) ;
263
+ }
264
+ }
265
+ } , options ) ;
266
+
267
+ var seeAlso = $ ( "#see-also" ) ;
268
+ var seeAlsoLinks = seeAlso . next ( "ul" ) ;
269
+
270
+ seeAlso . remove ( ) ;
271
+
272
+ var apiReferences = $ ( "article > p > a[href*=api-reference]" ) ;
273
+ var rightNavLinks = $ ( ".right-nav__links" ) ;
274
+
275
+ var rightNav = $ ( '\
276
+ <div class="right-nav__container">\
277
+ <input id="right-nav__toggle" class="right-nav__input" type="checkbox">\
278
+ <label for="right-nav__toggle" class="right-nav__label"></label>\
279
+ <div class="right-nav__tree"></div>\
280
+ <div class="right-nav__sizer"></div>\
281
+ </div>' )
282
+ . insertBefore ( $ ( "article" ) )
283
+ . children ( ".right-nav__tree" ) ;
284
+
285
+ var articleAnchors = $ ( traverseAnchors ( $ ( "article > h2 > a" ) , 2 ) ) ;
286
+
287
+ if ( articleAnchors . children ( ) [ 0 ] ) {
288
+ rightNav
289
+ . append ( $ ( "<div class='-allcaps'>In this article</div>" ) )
290
+ . append ( articleAnchors ) ;
291
+ }
292
+
293
+ if ( seeAlsoLinks [ 0 ] ) {
294
+ rightNav
295
+ . append ( $ ( "<div class='-allcaps'>Related articles</div>" ) )
296
+ . append ( seeAlsoLinks ) ;
297
+ }
298
+
299
+ if ( apiReferences [ 0 ] ) {
300
+ apiReferences . parent ( ) . remove ( ) ;
301
+
302
+ rightNav
303
+ . append ( $ ( "<div class='-allcaps'>API Reference</div>" ) )
304
+ . append ( apiReferences . wrap ( "<li></li>" ) . parent ( ) . wrapAll ( "<ul></ul>" ) . parent ( ) ) ;
305
+ }
306
+
307
+ if ( rightNavLinks [ 0 ] ) {
308
+ rightNav
309
+ . append ( $ ( "<div>Not finding the help you need?</div>" ) )
310
+ . append ( rightNavLinks ) ;
311
+ }
312
+
313
+ $ ( document . documentElement ) . on ( "click" , function ( ) {
314
+ var toggle = $ ( "#right-nav__toggle" ) [ 0 ] ;
315
+
316
+ if ( toggle ) {
317
+ toggle . checked = false ;
318
+ }
319
+ } ) ;
320
+
321
+ $ ( ".right-nav__container" ) . on ( "click" , function ( e ) {
322
+ e . stopPropagation ( ) ;
323
+ } ) ;
324
+
325
+ $ ( "article > h2, article > h3" ) . each ( function ( index , node ) {
326
+ observer . observe ( node ) ;
327
+ } ) ;
328
+
329
+ var bodyObserver = new MutationObserver ( function ( entries ) {
330
+ entries . forEach ( function ( ) {
331
+ if ( document . body . classList . contains ( "gsc-overflow-hidden" ) ) {
332
+ document . documentElement . classList . add ( "-overflow-hidden" ) ;
333
+ } else {
334
+ document . documentElement . classList . remove ( "-overflow-hidden" ) ;
220
335
}
221
336
} ) ;
337
+ } ) ;
338
+
339
+ bodyObserver . observe ( document . body , {
340
+ attributes : true ,
341
+ attributeOldValue : true ,
342
+ attributeFilter : [ "class" ]
343
+ } ) ;
222
344
} ) ;
223
345
224
346
$ ( function ( ) {
@@ -268,43 +390,3 @@ $(function() {
268
390
window . setTimeout ( handleBanner , 1000 ) ;
269
391
} ) ;
270
392
271
- $ ( function ( ) {
272
- 'use strict' ;
273
-
274
- var $searchBtn = $ ( '.Search-open' ) ;
275
- var $searchBar = $ ( '.Search-container' ) ;
276
- var $searchCancel = $ ( '.Btn--cancel' ) ;
277
- var $navLinks = $ ( '.Nav-menu .-fl' ) ;
278
- var $navLinksMobileToggle = $ ( '.Nav-open-menu' ) ;
279
-
280
- // improve menu
281
- $navLinks . find ( 'a' ) . each ( function ( ) {
282
- if ( $ ( this ) . attr ( 'href' ) === document . location . pathname ) {
283
- $ ( this ) . addClass ( 'is-current' ) ;
284
- }
285
- } ) ;
286
-
287
- // show search menu
288
- $searchBtn . on ( 'click' , function ( ) {
289
- $searchBtn . toggleClass ( 'is-active' ) ;
290
- $searchBar . toggle ( ) ;
291
- $ ( '[name=search]' ) . first ( ) . focus ( ) ;
292
- // hide nav when opening search
293
- $navLinks . removeClass ( 'is-visible' ) ;
294
- $navLinksMobileToggle . removeClass ( 'is-active' ) ;
295
- } ) ;
296
- $searchCancel . on ( 'click' , function ( ) {
297
- $searchBar . toggle ( ) ;
298
- $searchBtn . toggleClass ( 'is-active' ) ;
299
- } ) ;
300
-
301
- // show mobile menu
302
- $navLinksMobileToggle . on ( 'click' , function ( ) {
303
- $ ( this ) . toggleClass ( 'is-active' ) ;
304
- $navLinks . toggleClass ( 'is-visible' ) ;
305
- // hide search when opening nav
306
- $searchBar . hide ( ) ;
307
- $searchBtn . removeClass ( 'is-active' ) ;
308
- } ) ;
309
- } ) ;
310
-
0 commit comments