X-Git-Url: http://git.indexdata.com/?p=mkws-moved-to-github.git;a=blobdiff_plain;f=src%2Fmkws-handlebars.js;h=1572f89981cc106022f0b59c7c8e64b88a233a59;hp=7e5c0e0954e7520e90fff103827da79340273e30;hb=c07bf9888df059b7aa2a16cb8baea4221242c82d;hpb=465f1c472cff1f6b6eab04700a396d2e3765b5c1 diff --git a/src/mkws-handlebars.js b/src/mkws-handlebars.js index 7e5c0e0..1572f89 100644 --- a/src/mkws-handlebars.js +++ b/src/mkws-handlebars.js @@ -97,6 +97,10 @@ Handlebars.registerHelper('mkws-index1', function(obj) { return obj.data.index + 1; }); +Handlebars.registerHelper('mkws-indexplus', function(delta, obj) { + return obj.data.index + delta; +}); + Handlebars.registerHelper('mkws-repeat', function(count, options) { var out = ""; for (var i = 0; i < count; i++) { @@ -116,3 +120,46 @@ Handlebars.registerHelper('mkws-if-either', function(cond1, cond2, options) { return options.inverse(this); } }); + +// Ridiculous that this, too, is not part of regular Handlebars +// This code is by Mike Griffin, taken from this blog comment: +// http://doginthehat.com.au/2012/02/comparison-block-helper-for-handlebars-templates/#comment-44 + +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; }, + 'matches': function (l, r) { return l.match(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); + } +});