Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

activations doc + few fixes #318

Merged
merged 4 commits into from
Mar 14, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions docs/content/sequenceDiagram.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,55 @@ There are six types of arrows currently supported:
--x which will render a dotted line with a cross at the end (async)


## Activations
It is possible to activate and deactivate an actor. (de)activation can be dedicated declarations:

```
sequenceDiagram
Alice->>John: Hello John, how are you?
activate John
John-->>Alice: Great!
deactivate John
```

Renders to the diagram below:

```mermaid
sequenceDiagram
Alice->>John: Hello John, how are you?
activate John
John-->>Alice: Great!
deactivate John
```

There is also a shortcut notation by appending `+`/`-` suffix to the message arrow:

```
sequenceDiagram
Alice->>+John: Hello John, how are you?
John-->>-Alice: Great!
```

Activations can be stacked for same actor:

```
sequenceDiagram
Alice->>+John: Hello John, how are you?
Alice->>+John: John, can yoy hear me?
John-->>-Alice: Hi Alice, I can hear you!
John-->>-Alice: I feel great!
```

Stacked activations look like this:

```mermaid
sequenceDiagram
Alice->>+John: Hello John, how are you?
Alice->>+John: John, can yoy hear me?
John-->>-Alice: Hi Alice, I can hear you!
John-->>-Alice: I feel great!
```

## Notes
It is possible to add notes to a sequence diagram. This is done by the notation
Note [ right of | left of | over ] [Actor]: Text in note content
Expand Down
35 changes: 24 additions & 11 deletions src/diagrams/sequenceDiagram/sequenceRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,19 @@ module.exports.draw = function (text, id) {
svgDraw.insertArrowHead(diagram);
svgDraw.insertArrowCrossHead(diagram);

function activeEnd(msg, verticalPos) {
var activationData = exports.bounds.endActivation(msg);
if(activationData.starty + 18 > verticalPos) {
activationData.starty = verticalPos - 6;
verticalPos += 12;
}
svgDraw.drawActivation(diagram, activationData, verticalPos, conf);

exports.bounds.insert(activationData.startx, verticalPos -10, activationData.stopx, verticalPos);
}

var lastMsg;

// Draw the messages/signals
messages.forEach(function(msg){
var loopData;
Expand Down Expand Up @@ -374,15 +387,10 @@ module.exports.draw = function (text, id) {
}
break;
case sq.yy.LINETYPE.ACTIVE_START:
// exports.bounds.bumpVerticalPos(conf.boxMargin);
exports.bounds.newActivation(msg, diagram);
// exports.bounds.bumpVerticalPos(conf.boxMargin + conf.boxTextMargin);
break;
case sq.yy.LINETYPE.ACTIVE_END:
var activationData = exports.bounds.endActivation(msg);
svgDraw.drawActivation(diagram, activationData, exports.bounds.getVerticalPos(), conf);

exports.bounds.insert(activationData.startx, exports.bounds.getVerticalPos() -10, activationData.stopx, exports.bounds.getVerticalPos());
activeEnd(msg, exports.bounds.getVerticalPos());
break;
case sq.yy.LINETYPE.LOOP_START:
exports.bounds.bumpVerticalPos(conf.boxMargin);
Expand Down Expand Up @@ -426,14 +434,19 @@ module.exports.draw = function (text, id) {
break;
default:
try {
lastMsg = msg;
exports.bounds.bumpVerticalPos(conf.messageMargin);
var fromBounds = actorFlowVerticaBounds(msg.from);
var toBounds = actorFlowVerticaBounds(msg.to);
var forward = fromBounds[0] < toBounds[0];
startx = fromBounds[forward?1:0];
stopx = toBounds[forward?0:1];

drawMessage(diagram, startx, stopx, exports.bounds.getVerticalPos(), msg);
var fromIdx = fromBounds[0] <= toBounds[0]?1:0;
var toIdx = fromBounds[0] < toBounds[0]?0:1;
startx = fromBounds[fromIdx];
stopx = toBounds[toIdx];

var verticalPos = exports.bounds.getVerticalPos();
drawMessage(diagram, startx, stopx, verticalPos, msg);
var allBounds = fromBounds.concat(toBounds);
exports.bounds.insert(Math.min.apply(null, allBounds), verticalPos, Math.max.apply(null, allBounds), verticalPos);
} catch (e) {
console.error('error while drawing message', e);
}
Expand Down