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 = '',
- seen = {},
- hasClassList = false,
- classNav = '',
- globalNav = '';
+ seen = {};
- if (members.modules.length) {
- nav += 'Modules
';
- members.modules.forEach(function(m) {
- if ( !hasOwnProp.call(seen, m.longname) ) {
- nav += '- ' + linkto(m.longname, m.name) + '
';
- }
- seen[m.longname] = true;
- });
-
- nav += '
';
- }
-
- if (members.externals.length) {
- nav += 'Externals
';
- members.externals.forEach(function(e) {
- if ( !hasOwnProp.call(seen, e.longname) ) {
- nav += '- ' + linkto( e.longname, e.name.replace(/(^"|"$)/g, '') ) + '
';
- }
- seen[e.longname] = true;
- });
-
- nav += '
';
- }
-
- 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
';
- nav += classNav;
- nav += '
';
- }
- }
-
- if (members.events.length) {
- nav += 'Events
';
- members.events.forEach(function(e) {
- if ( !hasOwnProp.call(seen, e.longname) ) {
- nav += '- ' + linkto(e.longname, e.name) + '
';
- }
- seen[e.longname] = true;
- });
-
- nav += '
';
- }
-
- if (members.namespaces.length) {
- nav += 'Namespaces
';
- members.namespaces.forEach(function(n) {
- if ( !hasOwnProp.call(seen, n.longname) ) {
- nav += '- ' + linkto(n.longname, n.name) + '
';
- }
- seen[n.longname] = true;
- });
-
- nav += '
';
- }
-
- if (members.mixins.length) {
- nav += 'Mixins
';
- members.mixins.forEach(function(m) {
- if ( !hasOwnProp.call(seen, m.longname) ) {
- nav += '- ' + linkto(m.longname, m.name) + '
';
- }
- seen[m.longname] = true;
- });
-
- nav += '
';
- }
-
- if (members.tutorials.length) {
- nav += 'Tutorials
';
- members.tutorials.forEach(function(t) {
- nav += '- ' + tutoriallink(t.name) + '
';
- });
-
- nav += '
';
- }
-
- if (members.interfaces.length) {
- nav += 'Interfaces
';
- members.interfaces.forEach(function(i) {
- nav += '- ' + linkto(i.longname, i.name) + '
';
- });
- nav += '
';
- }
+ 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]);