パーツの利用

{{ super() }} {{ page.title }}

Tipsなど共有コンポーネント的に使いたいものがあり、これをパーツとして登録することにしました。

Nunjucksのマクロ

不特定他数の場所から呼び出せるよう、Nunjucksのマクロを使います。

> **macro | Nunjucks** > https://mozilla.github.io/nunjucks/templating.html#macro

マクロは 関数名(引数, 引数...) のように宣言します。

「render」という関数を宣言してみましょう。

tips.html

<div data-gb-custom-block data-tag="-" data-description='' data-escription=''></div>

  <div class="border p-8 flex">
    <svg></svg>
    <span class="text-sm">{{ description }}</span>
  </div>

<div data-gb-custom-block data-tag="-"></div>

共有コンポーネントの呼び出し

別ファイルで宣言したマクロを import "ファイル名" as エイリアス名 のように読み込んで呼び出します。

1.md

<div data-gb-custom-block data-tag="import" data-0='./tips.html'></div>

## 見出し

本文です。

{{- tips.render("1つ目の説明です") }}

本文です。

{{- tips.render("2つ目の説明です") }}

呼び出した場所で、マクロに書いたHTMLが展開されます。

{{- figure.render("Tipsを設置した例", "/assets/2-3/macro.png") }}

参考:ホワイトスペースの扱い

マクロに書いたHTMLのインデントはマークダウンの「空白2つをコードブロックの開始とみなす」ルールとバッティングして、予想しないレンダリング結果になることがあります。

Numjucksのタグに {%-{{- のようにハイフンを付けると空白を取り除いたHTMLを展開できるため、マークダウンにHTMLを埋め込む場合は付けておいたほうが無難です。

<div data-gb-custom-block data-tag="-" data-description='' data-escription=''></div>

<div data-gb-custom-block data-tag="-">

{{- render("説明です") }}

> **Whitespace Control | Nunjucks** > https://mozilla.github.io/nunjucks/templating.html#whitespace-control

Last updated