From c8e7fd3bc0753c07840274aff7072f9be8feaf17 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Sat, 11 Mar 2023 17:20:59 -0800 Subject: [PATCH] isolate CSS targeting to be diagram specific --- d2renderers/d2svg/d2svg.go | 162 +++++++++++++++++++++---------------- 1 file changed, 94 insertions(+), 68 deletions(-) diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go index 66de5a515..3147a6958 100644 --- a/d2renderers/d2svg/d2svg.go +++ b/d2renderers/d2svg/d2svg.go @@ -1353,7 +1353,7 @@ func RenderText(text string, x, height float64) string { return strings.Join(rendered, "") } -func embedFonts(buf *bytes.Buffer, source string, fontFamily *d2fonts.FontFamily) { +func embedFonts(buf *bytes.Buffer, diagramHash, source string, fontFamily *d2fonts.FontFamily) { fmt.Fprint(buf, ``, mdCSS) + css := mdCSS + css = strings.ReplaceAll(css, "font-italic", fmt.Sprintf("%s-font-italic", diagramHash)) + css = strings.ReplaceAll(css, "font-bold", fmt.Sprintf("%s-font-bold", diagramHash)) + css = strings.ReplaceAll(css, "font-mono", fmt.Sprintf("%s-font-mono", diagramHash)) + css = strings.ReplaceAll(css, "font-regular", fmt.Sprintf("%s-font-regular", diagramHash)) + fmt.Fprintf(upperBuf, ``, css) } if sketchRunner != nil { d2sketch.DefineFillPatterns(upperBuf) @@ -1790,9 +1779,10 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) { ) // TODO minify - docRendered := fmt.Sprintf(`%s%s%s%s%s%s`, + docRendered := fmt.Sprintf(`%s%s%s%s%s%s`, ``, fitToScreenWrapper, + diagramHash, w, h, left, top, w, h, doubleBorderElStr, backgroundEl.Render(), @@ -1803,14 +1793,14 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) { } // TODO include only colors that are being used to reduce size -func themeCSS(themeID int64, darkThemeID *int64) (stylesheet string, err error) { - out, err := singleThemeRulesets(themeID) +func themeCSS(diagramHash string, themeID int64, darkThemeID *int64) (stylesheet string, err error) { + out, err := singleThemeRulesets(diagramHash, themeID) if err != nil { return "", err } if darkThemeID != nil { - darkOut, err := singleThemeRulesets(*darkThemeID) + darkOut, err := singleThemeRulesets(diagramHash, *darkThemeID) if err != nil { return "", err } @@ -1820,30 +1810,66 @@ func themeCSS(themeID int64, darkThemeID *int64) (stylesheet string, err error) return out, nil } -func singleThemeRulesets(themeID int64) (rulesets string, err error) { +func singleThemeRulesets(diagramHash string, themeID int64) (rulesets string, err error) { out := "" theme := d2themescatalog.Find(themeID) // Global theme colors for _, property := range []string{"fill", "stroke", "background-color", "color"} { - out += fmt.Sprintf(".%s-N1{%s:%s;}.%s-N2{%s:%s;}.%s-N3{%s:%s;}.%s-N4{%s:%s;}.%s-N5{%s:%s;}.%s-N6{%s:%s;}.%s-N7{%s:%s;}.%s-B1{%s:%s;}.%s-B2{%s:%s;}.%s-B3{%s:%s;}.%s-B4{%s:%s;}.%s-B5{%s:%s;}.%s-B6{%s:%s;}.%s-AA2{%s:%s;}.%s-AA4{%s:%s;}.%s-AA5{%s:%s;}.%s-AB4{%s:%s;}.%s-AB5{%s:%s;}", + out += fmt.Sprintf(` + .%s .%s-N1{%s:%s;} + .%s .%s-N2{%s:%s;} + .%s .%s-N3{%s:%s;} + .%s .%s-N4{%s:%s;} + .%s .%s-N5{%s:%s;} + .%s .%s-N6{%s:%s;} + .%s .%s-N7{%s:%s;} + .%s .%s-B1{%s:%s;} + .%s .%s-B2{%s:%s;} + .%s .%s-B3{%s:%s;} + .%s .%s-B4{%s:%s;} + .%s .%s-B5{%s:%s;} + .%s .%s-B6{%s:%s;} + .%s .%s-AA2{%s:%s;} + .%s .%s-AA4{%s:%s;} + .%s .%s-AA5{%s:%s;} + .%s .%s-AB4{%s:%s;} + .%s .%s-AB5{%s:%s;}`, + diagramHash, property, property, theme.Colors.Neutrals.N1, + diagramHash, property, property, theme.Colors.Neutrals.N2, + diagramHash, property, property, theme.Colors.Neutrals.N3, + diagramHash, property, property, theme.Colors.Neutrals.N4, + diagramHash, property, property, theme.Colors.Neutrals.N5, + diagramHash, property, property, theme.Colors.Neutrals.N6, + diagramHash, property, property, theme.Colors.Neutrals.N7, + diagramHash, property, property, theme.Colors.B1, + diagramHash, property, property, theme.Colors.B2, + diagramHash, property, property, theme.Colors.B3, + diagramHash, property, property, theme.Colors.B4, + diagramHash, property, property, theme.Colors.B5, + diagramHash, property, property, theme.Colors.B6, + diagramHash, property, property, theme.Colors.AA2, + diagramHash, property, property, theme.Colors.AA4, + diagramHash, property, property, theme.Colors.AA5, + diagramHash, property, property, theme.Colors.AB4, + diagramHash, property, property, theme.Colors.AB5, ) }