diff options
author | Bjørn Erik Pedersen <[email protected]> | 2020-05-25 21:05:59 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2020-05-27 11:10:48 +0200 |
commit | c950c86b4e5fb93f787ec78ca823bded9ef9fa3a (patch) | |
tree | b2501c9a6ca811094d6d04427aca0eb759dda92f /publisher | |
parent | 915202494b140882d594e0542153531f6afada02 (diff) | |
download | hugo-c950c86b4e5fb93f787ec78ca823bded9ef9fa3a.tar.gz hugo-c950c86b4e5fb93f787ec78ca823bded9ef9fa3a.zip |
publisher: Fix tag collector for nested table elements
Fixes #7318
Diffstat (limited to 'publisher')
-rw-r--r-- | publisher/htmlElementsCollector.go | 20 | ||||
-rw-r--r-- | publisher/htmlElementsCollector_test.go | 6 |
2 files changed, 26 insertions, 0 deletions
diff --git a/publisher/htmlElementsCollector.go b/publisher/htmlElementsCollector.go index e033f52d7..7bb2ebf15 100644 --- a/publisher/htmlElementsCollector.go +++ b/publisher/htmlElementsCollector.go @@ -116,7 +116,13 @@ func (w *cssClassCollectorWriter) Write(p []byte) (n int, err error) { w.buff.Reset() + if strings.HasPrefix(s, "</") { + continue + } + + s, tagName := w.insertStandinHTMLElement(s) el := parseHTMLElement(s) + el.Tag = tagName w.collector.mu.Lock() w.collector.elementSet[s] = true @@ -132,6 +138,20 @@ func (w *cssClassCollectorWriter) Write(p []byte) (n int, err error) { return } +// The net/html parser does not handle single table elemnts as input, e.g. tbody. +// We only care about the element/class/ids, so just store away the original tag name +// and pretend it's a <div>. +func (c *cssClassCollectorWriter) insertStandinHTMLElement(el string) (string, string) { + tag := el[1:] + spacei := strings.Index(tag, " ") + if spacei != -1 { + tag = tag[:spacei] + } + newv := strings.Replace(el, tag, "div", 1) + return newv, strings.ToLower(tag) + +} + func (c *cssClassCollectorWriter) endCollecting(drop bool) { c.isCollecting = false c.inQuote = false diff --git a/publisher/htmlElementsCollector_test.go b/publisher/htmlElementsCollector_test.go index 72abd94f0..e255a7354 100644 --- a/publisher/htmlElementsCollector_test.go +++ b/publisher/htmlElementsCollector_test.go @@ -51,6 +51,12 @@ func TestClassCollector(t *testing.T) { {"duplicates", `<div class="b a b"></div>`, f("div", "a b", "")}, {"single quote", `<body class='b a'></body>`, f("body", "a b", "")}, {"no quote", `<body class=b id=myelement></body>`, f("body", "b", "myelement")}, + {"thead", ` + https://github.com/gohugoio/hugo/issues/7318 +<table class="cl1"> + <thead class="cl2"><tr class="cl3"><td class="cl4"></td></tr></thead> + <tbody class="cl5"><tr class="cl6"><td class="cl7"></td></tr></tbody> +</table>`, f("table tbody td thead tr", "cl1 cl2 cl3 cl4 cl5 cl6 cl7", "")}, // https://github.com/gohugoio/hugo/issues/7161 {"minified a href", `<a class="b a" href=/></a>`, f("a", "a b", "")}, |