diff --git a/templates/default/publish.js b/templates/default/publish.js index dc43ec62..3ed4d6a2 100644 --- a/templates/default/publish.js +++ b/templates/default/publish.js @@ -282,6 +282,35 @@ function attachModuleSymbols(doclets, modules) { }); } +function buildMemberNav(items, itemHeading, itemsSeen) { + var nav = ''; + + if (items.length) { + var itemsNav = ''; + + items.forEach(function(item) { + if ( !hasOwnProp.call(itemsSeen, item.longname) ) { + itemsNav += '
  • ' + linkto(item.longname, item.name.replace(/^module:/, '')) + '
  • '; + itemsSeen[item.longname] = true; + } + }); + + if (itemsNav !== '') { + nav += '

    ' + itemHeading + '

    '; + } + } + + return nav; +} + +function linktoTutorial(longName, name) { + return tutoriallink(name); +} + +function linktoExternal(longName, name) { + return linkto(longName, name.replace(/(^"|"$)/g, '')); +} + /** * Create the navigation sidebar. * @param {object} members The members that will be used to create the sidebar. @@ -298,104 +327,20 @@ function attachModuleSymbols(doclets, modules) { */ function buildNav(members) { var nav = '

    Home

    ', - seen = {}, - hasClassList = false, - classNav = '', - globalNav = ''; + seen = {}; - if (members.modules.length) { - nav += '

    Modules

    '; - } - - if (members.externals.length) { - nav += '

    Externals

    '; - } - - if (members.classes.length) { - members.classes.forEach(function(c) { - if ( !hasOwnProp.call(seen, c.longname) ) { - classNav += '
  • ' + linkto(c.longname, c.name) + '
  • '; - } - seen[c.longname] = true; - }); - - if (classNav !== '') { - nav += '

    Classes

    '; - } - } - - if (members.events.length) { - nav += '

    Events

    '; - } - - if (members.namespaces.length) { - nav += '

    Namespaces

    '; - } - - if (members.mixins.length) { - nav += '

    Mixins

    '; - } - - if (members.tutorials.length) { - nav += '

    Tutorials

    '; - } - - if (members.interfaces.length) { - nav += '

    Interfaces

    '; - } + nav += buildMemberNav(members.modules, 'Modules', {}, linkto); + nav += buildMemberNav(members.externals, 'Externals', seen, linktoExternal); + nav += buildMemberNav(members.classes, 'Classes', seen, linkto); + nav += buildMemberNav(members.events, 'Events', seen, linkto); + nav += buildMemberNav(members.namespaces, 'Namespaces', seen, linkto); + nav += buildMemberNav(members.mixins, 'Mixins', seen, linkto); + nav += buildMemberNav(members.tutorials, 'Tutorials', seen, linktoTutorial); + nav += buildMemberNav(members.interfaces, 'Interfaces', seen, linkto); if (members.globals.length) { + var globalNav = ''; + members.globals.forEach(function(g) { if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) { globalNav += '
  • ' + linkto(g.longname, g.name) + '
  • '; @@ -628,16 +573,16 @@ exports.publish = function(taffyData, opts, tutorials) { var interfaces = taffy(members.interfaces); Object.keys(helper.longnameToUrl).forEach(function(longname) { - var myClasses = helper.find(classes, {longname: longname}); - if (myClasses.length) { - generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]); - } - var myModules = helper.find(modules, {longname: longname}); if (myModules.length) { generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]); } + var myClasses = helper.find(classes, {longname: longname}); + if (myClasses.length) { + generate('Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname]); + } + var myNamespaces = helper.find(namespaces, {longname: longname}); if (myNamespaces.length) { generate('Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);