diff options
-rw-r--r-- | publisher/htmlElementsCollector.go | 11 | ||||
-rw-r--r-- | publisher/htmlElementsCollector_test.go | 2 |
2 files changed, 11 insertions, 2 deletions
diff --git a/publisher/htmlElementsCollector.go b/publisher/htmlElementsCollector.go index daaefe6cf..e2f8fd2ca 100644 --- a/publisher/htmlElementsCollector.go +++ b/publisher/htmlElementsCollector.go @@ -67,7 +67,9 @@ type cssClassCollectorWriter struct { isCollecting bool dropValue bool - inQuote bool + + inQuote bool + quoteValue byte } func (w *cssClassCollectorWriter) Write(p []byte) (n int, err error) { @@ -165,7 +167,12 @@ func (c *cssClassCollectorWriter) startCollecting() { func (c *cssClassCollectorWriter) toggleIfQuote(b byte) { if isQuote(b) { - c.inQuote = !c.inQuote + if c.inQuote && b == c.quoteValue { + c.inQuote = false + } else if !c.inQuote { + c.inQuote = true + c.quoteValue = b + } } } diff --git a/publisher/htmlElementsCollector_test.go b/publisher/htmlElementsCollector_test.go index 24bf87c2d..6b5ef9863 100644 --- a/publisher/htmlElementsCollector_test.go +++ b/publisher/htmlElementsCollector_test.go @@ -87,6 +87,8 @@ func TestClassCollector(t *testing.T) { {"Alpine transition 1", `<div x-transition:enter-start="opacity-0 transform mobile:-translate-x-8 sm:-translate-y-8">`, f("div", "mobile:-translate-x-8 opacity-0 sm:-translate-y-8 transform", "")}, {"Vue bind", `<div v-bind:class="{ active: isActive }"></div>`, f("div", "active", "")}, + // https://github.com/gohugoio/hugo/issues/7746 + {"Apostrophe inside attribute value", `<a class="missingclass" title="Plus d'information">my text</a><div></div>`, f("a div", "missingclass", "")}, } { c.Run(test.name, func(c *qt.C) { w := newHTMLElementsCollectorWriter(newHTMLElementsCollector()) |