From e75784599e47bd3a28a0e0d3d258b71083a1e2cc Mon Sep 17 00:00:00 2001 From: Stephen Searles Date: Wed, 20 Sep 2017 10:13:39 -0400 Subject: [PATCH] including counts of how many pages media is referenced on --- media.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/media.go b/media.go index ba4b9fb..b4988b8 100644 --- a/media.go +++ b/media.go @@ -1,13 +1,48 @@ package caddyhugo import ( + "bytes" "fmt" "io" "net/http" + "net/url" + "path" + + "github.com/PuerkitoBio/goquery" + "github.com/gohugoio/hugo/hugolib" "git.stephensearles.com/stephen/caddy-hugo2/media" ) +func (ch *CaddyHugo) ReferencedMedia() map[string]map[*hugolib.Page]struct{} { + found := map[string]map[*hugolib.Page]struct{}{} + + for _, page := range ch.HugoSites.Pages() { + r := bytes.NewBufferString(string(page.Render())) + doc, err := goquery.NewDocumentFromReader(r) + if err != nil { + continue + } + doc.Find("img,video").Map(func(i int, s *goquery.Selection) string { + u, ok := s.Attr("src") + if ok { + u = path.Base(u) + if ud, err := url.QueryUnescape(u); err == nil { + u = ud + } + if m := found[u]; m == nil { + found[u] = make(map[*hugolib.Page]struct{}) + } + found[u][page] = struct{}{} + } + return "" + }) + + } + + return found +} + func (ch *CaddyHugo) uploadMedia(w http.ResponseWriter, r *http.Request) (int, error) { if ch.Media == nil { http.NotFound(w, r) @@ -49,6 +84,8 @@ func (ch *CaddyHugo) serveMediaPage(w http.ResponseWriter, r *http.Request) (int return 404, nil } + referenced := ch.ReferencedMedia() + io.WriteString(w, `