Skip to content

Commit

Permalink
rewrite extender.New()
Browse files Browse the repository at this point in the history
  • Loading branch information
jiangyoucai committed Apr 15, 2022
1 parent fe14d53 commit 0dd2732
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 40 deletions.
15 changes: 7 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,12 @@ var source = []byte(`![alt](image.png "title")`)
func Example() {
md := goldmark.New(
goldmark.WithExtensions(
images.NewExtender(func(src string) (string, map[string]string) {
return "loading.gif",
map[string]string{
"class": "lazy",
"data-src": src,
}
}),
images.NewExtender(
"/loading.gif", // source
"data-src", // target
map[string]string{
"class": "lazy", // arrtibute
}),
),
)
if err := md.Convert(source, os.Stdout); err != nil {
Expand All @@ -32,7 +31,7 @@ func Example() {

```html
<p>
<img src="loading.gif" alt="alt" title="title" class="lazy" data-src="image.png">
<img src="/loading.gif" alt="alt" title="title" class="lazy" data-src="image.png">
</p>
```

Expand Down
15 changes: 7 additions & 8 deletions example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,12 @@ var source = []byte(`![alt](image.png "title")`)
func Example() {
md := goldmark.New(
goldmark.WithExtensions(
images.NewExtender(func(src string) (string, map[string]string) {
return "loading.gif",
map[string]string{
"class": "lazy",
"data-src": src,
}
}),
images.NewExtender(
"/loading.gif", // source
"data-src", // target
map[string]string{
"class": "lazy", // arrtibute
}),
),
)
if err := md.Convert(source, os.Stdout); err != nil {
Expand All @@ -28,6 +27,6 @@ func Example() {

// Output:
// <p>
// <img src="loading.gif" alt="alt" title="title" class="lazy" data-src="image.png">
// <img src="/loading.gif" alt="alt" title="title" class="lazy" data-src="image.png">
// </p>
}
25 changes: 13 additions & 12 deletions extend.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,27 @@ import (

var extender *Extender

type ReplaceFunc = func(src string) (string, map[string]string)

type Extender struct {
ReplaceFunc
Source string
Target string
Attribute map[string]string
}

// New return initialized image render with source url replacing support.
func NewExtender(opt ReplaceFunc) goldmark.Extender {
func NewExtender(source, target string, attribute map[string]string) goldmark.Extender {

extender = &Extender{
ReplaceFunc: opt,
Source: source,
Target: target,
Attribute: attribute,
}
return extender
}

func (e *Extender) Extend(m goldmark.Markdown) {
if e.ReplaceFunc != nil {
m.Renderer().AddOptions(
renderer.WithNodeRenderers(
util.Prioritized(NewRenderer(), 500),
),
)
}
m.Renderer().AddOptions(
renderer.WithNodeRenderers(
util.Prioritized(NewRenderer(), 500),
),
)
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ module github.com/fundipper/goldmark-images

go 1.18

require github.com/yuin/goldmark v1.4.11
require github.com/yuin/goldmark v1.4.11
20 changes: 9 additions & 11 deletions render.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,24 @@ func (r *Renderer) renderImage(w util.BufWriter, source []byte, node ast.Node, e

n := node.(*ast.Image)

if extender.ReplaceFunc != nil {
src, data := extender.ReplaceFunc(util.BytesToReadOnlyString(n.Destination))

n.Destination = util.StringToReadOnlyBytes(src)
for k, v := range data {
n.SetAttributeString(k, util.StringToReadOnlyBytes(v))
}
for k, v := range extender.Attribute {
n.SetAttributeString(k, util.StringToReadOnlyBytes(v))
}
n.SetAttributeString(extender.Target, n.Destination)
n.Destination = util.StringToReadOnlyBytes(extender.Source)

w.WriteString("<img src=\"")
w.WriteString(`<img src="`)
if r.Unsafe || !html.IsDangerousURL(n.Destination) {
w.Write(util.EscapeHTML(util.URLEscape(n.Destination, true)))
}
w.WriteString(`" alt="`)
w.Write(n.Text(source))
w.WriteByte('"')
w.WriteString(`"`)

if n.Title != nil {
w.WriteString(` title="`)
r.Writer.Write(w, n.Title)
w.WriteByte('"')
w.Write(n.Title)
w.WriteString(`"`)
}

if n.Attributes() != nil {
Expand All @@ -61,5 +58,6 @@ func (r *Renderer) renderImage(w util.BufWriter, source []byte, node ast.Node, e
} else {
w.WriteString(">")
}

return ast.WalkSkipChildren, nil
}

0 comments on commit 0dd2732

Please sign in to comment.