From d50f41d0f2103f78039ef4d01eda5d30ff968d6e Mon Sep 17 00:00:00 2001 From: Martin Hanzel Date: Tue, 16 Jul 2019 07:09:55 +0000 Subject: Fix linebreak rendering in Mermaid flowcharts --- .../javascripts/behaviors/markdown/render_mermaid.js | 3 ++- changelogs/unreleased/mh-mermaid-linebreaks.yml | 5 +++++ spec/features/markdown/mermaid_spec.rb | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/mh-mermaid-linebreaks.yml diff --git a/app/assets/javascripts/behaviors/markdown/render_mermaid.js b/app/assets/javascripts/behaviors/markdown/render_mermaid.js index b23de36f860..dbc28beffbe 100644 --- a/app/assets/javascripts/behaviors/markdown/render_mermaid.js +++ b/app/assets/javascripts/behaviors/markdown/render_mermaid.js @@ -36,7 +36,8 @@ export default function renderMermaid($els) { }); $els.each((i, el) => { - const source = el.textContent; + // Mermaid doesn't like `
` tags, so collapse all like tags into `
`, which is parsed correctly. + const source = el.textContent.replace(//g, '
'); /** * Restrict the rendering to a certain amount of character to diff --git a/changelogs/unreleased/mh-mermaid-linebreaks.yml b/changelogs/unreleased/mh-mermaid-linebreaks.yml new file mode 100644 index 00000000000..e38820d8ce3 --- /dev/null +++ b/changelogs/unreleased/mh-mermaid-linebreaks.yml @@ -0,0 +1,5 @@ +--- +title: Fix linebreak rendering in Mermaid flowcharts +merge_request: 30730 +author: +type: fixed diff --git a/spec/features/markdown/mermaid_spec.rb b/spec/features/markdown/mermaid_spec.rb index 7008b361394..e3bcaca737e 100644 --- a/spec/features/markdown/mermaid_spec.rb +++ b/spec/features/markdown/mermaid_spec.rb @@ -21,4 +21,22 @@ describe 'Mermaid rendering', :js do expect(page).to have_selector('svg text', text: label) end end + + it 'renders linebreaks in Mermaid diagrams' do + description = <<~MERMAID + ```mermaid + graph TD; + A(Line 1
Line 2)-->B(Line 1
Line 2); + C(Line 1
Line 2)-->D(Line 1
Line 2); + ``` + MERMAID + + project = create(:project, :public) + issue = create(:issue, project: project, description: description) + + visit project_issue_path(project, issue) + + expected = 'Line 1Line 2' + expect(page.html.scan(expected).count).to be(4) + end end -- cgit v1.2.1