diff --git a/transform/post.go b/transform/post.go new file mode 100644 index 000000000..f54688cb2 --- /dev/null +++ b/transform/post.go @@ -0,0 +1,46 @@ +package transform + +import ( + "io" + "net/url" + htmltran "code.google.com/p/go-html-transform/html/transform" +) + +type Transformer struct { + BaseURL string +} + +func (t *Transformer) Apply(r io.Reader, w io.Writer) (err error) { + var tr *htmltran.Transformer + + if tr, err = htmltran.NewFromReader(r); err != nil { + return + } + + if err = t.absUrlify(tr); err != nil { + return + } + + return tr.Render(w) +} + +func (t *Transformer) absUrlify(tr *htmltran.Transformer) (err error) { + var baseURL, inURL *url.URL + + if baseURL, err = url.Parse(t.BaseURL); err != nil { + return + } + + replace := func(in string) string { + if inURL, err = url.Parse(in); err != nil { + return in + "?" + } + return baseURL.ResolveReference(inURL).String() + } + + if err = tr.Apply(htmltran.TransformAttrib("src", replace), "script"); err != nil { + return + } + + return tr.Apply(htmltran.TransformAttrib("href", replace), "a") +} diff --git a/transform/posttrans_test.go b/transform/posttrans_test.go new file mode 100644 index 000000000..de2d2277c --- /dev/null +++ b/transform/posttrans_test.go @@ -0,0 +1,41 @@ +package transform + +import ( + "testing" + "strings" + "bytes" +) + +const H5_JS_CONTENT_DOUBLE_QUOTE = "