mirror of
https://github.com/gohugoio/hugo.git
synced 2025-02-17 05:33:43 +00:00
Add shortcode IsNamedParams property
It would be helpful to know whether a shortcode was called with positional or named parameters. This commit adds a boolean `IsNamedParams` property to the `ShortcodeWithPage` struct.
This commit is contained in:
parent
3d09de8910
commit
fde47c5eb9
2 changed files with 23 additions and 4 deletions
|
@ -31,9 +31,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type ShortcodeWithPage struct {
|
type ShortcodeWithPage struct {
|
||||||
Params interface{}
|
Params interface{}
|
||||||
Inner template.HTML
|
Inner template.HTML
|
||||||
Page *Page
|
Page *Page
|
||||||
|
IsNamedParams bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (scp *ShortcodeWithPage) Ref(ref string) (string, error) {
|
func (scp *ShortcodeWithPage) Ref(ref string) (string, error) {
|
||||||
|
@ -189,7 +190,6 @@ const innerCleanupRegexp = `\A<p>(.*)</p>\n\z`
|
||||||
const innerCleanupExpand = "$1"
|
const innerCleanupExpand = "$1"
|
||||||
|
|
||||||
func renderShortcode(sc shortcode, p *Page, t tpl.Template) string {
|
func renderShortcode(sc shortcode, p *Page, t tpl.Template) string {
|
||||||
var data = &ShortcodeWithPage{Params: sc.params, Page: p}
|
|
||||||
tmpl := getShortcodeTemplate(sc.name, t)
|
tmpl := getShortcodeTemplate(sc.name, t)
|
||||||
|
|
||||||
if tmpl == nil {
|
if tmpl == nil {
|
||||||
|
@ -197,6 +197,11 @@ func renderShortcode(sc shortcode, p *Page, t tpl.Template) string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data := &ShortcodeWithPage{Params: sc.params, Page: p}
|
||||||
|
if sc.params != nil {
|
||||||
|
data.IsNamedParams = reflect.TypeOf(sc.params).Kind() == reflect.Map
|
||||||
|
}
|
||||||
|
|
||||||
if len(sc.inner) > 0 {
|
if len(sc.inner) > 0 {
|
||||||
var inner string
|
var inner string
|
||||||
for _, innerData := range sc.inner {
|
for _, innerData := range sc.inner {
|
||||||
|
|
|
@ -119,6 +119,20 @@ func TestNamedParamSC(t *testing.T) {
|
||||||
CheckShortCodeMatch(t, `{{< img src = "one" class = "aspen grove" >}}`, `<img src="one" class="aspen grove">`, tem)
|
CheckShortCodeMatch(t, `{{< img src = "one" class = "aspen grove" >}}`, `<img src="one" class="aspen grove">`, tem)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIsNamedParamsSC(t *testing.T) {
|
||||||
|
tem := tpl.New()
|
||||||
|
tem.AddInternalShortcode("byposition.html", `<div id="{{ .Get 0 }}">`)
|
||||||
|
tem.AddInternalShortcode("byname.html", `<div id="{{ .Get "id" }}">`)
|
||||||
|
tem.AddInternalShortcode("ifnamedparams.html", `<div id="{{ if .IsNamedParams }}{{ .Get "id" }}{{ else }}{{ .Get 0 }}{{end}}">`)
|
||||||
|
|
||||||
|
CheckShortCodeMatch(t, `{{< ifnamedparams id="name" >}}`, `<div id="name">`, tem)
|
||||||
|
CheckShortCodeMatch(t, `{{< ifnamedparams position >}}`, `<div id="position">`, tem)
|
||||||
|
CheckShortCodeMatch(t, `{{< byname id="name" >}}`, `<div id="name">`, tem)
|
||||||
|
CheckShortCodeMatch(t, `{{< byname position >}}`, `<div id="error: cannot access positional params by string name">`, tem)
|
||||||
|
CheckShortCodeMatch(t, `{{< byposition position >}}`, `<div id="position">`, tem)
|
||||||
|
CheckShortCodeMatch(t, `{{< byposition id="name" >}}`, `<div id="error: cannot access named params by position">`, tem)
|
||||||
|
}
|
||||||
|
|
||||||
func TestInnerSC(t *testing.T) {
|
func TestInnerSC(t *testing.T) {
|
||||||
tem := tpl.New()
|
tem := tpl.New()
|
||||||
tem.AddInternalShortcode("inside.html", `<div{{with .Get "class"}} class="{{.}}"{{end}}>{{ .Inner }}</div>`)
|
tem.AddInternalShortcode("inside.html", `<div{{with .Get "class"}} class="{{.}}"{{end}}>{{ .Inner }}</div>`)
|
||||||
|
|
Loading…
Reference in a new issue