New
authorMike Taylor <mike@indexdata.com>
Wed, 26 Mar 2014 10:32:24 +0000 (10:32 +0000)
committerMike Taylor <mike@indexdata.com>
Wed, 26 Mar 2014 10:32:24 +0000 (10:32 +0000)
src/mkws-handlebars.js [new file with mode: 0644]

diff --git a/src/mkws-handlebars.js b/src/mkws-handlebars.js
new file mode 100644 (file)
index 0000000..1fabf3c
--- /dev/null
@@ -0,0 +1,62 @@
+// Handlebars helpers
+Handlebars.registerHelper('json', function(obj) {
+    return $.toJSON(obj);
+});
+
+
+Handlebars.registerHelper('translate', function(s) {
+    return mkws.M(s);
+});
+
+
+// We need {{attr '@name'}} because Handlebars can't parse {{@name}}
+Handlebars.registerHelper('attr', function(attrName) {
+    return this[attrName];
+});
+
+
+/*
+ * Use as follows: {{#if-any NAME1 having="NAME2"}}
+ * Applicable when NAME1 is the name of an array
+ * The guarded code runs only if at least one element of the NAME1
+ * array has a subelement called NAME2.
+ */
+Handlebars.registerHelper('if-any', function(items, options) {
+    var having = options.hash.having;
+    for (var i in items) {
+       var item = items[i]
+       if (!having || item[having]) {
+           return options.fn(this);
+       }
+    }
+    return "";
+});
+
+
+Handlebars.registerHelper('first', function(items, options) {
+    var having = options.hash.having;
+    for (var i in items) {
+       var item = items[i]
+       if (!having || item[having]) {
+           return options.fn(item);
+       }
+    }
+    return "";
+});
+
+
+Handlebars.registerHelper('commaList', function(items, options) {
+    var out = "";
+
+    for (var i in items) {
+       if (i > 0) out += ", ";
+       out += options.fn(items[i])
+    }
+
+    return out;
+});
+
+
+Handlebars.registerHelper('index1', function(obj) {
+    return obj.data.index + 1;
+});