import { getWidthOfText } from "./utils.mjs"; export default class RegisterHandlebarsHelpers { static registerHelpers(){ Handlebars.registerHelper({ looseEq: this.looseEq, times: this.times, join: this.join, add: this.add, subtract: this.subtract, objectSelector: this.objectSelector, includes: this.includes, simpleEditor: this.simpleEditor, debug: this.debug, }); }; static looseEq(a, b){ return a == b; } 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 rangePicker(options) { let {name, value, min, max, step} = options.hash; name = name || "range"; value = value ?? ""; if ( Number.isNaN(value) ) value = ""; const html = ` ${value}`; return new Handlebars.SafeString(html); } static includes(list, item){ return list.includes(item); } static simpleEditor(content, options) { const { target, editable=true, button, engine="tinymce", collaborate=false, class: cssClass } = options.hash; const config = {name: target, value: content, button, collaborate, editable, engine}; const element = foundry.applications.fields.createEditorInput(config); if ( cssClass ) element.querySelector(".editor-content").classList.add(cssClass); return new Handlebars.SafeString(element.outerHTML); } static debug(a) { console.log(JSON.stringify(a)); return a; } }