import "./xregexp-all.js"; import { RdDCarac } from "../rdd-carac.js"; import { SystemCompendiums } from "../settings/system-compendiums.js"; import { RdDItemCompetence } from "../item-competence.js"; import { ACTOR_TYPES } from "../item.js"; const XREGEXP_ROLL = XRegExp("@roll\\[(?[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)(\\/(?[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+))?(/(?[\\+\\-]?\\d+))?\\]", 'giu') export class RdDTextEditor { static async enrichHTML(text, object) { const rddTextEditor = new RdDTextEditor(text) const replacedRolls = await rddTextEditor.replaceRolls() return await TextEditor.enrichHTML(replacedRolls, { relativeTo: object, secrets: object?.isOwner, async: true }) } constructor(text) { this.original = text } async replaceRolls() { if (!this.updated) { this.updated = this.original await XRegExp.forEach(this.original, XREGEXP_ROLL, async (rollMatch, i) => await this._replaceOneRoll(rollMatch)) } return this.updated } async _replaceOneRoll(rollMatch) { const carac = RdDCarac.caracDetails(rollMatch.carac); const competence = rollMatch.competence ? RdDItemCompetence.findCompetence(await SystemCompendiums.getCompetences(ACTOR_TYPES.personnage), rollMatch.competence) : undefined if (carac) { const replacement = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/apps/link-text-roll.hbs`, { carac: carac, competence: competence?.name, diff: rollMatch.diff }); this.updated = this.updated.replace(rollMatch[0], replacement); } } static async rollText(event, actor) { const caracCode = event.currentTarget.attributes['data-carac-code'].value; const competence = event.currentTarget.attributes['data-competence']?.value; const diff = event.currentTarget.attributes['data-diff']?.value const path = RdDCarac.caracDetails(caracCode)?.path const actors = actor ? [actor] : canvas.tokens.controlled.map(it => it.actor).filter(it => it) actors.filter(it => foundry.utils.getProperty(it, path) != undefined) .forEach(it => it.doRollCaracCompetence(caracCode, competence, diff)) } }