knsv/mermaid

View on GitHub
packages/mermaid-example-diagram/src/exampleDiagramRenderer.js

Summary

Maintainability
B
4 hrs
Test Coverage
/** Created by knut on 14-12-11. */
import { select } from 'd3';
import { log, getConfig, setupGraphViewbox } from './mermaidUtils.js';

/**
 * Draws a an info picture in the tag with id: id based on the graph definition in text.
 *
 * @param {any} text
 * @param {any} id
 * @param {any} version
 */
export const draw = (text, id, version) => {
  try {
    const conf = getConfig();
    log.debug('Rendering example diagram\n' + text, 'Conf: ');
    const THEME_COLOR_LIMIT = getConfig().themeVariables.THEME_COLOR_LIMIT;
    const securityLevel = getConfig().securityLevel;
    // Handle root and Document for when rendering in sandbox mode
    let sandboxElement;
    if (securityLevel === 'sandbox') {
      sandboxElement = select('#i' + id);
    }
    const root =
      securityLevel === 'sandbox'
        ? select(sandboxElement.nodes()[0].contentDocument.body)
        : select('body');

    const svg = root.select('#' + id);

    const g = svg.append('g');

    let i;
    for (i = 0; i < THEME_COLOR_LIMIT; i++) {
      const section = g.append('g').attr('class', 'section-' + i);
      section
        .append('rect')
        .attr('x', (i % 5) * 110)
        .attr('y', Math.floor(i / 5) * 90 + 60)
        .attr('width', 100)
        .attr('height', 60);
      section
        .append('rect')
        .attr('x', (i % 5) * 110)
        .attr('y', Math.floor(i / 5) * 90 + 120)
        .attr('class', 'inverted')
        .attr('width', 100)
        .attr('height', 20);
      section
        .append('text', 'section-' + i)
        .text('Section ' + i)
        .attr('x', (i % 5) * 110 + 15)
        .attr('y', Math.floor(i / 5) * 90 + 95)
        .attr('class', 'section-text-' + i);
    }

    g.append('text') // text label for the x axis
      .attr('x', 100)
      .attr('y', 40)
      .attr('class', 'version')
      .attr('font-size', '32px')
      .style('text-anchor', 'middle')
      .text('v ' + version);

    // Setup the view box and size of the svg element
    setupGraphViewbox(undefined, svg, conf.mindmap.padding, conf.mindmap.useMaxWidth);
  } catch (e) {
    log.error('Error while rendering info diagram');
    log.error(e.message);
  }
};

export default {
  draw,
};