diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 092a1ff80..9e7cabe91 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -16,6 +16,7 @@ - CLI: - Support `validate` command. [#2415](https://github.com/terrastruct/d2/pull/2415) - Watch mode ignores backup files (e.g. files created by certain editors like Helix). [#2131](https://github.com/terrastruct/d2/issues/2131) + - Support for `--omit-version` flag. [#2377](https://github.com/terrastruct/d2/issues/2377) - Compiler: - `link`s can be set to root path, e.g. `/xyz`. [#2357](https://github.com/terrastruct/d2/issues/2357) - Parser: diff --git a/ci/release/template/man/d2.1 b/ci/release/template/man/d2.1 index 70269172b..b3132e15f 100644 --- a/ci/release/template/man/d2.1 +++ b/ci/release/template/man/d2.1 @@ -148,6 +148,9 @@ Set the output format when writing to stdout. Supported formats are: png, svg. O .It Fl -no-xml-tag Ar false Omit XML tag () from output SVG files. Useful when generating SVGs for direct HTML embedding .Ns . +.It Fl -omit-version Ar false +omit D2 version from generated image +.Ns . .El .Sh SUBCOMMANDS .Bl -tag -width Fl @@ -218,6 +221,8 @@ See --browser flag. See --stdout-format flag. .It Ev Sy D2_NO_XML_TAG See --no-xml-tag flag. +.It Ev Sy OMIT_VERSION +See --omit-version .El .Sh SEE ALSO .Xr d2plugin-tala 1 diff --git a/d2cli/main.go b/d2cli/main.go index 3eb486d70..5eb6e2b3e 100644 --- a/d2cli/main.go +++ b/d2cli/main.go @@ -136,6 +136,11 @@ func Run(ctx context.Context, ms *xmain.State) (err error) { saltFlag := ms.Opts.String("", "salt", "", "", "Add a salt value to ensure the output uses unique IDs. This is useful when generating multiple identical diagrams to be included in the same HTML doc, so that duplicate IDs do not cause invalid HTML. The salt value is a string that will be appended to IDs in the output.") + omitVersionFlag, err := ms.Opts.Bool("OMIT_VERSION", "omit-version", "", false, "omit D2 version from generated image") + if err != nil { + return err + } + plugins, err := d2plugin.ListPlugins(ctx) if err != nil { return err @@ -331,6 +336,7 @@ func Run(ctx context.Context, ms *xmain.State) (err error) { Scale: scale, NoXMLTag: noXMLTagFlag, Salt: saltFlag, + OmitVersion: omitVersionFlag, } if *watchFlag { @@ -884,6 +890,7 @@ func _render(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opts NoXMLTag: opts.NoXMLTag, Salt: opts.Salt, Scale: scale, + OmitVersion: opts.OmitVersion, } svg, err := d2svg.Render(diagram, renderOpts) if err != nil { @@ -978,6 +985,7 @@ func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opt DarkThemeID: opts.DarkThemeID, ThemeOverrides: opts.ThemeOverrides, DarkThemeOverrides: opts.DarkThemeOverrides, + OmitVersion: opts.OmitVersion, } svg, err = d2svg.Render(diagram, renderOpts) if err != nil { @@ -1085,6 +1093,7 @@ func renderPPTX(ctx context.Context, ms *xmain.State, presentation *pptx.Present DarkThemeID: opts.DarkThemeID, ThemeOverrides: opts.ThemeOverrides, DarkThemeOverrides: opts.DarkThemeOverrides, + OmitVersion: opts.OmitVersion, } svg, err = d2svg.Render(diagram, renderOpts) if err != nil { @@ -1332,6 +1341,7 @@ func renderPNGsForGIF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plug DarkThemeID: opts.DarkThemeID, ThemeOverrides: opts.ThemeOverrides, DarkThemeOverrides: opts.DarkThemeOverrides, + OmitVersion: opts.OmitVersion, } svg, err = d2svg.Render(diagram, renderOpts) if err != nil { diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index abc21d00b..adf6c5d1a 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -93,9 +93,10 @@ type RenderOpts struct { // MasterID is passed when the diagram should use something other than its own hash for unique targeting // Currently, that's when multi-boards are collapsed - MasterID string - NoXMLTag *bool - Salt *string + MasterID string + NoXMLTag *bool + Salt *string + OmitVersion *bool } func dimensions(diagram *d2target.Diagram, pad int) (left, top, width, height int) { @@ -2629,8 +2630,12 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) { tag := "g" // Many things change when this is rendering for animation if opts.MasterID == "" { - fitToScreenWrapperOpening = fmt.Sprintf(``, - version.Version, + dataD2Version := "" + if opts.OmitVersion == nil || !*opts.OmitVersion { + dataD2Version = fmt.Sprintf(`data-d2-version="%s"`, version.Version) + } + fitToScreenWrapperOpening = fmt.Sprintf(``, + dataD2Version, alignment, w, h, dimensions,