Handle legacy state diagram and start using Generic diagram in mermaidAPI

This commit is contained in:
Knut Sveidqvist
2022-07-04 22:55:11 +02:00
parent 408c08d2a3
commit 0d4b09a0a0
4 changed files with 20 additions and 79 deletions

View File

@@ -199,7 +199,7 @@ stateDiagram
end end
end end
B ->> A: Return</div> B ->> A: Return</div>
<div class="mermaid" style="width: 100%;"> <div class="mermaid2" style="width: 100%;">
classDiagram classDiagram
accTitle: My class diagram accTitle: My class diagram
accDescr: My class diagram Description accDescr: My class diagram Description
@@ -217,7 +217,7 @@ class Class10 {
size() size()
} }
</div> </div>
<div class="mermaid2" style="width: 100%;"> <div class="mermaid" style="width: 100%;">
stateDiagram stateDiagram
accTitle: Apa accTitle: Apa
accDescr: One that can climb better then any man accDescr: One that can climb better then any man
@@ -298,6 +298,7 @@ class Class10 {
state: { state: {
nodeSpacing: 50, nodeSpacing: 50,
rankSpacing: 50, rankSpacing: 50,
defaultRenderer: 'dagre-d3',
}, },
logLevel: 0, logLevel: 0,
fontSize: 18, fontSize: 18,

View File

@@ -57,6 +57,7 @@ class Diagram {
this.parser.parser.yy = c4Db; this.parser.parser.yy = c4Db;
this.db = c4Db; this.db = c4Db;
this.renderer = c4Renderer; this.renderer = c4Renderer;
this.renderer.setConf(cnf.c4);
break; break;
case 'gitGraph': case 'gitGraph':
this.parser = gitGraphParser; this.parser = gitGraphParser;
@@ -100,15 +101,16 @@ class Diagram {
this.db = sequenceDb; this.db = sequenceDb;
this.db.setWrap(cnf.wrap); this.db.setWrap(cnf.wrap);
this.renderer = sequenceRenderer; this.renderer = sequenceRenderer;
this.renderer.setConf(cnf.sequence);
this.txt = this.txt + '\n'; this.txt = this.txt + '\n';
break; break;
case 'gantt': case 'gantt':
cnf.gantt.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; cnf.gantt.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
ganttRenderer.setConf(cnf.gantt);
this.parser = ganttParser; this.parser = ganttParser;
this.parser.parser.yy = ganttDb; this.parser.parser.yy = ganttDb;
this.db = ganttDb; this.db = ganttDb;
this.renderer = ganttRenderer; this.renderer = ganttRenderer;
ganttRenderer.setConf(cnf.gantt);
break; break;
case 'class': case 'class':
cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute; cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;

View File

@@ -2,17 +2,12 @@ import { select } from 'd3';
import dagre from 'dagre'; import dagre from 'dagre';
import graphlib from 'graphlib'; import graphlib from 'graphlib';
import { log } from '../../logger'; import { log } from '../../logger';
import stateDb from './stateDb';
import common from '../common/common'; import common from '../common/common';
import { parser } from './parser/stateDiagram';
// import idCache from './id-cache';
import { drawState, addTitleAndBox, drawEdge } from './shapes'; import { drawState, addTitleAndBox, drawEdge } from './shapes';
import { getConfig } from '../../config'; import { getConfig } from '../../config';
import { configureSvgSize } from '../../utils'; import { configureSvgSize } from '../../utils';
import addSVGAccessibilityFields from '../../accessibility'; import addSVGAccessibilityFields from '../../accessibility';
parser.yy = stateDb;
// TODO Move conf object to main conf in mermaidAPI // TODO Move conf object to main conf in mermaidAPI
let conf; let conf;
@@ -44,8 +39,10 @@ const insertMarkers = function (elem) {
* *
* @param {any} text * @param {any} text
* @param {any} id * @param {any} id
* @param _version
* @param diagObj
*/ */
export const draw = function (text, id) { export const draw = function (text, id, _version, diagObj) {
conf = getConfig().state; conf = getConfig().state;
const securityLevel = getConfig().securityLevel; const securityLevel = getConfig().securityLevel;
// Handle root and Document for when rendering in sanbox mode // Handle root and Document for when rendering in sanbox mode
@@ -59,8 +56,8 @@ export const draw = function (text, id) {
: select('body'); : select('body');
const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document; const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;
parser.yy.clear(); // diagObj.db.clear();
parser.parse(text); // parser.parse(text);
log.debug('Rendering diagram ' + text); log.debug('Rendering diagram ' + text);
// Fetch the default direction, use TD if none was found // Fetch the default direction, use TD if none was found
@@ -81,8 +78,8 @@ export const draw = function (text, id) {
return {}; return {};
}); });
const rootDoc = stateDb.getRootDoc(); const rootDoc = diagObj.db.getRootDoc();
renderDoc(rootDoc, diagram, undefined, false, root, doc); renderDoc(rootDoc, diagram, undefined, false, root, doc, diagObj);
const padding = conf.padding; const padding = conf.padding;
const bounds = diagram.node().getBBox(); const bounds = diagram.node().getBBox();
@@ -98,13 +95,13 @@ export const draw = function (text, id) {
'viewBox', 'viewBox',
`${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + ' ' + height `${bounds.x - conf.padding} ${bounds.y - conf.padding} ` + width + ' ' + height
); );
addSVGAccessibilityFields(parser.yy, diagram, id); addSVGAccessibilityFields(diagObj.db, diagram, id);
}; };
const getLabelWidth = (text) => { const getLabelWidth = (text) => {
return text ? text.length * conf.fontSizeFactor : 1; return text ? text.length * conf.fontSizeFactor : 1;
}; };
const renderDoc = (doc, diagram, parentId, altBkg, root, domDocument) => { const renderDoc = (doc, diagram, parentId, altBkg, root, domDocument, diagObj) => {
// Layout graph, Create a new directed graph // Layout graph, Create a new directed graph
const graph = new graphlib.Graph({ const graph = new graphlib.Graph({
compound: true, compound: true,
@@ -155,9 +152,9 @@ const renderDoc = (doc, diagram, parentId, altBkg, root, domDocument) => {
return {}; return {};
}); });
stateDb.extract(doc); diagObj.db.extract(doc);
const states = stateDb.getStates(); const states = diagObj.db.getStates();
const relations = stateDb.getRelations(); const relations = diagObj.db.getRelations();
const keys = Object.keys(states); const keys = Object.keys(states);
@@ -173,7 +170,7 @@ const renderDoc = (doc, diagram, parentId, altBkg, root, domDocument) => {
let node; let node;
if (stateDef.doc) { if (stateDef.doc) {
let sub = diagram.append('g').attr('id', stateDef.id).attr('class', 'stateGroup'); let sub = diagram.append('g').attr('id', stateDef.id).attr('class', 'stateGroup');
node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument); node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj);
if (first) { if (first) {
// first = false; // first = false;

View File

@@ -360,66 +360,7 @@ const render = function (id, _txt, cb, container) {
svg.insertBefore(style1, firstChild); svg.insertBefore(style1, firstChild);
try { try {
switch (graphType) {
case 'c4':
diag.renderer.setConf(cnf.c4);
diag.renderer.draw(txt, id, pkg.version, diag); diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'gitGraph':
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'flowchart':
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'flowchart-v2':
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'sequence':
diag.renderer.setConf(cnf.sequence);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'gantt':
diag.renderer.setConf(cnf.gantt);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'class':
// classRenderer.setConf(cnf.class);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'classDiagram':
// classRendererV2.setConf(cnf.class);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'state':
// stateRenderer.setConf(cnf.state);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'stateDiagram':
// cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
// diag.renderer.setConf(cnf.state);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'info':
// cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
// infoRenderer.setConf(cnf.class);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'pie':
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'er':
// erRenderer.setConf(cnf.er);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'journey':
// journeyRenderer.setConf(cnf.journey);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
case 'requirement':
// requirementRenderer.setConf(cnf.requirement);
diag.renderer.draw(txt, id, pkg.version, diag);
break;
}
} catch (e) { } catch (e) {
errorRenderer.draw(id, pkg.version); errorRenderer.draw(id, pkg.version);
throw e; throw e;