shithub: hugo

Download patch

ref: c26d00db648a4b475d94c9ed8e21dafb6efa1776
parent: 8483b53aefc3c6b52f9917e6e5af9c4d2e98df66
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Wed Nov 6 04:20:59 EST 2019

hugolib: Fix ref/relref anhcor handling

Fixes #6481

--- a/hugolib/shortcode_test.go
+++ b/hugolib/shortcode_test.go
@@ -16,9 +16,10 @@
 import (
 	"fmt"
 	"path/filepath"
-
 	"reflect"
 
+	"github.com/spf13/viper"
+
 	"github.com/gohugoio/hugo/parser/pageparser"
 	"github.com/gohugoio/hugo/resources/page"
 
@@ -1194,4 +1195,66 @@
 		"types named: - b1: true (bool) - b2: false (bool) - f1: 3.14 (float64) - i1: 33 (int) Get: true (bool) ",
 		"types string: - 0: true (string) - 1: trues (string) - 2: 33 (string) - 3: 3.14 (string) ",
 	)
+}
+
+func TestShortcodeRef(t *testing.T) {
+	for _, plainIDAnchors := range []bool{false, true} {
+		plainIDAnchors := plainIDAnchors
+		t.Run(fmt.Sprintf("plainIDAnchors=%t", plainIDAnchors), func(t *testing.T) {
+			t.Parallel()
+
+			v := viper.New()
+			v.Set("baseURL", "https://example.org")
+			v.Set("blackfriday", map[string]interface{}{
+				"plainIDAnchors": plainIDAnchors,
+			})
+
+			builder := newTestSitesBuilder(t).WithViper(v)
+
+			for i := 1; i <= 2; i++ {
+				builder.WithContent(fmt.Sprintf("page%d.md", i), `---
+title: "Hugo Rocks!"
+---
+
+
+
+[Page 1]({{< ref "page1.md" >}})
+[Page 1 with anchor]({{< relref "page1.md#doc" >}})
+[Page 2]({{< ref "page2.md" >}})
+[Page 2 with anchor]({{< relref "page2.md#doc" >}})
+
+
+## Doc
+
+
+`)
+			}
+
+			builder.Build(BuildCfg{})
+
+			if plainIDAnchors {
+				builder.AssertFileContent("public/page2/index.html",
+					`
+<a href="/page1/#doc">Page 1 with anchor</a>
+<a href="https://example.org/page2/">Page 2</a>
+<a href="/page2/#doc">Page 2 with anchor</a></p>
+
+<h2 id="doc">Doc</h2>
+`,
+				)
+			} else {
+				builder.AssertFileContent("public/page2/index.html",
+					`
+<p><a href="https://example.org/page1/">Page 1</a>
+<a href="/page1/#doc:45ca767ba77bc1445a0acab74f80812f">Page 1 with anchor</a>
+<a href="https://example.org/page2/">Page 2</a>
+<a href="/page2/#doc:8e3cdf52fa21e33270c99433820e46bd">Page 2 with anchor</a></p>
+<h2 id="doc:8e3cdf52fa21e33270c99433820e46bd">Doc</h2>
+`,
+				)
+			}
+
+		})
+	}
+
 }
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -719,12 +719,12 @@
 	var link string
 
 	if refURL.Path != "" {
-		target, err := s.s.getPageNew(p, refURL.Path)
+		var err error
+		target, err = s.s.getPageNew(p, refURL.Path)
 		var pos text.Position
 		if err != nil || target == nil {
 			if p, ok := source.(text.Positioner); ok {
 				pos = p.Position()
-
 			}
 		}
 
@@ -758,8 +758,8 @@
 	}
 
 	if refURL.Fragment != "" {
-		_ = target
 		link = link + "#" + refURL.Fragment
+
 		if pctx, ok := target.(pageContext); ok && !target.File().IsZero() && !pctx.getRenderingConfig().PlainIDAnchors {
 			if refURL.Path != "" {
 				link = link + ":" + target.File().UniqueID()