- /*==============================================================================
- Demo template, showing how documentation can be generated for `vis.js`.
-
- ------------------------------------------------------------------------------
- ## Notes on `jsdoc` code
-
- // claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
- // doesn't try to hand them out later
- indexUrl = helper.getUniqueFilename('index');
- // don't call registerLink() on this one! 'index' is also a valid longname
-
- globalUrl = helper.getUniqueFilename('global');
- helper.registerLink('global', globalUrl);
-
- ============================================================================== */
- 'use strict';
- //var taffy = require('taffydb').taffy; // not really required here, left for reference
-
- // Internal modules of `jsdoc` are available here.
- // This is not the complete list, there may be more useful stuff in jsdoc
- // For all modules scan in: '/usr/lib/node_modules/jsdoc/lib/jsdoc/' (or similar on your system)
- var fs = require('jsdoc/fs');
- var path = require('jsdoc/path');
- var template = require('jsdoc/template');
-
-
- /**
- * Set up the template rendering engine.
- */
- function createRenderer(fromDir, data) {
- var renderer = new template.Template(fromDir); // Param is the template source directory.
- // All template files are relative to this directory!
- /**
- * Example helper method
- *
- * This can be called from within a template as follows:
- *
- * ```
- * <?js
- * var self = this;
- * ?>
- * ...
- * <?js= self.helper('hello!') ?>
- * ```
- *
- * /
- renderer.helper = function(val) {
- return 'this is a helper! ' + val;
- };
- */
-
- /**
- * Retrieves jsdoc info for the passed instance method.
- */
- renderer.getComment = function(methodName) {
- var tmp = data().filter({longname: methodName}).get()[0];
-
- if (tmp === undefined) {
- throw new Error('Could not find jsdoc for: ' + methodName);
- }
-
- // NOTE: Following does not show up with `gulp docs`, need to do call directly
- // console.log(JSON.stringify(tmp, null, 2));
-
- // Some restructuring, to adapt it to the docs layout
- // This needs some work to make it handle 0 and > 1 parameters
- var paramText = "";
- if (tmp.params !== undefined && tmp.params.length > 0) {
- let param = tmp.params[0];
- let tmpText = param.type.names.join('|') + ' ' + param.name;
- if (param.optional === true) {
- tmpText = '[' + tmpText + ']';
- }
- paramText = '<code>' + tmpText + '</code>';
- }
- var prototype = tmp.name + '(' + paramText + ')';
-
- var returns = 'none';
- if (tmp.returns !== undefined && tmp.returns.length > 0) {
- let name = tmp.returns[0].type.names[0];
- if (name !== "undefined") {
- returns = name;
- }
- }
-
- return {
- name: tmp.name,
- prototype: prototype,
- returns: returns,
- description: tmp.description
- }
- };
-
- return renderer;
- }
-
-
- /**
- Entry point for the template.
-
- This is called from `jsdoc` during execution
-
- @param {TAFFY} taffyData See <http://taffydb.com/>.
- @param {object} opts
- @param {Tutorial} tutorials
- */
- exports.publish = function(taffyData, opts, tutorials) {
- //console.log(JSON.stringify(opts, null, 2));
-
- var fromDir = path.resolve(opts.template);
- var toDir = path.join(opts.destination);
- var renderer = createRenderer(fromDir, taffyData);
-
- var docFiles = fs.ls(fromDir, 3);
- docFiles.forEach(function(fileName) {
- // Template filenames need to be relative to template source dir
- var relName = path.relative(fromDir, fileName);
- var outFile = path.join(toDir, relName);
-
- if (/publish.js$/.test(fileName)) return; // Skip self
- if (/README.md$/.test(fileName)) return; // Skip own README
- if (/\.tmpl$/.test(fileName)) return; // Skip .tmpl files; these are used as partials only
-
- if (!/\.html$/.test(fileName)) {
- // Just plain copy over non-html files
- var tmpDir = fs.toDir(outFile);
- fs.mkPath(tmpDir);
- fs.copyFileSync(fileName, tmpDir);
- return;
- }
-
- // Render html files as templates
- //console.log(relName);
- var html = renderer.partial(relName, {});
- fs.mkPath(fs.toDir(outFile));
- fs.writeFileSync(outFile, html, 'utf8');
- });
-
- //console.log(JSON.stringify(env, null, 2));
- };
|