diff --git a/demos/index.html b/demos/index.html index 530e24965..663a4cda6 100644 --- a/demos/index.html +++ b/demos/index.html @@ -37,7 +37,7 @@ axisFormat %m-%d %a excludes weekends, 2021-10-01,2021-10-04,2021-10-05,2021-10-06,2021-10-07 includes 2021-10-09 - + section Airworks 3.4.1 开发 :b, 2021-10-07, 5d 测试 :after b, 4d @@ -467,6 +467,7 @@
sequenceDiagram + accDescription Hello friends participant Alice participant Bob participant John as John
Second Line @@ -619,7 +620,7 @@
classDiagram - Class01 <|-- AveryLongClass : Cool + Class01 <|-- AveryLongClass : Cool <<interface>> Class01 Class03 "0" *-- "0..n" Class04 @@ -656,7 +657,7 @@
classDiagram - Class01~T~ <|-- AveryLongClass : Cool + Class01~T~ <|-- AveryLongClass : Cool <<interface>> Class01 Class03~T~ "0" *-- "0..n" Class04 Class05 "1" o-- "many" Class06 diff --git a/demos/sequence.html b/demos/sequence.html new file mode 100644 index 000000000..6c477114d --- /dev/null +++ b/demos/sequence.html @@ -0,0 +1,71 @@ + + + + + + + Mermaid Quick Test Page + + + + + + + +
+ sequenceDiagram + accDescription Test a description + participant Alice + participant Bob + participant John as John
Second Line + rect rgb(200, 220, 100) + rect rgb(200, 255, 200) + Alice ->> Bob: Hello Bob, how are you? + Bob-->>John: How about you John? + end + Bob--x Alice: I am good thanks! + Bob-x John: I am good thanks! + Note right of John: John thinks a long
long time, so long
that the text does
not fit on a row. + Bob-->Alice: Checking with John... + Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit. + Bob-x John: Hey John - we're still waiting to know
how you're doing + Note over John:nowrap: John's trying hard not to break his train of thought. + Bob-x John:wrap: John! Are you still debating about how you're doing? How long does it take?? + Note over John: After a few more moments, John
finally snaps out of it. + end + alt either this + Alice->>John: Yes + else or this + Alice->>John: No + else or this will happen + Alice->John: Maybe + end + par this happens in parallel + Alice -->> Bob: Parallel message 1 + and + Alice -->> John: Parallel message 2 + end +
+ + + + + + + \ No newline at end of file diff --git a/src/diagrams/sequence/parser/sequenceDiagram.jison b/src/diagrams/sequence/parser/sequenceDiagram.jison index 6608511f2..beadc9508 100644 --- a/src/diagrams/sequence/parser/sequenceDiagram.jison +++ b/src/diagrams/sequence/parser/sequenceDiagram.jison @@ -33,7 +33,7 @@ \%%(?!\{)[^\n]* /* skip comments */ [^\}]\%\%[^\n]* /* skip comments */ "participant" { this.begin('ID'); return 'participant'; } -"actor" { this.begin('ID'); return 'participant_actor'; } +"actor" { this.begin('ID'); return 'participant_actor'; } [^\->:\n,;]+?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } "as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; } (?:) { this.popState(); this.popState(); return 'NEWLINE'; } @@ -57,6 +57,7 @@ "activate" { this.begin('ID'); return 'activate'; } "deactivate" { this.begin('ID'); return 'deactivate'; } "title" return 'title'; +"accDescription"\s[^#\n;]+ return 'accDescription'; "sequenceDiagram" return 'SD'; "autonumber" return 'autonumber'; "," return ','; @@ -122,6 +123,7 @@ statement | properties_statement 'NEWLINE' | details_statement 'NEWLINE' | title text2 'NEWLINE' {$$=[{type:'setTitle', text:$2}]} + | accDescription {yy.setAccDescription($1.substring(15));$$=$1.substring(15);} | 'loop' restOfLine document end { $3.unshift({type: 'loopStart', loopText:yy.parseMessage($2), signalType: yy.LINETYPE.LOOP_START}); diff --git a/src/diagrams/sequence/sequenceDb.js b/src/diagrams/sequence/sequenceDb.js index 7492e6d11..fd8ae448b 100644 --- a/src/diagrams/sequence/sequenceDb.js +++ b/src/diagrams/sequence/sequenceDb.js @@ -8,6 +8,7 @@ let actors = {}; let messages = []; const notes = []; let title = ''; +let description = ''; let titleWrapped = false; let sequenceNumbersEnabled = false; let wrapEnabled = false; @@ -408,6 +409,14 @@ export const apply = function (param) { } }; +const setAccDescription = function (description_lex) { + description = description_lex; +}; + +const getAccDescription = function () { + return description; +}; + export default { addActor, addMessage, @@ -436,4 +445,6 @@ export default { addNote, setTitle, apply, + setAccDescription, + getAccDescription, }; diff --git a/src/diagrams/sequence/sequenceDiagram.spec.js b/src/diagrams/sequence/sequenceDiagram.spec.js index 437e0e6e9..f305d45de 100644 --- a/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/src/diagrams/sequence/sequenceDiagram.spec.js @@ -73,6 +73,7 @@ Bob-->Alice: I am good thanks!`; expect(actors.Alice.description).toBe('Alice'); actors.Bob.description = 'Bob'; + expect(parser.yy.getAccDescription()).toBe(''); const messages = parser.yy.getMessages(); const title = parser.yy.getTitle(); @@ -81,6 +82,28 @@ Bob-->Alice: I am good thanks!`; expect(messages[2].from).toBe('Bob'); expect(title).toBe('Diagram Title'); }); + it('it should handle a sequenceDiagram definition with a accDescription', function () { + const str = ` +sequenceDiagram +accDescription: Accessibility Description +Alice->Bob:Hello Bob, how are you? +Note right of Bob: Bob thinks +Bob-->Alice: I am good thanks!`; + + mermaidAPI.parse(str); + const actors = parser.yy.getActors(); + expect(actors.Alice.description).toBe('Alice'); + actors.Bob.description = 'Bob'; + + expect(parser.yy.getAccDescription()).toBe('Accessibility Description'); + const messages = parser.yy.getMessages(); + const title = parser.yy.getTitle(); + + expect(messages.length).toBe(3); + expect(messages[0].from).toBe('Alice'); + expect(messages[2].from).toBe('Bob'); + }); + it('it should space in actor names', function () { const str = ` sequenceDiagram diff --git a/src/diagrams/sequence/sequenceRenderer.js b/src/diagrams/sequence/sequenceRenderer.js index 138ca7c6b..48507b9f7 100644 --- a/src/diagrams/sequence/sequenceRenderer.js +++ b/src/diagrams/sequence/sequenceRenderer.js @@ -6,6 +6,7 @@ import common from '../common/common'; import sequenceDb from './sequenceDb'; import * as configApi from '../../config'; import utils, { assignWithDepth, configureSvgSize } from '../../utils'; +import addSVGAccessibilityFields from '../../accessibility'; parser.yy = sequenceDb; @@ -727,6 +728,7 @@ export const draw = function (text, id) { log.error('error while drawing message', e); } } + // Increment sequence counter if msg.type is a line (and not another event like activation or note, etc) if ( [ @@ -802,6 +804,8 @@ export const draw = function (text, id) { ' ' + (height + extraVertForTitle) ); + + addSVGAccessibilityFields(parser.yy, diagram, id); log.debug(`models:`, bounds.models); };