Skip to content

Instantly share code, notes, and snippets.

@acterry
Created August 1, 2016 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save acterry/41e55ff13a1ffdbbf59f578fca1008bb to your computer and use it in GitHub Desktop.
Save acterry/41e55ff13a1ffdbbf59f578fca1008bb to your computer and use it in GitHub Desktop.
Handlebar.js helper for conditionals
// taken from the comments section of http://doginthehat.com.au/2012/02/comparison-block-helper-for-handlebars-templates/#comment-44
/*
Sample usages:
{{#compare "Test" "Test"}}
Default comparison of "==="
{{/compare}}
{{#compare fooArray.Count ">" 5}}
There are more than 5 foos
{{/compare}}
*/
Handlebars.registerHelper('compare', function (lvalue, operator, rvalue, options) {
var operators, result;
if (arguments.length < 3) {
throw new Error("Handlerbars Helper 'compare' needs 2 parameters");
}
if (options === undefined) {
options = rvalue;
rvalue = operator;
operator = "===";
}
operators = {
'==': function (l, r) { return l == r; },
'===': function (l, r) { return l === r; },
'!=': function (l, r) { return l != r; },
'!==': function (l, r) { return l !== r; },
'<': function (l, r) { return l < r; },
'>': function (l, r) { return l > r; },
'<=': function (l, r) { return l <= r; },
'>=': function (l, r) { return l >= r; },
'typeof': function (l, r) { return typeof l == r; }
};
if (!operators[operator]) {
throw new Error("Handlerbars Helper 'compare' doesn't know the operator " + operator);
}
result = operators[operator](lvalue, rvalue);
if (result) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment