58 lines
2.2 KiB
JavaScript
58 lines
2.2 KiB
JavaScript
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\\[(?<carac>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+)(\\/(?<competence>[A-Za-zÀ-ÖØ-öø-ÿ\\s\\-]+))?(/(?<diff>[\\+\\-]?\\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))
|
|
}
|
|
} |