hugolib: Add .Name as a shortcode variable
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 21 Dec 2018 08:51:15 +0000 (09:51 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 21 Dec 2018 08:51:15 +0000 (09:51 +0100)
Fixes #5546

docs/content/en/variables/shortcodes.md
hugolib/shortcode.go
hugolib/shortcode_test.go

index 10b779396a223012703250dfea4cd9cba2fede7d..7462deec78839836f592840baab57c370fb16754 100644 (file)
@@ -20,6 +20,9 @@ toc: false
 
 [Shortcodes][shortcodes] have access to parameters delimited in the shortcode declaration via [`.Get`][getfunction], page- and site-level variables, and also the following shortcode-specific fields:
 
+.Name
+: Shortcode name.
+
 .Ordinal
 : Zero-based ordinal in relation to its parent. If the parent is the page itself, this ordinal will represent the position of this shortcode in the page content.
 
index db7bf2c62ce0f15efe0a34e5d286b964f484702c..6d87414a7fee5a6fdcf040113ca8b944d62968ff 100644 (file)
@@ -58,6 +58,7 @@ type ShortcodeWithPage struct {
        Inner         template.HTML
        Page          *PageWithoutContent
        Parent        *ShortcodeWithPage
+       Name          string
        IsNamedParams bool
 
        // Zero-based ordinal in relation to its parent. If the parent is the page itself,
@@ -401,7 +402,7 @@ func renderShortcode(
                return "", nil
        }
 
-       data := &ShortcodeWithPage{Ordinal: sc.ordinal, posOffset: sc.pos, Params: sc.params, Page: p, Parent: parent}
+       data := &ShortcodeWithPage{Ordinal: sc.ordinal, posOffset: sc.pos, Params: sc.params, Page: p, Parent: parent, Name: sc.name}
        if sc.params != nil {
                data.IsNamedParams = reflect.TypeOf(sc.params).Kind() == reflect.Map
        }
index 3a1656e262d441728f4508a39d00001677d39b50..9545301ea8014bf5dab4768ea2d5245ece99b772 100644 (file)
@@ -1027,7 +1027,7 @@ ordinal: 4 scratch ordinal: 5 scratch get ordinal: 4`)
 
 }
 
-func TestShortcodePosition(t *testing.T) {
+func TestShortcodeVariables(t *testing.T) {
        t.Parallel()
        assert := require.New(t)
 
@@ -1042,6 +1042,7 @@ title: "Hugo Rocks!"
    {{< s1 >}}
 
 `).WithTemplatesAdded("layouts/shortcodes/s1.html", `
+Name: {{ .Name }}
 {{ with .Position }}
 File: {{ .Filename }}
 Offset: {{ .Offset }}
@@ -1059,6 +1060,7 @@ String: {{ . | safeHTML }}
                filepath.FromSlash("File: content/page.md"),
                "Line: 7", "Column: 4", "Offset: 40",
                filepath.FromSlash("String: \"content/page.md:7:4\""),
+               "Name: s1",
        )
 
 }