forked from public/foundryvtt-reve-de-dragon
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import "../xregexp-all.js";
 | |
| import { TextRollManager } from "./text-roll-formatter.js";
 | |
| 
 | |
| const REGEXP_ROLL_FORMULA = "(?<formula>[^\\[\\]]+)"
 | |
| const XREGEXP_ROLL_FORMULA = XRegExp("@roll\\[" + REGEXP_ROLL_FORMULA + "\\]", 'giu')
 | |
| 
 | |
| /**
 | |
|  * classe pour gérer les jets de dés (formules Foundry)
 | |
|  */
 | |
| export class TextRollFormula {
 | |
|   get code() { return 'formula' }
 | |
|   get template() { return `systems/foundryvtt-reve-de-dragon/templates/apps/textroll/link-text-roll-formula.hbs` }
 | |
| 
 | |
|   async onReplaceRoll(context) {
 | |
|     const handler = new FormulaTextBuilder(context)
 | |
|     return await handler.replaceAll()
 | |
|   }
 | |
| 
 | |
|   async onRollText(event, actor) {
 | |
|     const node = TextRollManager.getNode(event)
 | |
|     const rollFormula = node.data('formula')
 | |
|     if (rollFormula) {
 | |
|       const roll = new Roll(rollFormula)
 | |
|       await roll.evaluate()
 | |
|       await roll.toMessage()
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| class FormulaTextBuilder {
 | |
|   constructor(context) {
 | |
|     this.context = context
 | |
|   }
 | |
| 
 | |
|   async replaceAll() {
 | |
|     await XRegExp.forEach(this.context.text, XREGEXP_ROLL_FORMULA,
 | |
|       async (rollMatch, i) => await this.replaceMatch(rollMatch, i))
 | |
|     return this.context.text
 | |
|   }
 | |
| 
 | |
|   async replaceMatch(rollMatch, i) {
 | |
|     if (rollMatch.formula) {
 | |
|       const replacement = await TextRollManager.createRollText(this.context,
 | |
|         {
 | |
|           code: this.context.code,
 | |
|           formula: rollMatch.formula,
 | |
|         })
 | |
|       this.context.text = this.context.text.replace(rollMatch[0], replacement)
 | |
|     }
 | |
|   }
 | |
| }
 |