improvements from @dchambers to nav-building code (#813)

Squashed commit of the following:

commit 723349a9c90a005137d01e19012778f4dddb1d12
Author: dchambers <dominic.chambers@gmail.com>
Date:   Fri Dec 5 13:14:13 2014 +0000

    Moved an assignment within the corresponding guard, since it was superfluous unless the guard was triggered.

commit 872974656e7500c99daba64e7db31f14f9874c0d
Author: dchambers <dominic.chambers@gmail.com>
Date:   Fri Dec 5 11:35:33 2014 +0000

    Use four spaces for tabulation.

commit 5eaabcf84c5395aeeeff018ea042e73d710e2846
Author: dchambers <dominic.chambers@gmail.com>
Date:   Mon Nov 24 18:15:36 2014 +0000

    Attempt to fix remaining linting errors -- may not work as I'm unable to run the build locally on my own machine to verify.

commit 0137865ff4aa4e888533a217f2e6bb3b12b7fc87
Author: dchambers <dominic.chambers@gmail.com>
Date:   Mon Nov 24 17:42:09 2014 +0000

    Attempt to fix remaining linting errors -- may not work as I'm unable to run the build locally on my own machine to verify.

commit 7d80410d63e29837b436776b8983004c8b92ecb2
Author: dchambers <dominic.chambers@gmail.com>
Date:   Mon Nov 24 17:17:51 2014 +0000

    Removed trailing whitespace from 'publish.js'.

commit 773b785756f5ee6c32cbcb1742543c1a2671efe7
Author: Dominic Chambers <dominic.chambers@gmail.com>
Date:   Tue Aug 26 09:58:50 2014 +0100

    Ensure the title for classes defined within modules shows the thing
    being documented as being a class rather than a module, as it currently
    does for interfaces.

commit 9fc527d63aa6839fbae07f4b6db8dee027f6fc43
Author: Dominic Chambers <dominic.chambers@gmail.com>
Date:   Tue Aug 26 09:51:10 2014 +0100

    Remove the 'module:' prefix from index links to classes and interfaces
    defined within modules.

commit 21e3e31f2499bbc9cb5f10c09cfaeb86d25ded9b
Author: Dominic Chambers <dominic.chambers@gmail.com>
Date:   Tue Aug 26 09:43:13 2014 +0100

    Removed duplicated code from the buildNav() function, where the version
    of the code used is one where items are only written if they haven't
    already been encountered, and a heading is only written when there are
    items to appear beneath that heading.
    Conflicts:
    	templates/default/publish.js
This commit is contained in:
Jeff Williams 2014-12-06 15:49:22 -08:00
parent 78ed79c49a
commit ee2badcde2

View File

@ -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 += '<li>' + linkto(item.longname, item.name.replace(/^module:/, '')) + '</li>';
itemsSeen[item.longname] = true;
}
});
if (itemsNav !== '') {
nav += '<h3>' + itemHeading + '</h3><ul>' + itemsNav + '</ul>';
}
}
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 = '<h2><a href="index.html">Home</a></h2>',
seen = {},
hasClassList = false,
classNav = '',
globalNav = '';
seen = {};
if (members.modules.length) {
nav += '<h3>Modules</h3><ul>';
members.modules.forEach(function(m) {
if ( !hasOwnProp.call(seen, m.longname) ) {
nav += '<li>' + linkto(m.longname, m.name) + '</li>';
}
seen[m.longname] = true;
});
nav += '</ul>';
}
if (members.externals.length) {
nav += '<h3>Externals</h3><ul>';
members.externals.forEach(function(e) {
if ( !hasOwnProp.call(seen, e.longname) ) {
nav += '<li>' + linkto( e.longname, e.name.replace(/(^"|"$)/g, '') ) + '</li>';
}
seen[e.longname] = true;
});
nav += '</ul>';
}
if (members.classes.length) {
members.classes.forEach(function(c) {
if ( !hasOwnProp.call(seen, c.longname) ) {
classNav += '<li>' + linkto(c.longname, c.name) + '</li>';
}
seen[c.longname] = true;
});
if (classNav !== '') {
nav += '<h3>Classes</h3><ul>';
nav += classNav;
nav += '</ul>';
}
}
if (members.events.length) {
nav += '<h3>Events</h3><ul>';
members.events.forEach(function(e) {
if ( !hasOwnProp.call(seen, e.longname) ) {
nav += '<li>' + linkto(e.longname, e.name) + '</li>';
}
seen[e.longname] = true;
});
nav += '</ul>';
}
if (members.namespaces.length) {
nav += '<h3>Namespaces</h3><ul>';
members.namespaces.forEach(function(n) {
if ( !hasOwnProp.call(seen, n.longname) ) {
nav += '<li>' + linkto(n.longname, n.name) + '</li>';
}
seen[n.longname] = true;
});
nav += '</ul>';
}
if (members.mixins.length) {
nav += '<h3>Mixins</h3><ul>';
members.mixins.forEach(function(m) {
if ( !hasOwnProp.call(seen, m.longname) ) {
nav += '<li>' + linkto(m.longname, m.name) + '</li>';
}
seen[m.longname] = true;
});
nav += '</ul>';
}
if (members.tutorials.length) {
nav += '<h3>Tutorials</h3><ul>';
members.tutorials.forEach(function(t) {
nav += '<li>' + tutoriallink(t.name) + '</li>';
});
nav += '</ul>';
}
if (members.interfaces.length) {
nav += '<h3>Interfaces</h3><ul>';
members.interfaces.forEach(function(i) {
nav += '<li>' + linkto(i.longname, i.name) + '</li>';
});
nav += '</ul>';
}
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 += '<li>' + linkto(g.longname, g.name) + '</li>';
@ -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]);