34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
import { Exception } from '@handlebars/parser';
|
|
import { isEmpty, isFunction } from '../utils.js';
|
|
|
|
export default function (instance) {
|
|
instance.registerHelper('if', function (conditional, options) {
|
|
if (arguments.length != 2) {
|
|
throw new Exception('#if requires exactly one argument');
|
|
}
|
|
if (isFunction(conditional)) {
|
|
conditional = conditional.call(this);
|
|
}
|
|
|
|
// Default behavior is to render the positive path if the value is truthy and not empty.
|
|
// The `includeZero` option may be set to treat the conditional as purely not empty based on the
|
|
// behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
|
|
if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {
|
|
return options.inverse(this);
|
|
} else {
|
|
return options.fn(this);
|
|
}
|
|
});
|
|
|
|
instance.registerHelper('unless', function (conditional, options) {
|
|
if (arguments.length != 2) {
|
|
throw new Exception('#unless requires exactly one argument');
|
|
}
|
|
return instance.helpers['if'].call(this, conditional, {
|
|
fn: options.inverse,
|
|
inverse: options.fn,
|
|
hash: options.hash,
|
|
});
|
|
});
|
|
}
|