diff --git a/cypress/integration/rendering/flowchart.spec.js b/cypress/integration/rendering/flowchart.spec.js index d3a83ae5f..ea24158bf 100644 --- a/cypress/integration/rendering/flowchart.spec.js +++ b/cypress/integration/rendering/flowchart.spec.js @@ -895,7 +895,7 @@ graph TD imgSnapshotTest( ` graph TD - classDef default fill:#a34,stroke:#000,stroke-width:4px,color:#fff + classDef default fill:#a34,stroke:#000,stroke-width:4px,color:#fff hello --> default `, { htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' } @@ -917,4 +917,24 @@ graph TD } ); }); + it('68: should be able to string and markdown labels (#5824)', () => { + imgSnapshotTest( + ` +flowchart TB + mermaid{"What is\nyourmermaid version?"} --> v10["<11"] --"\`<**1**1\`"--> fine["No bug"] + mermaid --> v11[">= v11"] -- ">= v11" --> broken["Affected by https://github.com/mermaid-js/mermaid/issues/5824"] + subgraph subgraph1["\`How to fix **fix**\`"] + broken --> B["B"] + end + githost["Github, Gitlab, BitBucket, etc."] + githost2["\`Github, Gitlab, BitBucket, etc.\`"] + a["1."] + b["- x"] + `, + { + flowchart: { htmlLabels: true }, + securityLevel: 'loose', + } + ); + }); }); diff --git a/cypress/platform/knsv2.html b/cypress/platform/knsv2.html index 7ec666c1a..713e76b89 100644 --- a/cypress/platform/knsv2.html +++ b/cypress/platform/knsv2.html @@ -116,7 +116,7 @@ flowchart LR -
+--- config: layout: elk @@ -155,21 +155,21 @@ flowchart LR n8@{ shape: rect}-+--- -config: - layout: elk +title: https://github.com/mermaid-js/mermaid/issues/5824 --- -flowchart LR - subgraph s1["Untitled subgraph"] - n1["Evaluate"] - n2["Option 1"] - end - n1 -- One --> n2 - - - - +%% 6048, 5824 +flowchart TB + mermaid{"What is\nyourmermaid version?"} --> v10["<11"] --"`<**1**1`"--> fine["No bug"] + mermaid --> v11[">= v11"] -- ">= v11" --> broken["Affected by https://github.com/mermaid-js/mermaid/issues/5824"] + subgraph subgraph1["`How to fix **fix**`"] + broken --> B["B"] + end + githost["Github, Gitlab, BitBucket, etc."] + githost2["`Github, Gitlab, BitBucket, etc.`"] + a["1."] + b["- x"]--- diff --git a/packages/mermaid/src/diagrams/flowchart/flowDb.ts b/packages/mermaid/src/diagrams/flowchart/flowDb.ts index 1dbc789c9..9f09dce31 100644 --- a/packages/mermaid/src/diagrams/flowchart/flowDb.ts +++ b/packages/mermaid/src/diagrams/flowchart/flowDb.ts @@ -896,6 +896,7 @@ const addNodeFromVertex = ( const baseNode = { id: vertex.id, label: vertex.text, + labelType: vertex.labelType, labelStyle: '', parentId, padding: config.flowchart?.padding || 8, @@ -1002,6 +1003,7 @@ export const getData = () => { end: rawEdge.end, type: rawEdge.type ?? 'normal', label: rawEdge.text, + labelType: rawEdge.labelType, labelpos: 'c', thickness: rawEdge.stroke, minlen: rawEdge.length, diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js index a6a7a55f7..e65fa0c65 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js @@ -26,12 +26,16 @@ export const getLabelStyles = (styleArray) => { export const insertEdgeLabel = async (elem, edge) => { let useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels); - const labelElement = await createText(elem, edge.label, { - style: getLabelStyles(edge.labelStyle), - useHtmlLabels, - addSvgBackground: true, - isNode: false, - }); + const labelElement = + edge.labelType === 'markdown' + ? await createText(elem, edge.label, { + style: getLabelStyles(edge.labelStyle), + useHtmlLabels, + addSvgBackground: true, + isNode: false, + }) + : await createLabel(edge.label, getLabelStyles(edge.labelStyle), undefined, false); + log.info('abc82', edge, edge.labelType); // Create outer g, edgeLabel, this will be positioned after graph layout diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts b/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts index 52471ecc0..ac6dfddbf 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts +++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/util.ts @@ -1,3 +1,4 @@ +import createLabel from '../createLabel.js'; import { createText } from '../../createText.js'; import type { Node } from '../../types.js'; import { getConfig } from '../../../diagram-api/diagramAPI.js'; @@ -40,14 +41,26 @@ export const labelHelper = async( label = typeof node.label === 'string' ? node.label : node.label[0]; } - const text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), { - useHtmlLabels, - width: node.width || getConfig().flowchart?.wrappingWidth, - // @ts-expect-error -- This is currently not used. Should this be `classes` instead? - cssClasses: 'markdown-node-label', - style: node.labelStyle, - addSvgBackground: !!node.icon || !!node.img, - }); + let text; + if (node.labelType !== 'string') { + text = await createText(labelEl, sanitizeText(decodeEntities(label), getConfig()), { + useHtmlLabels, + width: node.width || getConfig().flowchart?.wrappingWidth, + // @ts-expect-error -- This is currently not used. Should this be `classes` instead? + cssClasses: 'markdown-node-label', + style: node.labelStyle, + addSvgBackground: !!node.icon || !!node.img, + }); + } else { + const labelElement = await createLabel( + sanitizeText(decodeEntities(label), getConfig()), + node.labelStyle, + false, + true + ); + text = labelEl.node()?.appendChild(labelElement); + } + // Get the size of the label let bbox = text.getBBox(); const halfPadding = (node?.padding ?? 0) / 2;