refactor: extract inline HTML to templates, split oversized files, fix bugs
- Extract all inline HTML from JS into 21 Handlebars templates (chat/, dialogs/, ui/) - Split utils.mjs (1507) into barrel + helpers.mjs, combat.mjs, d30.mjs - Split roll.mjs (1632) into barrel + roll-base.mjs, roll-prompt.mjs, roll-combat.mjs, roll-damage.mjs - Split lethal-fantasy.mjs (1426) into bootstrap + chat-reaction.mjs - Fix: missing async on injectDiceTray (free-roll.mjs:29 SyntaxError) - Fix: weapon._id fallback for deserialized chat-message weapon objects - Fix: missing await on rollModifier.evaluate() calls in roll-combat.mjs - Fix: choices→choicesList ReferenceError in utils.mjs - Fix: add 12 missing i18n keys (chooseWeapon, chooseSave, attackRoll, etc.) - Fix: restore sideLabel in bonus-die-select.hbs - Clean: remove dead messageContent param, console.log→log() - Style: barrel files preserve existing import paths
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
{{#if (equals type "aetherSpend")}}
|
||||
<p>🔮 <strong>{{actorName}}</strong> casts <em>{{spellName}}{{#if tierLabel}}{{tierLabel}}{{/if}}</em> — spends <strong>{{value}}</strong> Aether <span style="color:#888;">({{oldValue}} → {{newValue}})</span>.</p>
|
||||
{{else if (equals type "graceSpend")}}
|
||||
<p>✨ <strong>{{actorName}}</strong> invokes <em>{{spellName}}</em> — spends <strong>{{value}}</strong> Grace <span style="color:#888;">({{oldValue}} → {{newValue}})</span>.</p>
|
||||
{{else if (equals type "bleedingNotice")}}
|
||||
<p><strong>Bleeding:</strong> Wound of {{value}} HP for {{value}} seconds.</p>
|
||||
{{else if (equals type "d30BonusRoll")}}
|
||||
<p>D30 bonus: rolled <strong>{{formula}}</strong> = <strong>{{value}}</strong></p>
|
||||
{{else if (equals type "mulligan")}}
|
||||
<p><strong>{{actorName}}</strong> uses Mulligan and re-rolls {{side}}: <strong>{{oldRoll}}</strong> → <strong>{{newRoll}}</strong>.</p>
|
||||
{{> chat/dice-breakdown diceResults=diceResults D30result=D30result D30message=D30message}}
|
||||
<p>Both sides may now react to the new numbers.</p>
|
||||
{{else}}
|
||||
<p>
|
||||
<strong>{{actorName}}</strong>
|
||||
{{#if (equals type "grit")}}
|
||||
spends 1 {{resource}} and rolls <strong>{{value}}</strong> for {{side}}.
|
||||
{{else if (equals type "luck")}}
|
||||
spends 1 {{resource}} and rolls <strong>{{value}}</strong> for {{side}}.
|
||||
{{else if (equals type "bonusDie")}}
|
||||
adds <strong>{{formula}}</strong> and rolls <strong>{{value}}</strong> for {{side}}.
|
||||
{{else if (equals type "d30Bonus")}}
|
||||
gains <strong>+{{value}}</strong> from D30 bonus die for {{side}}.
|
||||
{{else if (equals type "d30Auto")}}
|
||||
uses <strong>{{specialName}}</strong> from D30 — {{#if (equals side "defense")}}defense automatically succeeds!{{else}}attack automatically hits!{{/if}}
|
||||
{{else if (equals type "d30Flag")}}
|
||||
D30 — <strong>{{specialName}}</strong> triggered for {{actorName}}!
|
||||
{{else if (equals type "d30Bleed")}}
|
||||
D30 — <strong>Bleeding/Internal Injury</strong> on hit! Damage past DR will cause a bleeding wound.
|
||||
{{else if (equals type "d30DamageMultiplier")}}
|
||||
D30 — <strong>x{{value}} damage</strong> before damage reduction!
|
||||
{{else if (equals type "d30DRMultiplier")}}
|
||||
D30 — Defense grants <strong>x{{value}} DR</strong> (choose which DR types to multiply when damage is applied).
|
||||
{{else if (equals type "shieldBlock")}}
|
||||
rolls <strong>{{shieldLabel}}</strong> and adds <strong>{{shieldBonus}}</strong> to defense ({{newTotal}} ≥ {{opposingRoll}}). <strong>Shield blocked the attack!</strong> Both armor DR and shield DR <strong>{{shieldDR}}</strong> will apply to damage.
|
||||
{{else if (equals type "shieldFail")}}
|
||||
rolls <strong>{{shieldLabel}}</strong> and adds <strong>{{shieldBonus}}</strong> to defense ({{newTotal}} < {{opposingRoll}}). Shield did not block — normal hit, armor DR only.
|
||||
{{else if (equals type "generic")}}
|
||||
{{{body}}}
|
||||
{{/if}}
|
||||
</p>
|
||||
{{/if}}
|
||||
Reference in New Issue
Block a user