Spec-Zone.ru › Pug

Миксины

Миксины позволяют создавать многократно используемые блоки Pug.

//- Declaration
mixin list
  ul
    li foo
    li bar
    li baz
//- Use
+list
+list
<ul>
  <li>foo</li>
  <li>bar</li>
  <li>baz</li>
</ul>
<ul>
  <li>foo</li>
  <li>bar</li>
  <li>baz</li>
</ul>

Миксины компилируются в функции и могут принимать аргументы:

mixin pet(name)
  li.pet= name
ul
  +pet('cat')
  +pet('dog')
  +pet('pig')
<ul>
  <li class="pet">cat</li>
  <li class="pet">dog</li>
  <li class="pet">pig</li>
</ul>

Блоки миксинов

Миксины также могут принимать блок Pug, который будет использоваться в качестве содержимого:

mixin article(title)
  .article
    .article-wrapper
      h1= title
      if block
        block
      else
        p No content provided

+article('Hello world')

+article('Hello world')
  p This is my
  p Amazing article
<div class="article">
  <div class="article-wrapper">
    <h1>Hello world</h1>
    <p>No content provided</p>
  </div>
</div>
<div class="article">
  <div class="article-wrapper">
    <h1>Hello world</h1>
    <p>This is my</p>
    <p>Amazing article</p>
  </div>
</div>

Атрибуты миксинов

Миксины также получают неявный attributes аргумент, который берется из атрибутов, переданных миксину:

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>
Примечание

Значения в attributes по умолчанию уже экранированы! Вы должны использовать != для предотвращения их повторного экранирования. (См. также неэкранированные атрибуты.)

Вы также можете использовать миксины с &attributes:

mixin link(href, name)
  a(href=href)&attributes(attributes)= name

+link('/foo', 'foo')(class="btn")
<a class="btn" href="/foo">foo</a>
Примечание

Синтаксис +link(class="btn") также допустим и эквивалентен +link()(class="btn"), так как Pug пытается определить, являются ли содержимое скобок атрибутами или аргументами. Тем не менее, мы рекомендуем использовать второй синтаксис, так как вы явно передаете отсутствие аргументов и гарантируете, что первые скобки являются списком аргументов.

Значения аргументов по умолчанию

Вы также можете задать значения по умолчанию для ваших arguments. Аналогично установке параметров функций по умолчанию в ES6.

//- Declaration
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>

Аргументы с остатком

Вы можете написать миксины, которые принимают неопределенное количество аргументов, используя синтаксис «аргументы с остатком».

mixin list(id, ...items)
  ul(id=id)
    each item in items
      li= item

+list('my-list', 1, 2, 3, 4)
<ul id="my-list">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
</ul>

© Pug authors
Licensed under the MIT license.
https://pugjs.org/language/mixins.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API