Last active
July 10, 2021 13:37
-
-
Save labocho/5448924 to your computer and use it in GitHub Desktop.
Handlebars で使うヘルパー関数集
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################## | |
# Formatting | |
############################## | |
# Date を "2013年8月31日 (土)" の形式に | |
Handlebars.registerHelper "d", (date) -> | |
return "" unless date | |
weekdays = ["日", "月", "火", "水", "木", "金", "土"] | |
"#{date.getFullYear()}年#{date.getMonth() + 1}月#{date.getDate()}日 (#{weekdays[date.getDay()]})" | |
# Date を "2013年8月31日 (土) 12:01:01" の形式に | |
Handlebars.registerHelper "dt", (date) -> | |
return "" unless date | |
Handlebars.helpers.d(date) + " #{date.getHours()}:#{date.getMinutes()}:#{date.getSeconds()}" | |
# true, false を icon-ok, icon-remove に | |
Handlebars.registerHelper "bool", (value) -> | |
switch value | |
when true | |
new Handlebars.SafeString("<i class='icon-ok'></i>") | |
when false | |
new Handlebars.SafeString("<i class='icon-remove'></i>") | |
# 数値に桁区切りを入れる | |
Handlebars.registerHelper "number_with_delimiter", (n, options) -> | |
return unless n? | |
n.toString(10).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1" + ",") | |
# 数値を通貨として表示 | |
Handlebars.registerHelper "number_to_currency", (n, options) -> | |
return unless n? | |
Handlebars.helpers.number_with_delimiter(n) + "円" | |
# 数値の範囲 (第 1 引数と第 2 引数) を桁区切りを入れて表示 | |
Handlebars.registerHelper "number_range_with_delimiter", (min, max, options) -> | |
return unless min? | |
return Handlebars.helpers.number_with_delimiter(min) if !max? || min == max | |
Handlebars.helpers.number_with_delimiter(min) + " - " + | |
Handlebars.helpers.number_with_delimiter(max) | |
# 数値の範囲 (第 1 引数と第 2 引数) を通貨の範囲として表示 | |
Handlebars.registerHelper "number_range_to_currency", (min, max, options) -> | |
return unless number_range = Handlebars.helpers.number_range_with_delimiter(min, max, options) | |
number_range + "円" | |
# 第 1 引数の各要素を第 2 引数で連結 | |
Handlebars.registerHelper "join", (list, delimiter, options) -> | |
return unless list | |
list.join delimiter | |
############################## | |
# Conditional attribute | |
############################## | |
# 第 1 引数に第 2 引数が含まれていれば "checked" | |
Handlebars.registerHelper "checked_if_include", (list, item, options) -> | |
return "checked" if list == item | |
return "checked" if _(list).include(item) | |
# 第 1 引数 == 第 2 引数なら "checked" | |
Handlebars.registerHelper "checked_if_equal", (a, b, options) -> | |
return "checked" if a == b | |
# 第 1 引数に第 2 引数が含まれていれば "selected" | |
Handlebars.registerHelper "selected_if_include", (list, item, options) -> | |
return "selected" if list == item | |
return "selected" if _(list).include(item) | |
# 第 1 引数 == 第 2 引数なら "selected" | |
Handlebars.registerHelper "selected_if_equal", (a, b, options) -> | |
return "selected" if a == b | |
############################## | |
# Block | |
############################## | |
# if の再定義 | |
# 真偽値の判定を変更する (null, false, undefined 以外は true) | |
Handlebars.registerHelper "if", (expr, options) -> | |
if expr? && expr != false | |
options.fn(this) | |
else | |
options.inverse(this) | |
# 第 1 引数と第 2 引数が == ならブロック内を出力 | |
Handlebars.registerHelper "if_equal", (a, b, options) -> | |
if a == b | |
options.fn(this) | |
else | |
options.inverse(this) | |
# 第 1 引数と第 2 引数が != ならブロック内を出力 | |
Handlebars.registerHelper "unless_equal", (a, b, options) -> | |
unless a == b | |
return options.fn(this) | |
else | |
options.inverse(this) | |
# 第 1 引数に第 2 引数が含まれていればブロック内出力 | |
# 判定は _.include を利用 | |
Handlebars.registerHelper "if_include", (list, item, options) -> | |
if _(list).include(item) | |
options.fn(this) | |
else | |
options.inverse(this) | |
# 第 1 引数から第 2 引数まで数え上げながらブロック内をくり返し評価 | |
# 番号は number で参照できる | |
Handlebars.registerHelper "upto", (first, last, options) -> | |
html = "" | |
for i in [first..last] | |
html += options.fn _(this).extend(number: i) | |
new Handlebars.SafeString(html) | |
############################## | |
# Function | |
############################## | |
# 第 1 引数を関数として呼び出す | |
# 第 2 引数以降は引数 | |
Handlebars.registerHelper "call", (func, args...) -> | |
options = args.pop() | |
func.apply(this, args) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment