zwbetz
November 13, 2018, 9:52pm
1
There’s a GH issue out there, in which the user would like to pass the ref shortcode as an argument to a custom shortcode.
Per the issue details, the shortcode is named blank_url.html, and defined as:
<a target="_blank" href="{{ .Get 1 }}">{{ .Get 0 | markdownify }}</a>
And the proposed usage is (which is not currently possible):
{{< blank_url "here" (ref "projects/limecv.md") >}}
One way to get the desired behavior is to use .Inner.
So if the shortcode was instead defined as:
<a target="_blank" {{ printf "href=%q" .Inner | safeHTMLAttr }}>{{ .Get 0 | markdownify }}</a>
Its usage would then be:
{{< blank_url "here" >}}{{< ref "projects/limecv.md" >}}{{< /blank_url >}}
Which would output:
<a target="_blank" href="http://localhost:1313/projects/limecv/">here</a>
bep
November 13, 2018, 11:25pm
2
I quickly read that issue and I suspect that that will never be implemented (by me, that is). That particular use case could easily (and more cleanly) be implemented by calling .Page.GetPage inside that shortcode.
zwbetz
November 14, 2018, 2:11am
3
Nice, that does indeed make the usage cleaner. For others reading this:
Updated definition:
{{ $page := .Page.GetPage (.Get 1) }}
<a target="_blank" {{ printf "href=%q" $page.Permalink | safeHTMLAttr }}>{{ .Get 0 | markdownify }}</a>
Updated usage:
{{< blank_url "here" "projects/limecv.md" >}}
zwbetz
November 20, 2018, 2:51pm
4
To make the shortcode work with both internal and external resources.
Updated definition:
{{ $text := .Get 0 }}
{{ $ref := .Get 1 }}
{{ if (in $ref "//") }}
<a target="_blank" {{ printf "href=%q" $ref | safeHTMLAttr }}>{{ $text | markdownify }}</a>
{{ else }}
{{ $page := .Page.GetPage $ref }}
<a target="_blank" {{ printf "href=%q" $page.Permalink | safeHTMLAttr }}>{{ $text | markdownify }}</a>
{{ end }}
Updated usage:
{{< blank_url "internal" "projects/limecv.md" >}}
{{< blank_url "external" "https://gohugo.io/" >}}