Mixins
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ul>
<ul>
<li>foo</li>
<li>bar</li>
<li>baz</li>
</ul>
Mixins are compiled to functions, and can take arguments:
mixin pet(name)
li.pet= name
ul
+pet('cat')
+pet('dog')
+pet('pig')
<ul>
<li class="pet">dog</li>
<li class="pet">pig</li>
</ul>
Mixins can also take a block of Pug to act as the content:
<div class="article">
<div class="article-wrapper">
<h1>Hello world</h1>
</div>
</div>
<div class="article">
<div class="article-wrapper">
<h1>Hello world</h1>
<p>This is my</p>
<p>Amazing article</p>
</div>
</div>
mixin link(href, name)
//- attributes == {class: "btn"}
a(class!=attributes.class href=href)= name
+link('/foo', 'foo')(class="btn")
<a class="btn" href="/foo">foo</a>
Note
The values in attributes
by default are already escaped! You should use !=
to avoid escaping them a second time. (See also .)
You can also use mixins with &attributes
:
<a class="btn" href="/foo">foo</a>
Note
You can also set default values for you arguments
. Same as setting default function parameters in ES6.
mixin article(title='Default Title')
.article
.article-wrapper
h1= title
//- Use
+article()
+article('Hello world')
<div class="article">
<div class="article-wrapper">
<h1>Default Title</h1>
</div>
</div>
<div class="article">
<div class="article-wrapper">
<h1>Hello world</h1>
</div>
</div>
You can write mixins that take an unknown number of arguments using the “rest arguments” syntax.
<ul id="my-list">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>