From ee2badcde203eeb69537d02292b67794a5cdb3f0 Mon Sep 17 00:00:00 2001 From: Jeff Williams Date: Sat, 6 Dec 2014 15:49:22 -0800 Subject: [PATCH] improvements from @dchambers to nav-building code (#813) Squashed commit of the following: commit 723349a9c90a005137d01e19012778f4dddb1d12 Author: dchambers 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 Date: Fri Dec 5 11:35:33 2014 +0000 Use four spaces for tabulation. commit 5eaabcf84c5395aeeeff018ea042e73d710e2846 Author: dchambers 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 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 Date: Mon Nov 24 17:17:51 2014 +0000 Removed trailing whitespace from 'publish.js'. commit 773b785756f5ee6c32cbcb1742543c1a2671efe7 Author: Dominic Chambers 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 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 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 --- templates/default/publish.js | 145 +++++++++++------------------------ 1 file changed, 45 insertions(+), 100 deletions(-) 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 + '

      ' + itemsNav + '
    '; + } + } + + 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

      '; - 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]);