Skip to content

Commit 18b916f

Browse files
committed
feat(design): replace default nav with minami template nav
1 parent 3365e3b commit 18b916f

File tree

1 file changed

+145
-47
lines changed

1 file changed

+145
-47
lines changed

publish.js

Lines changed: 145 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -291,34 +291,65 @@ function attachModuleSymbols(doclets, modules) {
291291
}
292292

293293
function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) {
294-
var nav = '';
294+
var nav = []
295+
var conf = env.conf.templates || {}
295296

296-
if (items.length) {
297-
var itemsNav = '';
297+
conf.default = conf.default || {}
298298

299-
items.forEach(function(item) {
300-
if ( !hasOwnProp.call(item, 'longname') ) {
301-
itemsNav += '<li>' + linktoFn('', item.name) + '</li>';
299+
if (items && items.length) {
300+
var itemsNav = ""
301+
302+
nav.push(buildNavHeading(itemHeading))
303+
304+
items.forEach(function (item) {
305+
var methods = find({ kind: "function", memberof: item.longname })
306+
var members = find({ kind: "member", memberof: item.longname })
307+
var displayName
308+
309+
if (!hasOwnProp.call(item, "longname")) {
310+
nav.push(buildNavItem(linkfoFn('', item.name)))
311+
return
302312
}
303-
else if ( !hasOwnProp.call(itemsSeen, item.longname) ) {
304-
var displayName;
305-
if (env.conf.templates.default.useLongnameInNav) {
306-
displayName = item.longname;
313+
314+
if (!hasOwnProp.call(itemsSeen, item.longname)) {
315+
if (!!conf.default.useLongnameInNav) {
316+
displayName = item.longname
317+
318+
if (conf.default.useLongnameInNav > 0 && conf.default.useLongnameInNav !== true) {
319+
var num = conf.default.useLongnameInNav
320+
var cropped = item.longname.split(".").slice(-num).join(".")
321+
if (cropped !== displayName) {
322+
displayName = "..." + cropped
323+
}
324+
}
307325
} else {
308-
displayName = item.name;
326+
displayName = item.name
309327
}
310-
itemsNav += '<li>' + linktoFn(item.longname, displayName.replace(/\b(module|event):/g, '')) + '</li>';
311328

312-
itemsSeen[item.longname] = true;
313-
}
314-
});
329+
displayName = displayName.replace(/^module:/g, "")
315330

316-
if (itemsNav !== '') {
317-
nav += '<h3>' + itemHeading + '</h3><ul>' + itemsNav + '</ul>';
318-
}
331+
if (itemHeading === 'Tutorials') {
332+
nav.push(buildNavItem(linktoFn(item.longname, displayName)))
333+
} else {
334+
nav.push(buildNavHeading(buildNavType(item.kind, linktoFn(item.longname, displayName))))
335+
}
336+
337+
if (methods.length) {
338+
methods.forEach(function (method) {
339+
if (method.inherited && conf.showInheritedInNav === false) {
340+
return
341+
}
342+
343+
nav.push(buildNavItem(buildNavType(method.kind, linkto(method.longname, method.name))))
344+
})
345+
}
346+
347+
itemsSeen[item.longname] = true
348+
}
349+
})
319350
}
320351

321-
return nav;
352+
return nav
322353
}
323354

324355
function linktoTutorial(longName, name) {
@@ -341,43 +372,37 @@ function linktoExternal(longName, name) {
341372
* @param {array<object>} members.tutorials
342373
* @param {array<object>} members.events
343374
* @param {array<object>} members.interfaces
344-
* @return {string} The HTML for the navigation sidebar.
375+
* @return {array} The HTML for the navigation sidebar.
345376
*/
346377
function buildNav(members) {
347-
// var nav = '<h2><a href="index.html">Home</a></h2>';
348-
var nav = '';
349-
var seen = {};
350-
var seenTutorials = {};
351-
352-
nav += buildMemberNav(members.modules, 'Modules', {}, linkto);
353-
nav += buildMemberNav(members.externals, 'Externals', seen, linktoExternal);
354-
nav += buildMemberNav(members.classes, 'Classes', seen, linkto);
355-
nav += buildMemberNav(members.events, 'Events', seen, linkto);
356-
nav += buildMemberNav(members.namespaces, 'Namespaces', seen, linkto);
357-
nav += buildMemberNav(members.mixins, 'Mixins', seen, linkto);
358-
nav += buildMemberNav(members.tutorials, 'Tutorials', seenTutorials, linktoTutorial);
359-
nav += buildMemberNav(members.interfaces, 'Interfaces', seen, linkto);
378+
var nav = []
379+
var seen = {}
380+
var seenTutorials = {}
381+
382+
nav.push(buildNavLink('home', '<a href="index.html">Home</a>'))
383+
384+
nav = nav.concat(buildMemberNav(members.tutorials, "Tutorials", seenTutorials, linktoTutorial))
385+
nav = nav.concat(buildMemberNav(members.classes, "Classes", seen, linkto))
386+
nav = nav.concat(buildMemberNav(members.modules, "Modules", {}, linkto))
387+
nav = nav.concat(buildMemberNav(members.externals, "Externals", seen, linktoExternal))
388+
nav = nav.concat(buildMemberNav(members.events, "Events", seen, linkto))
389+
nav = nav.concat(buildMemberNav(members.namespaces, "Namespaces", seen, linkto))
390+
nav = nav.concat(buildMemberNav(members.mixins, "Mixins", seen, linkto))
391+
nav = nav.concat(buildMemberNav(members.interfaces, "Interfaces", seen, linkto))
360392

361393
if (members.globals.length) {
362-
var globalNav = '';
394+
nav.push(buildNavHeading(linkto('global', 'Globals')))
363395

364-
members.globals.forEach(function(g) {
365-
if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) {
366-
globalNav += '<li>' + linkto(g.longname, g.name) + '</li>';
396+
members.globals.forEach(function (item) {
397+
if (item.kind !== "typedef" && !hasOwnProp.call(seen, item.longname)) {
398+
nav.push(buildNavItem(buildNavType(item.kind, linkto(item.longname, item.name))))
367399
}
368-
seen[g.longname] = true;
369-
});
370400

371-
if (!globalNav) {
372-
// turn the heading into a link so you can actually get to the global page
373-
nav += '<h3>' + linkto('global', 'Global') + '</h3>';
374-
}
375-
else {
376-
nav += '<h3>Global</h3><ul>' + globalNav + '</ul>';
377-
}
401+
seen[item.longname] = true
402+
})
378403
}
379404

380-
return nav;
405+
return nav.join('')
381406
}
382407

383408
/**
@@ -654,3 +679,76 @@ exports.publish = function(taffyData, opts, tutorials) {
654679
}
655680
saveChildren(tutorials);
656681
};
682+
683+
684+
685+
686+
/**
687+
* Helper to generate navigation list link wrapper around navigation links for
688+
* locations.
689+
*
690+
* @param {String} linkClass navigation link classname
691+
* @param {String} linkContent navigation link HTML content
692+
* @return {String}
693+
*/
694+
function buildNavLink(linkClass, linkContent) {
695+
return [
696+
'<li class="nav-link nav-' + linkClass + '-link">',
697+
linkContent,
698+
'</li>'
699+
].join('')
700+
}
701+
702+
function buildNavType (type, typeLink) {
703+
return [
704+
'<span class="nav-item-type type-' + type + '">',
705+
type[0].toUpperCase(),
706+
'</span>',
707+
708+
'<span class="nav-item-name">',
709+
typeLink,
710+
'</span>'
711+
].join('')
712+
}
713+
714+
/**
715+
* Helper to generate navigation list header wrapper around navigation header content
716+
* for headings and filenames.
717+
*
718+
* @param {String} content navigation header content
719+
* @return {String}
720+
*/
721+
function buildNavHeading(content) {
722+
return [
723+
'<li class="nav-heading">',
724+
content,
725+
'</li>'
726+
].join('')
727+
}
728+
729+
/**
730+
* Helper for generating generic navigation wrapper around content passed for
731+
* methods, and types.
732+
*
733+
* @param {String} itemContent navigation item content
734+
* @return {String}
735+
*/
736+
function buildNavItem(itemContent) {
737+
return [
738+
'<li class="nav-item">',
739+
itemContent,
740+
'</li>'
741+
].join('')
742+
}
743+
744+
function buildNavType (type, typeLink) {
745+
return [
746+
'<span class="nav-item-type type-' + type + '">',
747+
type[0].toUpperCase(),
748+
'</span>',
749+
750+
'<span class="nav-item-name">',
751+
typeLink,
752+
'</span>'
753+
].join('')
754+
}

0 commit comments

Comments
 (0)