From 5e552fafe95515953186d1fa4fadec3a3ff4a087 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 13 Apr 2023 17:45:19 -0700 Subject: [PATCH 1/2] relative paths --- d2cli/main.go | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/d2cli/main.go b/d2cli/main.go index 58f867291..b55ff47f3 100644 --- a/d2cli/main.go +++ b/d2cli/main.go @@ -390,7 +390,10 @@ func compile(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, rende if err != nil { return nil, false, err } - relink(diagram, linkToOutput) + err = relink("root", diagram, linkToOutput) + if err != nil { + return nil, false, err + } } boards, err := render(ctx, ms, compileDur, plugin, renderOpts, inputPath, outputPath, bundle, forceAppendix, page, ruler, diagram) @@ -491,26 +494,40 @@ func resolveLinks(currDiagramPath, outputPath string, diagram *d2target.Diagram) return linkToOutput, nil } -func relink(d *d2target.Diagram, linkToOutput map[string]string) { +func relink(currDiagramPath string, d *d2target.Diagram, linkToOutput map[string]string) error { for i, shape := range d.Shapes { if shape.Link != "" { for k, v := range linkToOutput { if shape.Link == k { - d.Shapes[i].Link = v + rel, err := filepath.Rel(filepath.Dir(linkToOutput[currDiagramPath]), v) + if err != nil { + return err + } + d.Shapes[i].Link = rel break } } } } for _, board := range d.Layers { - relink(board, linkToOutput) + err := relink(strings.Join([]string{currDiagramPath, "layers", board.Name}, "."), board, linkToOutput) + if err != nil { + return err + } } for _, board := range d.Scenarios { - relink(board, linkToOutput) + err := relink(strings.Join([]string{currDiagramPath, "scenarios", board.Name}, "."), board, linkToOutput) + if err != nil { + return err + } } for _, board := range d.Steps { - relink(board, linkToOutput) + err := relink(strings.Join([]string{currDiagramPath, "steps", board.Name}, "."), board, linkToOutput) + if err != nil { + return err + } } + return nil } func render(ctx context.Context, ms *xmain.State, compileDur time.Duration, plugin d2plugin.Plugin, opts d2svg.RenderOpts, inputPath, outputPath string, bundle, forceAppendix bool, page playwright.Page, ruler *textmeasure.Ruler, diagram *d2target.Diagram) ([][]byte, error) { From b77cf2f7505755c049f8bdf91664fe5ab3da0ed4 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Thu, 13 Apr 2023 19:27:23 -0700 Subject: [PATCH 2/2] changelog --- ci/release/changelogs/next.md | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 03ac43285..c2b7b4f8e 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -6,6 +6,7 @@ #### Improvements 🧹 - Markdown text can now be adjusted with `font-size` [#1191](https://github.com/terrastruct/d2/issues/1191) +- SVG outputs for internal links use relative paths instead of absolute [#1197](https://github.com/terrastruct/d2/pull/1197) #### Bugfixes ⛑️