import { getWidthOfText } from './utils.mjs'; export default class RegisterHandlebarsHelpers { static registerHelpers() { Handlebars.registerHelper({ times: this.times, join: this.join, add: this.add, subtract: this.subtract, objectSelector: this.objectSelector, includes: this.includes, debug: this.debug, signedNumber: this.signedNumber, switch: this.switch, case: this.case }); } static times(nr, block) { var accum = ''; for (var i = 0; i < nr; ++i) accum += block.fn(i); return accum; } static join(...options) { return options.slice(0, options.length - 1); } static add(a, b) { const aNum = Number.parseInt(a); const bNum = Number.parseInt(b); return (Number.isNaN(aNum) ? 0 : aNum) + (Number.isNaN(bNum) ? 0 : bNum); } static subtract(a, b) { const aNum = Number.parseInt(a); const bNum = Number.parseInt(b); return (Number.isNaN(aNum) ? 0 : aNum) - (Number.isNaN(bNum) ? 0 : bNum); } static objectSelector(options) { let { title, values, titleFontSize, ids, style } = options.hash; const titleLength = getWidthOfText(title, titleFontSize, true, true); const margins = 12; const buttons = options.fn(); const nrButtons = Math.max($(buttons).length - 1, 1); const iconWidth = 26; const texts = values .reduce((acc, x, index) => { if (x) { acc.push( `${x}` ); } return acc; }, []) .join(' '); const html = `
${title}
${texts}
${buttons}
`; return new Handlebars.SafeString(html); } static includes(list, item) { return list.includes(item); } static signedNumber(number) { return number >= 0 ? `+${number}` : number; } static switch(value, options) { this.switch_value = value; this.switch_break = false; return options.fn(this); } static case(value, options) { if (value == this.switch_value) { this.switch_break = true; return options.fn(this); } } static debug(a) { console.log(JSON.stringify(a)); return a; } }