module.exports = { /** * Crate a responsive on the text * Code from https://discordjs.guide/popular-topics/canvas.html#adding-in-text * @param {object} canvas the canvas object * @param {string} text the text * @param {number} defaultFontSize the default font size * @param {number} width the default width * @param {string} font the font */ applyText(canvas, text, defaultFontSize, width, font){ const ctx = canvas.getContext(`2d`); do { ctx.font = `${(defaultFontSize -= 1)}px ${font}`; } while (ctx.measureText(text).width > width); return ctx.font; }, wrapText(ctx, text, maxWidth) { return new Promise(resolve => { if (ctx.measureText(text).width < maxWidth) return resolve([text]); if (ctx.measureText(`W`).width > maxWidth) return resolve(null); const words = text.split(` `); const lines = []; let line = ``; while (words.length > 0) { let split = false; while (ctx.measureText(words[0]).width >= maxWidth) { const temp = words[0]; words[0] = temp.slice(0, -1); if (split) { words[1] = `${temp.slice(-1)}${words[1]}`; } else { split = true; words.splice(1, 0, temp.slice(-1)); } } if (ctx.measureText(`${line}${words[0]}`).width < maxWidth) { line += `${words.shift()} `; } else { lines.push(line.trim()); line = ``; } if (words.length === 0) lines.push(line.trim()); } return resolve(lines); }); } };