From 6f2eccc3254fb06e74e62f74041135ce63d1057e Mon Sep 17 00:00:00 2001 From: Gavin Nishizawa Date: Mon, 3 Jul 2023 16:45:05 -0700 Subject: [PATCH] add all appendix items at the end --- d2renderers/d2svg/d2svg.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index 237adfeeb..b0e096065 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -870,7 +870,7 @@ func render3DHexagon(targetShape d2target.Shape) string { return borderMask + mainShapeRendered + renderedSides + renderedBorder } -func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape, sketchRunner *d2sketch.Runner) (labelMask string, err error) { +func drawShape(writer, appendixWriter io.Writer, diagramHash string, targetShape d2target.Shape, sketchRunner *d2sketch.Runner) (labelMask string, err error) { closingTag := "" if targetShape.Link != "" { @@ -936,7 +936,7 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape, } else { drawClass(writer, diagramHash, targetShape) } - addAppendixItems(writer, targetShape, s) + addAppendixItems(appendixWriter, targetShape, s) fmt.Fprint(writer, ``) fmt.Fprint(writer, closingTag) return labelMask, nil @@ -950,7 +950,7 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape, } else { drawTable(writer, diagramHash, targetShape) } - addAppendixItems(writer, targetShape, s) + addAppendixItems(appendixWriter, targetShape, s) fmt.Fprint(writer, ``) fmt.Fprint(writer, closingTag) return labelMask, nil @@ -1341,7 +1341,7 @@ func drawShape(writer io.Writer, diagramHash string, targetShape d2target.Shape, } } - addAppendixItems(writer, targetShape, s) + addAppendixItems(appendixWriter, targetShape, s) fmt.Fprint(writer, closingTag) return labelMask, nil @@ -1746,6 +1746,8 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) { sortObjects(allObjects) + appendixItemBuf := &bytes.Buffer{} + var labelMasks []string markers := map[string]struct{}{} for _, obj := range allObjects { @@ -1758,7 +1760,7 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) { labelMasks = append(labelMasks, labelMask) } } else if s, is := obj.(d2target.Shape); is { - labelMask, err := drawShape(buf, diagramHash, s, sketchRunner) + labelMask, err := drawShape(buf, appendixItemBuf, diagramHash, s, sketchRunner) if err != nil { return nil, err } else if labelMask != "" { @@ -1768,6 +1770,8 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) { return nil, fmt.Errorf("unknown object of type %T", obj) } } + // add all appendix items afterwards so they are always on top + fmt.Fprint(buf, appendixItemBuf) // Note: we always want this since we reference it on connections even if there end up being no masked labels left, top, w, h := dimensions(diagram, pad)