Merge pull request #1197 from alixander/relative-paths

link with relative paths
This commit is contained in:
Alexander Wang 2023-04-13 19:33:00 -07:00 committed by GitHub
commit 3c43db31d0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 6 deletions

View file

@ -7,6 +7,7 @@
#### Improvements 🧹 #### Improvements 🧹
- Markdown text can now be adjusted with `font-size` [#1191](https://github.com/terrastruct/d2/issues/1191) - 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 ⛑️ #### Bugfixes ⛑️

View file

@ -390,7 +390,10 @@ func compile(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, rende
if err != nil { if err != nil {
return nil, false, err 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) boards, err := render(ctx, ms, compileDur, plugin, renderOpts, inputPath, outputPath, bundle, forceAppendix, page, ruler, diagram)
@ -491,27 +494,41 @@ func resolveLinks(currDiagramPath, outputPath string, diagram *d2target.Diagram)
return linkToOutput, nil 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 { for i, shape := range d.Shapes {
if shape.Link != "" { if shape.Link != "" {
for k, v := range linkToOutput { for k, v := range linkToOutput {
if shape.Link == k { 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 break
} }
} }
} }
} }
for _, board := range d.Layers { 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 { 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 { 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) { 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) {
if diagram.Name != "" { if diagram.Name != "" {