From 0ad378b09cea90a2a70d7ff06af668abe22475a1 Mon Sep 17 00:00:00 2001 From: sth Date: Wed, 2 Dec 2020 12:52:26 +0100 Subject: Use --baseURL path for live-reload URL Fixes #6595 --- transform/livereloadinject/livereloadinject.go | 14 ++++++++++++-- transform/livereloadinject/livereloadinject_test.go | 10 ++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'transform') diff --git a/transform/livereloadinject/livereloadinject.go b/transform/livereloadinject/livereloadinject.go index a6e56ac41..cc80d046e 100644 --- a/transform/livereloadinject/livereloadinject.go +++ b/transform/livereloadinject/livereloadinject.go @@ -16,6 +16,9 @@ package livereloadinject import ( "bytes" "fmt" + "html" + "net/url" + "strings" "github.com/gohugoio/hugo/helpers" "github.com/gohugoio/hugo/transform" @@ -35,7 +38,8 @@ var tags = []tag{ // New creates a function that can be used // to inject a script tag for the livereload JavaScript in a HTML document. -func New(port int) transform.Transformer { +func New(baseURL url.URL) transform.Transformer { + return func(ft transform.FromTo) error { b := ft.From().Bytes() var idx = -1 @@ -51,6 +55,12 @@ func New(port int) transform.Transformer { } } + path := strings.TrimSuffix(baseURL.Path, "/") + + src := path + "/livereload.js?mindelay=10&v=2" + src += "&port=" + baseURL.Port() + src += "&path=" + strings.TrimPrefix(path+"/livereload", "/") + c := make([]byte, len(b)) copy(c, b) @@ -59,7 +69,7 @@ func New(port int) transform.Transformer { return err } - script := []byte(fmt.Sprintf(``, port)) + script := []byte(fmt.Sprintf(``, html.EscapeString(src))) i := idx if match.appendScript { diff --git a/transform/livereloadinject/livereloadinject_test.go b/transform/livereloadinject/livereloadinject_test.go index 59124f20b..50fbb8b92 100644 --- a/transform/livereloadinject/livereloadinject_test.go +++ b/transform/livereloadinject/livereloadinject_test.go @@ -15,6 +15,7 @@ package livereloadinject import ( "bytes" + "net/url" "strings" "testing" @@ -25,12 +26,17 @@ import ( func TestLiveReloadInject(t *testing.T) { c := qt.New(t) - expectBase := `` + lrurl, err := url.Parse("http://localhost:1234/subpath") + if err != nil { + t.Errorf("Parsing test URL failed") + return + } + expectBase := `` apply := func(s string) string { out := new(bytes.Buffer) in := strings.NewReader(s) - tr := transform.New(New(1313)) + tr := transform.New(New(*lrurl)) tr.Apply(out, in) return out.String() -- cgit v1.2.3