hugo/docs/content/en/render-hooks/blockquotes.md
2024-09-04 18:57:34 +02:00

6 KiB
Executable file
Raw Permalink Blame History

title linkTitle description categories keywords menu weight toc
Blockquote render hooks Blockquotes Create a blockquote render hook to override the rendering of Markdown blockquotes to HTML.
render hooks
docs
parent weight
render-hooks 30
30 true

{{< new-in 0.132.0 >}}

Context

Blockquote render hook templates receive the following context:

AlertType

(string) Applicable when Type is alert, this is the alert type converted to lowercase. See the alerts section below.

AlertTitle

{{< new-in 0.134.0 >}}

(template.HTML) Applicable when Type is alert, this is the alert title. See the alerts section below.

AlertSign

{{< new-in 0.134.0 >}}

(string) Applicable when Type is alert, this is the alert sign. Typically used to indicate whether an alert is graphically foldable, this is one of +-, or an empty string. See the alerts section below.

Attributes

(map) The Markdown attributes, available if you configure your site as follows:

{{< code-toggle file=hugo >}} [markup.goldmark.parser.attribute] block = true {{< /code-toggle >}}

Ordinal

(int) The zero-based ordinal of the blockquote on the page.

Page

(page) A reference to the current page.

PageInner

(page) A reference to a page nested via the RenderShortcodes method. See details.

Position

(string) The position of the blockquote within the page content.

Text

(template.HTML) The blockquote text, excluding the first line if Type is alert. See the alerts section below.

Type

(bool) The blockquote type. Returns alert if the blockquote has an alert designator, else regular. See the alerts section below.

Examples

In its default configuration, Hugo renders Markdown blockquotes according to the CommonMark specification. To create a render hook that does the same thing:

{{< code file=layouts/_default/_markup/render-blockquote.html copy=true >}}

{{ .Text }}
{{< /code >}}

To render a blockquote as an HTML figure element with an optional citation and caption:

{{< code file=layouts/_default/_markup/render-blockquote.html copy=true >}}

{{ .Text }}
{{ with .Attributes.caption }}
{{ . | safeHTML }}
{{ end }}
{{< /code >}}

Then in your markdown:

> Some text
{cite="https://gohugo.io" caption="Some caption"}

Alerts

Also known as callouts or admonitions, alerts are blockquotes used to emphasize critical information.

Basic syntax

With the basic Markdown syntax, the first line of each alert is an alert designator consisting of an exclamation point followed by the alert type, wrapped within brackets. For example:

{{< code file=content/example.md lang=text >}}

Note

Useful information that users should know, even when skimming content.

Tip

Helpful advice for doing things better or more easily.

Important

Key information users need to know to achieve their goal.

Warning

Urgent info that needs immediate user attention to avoid problems.

Caution

Advises about risks or negative outcomes of certain actions. {{< /code >}}

The basic syntax is compatible with GitHub, Obsidian, and Typora.

Extended syntax

With the extended Markdown syntax, you may optionally include an alert sign and/or an alert title. The alert sign is one of + or -, typically used to indicate whether an alert is graphically foldable. For example:

{{< code file=content/example.md lang=text >}}

[!WARNING]+ Radiation hazard Do not approach or handle without protective gear. {{< /code >}}

The extended syntax is compatible with Obsidian.

{{% note %}} The extended syntax is not compatible with GitHub or Typora. If you include an alert sign or an alert title, these applications render the Markdown as a blockquote. {{% /note %}}

Example

This blockquote render hook renders a multilingual alert if an alert designator is present, otherwise it renders a blockquote according to the CommonMark specification.

{{< code file=layouts/_default/_markup/render-blockquote.html copy=true >}} {{ $emojis := dict "caution" "" "important" "" "note" "" "tip" "💡" "warning" "" }}

{{ if eq .Type "alert" }}

{{ transform.Emojify (index $emojis .AlertType) }} {{ with .AlertTitle }} {{ . }} {{ else }} {{ or (i18n .AlertType) (title .AlertType) }} {{ end }}

{{ .Text }}
{{ else }}
{{ .Text }}
{{ end }} {{< /code >}}

To override the label, create these entries in your i18n files:

{{< code-toggle file=i18n/en.toml >}} caution = 'Caution' important = 'Important' note = 'Note' tip = 'Tip' warning = 'Warning' {{< /code-toggle >}}

Although you can use one template with conditional logic as shown above, you can also create separate templates for each Type of blockquote:

layouts/
└── _default/
    └── _markup/
        ├── render-blockquote-alert.html
        └── render-blockquote-regular.html

{{% include "/render-hooks/_common/pageinner.md" %}}