概要
公式ドキュメントでは分かりにくいPUGの応用記法について
改行せずにタグを連続表記
p #[span(lang='en') PUG#[small (was JADE)]]は#[span(lang='en') BEAUTIFUL]
<p><span lang="en">PUG<small>(was JADE)</small></span>は<span lang="en">BEAUTIFUL</span></p>
#[]
を使用するとインラインでタグを挿入することができる。これは入れ子も可能。
→PUG > Interpolation > Tag Interpolation
if文を使わずインラインでクラス名を出しわける
each val in [true, false]
input(type = 'checkbox', checked = val)
p(class = val ? 'active' : '') PUG is BEAUTIFUL
<input type="checkbox" checked>
<p class="active">PUG is BEAUTIFUL</p>
<input type="checkbox">
<p>PUG is BEAUTIFUL</p>
inputタグのcheckedはbool値を与えることでそのまま出しわけできる。
クラス名は三項演算子がそのまま使え、空になった属性は属性名ごと排除される。
これを利用すればif文を最低限まで減らすことができる。
→PUG > Attributes
→PUG > Attributes > Boolean Attributes
タグの属性名と値のセット自体を連想配列で与える
input(type = 'text')&attributes({value: '', placeholder: 'text', size: 10})
<input type="text" value="" placeholder="text" size="10">
&attributes
を使うことで連想配列のkeyとvalueをそのまま属性名と値として使用できる。
→PUG > Attributes > &attributes
各状況における変数の利用方法
-
let
btnText = 'Button'
btnTag = 'button'
btnAtb = 'type'
button(type = 'button')= 'This is ' + btnText
button(type = 'button')= `This is ${btnText}`
button(type = 'button') This is #{btnText}
#{btnTag}(type = 'button')
button&attributes({[btnAtb]: 'button'})
<button type="button">This is Button</button>
<button type="button">This is Button</button>
<button type="button">This is Button</button>
<button type="button"></button>
<button type="button"></button>
テキストの一部として変数を利用する場合は色々な方法で挿入できる。
タグ名として変数を利用する場合、は#{変数}
を使う。
属性名として変数を利用する場合は直接使えないので&attributes
を利用する。
フィルターの利用法
カスタムフィルターの他、jstransformerを利用できる。
利用する場合、jstransformer本体(→jstransformer npm)とフィルターに使いたい各モジュール(→JSTransformers)をnpmインストールすることで利用できる。
MarkdownファイルをHTMLに変換してインクルード
# PUG
+ PUG was JADE.
+ PUG is BEAUTIFUL.
include:markdown-it readme.md
<h1>PUG</h1>
<ul>
<li>PUG was JADE.</li>
<li>PUG is BEAUTIFUL.</li>
</ul>
stylusで書いたコードをcssに変換してインクルード
.header
margin 0 0 10px
font-size 2rem
padding 10px
& > .head
display inline-block
margin 0
font-weight 900
vertical-align middle
style
include:stylus common.styl
<style>.header {
margin: 0 0 10px;
font-size: 2rem;
padding: 10px;
}
.header > .head {
display: inline-block;
margin: 0;
font-weight: 900;
vertical-align: middle;
}
</style>
PUG上に記述したES6をbabelで変換
script
:babel(presets= ["env"])
k=e=>e+e;
<script>"use strict";
k = function k(e) {
return e + e;
};
</script>
→jstransformer-babel
→babel-preset-env
コードのシンタックスハイライトをビルドの時点で行う
:highlight(lang = 'html'):pug
input(type = 'checkbox', checked = true)
<span class="hljs-tag"><<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"checkbox"</span> <span class="hljs-attribute">checked</span>=<span class="hljs-value">"checked"</span>/></span>
:pug
でPUGコードをHTML化してから:highlight
でハイライト用のタグを挿入している。
→jstransformer-pug
→jstransformer-highlight
あるPUGファイルのミニファイファイルを作る
include:html-minifier:pug index.pug
:pug
でPUGコードをHTML化してから:html-minifier
でミニファイしている。
この方法を使うとGulpなどのタスクランナーなしに(SublimeTextのOnSaveBuildなどだけで)ミニファイファイルを作成できる。
→jstransformer-pug
→jstransformer-html-minifier