diff --git a/publish.js b/publish.js index 2ca79b1..a22e81e 100644 --- a/publish.js +++ b/publish.js @@ -1,5 +1,4 @@ 'use strict' - var doop = require('jsdoc/util/doop') var env = require('jsdoc/env') var fs = require('jsdoc/fs') @@ -12,6 +11,7 @@ var util = require('util') const { getParser } = require('jsdoc/util/markdown') var bundler = require('./bundler') +const { exit } = require('process') const markdownParser = getParser() var htmlsafe = helper.htmlsafe @@ -240,6 +240,7 @@ function generate(title, subtitle, docs, filename, resolveLinks) { } outpath = path.join(outdir, filename) + html = view.render('container.tmpl', docData) if (resolveLinks) { @@ -261,6 +262,7 @@ function generateSourceFiles(sourceFiles, encoding) { try { source = { kind: 'source', + file: sourceFiles[file].shortened, code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, encoding) ) } } @@ -318,6 +320,7 @@ function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) { const subCategories = items.reduce((memo, item) => { const subCategory = item.subCategory || '' memo[subCategory] = memo[subCategory] || [] + // console.log(memo[subCategory]) return { ...memo, [subCategory]: [...memo[subCategory], item] @@ -327,7 +330,7 @@ function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) { const subCategoryNames = Object.keys(subCategories) var nav = '' - + // console.log(items, itemHeading, itemsSeen, linktoFn) subCategoryNames.forEach((subCategoryName) => { const subCategoryItems = subCategories[subCategoryName] if (subCategoryItems.length) { @@ -335,9 +338,11 @@ function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) { subCategoryItems.forEach(function(item) { var displayName + + var filename = item.filename if ( !hasOwnProp.call(item, 'longname') ) { - itemsNav += '
  • ' + linktoFn('', item.name) + '
  • ' + itemsNav += '' } else if ( !hasOwnProp.call(itemsSeen, item.longname) ) { if (env.conf.templates.default.useLongnameInNav) { @@ -345,7 +350,8 @@ function buildMemberNav(items, itemHeading, itemsSeen, linktoFn) { } else { displayName = item.name } - itemsNav += '
  • ' + linktoFn(item.longname, displayName.replace(/\b(module|event):/g, '')) + + itemsNav += '
  • ' + linkto(g.longname, g.name) + '
  • ' - } - seen[g.longname] = true - }) + - if (!globalNav) { - // turn the heading into a link so you can actually get to the global page - nav += '

    ' + linkto('global', 'Global') + '

    ' - } - else { - nav += '

    Global

    ' + if (members.globals && members.globals.length) { + globalNav = '' + + members.globals.forEach(function(g) { + var filename = g.filename + if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) { + globalNav += '' + } + seen[g.longname] = true + }) + + if (!globalNav) { + // turn the heading into a link so you can actually get to the global page + nav += '

    ' + linkto('global', 'Global') + '

    ' + } + else { + nav += '

    Global

    ' + globalNav + } } - } + nav += '' nav += '' return nav } @@ -445,37 +476,164 @@ function buildGroupNav (members, title) { */ function buildNav(members, navTypes = null, betterDocs) { const href = betterDocs.landing ? 'docs.html' : 'index.html' - var nav = navTypes ? '' : `

    Documentation

    ` + var nav = navTypes ? '' : '' + // var nav = navTypes ? '' : `

    Documentation

    ` - var categorised = {} + var fileCategories = {} + var categories = {} var rootScope = {} + // var experiment = { } + var types = navTypes || ['modules', 'externals', 'namespaces', 'classes', 'components', 'interfaces', 'events', 'mixins', 'globals'] types.forEach(function(type) { if (!members[type]) { return } members[type].forEach(function(element) { + if (element.access && element.access === 'private') { return } - if (element.category) { - if (!categorised[element.category]){ categorised[element.category] = [] } - if (!categorised[element.category][type]){ categorised[element.category][type] = [] } - categorised[element.category][type].push(element) + + // if (element.category) { + // if (!categorised[element.category]){ categorised[element.category] = [] } + // if (!categorised[element.category][type]){ categorised[element.category][type] = [] } + // categorised[element.category][type].push(element) + // } else { + // rootScope[type] ? rootScope[type].push(element) : rootScope[type] = [element] + // } + + if(element.shortFilename) { + if (!fileCategories[element.shortFilename]){ fileCategories[element.shortFilename] = [] } + if (!fileCategories[element.shortFilename][type]){ fileCategories[element.shortFilename][type] = [] } + fileCategories[element.shortFilename][type].push(element) } else { rootScope[type] ? rootScope[type].push(element) : rootScope[type] = [element] } + + if(element.category) { + if (!categories[element.category]){ categories[element.category] = [] } + if (!categories[element.category][type]){ categories[element.category][type] = [] } + categories[element.category][type].push(element) + } + + // if (element.category) { + // if (!categorised[element.category]){ categorised[element.category] = [] } + // if (!categorised[element.category][type]){ categorised[element.category][type] = [] } + // categorised[element.category][type].push(element) + // } else { + // rootScope[type] ? rootScope[type].push(element) : rootScope[type] = [element] + // } + + // { + // "demo.js" : { + // "class" : [] + // } + // } + // { + // "root" : { + // "demo.js" : { + // "class" : [] + // } + // "core" : { + // "demo2.js" : { + // "class" : [] + // } + // } + // } + // } + + // // Build file path + // if(element.filename) { + // var spiltedStr = element.filename.split('/'); + // if(Array.isArray(spiltedStr)) { + // // Is in files. + // if(spiltedStr.length > 1) { + // for(let i = 0; i < spiltedStr.length; i++) { + + // if (!experiment[spiltedStr[i]]){ experiment[spiltedStr[i]] = [] } + + // } + // spiltedStr.forEach(function(path) { + + // if (!experiment[element.path]){ experiment[element.path] = [] } + + + // if (!experiment[element.fileName][type]){ experiment[element.fileName][type] = [] } + // experiment[element.fileName][type].push(element) + + // }) + // } + + // } + + // } + }) }) + + Object.keys(categories).length + + // nav += '

    Total files '+ Object.keys(categories).length+' documented

    ' + + nav += '

    Files

    ' + + if(Object.keys(categories).length > 0) { + nav += '

    Categories

    ' + } + + nav += '
    ' + + nav += '
    ' + + + // Object.keys(categorised).sort().forEach(function (category) { + // nav += buildGroupNav(categorised[category], category) + // }) + + Object.keys(fileCategories).sort().forEach(function (category) { - nav += buildGroupNav(rootScope) - Object.keys(categorised).sort().forEach(function (category) { - nav += buildGroupNav(categorised[category], category) + nav += buildGroupNav(fileCategories[category], category) + }) + nav += buildGroupNav(rootScope, 'Unlisted') + + nav += '
    ' + + Object.keys(categories).sort().forEach(function (category) { + nav += '
    ' + + nav += buildGroupNav(categories[category], category) + + nav += '
    ' + + }) + + return nav } +function addFilename (f, filename) { + f.filename = filename + + // var types = f.type ? buildItemTypeStrings(f) : [] + + // f.signature = (f.signature || '') + '' + + // (types.length ? ' :' + types.join('|') : '') + '' + +} + +function addShortFilename (f, filename) { + f.shortFilename = filename + + // var types = f.type ? buildItemTypeStrings(f) : [] + + // f.signature = (f.signature || '') + '' + + // (types.length ? ' :' + types.join('|') : '') + '' + +} + /** @param {TAFFY} taffyData See . @param {object} opts @@ -557,6 +715,7 @@ exports.publish = function(taffyData, opts, tutorials) { } }) } + if (doclet.see) { doclet.see.forEach(function(seeItem, i) { doclet.see[i] = hashToLink(doclet, seeItem) @@ -654,6 +813,15 @@ exports.publish = function(taffyData, opts, tutorials) { addSignatureReturns(doclet) addAttribs(doclet) } + if(doclet.meta) { + var filename = getPathFromDoclet(doclet) + + filename = sourceFiles[filename].shortened + var shortFilename = doclet.meta.filename + addFilename(doclet, filename) + addShortFilename(doclet, shortFilename) + } + }) // do this after the urls have all been generated @@ -675,6 +843,7 @@ exports.publish = function(taffyData, opts, tutorials) { view.smallHeader = !conf.betterDocs.navButtons members = helper.getMembers(data) + if (opts.tutorials) { // sort tutorials try { @@ -688,7 +857,6 @@ exports.publish = function(taffyData, opts, tutorials) { } members.tutorials = tutorials.children } - } else { members.tutorials = tutorials.children } @@ -707,8 +875,8 @@ exports.publish = function(taffyData, opts, tutorials) { view.tutoriallink = tutoriallink; view.htmlsafe = htmlsafe view.outputSourceFiles = outputSourceFiles - // once for all + // console.log(members) view.nav = buildNav(members, null, conf.betterDocs) view.tutorialsNav = buildNav(members, ['tutorials'], conf.betterDocs)