From 7c792f409fcb1fbe8ca3d6f90e027bc1239884a2 Mon Sep 17 00:00:00 2001 From: IrkTheImp <41175833+IrkTheImp@users.noreply.github.com> Date: Fri, 30 May 2025 04:13:08 -0500 Subject: [PATCH] Issue 80 Chatmessage fix (#81) * fix chatmessage to render the template in constructor. Update namespaces. * update all chat messages to render templates --- lang/en.json | 3 +- module/applications/chatMessage.mjs | 12 +- module/applications/deathMove.mjs | 15 +- module/applications/downtime.mjs | 17 +- module/applications/sheets/adversary.mjs | 46 +++--- module/applications/sheets/environment.mjs | 13 +- module/applications/sheets/pc.mjs | 182 ++++++++++++--------- module/data/pc.mjs | 2 +- module/dialogs/selectDialog.mjs | 9 +- module/documents/actor.mjs | 54 +++--- module/documents/item.mjs | 41 ++--- styles/daggerheart.css | 4 +- templates/chat/attack-roll.hbs | 2 +- templates/chat/damage-roll.hbs | 1 - 14 files changed, 230 insertions(+), 171 deletions(-) diff --git a/lang/en.json b/lang/en.json index 684fa06f..f38646c8 100755 --- a/lang/en.json +++ b/lang/en.json @@ -774,7 +774,8 @@ "AbilityCheckTitle": "{ability} Check" }, "AttackRoll": { - "Title": "Attack - {attack}" + "Title": "Attack - {attack}", + "RollDamage": "Roll Damage" }, "DamageRoll": { "Title": "Damage - {damage}", diff --git a/module/applications/chatMessage.mjs b/module/applications/chatMessage.mjs index fb4cc613..a8cf6f50 100644 --- a/module/applications/chatMessage.mjs +++ b/module/applications/chatMessage.mjs @@ -1,19 +1,11 @@ import DhpDualityRoll from '../data/dualityRoll.mjs'; import { DualityRollColor } from '../data/settings/Appearance.mjs'; -export default class DhpChatMesssage extends ChatMessage { +export default class DhpChatMessage extends ChatMessage { async renderHTML() { - if ( - this.type === 'dualityRoll' || - this.type === 'adversaryRoll' || - this.type === 'damageRoll' || - this.type === 'abilityUse' - ) { - this.content = await foundry.applications.handlebars.renderTemplate(this.content, this.system); - } - /* We can change to fully implementing the renderHTML function if needed, instead of augmenting it. */ const html = await super.renderHTML(); + if ( this.type === 'dualityRoll' && game.settings.get(SYSTEM.id, SYSTEM.SETTINGS.gameSettings.appearance).dualityColorScheme === diff --git a/module/applications/deathMove.mjs b/module/applications/deathMove.mjs index af4a0c9c..ea2c86e6 100644 --- a/module/applications/deathMove.mjs +++ b/module/applications/deathMove.mjs @@ -47,12 +47,15 @@ export default class DhpDeathMove extends HandlebarsApplicationMixin(Application const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/deathMove.hbs', { - player: this.actor.name, - title: game.i18n.localize(this.selectedMove.name), - img: this.selectedMove.img, - description: game.i18n.localize(this.selectedMove.description) - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/deathMove.hbs', + { + player: this.actor.name, + title: game.i18n.localize(this.selectedMove.name), + img: this.selectedMove.img, + description: game.i18n.localize(this.selectedMove.description) + } + ) }); cls.create(msg.toObject()); diff --git a/module/applications/downtime.mjs b/module/applications/downtime.mjs index f1da7678..49d8b1ab 100644 --- a/module/applications/downtime.mjs +++ b/module/applications/downtime.mjs @@ -70,13 +70,16 @@ export default class DhpDowntime extends HandlebarsApplicationMixin(ApplicationV const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/downtime.hbs', { - player: this.actor.name, - title: game.i18n.localize(this.selectedActivity.name), - img: this.selectedActivity.img, - description: game.i18n.localize(this.selectedActivity.description), - refreshedFeatures: refreshedFeatures - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/downtime.hbs', + { + player: this.actor.name, + title: game.i18n.localize(this.selectedActivity.name), + img: this.selectedActivity.img, + description: game.i18n.localize(this.selectedActivity.description), + refreshedFeatures: refreshedFeatures + } + ) }); cls.create(msg.toObject()); diff --git a/module/applications/sheets/adversary.mjs b/module/applications/sheets/adversary.mjs index 54827b84..2087ea0a 100644 --- a/module/applications/sheets/adversary.mjs +++ b/module/applications/sheets/adversary.mjs @@ -330,15 +330,19 @@ export default class AdversarySheet extends DaggerheartSheet(ActorSheetV2) { ); const cls = getDocumentClass('ChatMessage'); + const systemData = { + roll: roll._formula, + total: roll._total, + modifiers: modifiers, + diceResults: diceResults + }; const msg = new cls({ type: 'adversaryRoll', - system: { - roll: roll._formula, - total: roll._total, - modifiers: modifiers, - diceResults: diceResults - }, - content: 'systems/daggerheart/templates/chat/adversary-roll.hbs', + system: systemData, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/adversary-roll.hbs', + systemData + ), rolls: [roll] }); @@ -362,21 +366,25 @@ export default class AdversarySheet extends DaggerheartSheet(ActorSheetV2) { })); const cls = getDocumentClass('ChatMessage'); + const systemData = { + title: button.dataset.name, + origin: this.document.id, + roll: roll._formula, + advantageState, + total: roll._total, + modifiers: modifiers, + dice: dice, + targets: targets, + damage: { value: button.dataset.damage, type: button.dataset.damageType } + }; const msg = new cls({ type: 'adversaryRoll', sound: CONFIG.sounds.dice, - system: { - title: button.dataset.name, - origin: this.document.id, - roll: roll._formula, - advantageState, - total: roll._total, - modifiers: modifiers, - dice: dice, - targets: targets, - damage: { value: button.dataset.damage, type: button.dataset.damageType } - }, - content: 'systems/daggerheart/templates/chat/adversary-attack-roll.hbs', + system: systemData, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/adversary-attack-roll.hbs', + systemData + ), rolls: [roll] }); diff --git a/module/applications/sheets/environment.mjs b/module/applications/sheets/environment.mjs index 80295b05..8799d41a 100644 --- a/module/applications/sheets/environment.mjs +++ b/module/applications/sheets/environment.mjs @@ -123,10 +123,15 @@ export default class DhpEnvironment extends DaggerheartSheet(DocumentSheetV2) { const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/ability-use.hbs', { - title: game.i18n.format('DAGGERHEART.Chat.EnvironmentTitle', { actionType: button.dataset.actionType }), - card: { name: item.name, img: item.img, description: item.system.description } - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + { + title: game.i18n.format('DAGGERHEART.Chat.EnvironmentTitle', { + actionType: button.dataset.actionType + }), + card: { name: item.name, img: item.img, description: item.system.description } + } + ) }); cls.create(msg.toObject()); diff --git a/module/applications/sheets/pc.mjs b/module/applications/sheets/pc.mjs index effada64..4a91b0e5 100644 --- a/module/applications/sheets/pc.mjs +++ b/module/applications/sheets/pc.mjs @@ -494,27 +494,33 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { ); const cls = getDocumentClass('ChatMessage'); - const msgData = { - type: 'dualityRoll', - sound: CONFIG.sounds.dice, - system: { - title: game.i18n.format('DAGGERHEART.Chat.DualityRoll.AbilityCheckTitle', { - ability: game.i18n.localize(abilities[button.dataset.attribute].label) - }), - origin: this.document.id, - roll: roll._formula, - modifiers: modifiers, - hope: hope, - fear: fear, - advantage: advantage, - disadvantage: disadvantage - }, - user: game.user.id, - content: 'systems/daggerheart/templates/chat/duality-roll.hbs', - rolls: [roll] + + const systemContent = { + title: game.i18n.format('DAGGERHEART.Chat.DualityRoll.AbilityCheckTitle', { + ability: game.i18n.localize(abilities[button.dataset.attribute].label) + }), + origin: this.document.id, + roll: roll._formula, + modifiers: modifiers, + hope: hope, + fear: fear, + advantage: advantage, + disadvantage: disadvantage }; - await cls.create(msgData); + const msg = new cls({ + type: 'dualityRoll', + sound: CONFIG.sounds.dice, + system: systemContent, + user: game.user.id, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/duality-roll.hbs', + systemContent + ), + rolls: [roll] + }); + + await cls.create(msg.toObject()); } static async toggleMarks(_, button) { @@ -588,23 +594,28 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { evasion: x.actor.system.evasion })); + const systemData = { + title: weapon.name, + origin: this.document.id, + roll: roll._formula, + modifiers: modifiers, + hope: hope, + fear: fear, + advantage: advantage, + disadvantage: disadvantage, + damage: damage, + targets: targets + }; + const cls = getDocumentClass('ChatMessage'); const msg = new cls({ type: 'dualityRoll', sound: CONFIG.sounds.dice, - system: { - title: weapon.name, - origin: this.document.id, - roll: roll._formula, - modifiers: modifiers, - hope: hope, - fear: fear, - advantage: advantage, - disadvantage: disadvantage, - damage: damage, - targets: targets - }, - content: 'systems/daggerheart/templates/chat/attack-roll.hbs', + system: systemData, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/attack-roll.hbs', + systemData + ), rolls: [roll] }); @@ -642,17 +653,21 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { const card = this.document.items.find(x => x.uuid === button.dataset.key); const cls = getDocumentClass('ChatMessage'); + const systemData = { + title: `${game.i18n.localize('DAGGERHEART.Chat.DomainCard.Title')} - ${capitalize(button.dataset.domain)}`, + img: card.img, + name: card.name, + description: card.system.effect, + actions: card.system.actions + }; const msg = new cls({ type: 'abilityUse', user: game.user.id, - content: 'systems/daggerheart/templates/chat/ability-use.hbs', - system: { - title: `${game.i18n.localize('DAGGERHEART.Chat.DomainCard.Title')} - ${capitalize(button.dataset.domain)}`, - img: card.img, - name: card.name, - description: card.system.effect, - actions: card.system.actions - } + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + systemData + ), + system: systemData }); cls.create(msg.toObject()); @@ -790,13 +805,16 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/ability-use.hbs', { - title: game.i18n.localize('DAGGERHEART.Chat.FeatureTitle'), - card: { - name: `${feature.name} - Roll Of ${feature.system.featureType.data.numbers[index].value}`, - img: feature.img + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + { + title: game.i18n.localize('DAGGERHEART.Chat.FeatureTitle'), + card: { + name: `${feature.name} - Roll Of ${feature.system.featureType.data.numbers[index].value}`, + img: feature.img + } } - }) + ) }); cls.create(msg.toObject()); @@ -852,17 +870,21 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { const item = await fromUuid(button.dataset.id); const cls = getDocumentClass('ChatMessage'); + const systemData = { + title: game.i18n.localize('DAGGERHEART.Chat.FeatureTitle'), + img: item.img, + name: item.name, + description: item.system.description, + actions: item.system.actions + }; const msg = new cls({ type: 'abilityUse', user: game.user.id, - content: 'systems/daggerheart/templates/chat/ability-use.hbs', - system: { - title: game.i18n.localize('DAGGERHEART.Chat.FeatureTitle'), - img: item.img, - name: item.name, - description: item.system.description, - actions: item.system.actions - } + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + systemData + ), + system: systemData }); cls.create(msg.toObject()); @@ -873,22 +895,26 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { const type = button.dataset.type; const cls = getDocumentClass('ChatMessage'); + const systemData = { + title: + type === 'ancestry' + ? game.i18n.localize('DAGGERHEART.Chat.FoundationCard.AncestryTitle') + : type === 'community' + ? game.i18n.localize('DAGGERHEART.Chat.FoundationCard.CommunityTitle') + : game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), + img: item.img, + name: item.name, + description: item.system.description, + actions: [] + }; const msg = new cls({ type: 'abilityUse', user: game.user.id, - system: { - title: - type === 'ancestry' - ? game.i18n.localize('DAGGERHEART.Chat.FoundationCard.AncestryTitle') - : type === 'community' - ? game.i18n.localize('DAGGERHEART.Chat.FoundationCard.CommunityTitle') - : game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), - img: item.img, - name: item.name, - description: item.system.description, - actions: [] - }, - content: 'systems/daggerheart/templates/chat/ability-use.hbs' + system: systemData, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + systemData + ) }); cls.create(msg.toObject()); @@ -905,10 +931,13 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/ability-use.hbs', { - title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), - card: { name: title, img: item.img, description: ability.description } - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + { + title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), + card: { name: title, img: item.img, description: ability.description } + } + ) }); cls.create(msg.toObject()); @@ -921,10 +950,13 @@ export default class PCSheet extends DaggerheartSheet(ActorSheetV2) { const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/ability-use.hbs', { - title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), - card: { name: item.name, img: item.img, description: item.system.description } - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/ability-use.hbs', + { + title: game.i18n.localize('DAGGERHEART.Chat.FoundationCard.SubclassFeatureTitle'), + card: { name: item.name, img: item.img, description: item.system.description } + } + ) }); cls.create(msg.toObject()); diff --git a/module/data/pc.mjs b/module/data/pc.mjs index c7aa9660..9ab9dbd4 100644 --- a/module/data/pc.mjs +++ b/module/data/pc.mjs @@ -337,7 +337,7 @@ export default class DhpPC extends foundry.abstract.TypeDataModel { get refreshableFeatures() { return this.parent.items.reduce( (acc, x) => { - if (x.type === 'feature' && x.system.refreshData?.type) { + if (x.type === 'feature' && x.system.refreshData?.type === 'feature' && x.system.refreshData?.type) { acc[x.system.refreshData.type].push(x); } diff --git a/module/dialogs/selectDialog.mjs b/module/dialogs/selectDialog.mjs index e4792238..484979cc 100644 --- a/module/dialogs/selectDialog.mjs +++ b/module/dialogs/selectDialog.mjs @@ -5,9 +5,12 @@ export default class SelectDialog extends Dialog { this.data = { title: data.title, buttons: data.buttons, - content: renderTemplate('systems/daggerheart/templates/dialog/item-select.hbs', { - items: data.choices - }) + content: foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/dialog/item-select.hbs', + { + items: data.choices + } + ) }; this.actor = data.actor; diff --git a/module/documents/actor.mjs b/module/documents/actor.mjs index eb89e5ef..60f83c60 100644 --- a/module/documents/actor.mjs +++ b/module/documents/actor.mjs @@ -246,22 +246,26 @@ export default class DhpActor extends Actor { } const cls = getDocumentClass('ChatMessage'); + const systemData = { + title: game.i18n.format('DAGGERHEART.Chat.DamageRoll.Title', { damage: title }), + roll: rollString, + damage: { + total: rollResult.total, + type: damage.type + }, + dice: dice, + modifiers: modifiers, + targets: targets + }; const msg = new cls({ type: 'damageRoll', user: game.user.id, sound: CONFIG.sounds.dice, - system: { - title: game.i18n.format('DAGGERHEART.Chat.DamageRoll.Title', { damage: title }), - roll: rollString, - damage: { - total: rollResult.total, - type: damage.type - }, - dice: dice, - modifiers: modifiers, - targets: targets - }, - content: 'systems/daggerheart/templates/chat/damage-roll.hbs', + system: systemData, + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/damage-roll.hbs', + systemData + ), rolls: [roll] }); @@ -355,11 +359,14 @@ export default class DhpActor extends Actor { const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/damage-roll.hbs', { - roll: roll.formula, - total: roll.result, - type: action.damage.type - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/damage-roll.hbs', + { + roll: roll.formula, + total: roll.result, + type: action.damage.type + } + ) }); cls.create(msg.toObject()); @@ -374,11 +381,14 @@ export default class DhpActor extends Actor { const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, - content: await renderTemplate('systems/daggerheart/templates/chat/healing-roll.hbs', { - roll: roll.formula, - total: roll.result, - type: action.healing.type - }) + content: await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/chat/healing-roll.hbs', + { + roll: roll.formula, + total: roll.result, + type: action.healing.type + } + ) }); cls.create(msg.toObject()); diff --git a/module/documents/item.mjs b/module/documents/item.mjs index cbf3ff2b..837b5564 100644 --- a/module/documents/item.mjs +++ b/module/documents/item.mjs @@ -38,25 +38,28 @@ export default class DhpItem extends Item { }, {}); // Render the document creation form - const html = await renderTemplate('systems/daggerheart/templates/sidebar/documentCreate.hbs', { - folders, - name: data.name || game.i18n.format('DOCUMENT.New', { type: label }), - folder: data.folder, - hasFolders: folders.length >= 1, - type: data.type || CONFIG[documentName]?.defaultType || typeObjects.armor, - types: { - Items: [typeObjects.armor, typeObjects.weapon, typeObjects.consumable, typeObjects.miscellaneous], - Character: [ - typeObjects.class, - typeObjects.subclass, - typeObjects.ancestry, - typeObjects.community, - typeObjects.feature, - typeObjects.domainCard - ] - }, - hasTypes: types.length > 1 - }); + const html = await foundry.applications.handlebars.renderTemplate( + 'systems/daggerheart/templates/sidebar/documentCreate.hbs', + { + folders, + name: data.name || game.i18n.format('DOCUMENT.New', { type: label }), + folder: data.folder, + hasFolders: folders.length >= 1, + type: data.type || CONFIG[documentName]?.defaultType || typeObjects.armor, + types: { + Items: [typeObjects.armor, typeObjects.weapon, typeObjects.consumable, typeObjects.miscellaneous], + Character: [ + typeObjects.class, + typeObjects.subclass, + typeObjects.ancestry, + typeObjects.community, + typeObjects.feature, + typeObjects.domainCard + ] + }, + hasTypes: types.length > 1 + } + ); // Render the confirmation dialog window return Dialog.prompt({ diff --git a/styles/daggerheart.css b/styles/daggerheart.css index 4353bacb..c44b2b76 100755 --- a/styles/daggerheart.css +++ b/styles/daggerheart.css @@ -2828,14 +2828,14 @@ div.daggerheart.views.multiclass { font-style: normal; font-weight: 400; font-display: swap; - src: url(https://fonts.gstatic.com/s/montserrat/v29/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Ew-.ttf) format('truetype'); + src: url(https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCtr6Ew-.ttf) format('truetype'); } @font-face { font-family: 'Montserrat'; font-style: normal; font-weight: 600; font-display: swap; - src: url(https://fonts.gstatic.com/s/montserrat/v29/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu170w-.ttf) format('truetype'); + src: url(https://fonts.gstatic.com/s/montserrat/v30/JTUHjIg1_i6t8kCHKm4532VJOt5-QNFgpCu170w-.ttf) format('truetype'); } .application.sheet.daggerheart.dh-style h1 { font-family: 'Cinzel Decorative', serif; diff --git a/templates/chat/attack-roll.hbs b/templates/chat/attack-roll.hbs index ccc93087..4deaf45b 100644 --- a/templates/chat/attack-roll.hbs +++ b/templates/chat/attack-roll.hbs @@ -164,7 +164,7 @@ {{/if}}