Merge branch 'terrastruct:master' into master
This commit is contained in:
commit
2d129437cf
8 changed files with 3177 additions and 0 deletions
|
|
@ -9,3 +9,5 @@
|
|||
#### Improvements 🧹
|
||||
|
||||
#### Bugfixes ⛑️
|
||||
|
||||
- Fixes groups overlapping in sequence diagrams when they end in a self loop. [#728](https://github.com/terrastruct/d2/pull/728)
|
||||
|
|
|
|||
|
|
@ -97,3 +97,12 @@ func (e *Edge) ContainedBy(obj *Object) bool {
|
|||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (e *Edge) GetGroup() *Object {
|
||||
for _, ref := range e.References {
|
||||
if ref.ScopeObj.IsSequenceDiagramGroup() {
|
||||
return ref.ScopeObj
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -445,6 +445,8 @@ func (sd *sequenceDiagram) placeSpans() {
|
|||
// routeMessages routes horizontal edges (messages) from Src to Dst lifeline (actor/span center)
|
||||
// in another step, routes are adjusted to spans borders when necessary
|
||||
func (sd *sequenceDiagram) routeMessages() error {
|
||||
var prevIsLoop bool
|
||||
var prevGroup *d2graph.Object
|
||||
messageOffset := sd.maxActorHeight + sd.yStep
|
||||
for _, message := range sd.messages {
|
||||
message.ZIndex = MESSAGE_Z_INDEX
|
||||
|
|
@ -454,6 +456,14 @@ func (sd *sequenceDiagram) routeMessages() error {
|
|||
noteOffset += note.Height + sd.yStep
|
||||
}
|
||||
}
|
||||
|
||||
// we need extra space if the previous message is a loop in a different group
|
||||
group := message.GetGroup()
|
||||
if prevIsLoop && prevGroup != group {
|
||||
messageOffset += MIN_MESSAGE_DISTANCE
|
||||
}
|
||||
prevGroup = group
|
||||
|
||||
startY := messageOffset + noteOffset
|
||||
|
||||
var startX, endX float64
|
||||
|
|
@ -490,11 +500,13 @@ func (sd *sequenceDiagram) routeMessages() error {
|
|||
geo.NewPoint(midX, endY),
|
||||
geo.NewPoint(endX, endY),
|
||||
}
|
||||
prevIsLoop = true
|
||||
} else {
|
||||
message.Route = []*geo.Point{
|
||||
geo.NewPoint(startX, startY),
|
||||
geo.NewPoint(endX, startY),
|
||||
}
|
||||
prevIsLoop = false
|
||||
}
|
||||
messageOffset += sd.yStep
|
||||
|
||||
|
|
|
|||
|
|
@ -394,6 +394,56 @@ x -> a: {
|
|||
label: You don't have to know how the computer works,\njust how to work the computer.
|
||||
style.opacity: 0.4
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "sequence_diagram_self_edge_group_overlap",
|
||||
script: `
|
||||
shape: sequence_diagram
|
||||
a: A
|
||||
b: B
|
||||
c: C
|
||||
group 1: {
|
||||
a -> a
|
||||
}
|
||||
group 2: {
|
||||
a -> b
|
||||
}
|
||||
group 3: {
|
||||
a -> a.a
|
||||
}
|
||||
group 4: {
|
||||
a.a -> b
|
||||
}
|
||||
group 5: {
|
||||
b -> b
|
||||
b -> b
|
||||
}
|
||||
group 6: {
|
||||
b -> a
|
||||
}
|
||||
group 7: {
|
||||
a -> a
|
||||
}
|
||||
group 8: {
|
||||
a -> a
|
||||
}
|
||||
a -> a
|
||||
group 9: {
|
||||
a -> a
|
||||
}
|
||||
a -> a
|
||||
|
||||
b -> c
|
||||
group 10: {
|
||||
c -> c
|
||||
}
|
||||
b -> c
|
||||
group 11: {
|
||||
c -> c
|
||||
}
|
||||
b -> c
|
||||
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/board.exp.json
generated
vendored
Normal file
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/board.exp.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/sketch.exp.svg
vendored
Normal file
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/dagre/sketch.exp.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 336 KiB |
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/board.exp.json
generated
vendored
Normal file
1490
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/board.exp.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/sketch.exp.svg
vendored
Normal file
62
e2etests/testdata/regression/sequence_diagram_self_edge_group_overlap/elk/sketch.exp.svg
vendored
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 336 KiB |
Loading…
Reference in a new issue