)
type ShortcodeWithPage struct {
- Params interface{}
- Inner template.HTML
- Page *Page
+ Params interface{}
+ Inner template.HTML
+ Page *Page
+ IsNamedParams bool
}
func (scp *ShortcodeWithPage) Ref(ref string) (string, error) {
const innerCleanupExpand = "$1"
func renderShortcode(sc shortcode, p *Page, t tpl.Template) string {
- var data = &ShortcodeWithPage{Params: sc.params, Page: p}
tmpl := getShortcodeTemplate(sc.name, t)
if tmpl == nil {
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 {
var inner string
for _, innerData := range sc.inner {
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) {
tem := tpl.New()
tem.AddInternalShortcode("inside.html", `<div{{with .Get "class"}} class="{{.}}"{{end}}>{{ .Inner }}</div>`)