@@ -291,34 +291,65 @@ function attachModuleSymbols(doclets, modules) {
291
291
}
292
292
293
293
function buildMemberNav ( items , itemHeading , itemsSeen , linktoFn ) {
294
- var nav = '' ;
294
+ var nav = [ ]
295
+ var conf = env . conf . templates || { }
295
296
296
- if ( items . length ) {
297
- var itemsNav = '' ;
297
+ conf . default = conf . default || { }
298
298
299
- items . forEach ( function ( item ) {
300
- if ( ! hasOwnProp . call ( item , 'longname' ) ) {
301
- itemsNav += '<li>' + linktoFn ( '' , item . name ) + '</li>' ;
299
+ if ( items && items . length ) {
300
+ var itemsNav = ""
301
+
302
+ nav . push ( buildNavHeading ( itemHeading ) )
303
+
304
+ items . forEach ( function ( item ) {
305
+ var methods = find ( { kind : "function" , memberof : item . longname } )
306
+ var members = find ( { kind : "member" , memberof : item . longname } )
307
+ var displayName
308
+
309
+ if ( ! hasOwnProp . call ( item , "longname" ) ) {
310
+ nav . push ( buildNavItem ( linkfoFn ( '' , item . name ) ) )
311
+ return
302
312
}
303
- else if ( ! hasOwnProp . call ( itemsSeen , item . longname ) ) {
304
- var displayName ;
305
- if ( env . conf . templates . default . useLongnameInNav ) {
306
- displayName = item . longname ;
313
+
314
+ if ( ! hasOwnProp . call ( itemsSeen , item . longname ) ) {
315
+ if ( ! ! conf . default . useLongnameInNav ) {
316
+ displayName = item . longname
317
+
318
+ if ( conf . default . useLongnameInNav > 0 && conf . default . useLongnameInNav !== true ) {
319
+ var num = conf . default . useLongnameInNav
320
+ var cropped = item . longname . split ( "." ) . slice ( - num ) . join ( "." )
321
+ if ( cropped !== displayName ) {
322
+ displayName = "..." + cropped
323
+ }
324
+ }
307
325
} else {
308
- displayName = item . name ;
326
+ displayName = item . name
309
327
}
310
- itemsNav += '<li>' + linktoFn ( item . longname , displayName . replace ( / \b ( m o d u l e | e v e n t ) : / g, '' ) ) + '</li>' ;
311
328
312
- itemsSeen [ item . longname ] = true ;
313
- }
314
- } ) ;
329
+ displayName = displayName . replace ( / ^ m o d u l e : / g, "" )
315
330
316
- if ( itemsNav !== '' ) {
317
- nav += '<h3>' + itemHeading + '</h3><ul>' + itemsNav + '</ul>' ;
318
- }
331
+ if ( itemHeading === 'Tutorials' ) {
332
+ nav . push ( buildNavItem ( linktoFn ( item . longname , displayName ) ) )
333
+ } else {
334
+ nav . push ( buildNavHeading ( buildNavType ( item . kind , linktoFn ( item . longname , displayName ) ) ) )
335
+ }
336
+
337
+ if ( methods . length ) {
338
+ methods . forEach ( function ( method ) {
339
+ if ( method . inherited && conf . showInheritedInNav === false ) {
340
+ return
341
+ }
342
+
343
+ nav . push ( buildNavItem ( buildNavType ( method . kind , linkto ( method . longname , method . name ) ) ) )
344
+ } )
345
+ }
346
+
347
+ itemsSeen [ item . longname ] = true
348
+ }
349
+ } )
319
350
}
320
351
321
- return nav ;
352
+ return nav
322
353
}
323
354
324
355
function linktoTutorial ( longName , name ) {
@@ -341,43 +372,37 @@ function linktoExternal(longName, name) {
341
372
* @param {array<object> } members.tutorials
342
373
* @param {array<object> } members.events
343
374
* @param {array<object> } members.interfaces
344
- * @return {string } The HTML for the navigation sidebar.
375
+ * @return {array } The HTML for the navigation sidebar.
345
376
*/
346
377
function buildNav ( members ) {
347
- // var nav = '<h2><a href="index.html">Home</a></h2>';
348
- var nav = '' ;
349
- var seen = { } ;
350
- var seenTutorials = { } ;
351
-
352
- nav += buildMemberNav ( members . modules , 'Modules' , { } , linkto ) ;
353
- nav += buildMemberNav ( members . externals , 'Externals' , seen , linktoExternal ) ;
354
- nav += buildMemberNav ( members . classes , 'Classes' , seen , linkto ) ;
355
- nav += buildMemberNav ( members . events , 'Events' , seen , linkto ) ;
356
- nav += buildMemberNav ( members . namespaces , 'Namespaces' , seen , linkto ) ;
357
- nav += buildMemberNav ( members . mixins , 'Mixins' , seen , linkto ) ;
358
- nav += buildMemberNav ( members . tutorials , 'Tutorials' , seenTutorials , linktoTutorial ) ;
359
- nav += buildMemberNav ( members . interfaces , 'Interfaces' , seen , linkto ) ;
378
+ var nav = [ ]
379
+ var seen = { }
380
+ var seenTutorials = { }
381
+
382
+ nav . push ( buildNavLink ( 'home' , '<a href="index.html">Home</a>' ) )
383
+
384
+ nav = nav . concat ( buildMemberNav ( members . tutorials , "Tutorials" , seenTutorials , linktoTutorial ) )
385
+ nav = nav . concat ( buildMemberNav ( members . classes , "Classes" , seen , linkto ) )
386
+ nav = nav . concat ( buildMemberNav ( members . modules , "Modules" , { } , linkto ) )
387
+ nav = nav . concat ( buildMemberNav ( members . externals , "Externals" , seen , linktoExternal ) )
388
+ nav = nav . concat ( buildMemberNav ( members . events , "Events" , seen , linkto ) )
389
+ nav = nav . concat ( buildMemberNav ( members . namespaces , "Namespaces" , seen , linkto ) )
390
+ nav = nav . concat ( buildMemberNav ( members . mixins , "Mixins" , seen , linkto ) )
391
+ nav = nav . concat ( buildMemberNav ( members . interfaces , "Interfaces" , seen , linkto ) )
360
392
361
393
if ( members . globals . length ) {
362
- var globalNav = '' ;
394
+ nav . push ( buildNavHeading ( linkto ( 'global' , 'Globals' ) ) )
363
395
364
- members . globals . forEach ( function ( g ) {
365
- if ( g . kind !== ' typedef' && ! hasOwnProp . call ( seen , g . longname ) ) {
366
- globalNav += '<li>' + linkto ( g . longname , g . name ) + '</li>' ;
396
+ members . globals . forEach ( function ( item ) {
397
+ if ( item . kind !== " typedef" && ! hasOwnProp . call ( seen , item . longname ) ) {
398
+ nav . push ( buildNavItem ( buildNavType ( item . kind , linkto ( item . longname , item . name ) ) ) )
367
399
}
368
- seen [ g . longname ] = true ;
369
- } ) ;
370
400
371
- if ( ! globalNav ) {
372
- // turn the heading into a link so you can actually get to the global page
373
- nav += '<h3>' + linkto ( 'global' , 'Global' ) + '</h3>' ;
374
- }
375
- else {
376
- nav += '<h3>Global</h3><ul>' + globalNav + '</ul>' ;
377
- }
401
+ seen [ item . longname ] = true
402
+ } )
378
403
}
379
404
380
- return nav ;
405
+ return nav . join ( '' )
381
406
}
382
407
383
408
/**
@@ -654,3 +679,76 @@ exports.publish = function(taffyData, opts, tutorials) {
654
679
}
655
680
saveChildren ( tutorials ) ;
656
681
} ;
682
+
683
+
684
+
685
+
686
+ /**
687
+ * Helper to generate navigation list link wrapper around navigation links for
688
+ * locations.
689
+ *
690
+ * @param {String } linkClass navigation link classname
691
+ * @param {String } linkContent navigation link HTML content
692
+ * @return {String }
693
+ */
694
+ function buildNavLink ( linkClass , linkContent ) {
695
+ return [
696
+ '<li class="nav-link nav-' + linkClass + '-link">' ,
697
+ linkContent ,
698
+ '</li>'
699
+ ] . join ( '' )
700
+ }
701
+
702
+ function buildNavType ( type , typeLink ) {
703
+ return [
704
+ '<span class="nav-item-type type-' + type + '">' ,
705
+ type [ 0 ] . toUpperCase ( ) ,
706
+ '</span>' ,
707
+
708
+ '<span class="nav-item-name">' ,
709
+ typeLink ,
710
+ '</span>'
711
+ ] . join ( '' )
712
+ }
713
+
714
+ /**
715
+ * Helper to generate navigation list header wrapper around navigation header content
716
+ * for headings and filenames.
717
+ *
718
+ * @param {String } content navigation header content
719
+ * @return {String }
720
+ */
721
+ function buildNavHeading ( content ) {
722
+ return [
723
+ '<li class="nav-heading">' ,
724
+ content ,
725
+ '</li>'
726
+ ] . join ( '' )
727
+ }
728
+
729
+ /**
730
+ * Helper for generating generic navigation wrapper around content passed for
731
+ * methods, and types.
732
+ *
733
+ * @param {String } itemContent navigation item content
734
+ * @return {String }
735
+ */
736
+ function buildNavItem ( itemContent ) {
737
+ return [
738
+ '<li class="nav-item">' ,
739
+ itemContent ,
740
+ '</li>'
741
+ ] . join ( '' )
742
+ }
743
+
744
+ function buildNavType ( type , typeLink ) {
745
+ return [
746
+ '<span class="nav-item-type type-' + type + '">' ,
747
+ type [ 0 ] . toUpperCase ( ) ,
748
+ '</span>' ,
749
+
750
+ '<span class="nav-item-name">' ,
751
+ typeLink ,
752
+ '</span>'
753
+ ] . join ( '' )
754
+ }
0 commit comments