X-Git-Url: http://git.indexdata.com/?p=mkws-moved-to-github.git;a=blobdiff_plain;f=src%2Fmkws-handlebars.js;h=27975cd1b48baf255c9f70b037be6dc420cfe0c3;hp=67b3b190c0dab5f40fee36f4c15854d6a7a1f66d;hb=8075369ec49fde2321be3dc4265ff7016a86481d;hpb=44d5dd69aafff82420fa7e443938ac7e79b1ffea diff --git a/src/mkws-handlebars.js b/src/mkws-handlebars.js index 67b3b19..27975cd 100644 --- a/src/mkws-handlebars.js +++ b/src/mkws-handlebars.js @@ -1,7 +1,7 @@ // Handlebars helpers Handlebars.registerHelper('mkws-json', function(obj) { - return $.toJSON(obj); + return mkws.$.toJSON(obj); }); @@ -15,10 +15,10 @@ Handlebars.registerHelper('mkws-paragraphs', function(obj, nPara, nSent) { // {"hash":{},"data":{}} for parameters that are not provided. So we // have to be prepared for actual numbers, explicitly undefined // values and this dumb magic value. - if (nPara === undefined || nPara.hasOwnProperty('hash') || nPara == 0 || nPara > obj.length) { + if (obj && (nPara === undefined || nPara.hasOwnProperty('hash') || nPara == 0 || nPara > obj.length)) { nPara = obj.length; } - if (nSent === undefined || nSent.hasOwnProperty('hash') || nSent == 0 || nSent > obj.length) { + if (nSent === undefined || nSent.hasOwnProperty('hash') || nSent == 0) { nSent = Infinity; } @@ -81,6 +81,31 @@ Handlebars.registerHelper('mkws-first', function(items, options) { }); +var _urlRegexp = /^(https?:)?\/\//; +Handlebars.registerHelper('mkws-best-url', function(items) { + for (var i in items) { + var item = items[i] + if (item.match(_urlRegexp)) { + mkws.debug("'" + item + "' *is* a URL"); + return item; + } + mkws.debug("'" + item + "' is not a URL"); + } + return ""; +}); +Handlebars.registerHelper('mkws-other-urls', function(items) { + var res = []; + for (var i in items) { + var item = items[i] + if (item.match(_urlRegexp)) { + res.push(item); + } + } + return res; +}); + + + Handlebars.registerHelper('mkws-commaList', function(items, options) { var out = ""; @@ -96,3 +121,70 @@ Handlebars.registerHelper('mkws-commaList', function(items, options) { 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++) { + out += options.fn(this); + } + return out; +}); + +// Ridiculous that Handlebars has no way to do "or" +Handlebars.registerHelper('mkws-if-either', function(cond1, cond2, options) { + if (typeof cond1 === 'function') { cond1 = cond1.call(this); } + if (typeof cond2 === 'function') { cond2 = cond2.call(this); } + + if (cond1 || cond2) { + return options.fn(this); + } else { + 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); + } +});