@@ -388,13 +388,14 @@ function parseFile(fileName, contents, umbrellaMode) {
388388
389389function createTypesDictionary ( docs ) {
390390 var types = [ ] ;
391- var gapicVersions = [ ] ;
391+ var gapics = { } ;
392392
393393 docs . forEach ( function ( service ) {
394394 var isGapic = / _ c l i e n t $ / . test ( service . id ) ;
395395
396396 var titleParts = [ ] ;
397397 var id = service . id ;
398+
398399 var contents = service . path ;
399400
400401 if ( id === config . UMBRELLA_PACKAGE ) {
@@ -415,17 +416,25 @@ function createTypesDictionary(docs) {
415416 }
416417 } ) ;
417418
418- if ( ! arrayIncludes ( gapicVersions , gapicVersion ) ) {
419- gapicVersions . push ( gapicVersion ) ;
420- }
421-
422419 titleParts = [ gapicVersion ] ;
423420
424421 var nestedTitle = [ ] . slice . call ( gapicPath , versionIndex + 1 ) ;
425422
426423 if ( nestedTitle . length > 0 ) {
427424 titleParts . push ( upperFirst ( camel ( nestedTitle . join ( '/' ) ) ) ) ;
428425 }
426+
427+ var gapicPathWithVersion = [ ] . slice . call ( gapicPath )
428+ . slice ( 0 , versionIndex + 1 ) . join ( '/' ) ;
429+
430+ if ( ! gapics [ gapicPathWithVersion ] ) {
431+ gapics [ gapicPathWithVersion ] = {
432+ id : gapicPathWithVersion ,
433+ title : [
434+ gapicVersion
435+ ]
436+ } ;
437+ }
429438 }
430439
431440 if ( service . parent ) {
@@ -443,25 +452,22 @@ function createTypesDictionary(docs) {
443452 } ) ;
444453 } ) ;
445454
446- gapicVersions . forEach ( gapicVersion => {
455+ for ( var gapic in gapics ) {
447456 types . push ( {
448- id : gapicVersion ,
449- title : [ gapicVersion ] ,
450- contents : `${ gapicVersion } /index.json`
457+ id : gapics [ gapic ] . id ,
458+ title : gapics [ gapic ] . title ,
459+ contents : `${ gapics [ gapic ] . title } /index.json`
451460 } ) ;
452- } ) ;
461+ }
453462
454463 return types ;
455464}
456465
457466function createToc ( types , collapse ) {
458- var PATH_VERSION_REGEX = / \/ ( v [ ^ / ] * ) / ;
459-
460467 var toc = extend ( true , { } , baseToc ) ;
461468
462469 var generatedTypes = types . filter ( type => / v \d / . test ( type . title . join ( ' ' ) ) ) ;
463470 var protos = types . filter ( type => stringIncludes ( type . id , '/doc/' ) ) ;
464- var protosGroupedByVersion = { } ;
465471
466472 var services = types
467473 . filter ( type => ! arrayIncludes ( generatedTypes , type ) )
@@ -484,61 +490,73 @@ function createToc(types, collapse) {
484490 return a . type < b . type ? - 1 : a . type > b . type ? 1 : 0 ;
485491 } ) ;
486492
487- if ( protos . length > 0 ) {
488- protos . forEach ( function ( proto ) {
489- var version = proto . id . match ( PATH_VERSION_REGEX ) [ 1 ] ;
490- protosGroupedByVersion [ version ] = protosGroupedByVersion [ version ] || [ ] ;
491- protosGroupedByVersion [ version ] . push ( proto ) ;
492- } ) ;
493- }
494-
495493 if ( generatedTypes . length > 0 ) {
496494 // Push the generated types to the bottom of the navigation.
497- var generatedTypesByVersion = { } ;
495+ var generatedTypesByModuleByVersion = { } ;
498496
499497 generatedTypes . forEach ( function ( generatedType ) {
498+ var module = generatedType . title [ 0 ] ;
499+ var moduleObject = generatedTypesByModuleByVersion [ module ] =
500+ generatedTypesByModuleByVersion [ module ] || { } ;
501+
500502 var version = generatedType . title [ 1 ] ;
501- generatedTypesByVersion [ version ] = generatedTypesByVersion [ version ] || [ ] ;
502- generatedTypesByVersion [ version ] . push ( generatedType ) ;
503+ moduleObject [ version ] = moduleObject [ version ] || [ ] ;
504+ moduleObject [ version ] . push ( generatedType ) ;
503505 } ) ;
504506
505- for ( var version in generatedTypesByVersion ) {
506- var generatedTypesGrouped = generatedTypesByVersion [ version ]
507- . sort ( function ( a , b ) {
508- if ( a . title . length < b . title . length ) { // e.g. ['Spanner', 'v1']
509- return - 1 ;
510- }
507+ for ( var module in generatedTypesByModuleByVersion ) {
508+ var versions = generatedTypesByModuleByVersion [ module ] ;
511509
512- if ( b . title . length < a . title . length ) {
513- return 1 ;
514- }
510+ for ( var version in versions ) {
511+ /*jshint loopfunc:true*/
512+ var matchingService = services . filter ( service => {
513+ return service . title . toLowerCase ( ) === module . toLowerCase ( ) ;
514+ } ) [ 0 ] ;
515515
516- var titleA = a . title [ a . title . length - 1 ] ;
517- var titleB = b . title [ b . title . length - 1 ] ;
516+ var generatedTypesGrouped = versions [ version ]
517+ . sort ( function ( a , b ) {
518+ if ( a . title . length < b . title . length ) { // e.g. ['Spanner', 'v1']
519+ return - 1 ;
520+ }
518521
519- return titleA < titleB ? - 1 : titleA > titleB ? 1 : 0 ;
520- } ) ;
522+ if ( b . title . length < a . title . length ) {
523+ return 1 ;
524+ }
521525
522- /*jshint loopfunc:true*/
523- services = services . filter ( service => service . type !== version ) ;
524-
525- var serviceObject = {
526- title : version ,
527- type : version ,
528- nav : generatedTypesGrouped . map ( function ( generatedType ) {
529- return {
530- title : generatedType . title [ generatedType . title . length - 1 ] ,
531- type : generatedType . id
532- } ;
533- } )
534- } ;
526+ var titleA = a . title [ a . title . length - 1 ] ;
527+ var titleB = b . title [ b . title . length - 1 ] ;
535528
536- serviceObject . nav . push ( {
537- title : 'Data Types' ,
538- type : generatedTypes [ 0 ] . id . replace ( / \/ \w + _ c l i e n t $ / , '/data_types' )
539- } ) ;
529+ return titleA < titleB ? - 1 : titleA > titleB ? 1 : 0 ;
530+ } ) ;
540531
541- services . push ( serviceObject ) ;
532+ services = services . filter ( service => {
533+ return service . type !== version ;
534+ } ) ;
535+
536+ var serviceObject = {
537+ title : version ,
538+ type : version ,
539+ nav : generatedTypesGrouped . map ( function ( generatedType ) {
540+ return {
541+ title : generatedType . title [ generatedType . title . length - 1 ] ,
542+ type : generatedType . id
543+ } ;
544+ } )
545+ } ;
546+
547+ serviceObject . nav . push ( {
548+ title : 'Data Types' ,
549+ type : generatedTypesGrouped [ 0 ] . id
550+ . replace ( / \/ \w + _ c l i e n t $ / , '/data_types' )
551+ } ) ;
552+
553+ if ( collapse ) { // Umbrella mode
554+ serviceObject . type = `${ module . toLowerCase ( ) } /${ serviceObject . type } ` ;
555+ matchingService . nav = [ serviceObject ] ;
556+ } else {
557+ services . push ( serviceObject ) ;
558+ }
559+ }
542560 }
543561 }
544562
0 commit comments