PR comments

This commit is contained in:
Júlio César Batista 2022-11-30 13:15:33 -08:00
parent 5c9f87f64a
commit 347a6b263d
No known key found for this signature in database
GPG key ID: 10C4B861BF314878
3 changed files with 11 additions and 11 deletions

View file

@ -984,7 +984,7 @@ func Render(diagram *d2target.Diagram) ([]byte, error) {
// SVG has no notion of z-index. The z-index is effectively the order it's drawn.
// So draw from the least nested to most nested
idToShape := make(map[string]d2target.Shape)
allObjects := make([]d2target.DiagramObject, 0, len(diagram.Shapes)+len(diagram.Connections))
allObjects := make([]DiagramObject, 0, len(diagram.Shapes)+len(diagram.Connections))
for _, s := range diagram.Shapes {
idToShape[s.ID] = s
allObjects = append(allObjects, s)
@ -1005,7 +1005,7 @@ func Render(diagram *d2target.Diagram) ([]byte, error) {
return nil, err
}
} else {
return nil, fmt.Errorf("unknow object of type %t", obj)
return nil, fmt.Errorf("unknow object of type %T", obj)
}
}
@ -1015,13 +1015,18 @@ func Render(diagram *d2target.Diagram) ([]byte, error) {
return buf.Bytes(), nil
}
type DiagramObject interface {
GetID() string
GetZIndex() int
}
// sortObjects sorts all diagrams objects (shapes and connections) in the desired drawing order
// the sorting criteria is:
// 1. zIndex, lower comes first
// 2. two shapes with the same zIndex are sorted by their level (container nesting), containers come first
// 3. two shapes with the same zIndex and same level, are sorted in the order they were exported
// 4. shape and edge, shapes come first
func sortObjects(allObjects []d2target.DiagramObject) {
func sortObjects(allObjects []DiagramObject) {
sort.SliceStable(allObjects, func(i, j int) bool {
// first sort by zIndex
iZIndex := allObjects[i].GetZIndex()
@ -1030,7 +1035,7 @@ func sortObjects(allObjects []d2target.DiagramObject) {
return iZIndex < jZIndex
}
// then, if both are shapes, the containers come first
// then, if both are shapes, parents come before their children
iShape, iIsShape := allObjects[i].(d2target.Shape)
jShape, jIsShape := allObjects[j].(d2target.Shape)
if iIsShape && jIsShape {

View file

@ -7,7 +7,7 @@ import (
)
func TestSortObjects(t *testing.T) {
allObjects := []d2target.DiagramObject{
allObjects := []DiagramObject{
// same zIndex and level, should keep in this order
d2target.Shape{
ID: "0",
@ -57,7 +57,7 @@ func TestSortObjects(t *testing.T) {
},
}
expectedOrder := []d2target.DiagramObject{
expectedOrder := []DiagramObject{
allObjects[8],
allObjects[0],
allObjects[1],

View file

@ -17,11 +17,6 @@ const (
MAX_ICON_SIZE = 64
)
type DiagramObject interface {
GetID() string
GetZIndex() int
}
type Diagram struct {
Name string `json:"name"`
Description string `json:"description,omitempty"`