1package ansi
2
3import (
4 "io"
5 "strings"
6)
7
8// An ImageElement is used to render images elements.
9type ImageElement struct {
10 Text string
11 BaseURL string
12 URL string
13 Child ElementRenderer
14 TextOnly bool
15}
16
17// Render renders an ImageElement.
18func (e *ImageElement) Render(w io.Writer, ctx RenderContext) error {
19 // Make OSC 8 hyperlink token.
20 hyperlink, resetHyperlink, _ := makeHyperlink(e.URL)
21
22 style := ctx.options.Styles.ImageText
23 if e.TextOnly {
24 style.Format = strings.TrimSuffix(style.Format, " →")
25 }
26
27 if len(e.Text) > 0 {
28 token := hyperlink + e.Text + resetHyperlink
29 el := &BaseElement{
30 Token: token,
31 Style: style,
32 }
33 err := el.Render(w, ctx)
34 if err != nil {
35 return err
36 }
37 }
38
39 if e.TextOnly {
40 return nil
41 }
42
43 if len(e.URL) > 0 {
44 token := hyperlink + resolveRelativeURL(e.BaseURL, e.URL) + resetHyperlink
45 el := &BaseElement{
46 Token: token,
47 Prefix: " ",
48 Style: ctx.options.Styles.Image,
49 }
50 err := el.Render(w, ctx)
51 if err != nil {
52 return err
53 }
54 }
55
56 return nil
57}