diff --git a/transformer/transformers/absoluteurl.go b/transformer/transformers/absoluteurl.go
index 62e3c06ed..50a01fed8 100644
--- a/transformer/transformers/absoluteurl.go
+++ b/transformer/transformers/absoluteurl.go
@@ -62,6 +62,8 @@ var /* const */ imgTagAttrs = []string{"longdesc"}
// * action-xhr
// * Any tag with attribute:
// * longdesc
+// * Any tag with attribute:
+// * imagesrcset
//
// URLs in stylesheets and srcsets are handled by the ExternalUrlRewrite
// transformer.
@@ -146,8 +148,13 @@ func AbsoluteURL(e *Context) error {
amphtml.ToAbsoluteURL(documentURL, e.BaseURL, href.Val))
}
}
- if _, ok := htmlnode.FindAttribute(n, "", "srcset"); ok {
- rewriteSrcsetURLs(n, documentURL, e.BaseURL)
+ if srcset, ok := htmlnode.FindAttribute(n, "", "srcset"); ok {
+ htmlnode.SetAttribute(n, "", "srcset", rewriteSrcsetURLs(documentURL, e.BaseURL, srcset.Val))
+ }
+ if n.DataAtom == atom.Link {
+ if srcset, ok := htmlnode.FindAttribute(n, "", "imagesrcset"); ok {
+ htmlnode.SetAttribute(n, "", "imagesrcset", rewriteSrcsetURLs(documentURL, e.BaseURL, srcset.Val))
+ }
}
}
return nil
@@ -165,18 +172,16 @@ func rewriteAbsoluteURLs(n *html.Node, documentURL string, baseURL *url.URL,
}
}
-func rewriteSrcsetURLs(n *html.Node, documentURL string, baseURL *url.URL) {
- if v, ok := htmlnode.GetAttributeVal(n, "", "srcset"); ok {
- normalized, offsets := amphtml.ParseSrcset(v)
- var sb strings.Builder
- var pos int
- for _, element := range offsets {
- sb.WriteString(normalized[pos:element.Start])
- sb.WriteString(amphtml.ToAbsoluteURL(
- documentURL, baseURL, normalized[element.Start:element.End]))
- pos = element.End
- }
- sb.WriteString(normalized[pos:])
- htmlnode.SetAttribute(n, "", "srcset", sb.String())
+func rewriteSrcsetURLs(documentURL string, baseURL *url.URL, srcset string) string {
+ normalized, offsets := amphtml.ParseSrcset(srcset)
+ var sb strings.Builder
+ var pos int
+ for _, element := range offsets {
+ sb.WriteString(normalized[pos:element.Start])
+ sb.WriteString(amphtml.ToAbsoluteURL(
+ documentURL, baseURL, normalized[element.Start:element.End]))
+ pos = element.End
}
+ sb.WriteString(normalized[pos:])
+ return sb.String()
}
diff --git a/transformer/transformers/absoluteurl_test.go b/transformer/transformers/absoluteurl_test.go
index 58fee6caf..60cfd357d 100644
--- a/transformer/transformers/absoluteurl_test.go
+++ b/transformer/transformers/absoluteurl_test.go
@@ -173,6 +173,14 @@ func TestAbsoluteURLTansformer(t *testing.T) {
baseURL: "http://www.example.com",
documentURL: fooURL,
},
+ {
+ desc: "imagesrcset rewritten",
+ input: "",
+ expected: "",
+ baseURL: "https://example.com/",
+ documentURL: barURL,
+ },
}
for _, tc := range tcs {
rawInput := tt.Concat(
diff --git a/transformer/transformers/urlrewrite.go b/transformer/transformers/urlrewrite.go
index 51be1160b..cb996e38f 100644
--- a/transformer/transformers/urlrewrite.go
+++ b/transformer/transformers/urlrewrite.go
@@ -64,6 +64,8 @@ type nodeMap map[string]*html.Node
// *
// * / which are SVG-specific images.
// *
+// *
+// *
// *
// *