{"version":3,"sources":["jsdelivr-header.js","/npm/ub-jsdoc-el-dorado@1.0.2/publish.js"],"names":[],"mappings":"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","file":"/npm/ub-jsdoc-el-dorado@1.0.2/publish.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ub-jsdoc-el-dorado@1.0.2/publish.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*global env: true */\n'use strict';\n\nvar doop = require('jsdoc/util/doop');\nvar fs = require('jsdoc/fs');\nvar helper = require('jsdoc/util/templateHelper');\nvar logger = require('jsdoc/util/logger');\nvar path = require('jsdoc/path');\nvar taffy = require('taffydb').taffy;\nvar template = require('jsdoc/template');\nvar util = require('util');\n\nvar htmlsafe = helper.htmlsafe;\nvar linkto = helper.linkto;\nvar resolveAuthorLinks = helper.resolveAuthorLinks;\nvar scopeToPunc = helper.scopeToPunc;\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\nvar data;\nvar view;\n\nvar outdir = path.normalize(env.opts.destination);\n\nfunction find(spec) {\n    return helper.find(data, spec);\n}\n\nfunction tutoriallink(tutorial) {\n    return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' });\n}\n\nfunction getAncestorLinks(doclet) {\n    return helper.getAncestorLinks(data, doclet);\n}\n\nfunction hashToLink(doclet, hash) {\n    if ( !/^(#.+)/.test(hash) ) { return hash; }\n\n    var url = helper.createLink(doclet);\n\n    url = url.replace(/(#.+|$)/, hash);\n    return '<a href=\"' + url + '\">' + hash + '</a>';\n}\n\nfunction needsSignature(doclet) {\n    var needsSig = false;\n\n    // function and class definitions always get a signature\n    if (doclet.kind === 'function' || doclet.kind === 'class') {\n        needsSig = true;\n    }\n    // typedefs that contain functions get a signature, too\n    else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names &&\n        doclet.type.names.length) {\n        for (var i = 0, l = doclet.type.names.length; i < l; i++) {\n            if (doclet.type.names[i].toLowerCase() === 'function') {\n                needsSig = true;\n                break;\n            }\n        }\n    }\n\n    return needsSig;\n}\n\nfunction getSignatureAttributes(item) {\n    var attributes = [];\n\n    if (item.optional) {\n        attributes.push('opt');\n    }\n\n    if (item.nullable === true) {\n        attributes.push('nullable');\n    }\n    else if (item.nullable === false) {\n        attributes.push('non-null');\n    }\n\n    return attributes;\n}\n\nfunction updateItemName(item) {\n    var attributes = getSignatureAttributes(item);\n    var itemName = item.name || '';\n\n    if (item.variable) {\n        itemName = '&hellip;' + itemName;\n    }\n\n    if (attributes && attributes.length) {\n        itemName = util.format( '%s<span class=\"signature-attributes\">%s</span>', itemName,\n            attributes.join(', ') );\n    }\n\n    return itemName;\n}\n\nfunction addParamAttributes(params) {\n    return params.filter(function(param) {\n        return param.name && param.name.indexOf('.') === -1;\n    }).map(updateItemName);\n}\n\nfunction buildItemTypeStrings(item) {\n    var types = [];\n\n    if (item && item.type && item.type.names) {\n        item.type.names.forEach(function(name) {\n            types.push( linkto(name, htmlsafe(name)) );\n        });\n    }\n\n    return types;\n}\n\nfunction buildAttribsString(attribs) {\n    var attribsString = '';\n\n    if (attribs && attribs.length) {\n        attribsString = htmlsafe( util.format('(%s) ', attribs.join(', ')) );\n    }\n\n    return attribsString;\n}\n\nfunction addNonParamAttributes(items) {\n    var types = [];\n\n    items.forEach(function(item) {\n        types = types.concat( buildItemTypeStrings(item) );\n    });\n\n    return types;\n}\n\nfunction addSignatureParams(f) {\n    var params = f.params ? addParamAttributes(f.params) : [];\n    f.signature = util.format( '%s(%s)', (f.signature || ''), params.join(', ') );\n}\n\nfunction addSignatureReturns(f) {\n    var attribs = [];\n    var attribsString = '';\n    var returnTypes = [];\n    var returnTypesString = '';\n\n    // jam all the return-type attributes into an array. this could create odd results (for example,\n    // if there are both nullable and non-nullable return types), but let's assume that most people\n    // who use multiple @return tags aren't using Closure Compiler type annotations, and vice-versa.\n    if (f.returns) {\n        f.returns.forEach(function(item) {\n            helper.getAttribs(item).forEach(function(attrib) {\n                if (attribs.indexOf(attrib) === -1) {\n                    attribs.push(attrib);\n                }\n            });\n        });\n\n        attribsString = buildAttribsString(attribs);\n    }\n\n    if (f.returns) {\n        returnTypes = addNonParamAttributes(f.returns);\n    }\n    if (returnTypes.length) {\n        returnTypesString = util.format( ' &rarr; %s %s', attribsString, returnTypes.join('|') );\n    }\n\n    f.signature = '<span class=\"signature\">' + (f.signature || '') + '</span>' +\n        '<span class=\"type-signature\">' + returnTypesString + '</span>';\n}\n\nfunction addSignatureTypes(f) {\n    var types = f.type ? buildItemTypeStrings(f) : [];\n\n    f.signature = (f.signature || '') + '<span class=\"type-signature\">' +\n        (types.length ? ': ' + types.join('|') : '') + '</span>';\n}\n\nfunction addAttribs(f) {\n    var attribs = helper.getAttribs(f);\n    var attribsString = buildAttribsString(attribs);\n\n    f.attribs = util.format('<span class=\"type-signature\">%s</span>', attribsString);\n    f.attribsRaw = (attribs && attribs.length) ? attribs : [];\n}\n\nfunction shortenPaths(files, commonPrefix) {\n    Object.keys(files).forEach(function(file) {\n        files[file].shortened = files[file].resolved.replace(commonPrefix, '')\n            // always use forward slashes\n            .replace(/\\\\/g, '/');\n    });\n\n    return files;\n}\n\nfunction getPathFromDoclet(doclet) {\n    if (!doclet.meta) {\n        return null;\n    }\n\n    return doclet.meta.path && doclet.meta.path !== 'null' ?\n        path.join(doclet.meta.path, doclet.meta.filename) :\n        doclet.meta.filename;\n}\n\nfunction generate(type, title, docs, filename, resolveLinks) {\n    resolveLinks = resolveLinks === false ? false : true;\n\n    var docData = {\n        type: type,\n        title: title,\n        docs: docs\n    };\n\n    var outpath = path.join(outdir, filename),\n        html = view.render('container.tmpl', docData);\n\n    if (resolveLinks) {\n        html = helper.resolveLinks(html); // turn {@link foo} into <a href=\"foodoc.html\">foo</a>\n    }\n\n    fs.writeFileSync(outpath, html, 'utf8');\n}\n\nfunction generatePartial(type, title, docs, filename, resolveLinks) {\n    resolveLinks = resolveLinks === false ? false : true;\n\n    var docData = {\n        type: type,\n        title: title,\n        docs: docs\n    };\n\n    var originalLayout = view.layout;\n\tview.layout = 'partial_layout.tmpl';\n\tvar outpath = path.join(outdir, 'partials', filename),\n        html = view.render('container.tmpl', docData);\n    view.layout = originalLayout;\n    if (resolveLinks) {\n        html = helper.resolveLinks(html); // turn {@link foo} into <a href=\"foodoc.html\">foo</a>\n    }\n\n    fs.writeFileSync(outpath, html, 'utf8');\n}\n\nfunction generateSourceFiles(sourceFiles, encoding) {\n    encoding = encoding || 'utf8';\n    Object.keys(sourceFiles).forEach(function(file) {\n        var source;\n        // links are keyed to the shortened path in each doclet's `meta.shortpath` property\n        var sourceOutfile = helper.getUniqueFilename(sourceFiles[file].shortened);\n        helper.registerLink(sourceFiles[file].shortened, sourceOutfile);\n\n        try {\n            source = {\n                kind: 'source',\n                code: helper.htmlsafe( fs.readFileSync(sourceFiles[file].resolved, encoding) )\n            };\n        }\n        catch(e) {\n            logger.error('Error while generating source file %s: %s', file, e.message);\n        }\n\n        generate('Source', sourceFiles[file].shortened, [source], sourceOutfile, false);\n    });\n}\n\n/**\n * Look for classes or functions with the same name as modules (which indicates that the module\n * exports only that class or function), then attach the classes or functions to the `module`\n * property of the appropriate module doclets. The name of each class or function is also updated\n * for display purposes. This function mutates the original arrays.\n *\n * @private\n * @param {Array.<module:jsdoc/doclet.Doclet>} doclets - The array of classes and functions to\n * check.\n * @param {Array.<module:jsdoc/doclet.Doclet>} modules - The array of module doclets to search.\n */\nfunction attachModuleSymbols(doclets, modules) {\n    var symbols = {};\n\n    // build a lookup table\n    doclets.forEach(function(symbol) {\n        symbols[symbol.longname] = symbols[symbol.longname] || [];\n        symbols[symbol.longname].push(symbol);\n    });\n\n    return modules.map(function(module) {\n        if (symbols[module.longname]) {\n            module.modules = symbols[module.longname]\n                // Only show symbols that have a description. Make an exception for classes, because\n                // we want to show the constructor-signature heading no matter what.\n                .filter(function(symbol) {\n                    return symbol.description || symbol.kind === 'class';\n                })\n                .map(function(symbol) {\n                    symbol = doop(symbol);\n\n                    if (symbol.kind === 'class' || symbol.kind === 'function') {\n                        symbol.name = symbol.name.replace('module:', '(require(\"') + '\"))';\n                    }\n\n                    return symbol;\n                });\n        }\n    });\n}\n\nfunction idGeneratorFabric(prefix){\n    var id = 1;\n    return function(){\n        return prefix + (id++);\n    }\n}\nvar getNavID = idGeneratorFabric('n');\nvar getFTSid = idGeneratorFabric('f');\n\nvar lunr = require('lunr');\nvar ftsIndex = lunr(function() {\n    this.ref('id');\n    this.field('name', {boost: 5});\n    this.field('description', { boost: 1});\n});\nvar ftsData = {};\n\nfunction addToSearch(member, group){\n    var id = getFTSid();\n    if (group === 'Tutorials'){\n        ftsIndex.add({\n            id: id,\n            name: member.title,\n            description: member.content /* for tutorials */\n        });\n        ftsData[id] = {\n            href: helper.tutorialToUrl(member.name),\n            path: member.title,\n            group: group,\n            name: member.title\n        };\n    } else {\n        ftsIndex.add({\n            id: id,\n            name: member.name,\n            description: member.classdesc || member.description || member.content /* for tutorials */\n        });\n        ftsData[id] = {\n            href: helper.longnameToUrl[member.longname],\n            path: member.longname,\n            group: group,\n            name: member.name\n        };\n    }\n}\n\nvar prepName = (function() {\n\n  var quotes = { '\"': true, \"'\": true };\n  var moduleSpan = ['<span class=\"nav--module-name-part\">', '</span>'];\n\n  function prepName(s) {\n    var name = s;\n    var result;\n    if (quotes[s[0]] && quotes[s[s.length - 1]]) {\n      name = s.slice(1, -1);\n    }\n    var n = name.lastIndexOf('/');\n    if (n > -1) {\n      result = {\n        module: moduleSpan.join(name.slice(0, n + 1)),\n        name: name.slice(n + 1)\n      };\n      // name = moduleSpan.join(name.slice(0, n + 1)) + name.slice(n + 1);\n    } else {\n      result = {\n        module: '',\n        name: name\n      };\n    }\n    // return name;\n    return result;\n  }\n  return prepName;\n})();\n\nfunction buildMemberNav(items, itemHeading, itemsSeen, linktoFn) {\n    var nav = '';\n    var itemsNav = '';\n\n    function addContainer(item){\n        item.nameParts = prepName(item.name);\n        var containerHTML = '<li>', childCount, id;\n        if ( !hasOwnProp.call(item, 'longname') ) {\n            containerHTML +=  linktoFn('', item.name);\n        } else if ( !hasOwnProp.call(itemsSeen, item.longname) ) {\n            itemsSeen[item.longname] = true;\n            if (itemHeading !== 'Tutorials') {\n                var methods = find({kind: 'function', memberof: item.longname});\n                var classes = find({kind: 'class', memberof: item.longname});\n                var members = find({kind: 'member', memberof: item.longname});\n\n                id = getNavID();\n                childCount = methods.length + classes.length + members.length;\n\n                if (childCount) {\n                    containerHTML += '<input type=\"checkbox\" id=\"' + id + '\" checked />';\n                }\n\n                console.log(item.nameParts);\n                // containerHTML += '<label for=\"' + id + '\">' + member.nameParts.module + linktoFn(item.longname, member.nameParts.name, 'member-kind-' + item.kind + (item.deprecated ? ' deprecated' : '')) + '</label>';\n\n\n\n                containerHTML += '<label for=\"' + id + '\">' + item.nameParts.module + linktoFn(item.longname, item.nameParts.name.replace(/^module:/, ''), 'member-kind-' + item.kind + (item.deprecated ? ' deprecated' : '')) + '</label>';\n\n                addToSearch(item, itemHeading);\n                if (childCount) {\n                    containerHTML += '<section>';\n                    containerHTML += generateChildByType(methods);\n                    containerHTML += generateChildByType(members);\n                    for (var cIdx = 0, cLen = classes.length; cIdx < cLen; cIdx++) {\n                        containerHTML += '<ul>' + addContainer(classes[cIdx]) + '</ul>';\n                    }\n                    containerHTML += '</section>'\n                }\n            } else {\n                id = getNavID();\n                childCount = item.children.length;\n                if (childCount) {\n                    containerHTML += '<input type=\"checkbox\" id=\"' + id + '\" checked />';\n                }\n\n                containerHTML += '<label for=\"' + id + '\">' + linktoFn(item.longname, item.name.replace(/^module:/, ''), 'member-kind-' + item.kind + (item.deprecated ? ' deprecated' : '')) + '</label>';\n                addToSearch(item, itemHeading);\n                if (childCount) {\n                    containerHTML += '<section>';\n                    for (var cIdx = 0, cLen = item.children.length; cIdx < cLen; cIdx++) {\n                        containerHTML += '<ul>' + addContainer(item.children[cIdx]) + '</ul>';\n                    }\n                    containerHTML += '</section>'\n                }\n            }\n        }\n        return containerHTML + '</li>';\n    }\n    function generateChildByType(members){\n        var itemsHTML = '';\n        if (members.length) {\n            itemsHTML = \"<ul>\";\n            members.forEach(function (member) {\n                itemsHTML += '<li>';\n                itemsHTML += linktoFn(member.longname, member.name, 'member-kind-' + member.kind + (member.deprecated ? ' deprecated' : ''));\n                itemsHTML += \"</li>\";\n                addToSearch(member, itemHeading);\n            });\n            itemsHTML += \"</ul>\";\n        }\n        return itemsHTML;\n    }\n\n    if (items && items.length) {\n        items.forEach(function(item) {\n            // item.name = prepName(item.name);\n            // item.nameParts = prepName(item.name);\n            itemsNav += addContainer(item);\n        });\n\n        if (itemsNav !== '') {\n            nav += '<h3>' + itemHeading + '</h3><ul>' + itemsNav + '</ul>';\n        }\n    }\n\n    return nav;\n}\n\nfunction linktoTutorial(longName, name) {\n    return tutoriallink(name);\n}\n\nfunction linktoExternal(longName, name) {\n    return linkto(longName, name.replace(/(^\"|\"$)/g, ''));\n}\n\n/**\n * Create the navigation sidebar.\n * @param {object} members The members that will be used to create the sidebar.\n * @param {array<object>} members.classes\n * @param {array<object>} members.externals\n * @param {array<object>} members.globals\n * @param {array<object>} members.mixins\n * @param {array<object>} members.modules\n * @param {array<object>} members.namespaces\n * @param {array<object>} members.tutorials\n * @param {array<object>} members.events\n * @param {array<object>} members.interfaces\n * @return {string} The HTML for the navigation sidebar.\n */\nfunction buildNav(members) {\n    var nav = '<h3><a href=\"index.html\">Home</a></h3>';\n    var seen = {};\n    var seenTutorials = {};\n\n    // the order here is important - we need to parse modules & namespaces before classes\n    // to mark a class as seen\n    nav += buildMemberNav(members.tutorials, 'Tutorials', seenTutorials, linktoTutorial, 'tutorial');\n    nav += buildMemberNav(members.modules, 'Modules', seen, linkto, 'module');\n    nav += buildMemberNav(members.namespaces, 'Namespaces', seen, linkto, 'ns');\n    nav += buildMemberNav(members.classes, 'Classes', seen, linkto, 'class');\n    nav += buildMemberNav(members.interfaces, 'Interfaces', seen, linkto, 'interface');\n    nav += buildMemberNav(members.events, 'Events', seen, linkto, 'event');\n    nav += buildMemberNav(members.mixins, 'Mixins', seen, linkto, 'mixin');\n    nav += buildMemberNav(members.externals, 'Externals', seen, linktoExternal);\n\n    if (members.globals.length) {\n        var globalNav = '';\n\n        members.globals.forEach(function(g) {\n            if ( g.kind !== 'typedef' && !hasOwnProp.call(seen, g.longname) ) {\n                globalNav += '<li class=\"member-kind-' + g.kind + (g.deprecated ? ' deprecated' : '') + '\"><label>' + linkto(g.longname, g.name)  + '</label></li>';\n                addToSearch(g, \"global's\");\n            }\n            seen[g.longname] = true;\n        });\n\n        if (!globalNav) {\n            // turn the heading into a link so you can actually get to the global page\n            nav += '<h3>' + linkto('global', 'Global') + '</h3>';\n        }\n        else {\n            nav += '<h3>Global</h3><ul>' + globalNav + '</ul>';\n        }\n    }\n\n    return nav;\n}\n\n/**\n    @param {TAFFY} taffyData See <http://taffydb.com/>.\n    @param {object} opts\n    @param {Tutorial} tutorials\n */\nexports.publish = function(taffyData, opts, tutorials) {\n    data = taffyData;\n\n    var conf = env.conf.templates || {};\n    conf.default = conf.default || {};\n\n    var templatePath = path.normalize(opts.template);\n    view = new template.Template( path.join(templatePath, 'tmpl') );\n\n    // claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness\n    // doesn't try to hand them out later\n    var indexUrl = helper.getUniqueFilename('index');\n    // don't call registerLink() on this one! 'index' is also a valid longname\n\n    var globalUrl = helper.getUniqueFilename('global');\n    helper.registerLink('global', globalUrl);\n\n    // set up templating\n    view.layout = conf.default.layoutFile ?\n        path.getResourcePath(path.dirname(conf.default.layoutFile),\n            path.basename(conf.default.layoutFile) ) :\n        'layout.tmpl';\n\n    // set up tutorials for helper\n    helper.setTutorials(tutorials);\n\n    data = helper.prune(data);\n    //data.sort('longname, version, since');\n    helper.addEventListeners(data);\n\n    var sourceFiles = {};\n    var sourceFilePaths = [];\n    data().each(function(doclet) {\n         doclet.attribs = '';\n\n        if (doclet.examples) {\n            doclet.examples = doclet.examples.map(function(example) {\n                var caption, code;\n\n                if (example.match(/^\\s*<caption>([\\s\\S]+?)<\\/caption>(\\s*[\\n\\r])([\\s\\S]+)$/i)) {\n                    caption = RegExp.$1;\n                    code = RegExp.$3;\n                }\n\n                return {\n                    caption: caption || '',\n                    code: code || example\n                };\n            });\n        }\n        if (doclet.see) {\n            doclet.see.forEach(function(seeItem, i) {\n                doclet.see[i] = hashToLink(doclet, seeItem);\n            });\n        }\n\n        // build a list of source files\n        var sourcePath;\n        if (doclet.meta) {\n            sourcePath = getPathFromDoclet(doclet);\n            sourceFiles[sourcePath] = {\n                resolved: sourcePath,\n                shortened: null\n            };\n            if (sourceFilePaths.indexOf(sourcePath) === -1) {\n                sourceFilePaths.push(sourcePath);\n            }\n        }\n    });\n\n    // update outdir if necessary, then create outdir\n    var packageInfo = ( find({kind: 'package'}) || [] ) [0];\n    if (packageInfo && packageInfo.name) {\n        outdir = path.join( outdir, packageInfo.name, (packageInfo.version || '') );\n    }\n    fs.mkPath(outdir);\n\tfs.mkPath(path.join(outdir, 'partials'));\n\n    // copy the template's static files to outdir\n    var fromDir = path.join(templatePath, 'static');\n    var staticFiles = fs.ls(fromDir, 3);\n\n    staticFiles.forEach(function(fileName) {\n        var toDir = fs.toDir( fileName.replace(fromDir, outdir) );\n        fs.mkPath(toDir);\n        fs.copyFileSync(fileName, toDir);\n    });\n\n    // copy user-specified static files to outdir\n    var staticFilePaths;\n    var staticFileFilter;\n    var staticFileScanner;\n    if (conf.default.staticFiles) {\n        // The canonical property name is `include`. We accept `paths` for backwards compatibility\n        // with a bug in JSDoc 3.2.x.\n        staticFilePaths = conf.default.staticFiles.include ||\n            conf.default.staticFiles.paths ||\n            [];\n        staticFileFilter = new (require('jsdoc/src/filter')).Filter(conf.default.staticFiles);\n        staticFileScanner = new (require('jsdoc/src/scanner')).Scanner();\n\n        staticFilePaths.forEach(function(filePath) {\n            var extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter);\n\n            extraStaticFiles.forEach(function(fileName) {\n                var sourcePath = fs.toDir(filePath);\n                var toDir = fs.toDir( fileName.replace(sourcePath, outdir) );\n                fs.mkPath(toDir);\n                fs.copyFileSync(fileName, toDir);\n            });\n        });\n    }\n\n    if (sourceFilePaths.length) {\n        sourceFiles = shortenPaths( sourceFiles, path.commonPrefix(sourceFilePaths) );\n    }\n    data().each(function(doclet) {\n        var url = helper.createLink(doclet);\n        helper.registerLink(doclet.longname, url);\n\n        // add a shortened version of the full path\n        var docletPath;\n        if (doclet.meta) {\n            docletPath = getPathFromDoclet(doclet);\n            docletPath = sourceFiles[docletPath].shortened;\n            if (docletPath) {\n                doclet.meta.shortpath = docletPath;\n            }\n        }\n    });\n\n    data().each(function(doclet) {\n        var url = helper.longnameToUrl[doclet.longname];\n\n        if (url.indexOf('#') > -1) {\n            doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop();\n        }\n        else {\n            doclet.id = doclet.name;\n        }\n\n        if ( needsSignature(doclet) ) {\n            addSignatureParams(doclet);\n            addSignatureReturns(doclet);\n            addAttribs(doclet);\n        }\n    });\n\n    // do this after the urls have all been generated\n    data().each(function(doclet) {\n        doclet.ancestors = getAncestorLinks(doclet);\n\n        if (doclet.kind === 'member') {\n            addSignatureTypes(doclet);\n            addAttribs(doclet);\n        }\n\n        if (doclet.kind === 'constant') {\n            addSignatureTypes(doclet);\n            addAttribs(doclet);\n            doclet.kind = 'member';\n        }\n    });\n\n    var members = helper.getMembers(data);\n    // sort a top-level tutorials by it's name\n    if (tutorials.children.length) {\n        tutorials.children.sort(function(a, b){ return a.title > b.title ? 1 : (a.title < b.title ? -1 : 0)});\n    }\n    members.tutorials = tutorials.children;\n\n    // output pretty-printed source files by default\n    var outputSourceFiles = conf.default && conf.default.outputSourceFiles !== false\n        ? true\n        : false;\n\n    // add template helpers\n    view.find = find;\n    view.linkto = linkto;\n    view.resolveAuthorLinks = resolveAuthorLinks;\n    view.tutoriallink = tutoriallink;\n    view.htmlsafe = htmlsafe;\n    view.outputSourceFiles = outputSourceFiles;\n    // allow to analyse config in templates\n    view.conf = conf;\n\n    attachModuleSymbols( find({ longname: {left: 'module:'} }), members.modules );\n\n    // generate the pretty-printed source files first so other pages can link to them\n    if (outputSourceFiles) {\n        generateSourceFiles(sourceFiles, opts.encoding);\n    }\n\n    view.nav = buildNav(members);\n    //save constructed FTS data\n    var ftsPath = path.join(outdir, 'ftsIndex.json');\n    fs.writeFileSync(ftsPath, JSON.stringify(ftsIndex));\n    ftsPath = path.join(outdir, 'ftsData.json');\n    fs.writeFileSync(ftsPath, JSON.stringify(ftsData));\n\n    // index page displays information from package.json and lists files\n    var files = find({kind: 'file'});\n    var packages = find({kind: 'package'});\n\n    generate('', 'Home',\n        packages.concat(\n            [{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]\n        ).concat(files),\n        indexUrl);\n    generatePartial('', 'Home',\n        packages.concat(\n            [{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]\n        ).concat(files),\n        indexUrl);\n\n    if (members.globals.length) {\n        generate('', 'Global', [{kind: 'globalobj'}], globalUrl);\n\t    generatePartial('', 'Global', [{kind: 'globalobj'}], globalUrl);\n    }\n\n    // set up the lists that we'll use to generate pages\n    var classes = taffy(members.classes);\n    var modules = taffy(members.modules);\n    var namespaces = taffy(members.namespaces);\n    var mixins = taffy(members.mixins);\n    var externals = taffy(members.externals);\n    var interfaces = taffy(members.interfaces);\n\n    Object.keys(helper.longnameToUrl).forEach(function(longname) {\n        var myModules = helper.find(modules, {longname: longname});\n        if (myModules.length) {\n            generate('Module', myModules[0].name, myModules, helper.longnameToUrl[longname]);\n\t\t\tgeneratePartial('Module', myModules[0].name, myModules, helper.longnameToUrl[longname]);\n        }\n\n        var myClasses = helper.find(classes, {longname: longname});\n        if (myClasses.length) {\n            generate('Class', myClasses[0].name, myClasses, helper.longnameToUrl[longname]);\n\t\t\tgeneratePartial('Class', myClasses[0].name, myClasses, helper.longnameToUrl[longname]);\n        }\n\n        var myNamespaces = helper.find(namespaces, {longname: longname});\n        if (myNamespaces.length) {\n            generate('Namespace', myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);\n\t\t\tgeneratePartial('Namespace', myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]);\n        }\n\n        var myMixins = helper.find(mixins, {longname: longname});\n        if (myMixins.length) {\n            generate('Mixin', myMixins[0].name, myMixins, helper.longnameToUrl[longname]);\n\t\t\tgeneratePartial('Mixin', myMixins[0].name, myMixins, helper.longnameToUrl[longname]);\n        }\n\n        var myExternals = helper.find(externals, {longname: longname});\n        if (myExternals.length) {\n            generate('External', myExternals[0].name, myExternals, helper.longnameToUrl[longname]);\n\t\t\tgeneratePartial('External', myExternals[0].name, myExternals, helper.longnameToUrl[longname]);\n        }\n\n        var myInterfaces = helper.find(interfaces, {longname: longname});\n        if (myInterfaces.length) {\n            generate('Interface', myInterfaces[0].name, myInterfaces, helper.longnameToUrl[longname]);\n\t\t\tgeneratePartial('Interface', myInterfaces[0].name, myInterfaces, helper.longnameToUrl[longname]);\n        }\n    });\n\n    // TODO: move the tutorial functions to templateHelper.js\n    function generateTutorial(title, tutorial, filename) {\n        var parsedTutorial = tutorial.parse();\n        var tutorialData = {\n            title: title,\n            header: tutorial.title,\n            content: parsedTutorial,\n            children: tutorial.children\n        };\n\n        var tutorialPath = path.join(outdir, filename);\n        var html = view.render('tutorial.tmpl', tutorialData);\n\n        // yes, you can use {@link} in tutorials too!\n        html = helper.resolveLinks(html); // turn {@link foo} into <a href=\"foodoc.html\">foo</a>\n        fs.writeFileSync(tutorialPath, html, 'utf8');\n\n        // generate a partial\n        var originalLayout = view.layout;\n        view.layout = 'partial_layout.tmpl';\n        tutorialPath = path.join(outdir, 'partials', filename);\n        // view.render mutate a tutorialData.content :(\n        tutorialData.content = parsedTutorial;\n        html = view.render('tutorial.tmpl', tutorialData);\n        html = helper.resolveLinks(html); // turn {@link foo} into <a href=\"foodoc.html\">foo</a>\n        view.layout = originalLayout;\n        fs.writeFileSync(tutorialPath, html, 'utf8');\n    }\n\n    // tutorials can have only one parent so there is no risk for loops\n    function saveChildren(node) {\n        node.children.forEach(function(child) {\n            generateTutorial('Tutorial: ' + child.title, child, helper.tutorialToUrl(child.name));\n            saveChildren(child);\n        });\n    }\n\n    saveChildren(tutorials);\n\n};\n"]}