From a2efa0d289a79b6c411236b6bbd8907a5fc08359 Mon Sep 17 00:00:00 2001 From: Michael K Date: Wed, 21 Feb 2024 18:08:42 -0500 Subject: [PATCH 1/9] Fix Requirement overflow --- .../mermaid/src/diagrams/requirement/requirementRenderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mermaid/src/diagrams/requirement/requirementRenderer.js b/packages/mermaid/src/diagrams/requirement/requirementRenderer.js index b06b1d7b5..ccddbbbf1 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementRenderer.js +++ b/packages/mermaid/src/diagrams/requirement/requirementRenderer.js @@ -86,7 +86,7 @@ const newBodyNode = (parentNode, id, txts, yStart) => { // ); let currentRow = 0; - const charLimit = 30; + const charLimit = 24; let wrappedTxts = []; txts.forEach((textStr) => { let currentTextLen = textStr.length; From 1169cb9e85a7120e3377563bcda836ea87077552 Mon Sep 17 00:00:00 2001 From: futzmonitor Date: Mon, 26 Feb 2024 20:59:40 -0500 Subject: [PATCH 2/9] Changes to timeline.jison 1. Removed the semicolon from the regex for titles, sections, periods, and events. Changes to timeline.spec.js 1. Added a test for the changes made in the timeline parser --- .../diagrams/timeline/parser/timeline.jison | 8 +++--- .../src/diagrams/timeline/timeline.spec.js | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison index 348c31fad..136654a7f 100644 --- a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison +++ b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison @@ -18,7 +18,7 @@ \#[^\n]* /* skip comments */ "timeline" return 'timeline'; -"title"\s[^#\n;]+ return 'title'; +"title"\s[^#\n]+ return 'title'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } @@ -26,11 +26,11 @@ accDescr\s*":"\s* { this.begin("ac accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; -"section"\s[^#:\n;]+ return 'section'; +"section"\s[^#:\n]+ return 'section'; // event starting with "==>" keyword -":"\s[^#:\n;]+ return 'event'; -[^#:\n;]+ return 'period'; +":"\s[^#:\n]+ return 'event'; +[^#:\n]+ return 'period'; <> return 'EOF'; diff --git a/packages/mermaid/src/diagrams/timeline/timeline.spec.js b/packages/mermaid/src/diagrams/timeline/timeline.spec.js index 69b9df1ba..186713ce1 100644 --- a/packages/mermaid/src/diagrams/timeline/timeline.spec.js +++ b/packages/mermaid/src/diagrams/timeline/timeline.spec.js @@ -98,5 +98,30 @@ describe('when parsing a timeline ', function () { } }); }); + + it('TL-6 should handle a section, and task and its multi line events with semicolons', function () { + let str = `timeline + section ;a;bc-123; + ;ta;sk1;: ;ev;ent1; + ;tas;k2;: ;eve;nt2;: ;event;3; + : ;eve;nt4: ;even;t5; + `; + timeline.parse(str); + expect(timelineDB.getSections()[0]).to.deep.equal(';a;bc-123;'); + timelineDB.getTasks().forEach((t) => { + switch (t.task.trim()) { + case ';ta;sk1;': + expect(t.events).to.deep.equal([';ev;ent1;']); + break; + + case ';tas;k2;': + expect(t.events).to.deep.equal([';eve;nt2;', ';event;3;', ';eve;nt4', ';even;t5;']); + break; + + default: + break; + } + }); + }); }); }); From 9e3ebf1648d5920bd8174db3c09a2928a70b809b Mon Sep 17 00:00:00 2001 From: futzmonitor Date: Tue, 27 Feb 2024 09:33:11 -0500 Subject: [PATCH 3/9] Run the pnpm lint:fix command to fix linting problems --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 8544e0980..d368a4349 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,6 @@ C -->|Two| E[Result 2] ### Sequence diagram [docs - live editor] - ``` sequenceDiagram Alice->>John: Hello John, how are you? From cf88f0609d26bac3d4e445ad65c7f70d37e6be10 Mon Sep 17 00:00:00 2001 From: futzmonitor Date: Tue, 19 Mar 2024 10:02:51 -0400 Subject: [PATCH 4/9] Changes to timeline.spec.js 1. Re-organized the new TL-6 test to not use a for-loop with a switch case. 2. Imported the commonDb module to ensure titles are be tested. 3. Use indices to retrieve elements that need to be tested. --- .../src/diagrams/timeline/timeline.spec.js | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/packages/mermaid/src/diagrams/timeline/timeline.spec.js b/packages/mermaid/src/diagrams/timeline/timeline.spec.js index 186713ce1..0cb227fa6 100644 --- a/packages/mermaid/src/diagrams/timeline/timeline.spec.js +++ b/packages/mermaid/src/diagrams/timeline/timeline.spec.js @@ -1,5 +1,6 @@ import { parser as timeline } from './parser/timeline.jison'; import * as timelineDB from './timelineDb.js'; +import * as commonDb from '../common/commonDb.js'; import { setLogLevel } from '../../diagram-api/diagramAPI.js'; describe('when parsing a timeline ', function () { @@ -99,29 +100,19 @@ describe('when parsing a timeline ', function () { }); }); - it('TL-6 should handle a section, and task and its multi line events with semicolons', function () { + it('TL-6 should handle a title, section, task, and events with semicolons', function () { let str = `timeline - section ;a;bc-123; - ;ta;sk1;: ;ev;ent1; - ;tas;k2;: ;eve;nt2;: ;event;3; - : ;eve;nt4: ;even;t5; + title ;my;title; + section ;a;bc-123; + ;ta;sk1;: ;ev;ent1; : ;ev;ent2; : ;ev;ent3; `; timeline.parse(str); - expect(timelineDB.getSections()[0]).to.deep.equal(';a;bc-123;'); - timelineDB.getTasks().forEach((t) => { - switch (t.task.trim()) { - case ';ta;sk1;': - expect(t.events).to.deep.equal([';ev;ent1;']); - break; - - case ';tas;k2;': - expect(t.events).to.deep.equal([';eve;nt2;', ';event;3;', ';eve;nt4', ';even;t5;']); - break; - - default: - break; - } - }); + expect(commonDb.getDiagramTitle()).equal(';my;title;'); + expect(timelineDB.getSections()).to.deep.equal([';a;bc-123;']); + expect(timelineDB.getTasks()[0].task).equal(';ta;sk1;'); + expect(timelineDB.getTasks()[0].events[0]).equal(';ev;ent1; '); + expect(timelineDB.getTasks()[0].events[1]).equal(';ev;ent2; '); + expect(timelineDB.getTasks()[0].events[2]).equal(';ev;ent3;'); }); }); }); From 6d69c26c8dc479b6a6088e9ec6dd80104787917f Mon Sep 17 00:00:00 2001 From: futzmonitor Date: Wed, 20 Mar 2024 14:32:03 -0400 Subject: [PATCH 5/9] Changes to timeline.jison 1. Updated the regex for title, section, and event elements to allow hashtags. 2. Period elements remain unchanged. Changes to timeline.spec.js 1. Added test coverage to ensure that the title, section, and event elements allow hashtags without error. --- .../src/diagrams/timeline/parser/timeline.jison | 6 +++--- .../src/diagrams/timeline/timeline.spec.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison index 348c31fad..8bf4aea6e 100644 --- a/packages/mermaid/src/diagrams/timeline/parser/timeline.jison +++ b/packages/mermaid/src/diagrams/timeline/parser/timeline.jison @@ -18,7 +18,7 @@ \#[^\n]* /* skip comments */ "timeline" return 'timeline'; -"title"\s[^#\n;]+ return 'title'; +"title"\s[^\n;]+ return 'title'; accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; } (?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; } accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; } @@ -26,10 +26,10 @@ accDescr\s*":"\s* { this.begin("ac accDescr\s*"{"\s* { this.begin("acc_descr_multiline");} [\}] { this.popState(); } [^\}]* return "acc_descr_multiline_value"; -"section"\s[^#:\n;]+ return 'section'; +"section"\s[^:\n;]+ return 'section'; // event starting with "==>" keyword -":"\s[^#:\n;]+ return 'event'; +":"\s[^:\n;]+ return 'event'; [^#:\n;]+ return 'period'; diff --git a/packages/mermaid/src/diagrams/timeline/timeline.spec.js b/packages/mermaid/src/diagrams/timeline/timeline.spec.js index 69b9df1ba..e13d15f07 100644 --- a/packages/mermaid/src/diagrams/timeline/timeline.spec.js +++ b/packages/mermaid/src/diagrams/timeline/timeline.spec.js @@ -1,5 +1,6 @@ import { parser as timeline } from './parser/timeline.jison'; import * as timelineDB from './timelineDb.js'; +import * as commonDb from '../common/commonDb.js'; import { setLogLevel } from '../../diagram-api/diagramAPI.js'; describe('when parsing a timeline ', function () { @@ -98,5 +99,20 @@ describe('when parsing a timeline ', function () { } }); }); + + it('TL-6 should handle a title, section, task, and events with hashtags', function () { + let str = `timeline + title #my#title# + section #a#bc-123# + task1: #ev#ent1# : #ev#ent2# : #ev#ent3# + `; + timeline.parse(str); + expect(commonDb.getDiagramTitle()).equal('#my#title#'); + expect(timelineDB.getSections()).to.deep.equal(['#a#bc-123#']); + expect(timelineDB.getTasks()[0].task).equal('task1'); + expect(timelineDB.getTasks()[0].events[0]).equal('#ev#ent1# '); + expect(timelineDB.getTasks()[0].events[1]).equal('#ev#ent2# '); + expect(timelineDB.getTasks()[0].events[2]).equal('#ev#ent3#'); + }); }); }); From 79d50ebc760e05c6c54b9196d65f9ea8ca53db64 Mon Sep 17 00:00:00 2001 From: Oliver Wolf Date: Sat, 17 Aug 2024 16:45:52 +0200 Subject: [PATCH 6/9] add MonsterWriter to list of community integrations --- docs/ecosystem/integrations-community.md | 1 + packages/mermaid/src/docs/ecosystem/integrations-community.md | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/ecosystem/integrations-community.md b/docs/ecosystem/integrations-community.md index 6b9190a9d..25be52fd6 100644 --- a/docs/ecosystem/integrations-community.md +++ b/docs/ecosystem/integrations-community.md @@ -56,6 +56,7 @@ To add an integration to this list, see the [Integrations - create page](./integ - [SVG diagram generator](https://github.com/SimonKenyonShepard/mermaidjs-github-svg-generator) - [GitLab](https://docs.gitlab.com/ee/user/markdown.html#diagrams-and-flowcharts) ✅ - [Mermaid Plugin for JetBrains IDEs](https://plugins.jetbrains.com/plugin/20146-mermaid) +- [MonsterWriter](https://www.monsterwriter.com/) ✅ - [Joplin](https://joplinapp.org) ✅ - [LiveBook](https://livebook.dev) ✅ - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) ✅ diff --git a/packages/mermaid/src/docs/ecosystem/integrations-community.md b/packages/mermaid/src/docs/ecosystem/integrations-community.md index d77a82b44..2d5972f20 100644 --- a/packages/mermaid/src/docs/ecosystem/integrations-community.md +++ b/packages/mermaid/src/docs/ecosystem/integrations-community.md @@ -51,6 +51,7 @@ To add an integration to this list, see the [Integrations - create page](./integ - [SVG diagram generator](https://github.com/SimonKenyonShepard/mermaidjs-github-svg-generator) - [GitLab](https://docs.gitlab.com/ee/user/markdown.html#diagrams-and-flowcharts) ✅ - [Mermaid Plugin for JetBrains IDEs](https://plugins.jetbrains.com/plugin/20146-mermaid) +- [MonsterWriter](https://www.monsterwriter.com/) ✅ - [Joplin](https://joplinapp.org) ✅ - [LiveBook](https://livebook.dev) ✅ - [Tuleap](https://docs.tuleap.org/user-guide/writing-in-tuleap.html#graphs) ✅ From bd0237369b1cd0b6d8d7101d02629156e6a247d5 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Sat, 17 Aug 2024 14:56:05 +0000 Subject: [PATCH 7/9] [autofix.ci] apply automated fixes --- docs/config/setup/interfaces/mermaid.Mermaid.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config/setup/interfaces/mermaid.Mermaid.md b/docs/config/setup/interfaces/mermaid.Mermaid.md index a340c7a97..86bdbe8fa 100644 --- a/docs/config/setup/interfaces/mermaid.Mermaid.md +++ b/docs/config/setup/interfaces/mermaid.Mermaid.md @@ -147,7 +147,7 @@ Internal helpers for mermaid | `common.sanitizeTextOrArray` | (`a`: `string` \| `string`\[] \| `string`\[]\[], `config`: [`MermaidConfig`](mermaid.MermaidConfig.md)) => `string` \| `string`\[] | | `common.splitBreaks` | (`text`: `string`) => `string`\[] | | `getConfig` | () => [`MermaidConfig`](mermaid.MermaidConfig.md) | -| `insertCluster` | (`elem`: `any`, `node`: `any`) => `any` | +| `insertCluster` | (`elem`: `any`, `node`: `any`) => `Promise`<`any`> | | `insertEdge` | (`elem`: `any`, `edge`: `any`, `clusterDb`: `any`, `diagramType`: `any`, `startNode`: `any`, `endNode`: `any`, `id`: `any`) => { `originalPath`: `any` ; `updatedPath`: `any` } | | `insertEdgeLabel` | (`elem`: `any`, `edge`: `any`) => `Promise`<`any`> | | `insertMarkers` | (`elem`: `any`, `markerArray`: `any`, `type`: `any`, `id`: `any`) => `void` | From 262bf4e2b055868f0a28737637e85380295757ba Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 20 Aug 2024 14:25:52 +0530 Subject: [PATCH 8/9] chore: Simplify unit test --- .../src/diagrams/timeline/timeline.spec.js | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/mermaid/src/diagrams/timeline/timeline.spec.js b/packages/mermaid/src/diagrams/timeline/timeline.spec.js index 8cc990dcf..a7005cada 100644 --- a/packages/mermaid/src/diagrams/timeline/timeline.spec.js +++ b/packages/mermaid/src/diagrams/timeline/timeline.spec.js @@ -109,10 +109,13 @@ describe('when parsing a timeline ', function () { timeline.parse(str); expect(commonDb.getDiagramTitle()).equal(';my;title;'); expect(timelineDB.getSections()).to.deep.equal([';a;bc-123;']); - expect(timelineDB.getTasks()[0].task).equal(';ta;sk1;'); - expect(timelineDB.getTasks()[0].events[0]).equal(';ev;ent1; '); - expect(timelineDB.getTasks()[0].events[1]).equal(';ev;ent2; '); - expect(timelineDB.getTasks()[0].events[2]).equal(';ev;ent3;'); + expect(timelineDB.getTasks()[0].events).toMatchInlineSnapshot(` + [ + ";ev;ent1; ", + ";ev;ent2; ", + ";ev;ent3;", + ] + `); }); it('should handle a title, section, task, and events with hashtags', function () { @@ -125,9 +128,13 @@ describe('when parsing a timeline ', function () { expect(commonDb.getDiagramTitle()).equal('#my#title#'); expect(timelineDB.getSections()).to.deep.equal(['#a#bc-123#']); expect(timelineDB.getTasks()[0].task).equal('task1'); - expect(timelineDB.getTasks()[0].events[0]).equal('#ev#ent1# '); - expect(timelineDB.getTasks()[0].events[1]).equal('#ev#ent2# '); - expect(timelineDB.getTasks()[0].events[2]).equal('#ev#ent3#'); + expect(timelineDB.getTasks()[0].events).toMatchInlineSnapshot(` + [ + "#ev#ent1# ", + "#ev#ent2# ", + "#ev#ent3#", + ] + `); }); }); }); From 4e7d65062a8a9e81694d09b713edb301d9d1f41d Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Tue, 20 Aug 2024 14:29:42 +0530 Subject: [PATCH 9/9] Revert #5305 As it doesn't fix the issue in all cases. --- .../mermaid/src/diagrams/requirement/requirementRenderer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mermaid/src/diagrams/requirement/requirementRenderer.js b/packages/mermaid/src/diagrams/requirement/requirementRenderer.js index 7e649dfc8..778dc36b1 100644 --- a/packages/mermaid/src/diagrams/requirement/requirementRenderer.js +++ b/packages/mermaid/src/diagrams/requirement/requirementRenderer.js @@ -1,11 +1,11 @@ import { line, select } from 'd3'; import { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js'; import * as graphlib from 'dagre-d3-es/src/graphlib/index.js'; +import { getConfig } from '../../diagram-api/diagramAPI.js'; import { log } from '../../logger.js'; import { configureSvgSize } from '../../setupGraphViewbox.js'; import common from '../common/common.js'; import markers from './requirementMarkers.js'; -import { getConfig } from '../../diagram-api/diagramAPI.js'; let conf = {}; let relCnt = 0; @@ -86,7 +86,7 @@ const newBodyNode = (parentNode, id, txts, yStart) => { // ); let currentRow = 0; - const charLimit = 24; + const charLimit = 30; let wrappedTxts = []; txts.forEach((textStr) => { let currentTextLen = textStr.length;