From 752a6b2cb0950baa4636a3e7f4fa7f7e486934f0 Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Mon, 17 Oct 2022 10:46:46 +0200 Subject: [PATCH] #3687 Separating the render specific data from the data related to parsing --- packages/mermaid-mindmap/package.json | 2 +- packages/mermaid-mindmap/src/mindmapDb.js | 10 ++-------- .../mermaid-mindmap/src/mindmapRenderer.js | 5 +++-- packages/mermaid-mindmap/src/svgDraw.js | 18 ++++++++++++++++-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/packages/mermaid-mindmap/package.json b/packages/mermaid-mindmap/package.json index 847eeffef..f13ed0cbc 100644 --- a/packages/mermaid-mindmap/package.json +++ b/packages/mermaid-mindmap/package.json @@ -1,6 +1,6 @@ { "name": "@mermaid-js/mermaid-mindmap", - "version": "9.2.0-rc3", + "version": "9.2.0-rc4", "description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.", "main": "dist/mermaid-mindmap.core.mjs", "module": "dist/mermaid-mindmap.core.mjs", diff --git a/packages/mermaid-mindmap/src/mindmapDb.js b/packages/mermaid-mindmap/src/mindmapDb.js index 2ae98c223..4785051a4 100644 --- a/packages/mermaid-mindmap/src/mindmapDb.js +++ b/packages/mermaid-mindmap/src/mindmapDb.js @@ -3,11 +3,10 @@ import { sanitizeText, getConfig, log } from './mermaidUtils'; let nodes = []; let cnt = 0; -let elements = {}; + export const clear = () => { nodes = []; cnt = 0; - elements = {}; }; const getParent = function (level) { @@ -27,7 +26,7 @@ export const addNode = (level, id, descr, type) => { log.info('addNode', level, id, descr, type); const conf = getConfig(); const node = { - id: cnt++, + id: `id-${cnt++}`, nodeId: sanitizeText(id), level, descr: sanitizeText(descr), @@ -99,10 +98,6 @@ export const getType = (startStr, endStr) => { } }; -export const setElementForId = (id, element) => { - elements[id] = element; -}; - export const decorateNode = (decoration) => { const node = nodes[nodes.length - 1]; if (decoration && decoration.icon) { @@ -141,4 +136,3 @@ export const setErrorHandler = (handler) => { export const getLogger = () => log; export const getNodeById = (id) => nodes[id]; -export const getElementById = (id) => elements[id]; diff --git a/packages/mermaid-mindmap/src/mindmapRenderer.js b/packages/mermaid-mindmap/src/mindmapRenderer.js index f69b0b381..c2ac07574 100644 --- a/packages/mermaid-mindmap/src/mindmapRenderer.js +++ b/packages/mermaid-mindmap/src/mindmapRenderer.js @@ -1,7 +1,7 @@ /** Created by knut on 14-12-11. */ import { select } from 'd3'; import { log, getConfig, setupGraphViewbox } from './mermaidUtils'; -import svgDraw from './svgDraw'; +import svgDraw, { getElementById, clearElementRefs } from './svgDraw'; import cytoscape from 'cytoscape'; import coseBilkent from 'cytoscape-cose-bilkent'; import * as db from './mindmapDb'; @@ -155,7 +155,7 @@ function positionNodes(cy) { data.x = node.position().x; data.y = node.position().y; svgDraw.positionNode(data); - const el = db.getElementById(data.nodeId); + const el = getElementById(data.nodeId); log.info('Id:', id, 'Position: (', node.position().x, ', ', node.position().y, ')', data); el.attr( 'transform', @@ -179,6 +179,7 @@ export const draw = async (text, id, version, diagObj) => { // This is done only for throwing the error if the text is not valid. diagObj.db.clear(); + clearElementRefs(); // Parse the graph definition diagObj.parser.parse(text); diff --git a/packages/mermaid-mindmap/src/svgDraw.js b/packages/mermaid-mindmap/src/svgDraw.js index 1246b1cb9..782875a6b 100644 --- a/packages/mermaid-mindmap/src/svgDraw.js +++ b/packages/mermaid-mindmap/src/svgDraw.js @@ -259,7 +259,7 @@ export const drawNode = function (elem, node, fullSection, conf) { // if (typeof node.x !== 'undefined' && typeof node.y !== 'undefined') { // nodeElem.attr('transform', 'translate(' + node.x + ',' + node.y + ')'); // } - db.setElementForId(node.id, nodeElem); + setElementById(node.id, nodeElem); return node.height; }; @@ -286,7 +286,7 @@ export const drawEdge = function drawEdge(edgesElem, mindmap, parent, depth, ful }; export const positionNode = function (node) { - const nodeElem = db.getElementById(node.id); + const nodeElem = getElementById(node.id); const x = node.x || 0; const y = node.y || 0; @@ -295,3 +295,17 @@ export const positionNode = function (node) { }; export default { drawNode, positionNode, drawEdge }; + +let elements = {}; + +export const setElementById = (id, element) => { + elements[id] = element; +}; + +export const getElementById = (id) => { + return elements[id]; +}; + +export const clearElementRefs = () => { + elements = {}; +};