From 6a8d9eb06738f77e61f75caff0262a21401aa560 Mon Sep 17 00:00:00 2001 From: Nikhil Nagarajan Date: Thu, 15 Jan 2026 11:05:46 -0500 Subject: [PATCH 1/5] hook? --- .../sheets/rollTables/rollTable.mjs | 14 ++++++++-- module/data/rollTable.mjs | 28 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 module/data/rollTable.mjs diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index f0fc7df6..be525850 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -10,15 +10,23 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa } static PARTS = DhRollTableSheet.buildParts(); + + static DEFAULT_OPTIONS = { + classes: ['daggerheart', 'sheet', 'dh-style'] + }; static actions = { addAltFormula: DhRollTableSheet.#onAddAltFormula, - removeAltForuma: DhRollTableSheet.#onRemoveAltFormula + removeAltFormula: DhRollTableSheet.#onRemoveAltFormula }; //Add formulafield - static async #onAddAltFormula(event, target) {} + static async #onAddAltFormula(event, target) { + + } //Remove formulafield - static async #onRemoveAltFormula(event, target) {} + static async #onRemoveAltFormula(event, target) { + + } } diff --git a/module/data/rollTable.mjs b/module/data/rollTable.mjs new file mode 100644 index 00000000..28594c98 --- /dev/null +++ b/module/data/rollTable.mjs @@ -0,0 +1,28 @@ +//Extra definitions for RollTable +export default class DhRollTableData extends foundry.abstract.TypeDataModel { + static defineSchema(){ + const fields = foundry.data.fields; + + return{ + formulaName: new fields.StringField({ // This is to give a name to go together with the core.formula + required:true, + nullable: false, + initial: 'Formula' // Should be a translation + }), + altFormula: new fields.ArrayField( + new fields.SchemaField({ + key: new fields.StringField({ + required:false, + nullable:false, + blank:true + }), + formula: new fields.StringField({ + required:true, + blank:false, + initial:"1d4" //Filler value + }) + }) + ) + } + } +} \ No newline at end of file From 30409246095a535cdb98fc191a63bffdea9383c2 Mon Sep 17 00:00:00 2001 From: Nikhil Nagarajan Date: Thu, 15 Jan 2026 12:16:31 -0500 Subject: [PATCH 2/5] help? --- .../sheets/rollTables/rollTable.mjs | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index be525850..c6ae7062 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -1,4 +1,6 @@ //Setting RollTable + +//import DhRollTableData from 'systems/daggerheart/module/data/rollTable.mjs'; export default class DhRollTableSheet extends foundry.applications.sheets.RollTableSheet { static buildParts() { const { footer, ...parts } = super.PARTS; @@ -12,8 +14,36 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa static PARTS = DhRollTableSheet.buildParts(); static DEFAULT_OPTIONS = { - classes: ['daggerheart', 'sheet', 'dh-style'] + ...super.DEFAULT_OPTIONS, + classes: ['daggerheart', 'sheet', 'dh-style'], + actions : { + addAltFormula: DhRollTableSheet.#onAddAltFormula, + removeAltFormula: DhRollTableSheet.#onRemoveAltFormula + } }; + + async _preparePartContext(partId, context, options) { + context = await super._preparePartContext(partId,context,options); + switch(partId) { + case 'summary': + context.flagData = this.daggerheartFlag + break; + } + return context; + } + + async _preRender(context,options) { + await super._preFirstRender(context,options); + if (!options.internalReferesh) + this.daggerheartFlag = new game.system.api.data.scenes.DHScene(this.document.flags.daggerheart) + } + + /** @override */ + async _processSubmitData(event, form, submitData, options) { + submitData.flags.daggerheart = this.daggerheartFlag.toObject(); + + super._processSubmitData(event, form, submitData, options); + } static actions = { addAltFormula: DhRollTableSheet.#onAddAltFormula, From 89f350a0137e1abbd8a5bcd41de9d9cc17c41099 Mon Sep 17 00:00:00 2001 From: WBHarry Date: Thu, 15 Jan 2026 18:35:24 +0100 Subject: [PATCH 3/5] . --- .../sheets/rollTables/rollTable.mjs | 61 ++++++++----------- module/data/_module.mjs | 1 + module/data/rollTable.mjs | 33 +++++----- 3 files changed, 42 insertions(+), 53 deletions(-) diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index c6ae7062..d6605e34 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -1,41 +1,41 @@ -//Setting RollTable - -//import DhRollTableData from 'systems/daggerheart/module/data/rollTable.mjs'; export default class DhRollTableSheet extends foundry.applications.sheets.RollTableSheet { - static buildParts() { - const { footer, ...parts } = super.PARTS; - return { - ...parts, - summary: { template: 'systems/daggerheart/templates/sheets/rollTable/summary.hbs' }, - footer - } - } - - static PARTS = DhRollTableSheet.buildParts(); - static DEFAULT_OPTIONS = { ...super.DEFAULT_OPTIONS, - classes: ['daggerheart', 'sheet', 'dh-style'], - actions : { + actions: { addAltFormula: DhRollTableSheet.#onAddAltFormula, - removeAltFormula: DhRollTableSheet.#onRemoveAltFormula + removeAltFormula: DhRollTableSheet.#onRemoveAltFormula } }; + static buildParts() { + const { footer, ...parts } = super.PARTS; + const test = { + ...parts, + summary: { template: 'systems/daggerheart/templates/sheets/rollTable/summary.hbs' }, + footer + }; + return test; + } + + static PARTS = DhRollTableSheet.buildParts(); + async _preparePartContext(partId, context, options) { - context = await super._preparePartContext(partId,context,options); - switch(partId) { + context = await super._preparePartContext(partId, context, options); + + switch (partId) { case 'summary': - context.flagData = this.daggerheartFlag + context.flagData = this.daggerheartFlag; break; } + return context; } - async _preRender(context,options) { - await super._preFirstRender(context,options); + async _preRender(context, options) { + await super._preRender(context, options); + if (!options.internalReferesh) - this.daggerheartFlag = new game.system.api.data.scenes.DHScene(this.document.flags.daggerheart) + this.daggerheartFlag = new game.system.api.data.DhRollTable(this.document.flags.daggerheart); } /** @override */ @@ -44,19 +44,8 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa super._processSubmitData(event, form, submitData, options); } - - static actions = { - addAltFormula: DhRollTableSheet.#onAddAltFormula, - removeAltFormula: DhRollTableSheet.#onRemoveAltFormula - }; - //Add formulafield - static async #onAddAltFormula(event, target) { - - } + static async #onAddAltFormula(_event, target) {} - //Remove formulafield - static async #onRemoveAltFormula(event, target) { - - } + static async #onRemoveAltFormula(_event, target) {} } diff --git a/module/data/_module.mjs b/module/data/_module.mjs index 0a476ee9..cc0df5e9 100644 --- a/module/data/_module.mjs +++ b/module/data/_module.mjs @@ -1,6 +1,7 @@ export { default as DhCombat } from './combat.mjs'; export { default as DhCombatant } from './combatant.mjs'; export { default as DhTagTeamRoll } from './tagTeamRoll.mjs'; +export { default as DhRollTable } from './rollTable.mjs'; export * as countdowns from './countdowns.mjs'; export * as actions from './action/_module.mjs'; diff --git a/module/data/rollTable.mjs b/module/data/rollTable.mjs index 28594c98..b1e90f51 100644 --- a/module/data/rollTable.mjs +++ b/module/data/rollTable.mjs @@ -1,28 +1,27 @@ +import FormulaField from './fields/formulaField.mjs'; + //Extra definitions for RollTable -export default class DhRollTableData extends foundry.abstract.TypeDataModel { - static defineSchema(){ +export default class DhRollTable extends foundry.abstract.TypeDataModel { + static defineSchema() { const fields = foundry.data.fields; - return{ - formulaName: new fields.StringField({ // This is to give a name to go together with the core.formula - required:true, - nullable: false, - initial: 'Formula' // Should be a translation + return { + formulaName: new fields.StringField({ + // This is to give a name to go together with the core.formula + required: true, + nullable: false, + initial: 'Formula' // Should be a translation }), altFormula: new fields.ArrayField( new fields.SchemaField({ key: new fields.StringField({ - required:false, - nullable:false, - blank:true + required: false, + nullable: false, + blank: true }), - formula: new fields.StringField({ - required:true, - blank:false, - initial:"1d4" //Filler value - }) + formula: new FormulaField() }) ) - } + }; } -} \ No newline at end of file +} From 4ef213d8ef7ff20256173508a904237df2b7d4b5 Mon Sep 17 00:00:00 2001 From: Nikhil Nagarajan Date: Thu, 15 Jan 2026 14:39:31 -0500 Subject: [PATCH 4/5] implementation initial --- .../sheets/rollTables/rollTable.mjs | 56 ++++++++++++++++++- templates/sheets/rollTable/summary.hbs | 39 ++++++++++++- 2 files changed, 91 insertions(+), 4 deletions(-) diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index d6605e34..a323a34c 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -1,6 +1,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTableSheet { static DEFAULT_OPTIONS = { ...super.DEFAULT_OPTIONS, + classes:['daggerheart', 'sheet', 'dh-style'], actions: { addAltFormula: DhRollTableSheet.#onAddAltFormula, removeAltFormula: DhRollTableSheet.#onRemoveAltFormula @@ -24,7 +25,27 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa switch (partId) { case 'summary': + context.flagFields = this.daggerheartFlag.schema.fields; context.flagData = this.daggerheartFlag; + const formulas =[]; + formulas.push({ + index: 0, + key: this.daggerheartFlag.formulaName, //Stored in flags as discussed + formula: context.source.formula, //Settinng default formula as part of first element + formulaInputName: "formula", + keyInputName: "flags.daggerheart.formulaName" + }); + this.daggerheartFlag.altFormula.forEach((alt,i) =>{ + formulas.push({ + index: i+1, + key: alt.key, + formula: alt.formula, + formulaInputName:`flags.daggerheart.altFormula.${i}.formula`, + keyInputName: `flags.daggerheart.altFormula.${i}.key` + }); + }); + context.formulaList=formulas; + context.isListView=formulas.length>1; //Condition to show list view only if more than one entry break; } @@ -40,12 +61,41 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa /** @override */ async _processSubmitData(event, form, submitData, options) { - submitData.flags.daggerheart = this.daggerheartFlag.toObject(); + //submitData.flags.daggerheart = this.daggerheartFlag.toObject(); super._processSubmitData(event, form, submitData, options); } - static async #onAddAltFormula(_event, target) {} + static async #onAddAltFormula(_event, target) { + const currentAltFormula=this.daggerheartFlag.altFormula; + await this.daggerheartFlag.updateSource({ + altFormula:[...currentAltFormula,{key:"",formula:""}] + }); + this.render({ internalRefresh: true }); + } - static async #onRemoveAltFormula(_event, target) {} + static async #onRemoveAltFormula(_event, target) { + const visualIndex = parseInt(target.dataset.index); + const currentAltFormula=this.daggerheartFlag.altFormula; + if(visualIndex===0) {//If deleting formula at [0] index + if(currentAltFormula.length>0) { + const newCore = currentAltFormula[0]; + const newAlt = currentAltFormula.slice(1); + await this.document.update({formula: newCore.formula}); + await this.daggerheartFlag.updateSource({ + formulaName:newCore.key, + altFormula:newAlt + }); + } else { + await this.document.update({ formula: "" }); + await this.daggerheartFlag.updateSource({ formulaName: "" }); + } + } else { + const arrayIndex = visualIndex - 1; + await this.daggerheartFlag.updateSource({ + altFormula: currentAltFormula.filter((_, i) => i !== arrayIndex) + }); + } + this.render({ internalRefresh: true }); + } } diff --git a/templates/sheets/rollTable/summary.hbs b/templates/sheets/rollTable/summary.hbs index 5d90266a..2592eb1c 100644 --- a/templates/sheets/rollTable/summary.hbs +++ b/templates/sheets/rollTable/summary.hbs @@ -1,6 +1,43 @@
{{formGroup fields.description value=source.description rootId=rootId}} - {{formGroup fields.formula value=source.formula placeholder=formulaPlaceholder rootId=rootId}} +
+ + Formula + + + + {{#if isListView}} + {{#each formulaList as |row|}} +
+ {{formGroup ../flagFields.formulaName + value=row.key + name=row.keyInputName + placeholder="Name" + }} + {{formGroup ../fields.formula + value=row.formula + name=row.formulaInputName + placeholder="Formula" + }} + + + +
+ {{/each}} + {{else}} +
+ + {{formGroup fields.formula + value=source.formula + placeholder=formulaPlaceholder + rootId=rootId + }} +
+ {{/if}} +
{{formGroup fields.replacement value=source.replacement rootId=rootId}} {{formGroup fields.displayRoll value=source.displayRoll rootId=rootId}}
\ No newline at end of file From 209963405f0ce9842a31cafe7bbd7c941990be41 Mon Sep 17 00:00:00 2001 From: Nikhil Nagarajan Date: Thu, 15 Jan 2026 14:39:35 -0500 Subject: [PATCH 5/5] updated comment --- module/applications/sheets/rollTables/rollTable.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/applications/sheets/rollTables/rollTable.mjs b/module/applications/sheets/rollTables/rollTable.mjs index a323a34c..6590c464 100644 --- a/module/applications/sheets/rollTables/rollTable.mjs +++ b/module/applications/sheets/rollTables/rollTable.mjs @@ -61,7 +61,7 @@ export default class DhRollTableSheet extends foundry.applications.sheets.RollTa /** @override */ async _processSubmitData(event, form, submitData, options) { - //submitData.flags.daggerheart = this.daggerheartFlag.toObject(); + //submitData.flags.daggerheart = this.daggerheartFlag.toObject(); caused render headaches super._processSubmitData(event, form, submitData, options); }