diff --git a/langs/en-ca.json b/langs/en-ca.json index ac5a6bb..a91a488 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -51,6 +51,7 @@ "fract": "Fract", "focus": "Focus" }, + "cost": "Cost", "currency": { "gold": "Gold", "silver": "Silver", diff --git a/module/data/Item/Ammo.mjs b/module/data/Item/Ammo.mjs index a3aa54b..566afc7 100644 --- a/module/data/Item/Ammo.mjs +++ b/module/data/Item/Ammo.mjs @@ -26,6 +26,14 @@ export class AmmoData extends CommonItemData { value: this.quantity, min: 0, }, + { + id: `cost`, + type: `cost`, + label: `RipCrypt.common.cost`, + gold: this.cost.gold, + silver: this.cost.silver, + copper: this.cost.copper, + }, { id: `access`, type: `dropdown`, diff --git a/module/data/Item/Common.mjs b/module/data/Item/Common.mjs index fe60d96..bf37c0e 100644 --- a/module/data/Item/Common.mjs +++ b/module/data/Item/Common.mjs @@ -1,5 +1,5 @@ +import { optionalInteger, requiredInteger } from "../helpers.mjs"; import { gameTerms } from "../../gameTerms.mjs"; -import { requiredInteger } from "../helpers.mjs"; const { fields } = foundry.data; @@ -14,6 +14,11 @@ export class CommonItemData extends foundry.abstract.TypeDataModel { trim: true, choices: gameTerms.Access, }), + cost: new fields.SchemaField({ + gold: optionalInteger(), + silver: optionalInteger(), + copper: optionalInteger(), + }), }; }; diff --git a/module/handlebarHelpers/inputs/currency.mjs b/module/handlebarHelpers/inputs/currency.mjs new file mode 100644 index 0000000..12b6ca8 --- /dev/null +++ b/module/handlebarHelpers/inputs/currency.mjs @@ -0,0 +1,33 @@ +import { groupInput } from "./groupInput.mjs"; + +export function costInput(input, data) { + return groupInput({ + title: input.label, + fields: [ + { + id: input.id + `-gold`, + type: `integer`, + label: `RipCrypt.common.currency.gold`, + value: input.gold, + path: `system.cost.gold`, + limited: input.limited, + }, + { + id: input.id + `-silver`, + type: `integer`, + label: `RipCrypt.common.currency.silver`, + value: input.silver, + path: `system.cost.silver`, + limited: input.limited, + }, + { + id: input.id + `-copper`, + type: `integer`, + label: `RipCrypt.common.currency.copper`, + value: input.copper, + path: `system.cost.copper`, + limited: input.limited, + }, + ], + }, data); +}; diff --git a/module/handlebarHelpers/inputs/formFields.mjs b/module/handlebarHelpers/inputs/formFields.mjs index 518b054..d8cd18e 100644 --- a/module/handlebarHelpers/inputs/formFields.mjs +++ b/module/handlebarHelpers/inputs/formFields.mjs @@ -1,5 +1,6 @@ import { barInput } from "./barInput.mjs"; import { booleanInput } from "./booleanInput.mjs"; +import { costInput } from "./currency.mjs"; import { dropdownInput } from "./dropdownInput.mjs"; import { groupInput } from "./groupInput.mjs"; import { numberInput } from "./numberInput.mjs"; @@ -18,6 +19,7 @@ const inputTypes = { boolean: booleanInput, group: groupInput, text: textInput, + cost: costInput, }; const typesToSanitize = new Set([ `string`, `number` ]); diff --git a/module/handlebarHelpers/inputs/groupInput.mjs b/module/handlebarHelpers/inputs/groupInput.mjs index d6a5c45..59f26e8 100644 --- a/module/handlebarHelpers/inputs/groupInput.mjs +++ b/module/handlebarHelpers/inputs/groupInput.mjs @@ -16,7 +16,7 @@ export function groupInput(input, data) { data-input-type="group" var:border-color="${input.borderColor ?? `var(--accent-1)`}" var:vertical-displacement="${input.verticalDisplacement ?? `12px`}" - var:padding-top="${input.paddingTop ?? `16px`}" + var:padding-top="${input.paddingTop ?? `20px`}" >
${title}
diff --git a/templates/Apps/AllItemSheetV1/style.css b/templates/Apps/AllItemSheetV1/style.css index 59089ef..2170d31 100644 --- a/templates/Apps/AllItemSheetV1/style.css +++ b/templates/Apps/AllItemSheetV1/style.css @@ -83,6 +83,11 @@ margin: 0 auto; } + hr:has(+ [data-input-type="group"]), + [data-input-type="group"] + hr { + display: none; + }; + label, .label { display: flex; align-items: center;