Home Manual Reference Source Test Repository

src/Publisher/Builder/SingleDocBuilder.js

import IceCap from 'ice-cap';
import DocBuilder from './DocBuilder.js';

/**
 * Single output builder class.
 * "single" means function, variable, typedef, external, etc...
 */
export default class SingleDocBuilder extends DocBuilder {
  /**
   * execute building output.
   * @param {function(html: string, filePath: string)} callback - is called with output.
   */
  exec(callback) {
    let ice = this._buildLayoutDoc();
    ice.autoClose = false;

    let kinds = ['function', 'variable', 'typedef'];
    for (let kind of kinds) {
      let docs = this._find({kind: kind});
      if (!docs.length) continue;
      let fileName = this._getOutputFileName(docs[0]);
      let baseUrl = this._getBaseUrl(fileName);
      let title = kind.replace(/^(\w)/, (c)=> c.toUpperCase() );
      title = this._getTitle(title);

      ice.load('content', this._buildSingleDoc(kind), IceCap.MODE_WRITE);
      ice.attr('baseUrl', 'href', baseUrl, IceCap.MODE_WRITE);
      ice.text('title', title, IceCap.MODE_WRITE);
      callback(ice.html, fileName);
    }
  }

  /**
   * build single output.
   * @param {string} kind - target kind property.
   * @returns {string} html of single output
   * @private
   */
  _buildSingleDoc(kind) {
    let title = kind.replace(/^(\w)/, (c)=> c.toUpperCase() );
    let ice = new IceCap(this._readTemplate('single.html'));
    ice.text('title', title);
    ice.load('summaries', this._buildSummaryHTML(null, kind, 'Summary'), 'append');
    ice.load('details', this._buildDetailHTML(null, kind, ''));
    return ice.html;
  }
}