X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Fmkws-handlebars.js;h=bd9af8d1065d9154c237f8756b17e0cb5a96cbbe;hb=5a126c522666307f9dffd7835c70fe1889d276cc;hp=537779e5b21860a9dbb29c7535780746dd153fdb;hpb=94a3083ce79f3cdf185add39bb933d695815b623;p=mkws-moved-to-github.git diff --git a/src/mkws-handlebars.js b/src/mkws-handlebars.js index 537779e..bd9af8d 100644 --- a/src/mkws-handlebars.js +++ b/src/mkws-handlebars.js @@ -1,24 +1,41 @@ // Handlebars helpers Handlebars.registerHelper('mkws-json', function(obj) { - return $.toJSON(obj); + return mkws.$.toJSON(obj); }); // This is intended to handle paragraphs from Wikipedia, hence the // rather hacky code to remove numbered references. // -Handlebars.registerHelper('mkws-paragraphs', function(obj, count) { +Handlebars.registerHelper('mkws-paragraphs', function(obj, nPara, nSent) { var acc = []; // For some reason, Handlebars provides the value - // {"hash":{},"data":{}} for undefined parameters - if (count.hasOwnProperty('hash')) count = undefined; - if (!count || count > obj.length) count = obj.length; + // {"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 (obj && (nPara === undefined || nPara.hasOwnProperty('hash') || nPara == 0 || nPara > obj.length)) { + nPara = obj.length; + } + if (nSent === undefined || nSent.hasOwnProperty('hash') || nSent == 0) { + nSent = Infinity; + } - for (var i = 0; i < count; i++) { - acc.push('
', obj[i].replace(/\[[0-9,]+\]/g, ''), '
'); + for (var i = 0; i < nPara; i++) { + // Remove numbered references such as "[1,3,4]" from text + var text = obj[i].replace(/\[[0-9,]+\]/g, ''); + // Next line from http://stackoverflow.com/questions/18914629/split-string-into-sentences-in-javascript + var sentences = text.replace(/([.?!])\s*(?=[A-Z])/g, "$1|").split("|"); + if (sentences.length > nSent) + sentences.length = nSent; + + acc.push('', sentences.join(' '), '
'); + nSent -= sentences.length; + if (nSent == 0) + break; } + return acc.join(''); }); @@ -79,3 +96,11 @@ Handlebars.registerHelper('mkws-commaList', function(items, options) { Handlebars.registerHelper('mkws-index1', function(obj) { return obj.data.index + 1; }); + +Handlebars.registerHelper('mkws-repeat', function(count, options) { + var out = ""; + for (var i = 0; i < count; i++) { + out += options.fn(this); + } + return out; +});