Manual Reference Source

app/modules/utils/templating.js

const Handlebars = require('handlebars');
const MomentHandler = require('handlebars.moment');

MomentHandler.registerHelpers(Handlebars);

Handlebars.registerHelper('join', (array, sep, options) => array.map(item => options.fn(item)).join(sep));
Handlebars.registerHelper('people_join', (array, options) => {
    const hash = options.hash;
    const sep = hash.sep || ', ';
    const use_and = hash.useAnd || true;
    const minimal_number = hash.minNumber || 3;

    if (array.length <= minimal_number) {
        if (array.length === 1) {
            return array.map(item => options.fn(item)).join(sep);
        }

        if (use_and) {
            const display = array.slice(0, array.length - 1);
            const separated = display.map(item => options.fn(item)).join(sep);
            return `${separated} #POS#LANGl_and ${options.fn(array[array.length - 1])}`;
        }
        return array.map(item => options.fn(item)).join(sep);
    }
    const display = array.slice(0, minimal_number);
    const separated = display.map(item => options.fn(item)).join(sep);
    return `${separated} #POS#LANGl_et_al`;
});

Handlebars.registerHelper('filter_nested', (array, options) => {
    const type = options.hash.type || 'type';
    const value = options.hash.value;

    if (array.length === 0) {
        return '';
    }

    const filtered = array.filter(i => i[type] === value);

    if (filtered.length === 0) {
        return '';
    }

    return options.fn(filtered[0]);
});

module.exports = Handlebars;