From 7271323a7530f2331628a3020d7f4e4a3ab06247 Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Fri, 17 Jan 2025 20:25:44 -0700 Subject: [PATCH] Add the combined sheet to make sure that it works in practice and make the changes to make it work --- langs/en-ca.json | 1 + module/Apps/ActorSheets/CombinedHeroSheet.mjs | 68 +++++++++++++++++++ module/Apps/ActorSheets/HeroSummaryCardV1.mjs | 5 +- module/hooks/init.mjs | 8 ++- templates/Apps/CombinedHeroSheet/style.css | 9 +++ templates/Apps/apps.css | 1 + 6 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 module/Apps/ActorSheets/CombinedHeroSheet.mjs create mode 100644 templates/Apps/CombinedHeroSheet/style.css diff --git a/langs/en-ca.json b/langs/en-ca.json index 66c2ae8..3b1513e 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -11,6 +11,7 @@ "RipCrypt": { "sheet-names": { "AllItemsSheetV1": "RipCrypt Item Sheet", + "CombinedHeroSheet": "Hero Sheet", "HeroSummaryCardV1": "Hero Stat Card", "HeroSkillsCardV1": "Hero Skill Card" }, diff --git a/module/Apps/ActorSheets/CombinedHeroSheet.mjs b/module/Apps/ActorSheets/CombinedHeroSheet.mjs new file mode 100644 index 0000000..28f6244 --- /dev/null +++ b/module/Apps/ActorSheets/CombinedHeroSheet.mjs @@ -0,0 +1,68 @@ +import { filePath } from "../../consts.mjs"; +import { GenericAppMixin } from "../GenericApp.mjs"; +import { HeroSummaryCardV1 } from "./HeroSummaryCardV1.mjs"; +import { Logger } from "../../utils/Logger.mjs"; + +const { HandlebarsApplicationMixin } = foundry.applications.api; +const { ActorSheetV2 } = foundry.applications.sheets; + +export class CombinedHeroSheet extends GenericAppMixin(HandlebarsApplicationMixin(ActorSheetV2)) { + + // #region Options + static DEFAULT_OPTIONS = { + classes: [ + `ripcrypt--actor`, + `ripcrypt--CombinedHeroSheet`, + ], + position: { + width: `auto`, + height: `auto`, + }, + window: { + resizable: false, + }, + actions: { + editItem: (_event, target) => HeroSummaryCardV1._editItem(target), + }, + form: { + submitOnChange: true, + closeOnSubmit: false, + }, + }; + + static PARTS = { + summary: { + template: filePath(`templates/Apps/HeroSummaryCardV1/content.hbs`), + }, + skills: { + template: filePath(`templates/Apps/HeroSkillsCardV1/content.hbs`), + }, + }; + // #endregion + + // #region Lifecycle + async _onRender(context, options) { + await super._onRender(context, options); + HeroSummaryCardV1._onRender.bind(this)(context, options); + }; + + async _preparePartContext(partId, ctx, opts) { + ctx = await super._preparePartContext(partId, ctx, opts); + ctx.actor = this.document; + + ctx = await HeroSummaryCardV1.prepareGuts(ctx); + ctx = await HeroSummaryCardV1.prepareWeapons(ctx); + ctx = await HeroSummaryCardV1.prepareArmor(ctx); + ctx = await HeroSummaryCardV1.prepareFatePath(ctx); + ctx = await HeroSummaryCardV1.prepareAbilityRow(ctx); + ctx = await HeroSummaryCardV1.prepareSpeed(ctx); + ctx = await HeroSummaryCardV1.prepareLevelData(ctx); + + Logger.debug(`Context:`, ctx); + return ctx; + }; + // #endregion + + // #region Actions + // #endregion +}; diff --git a/module/Apps/ActorSheets/HeroSummaryCardV1.mjs b/module/Apps/ActorSheets/HeroSummaryCardV1.mjs index 617b749..0b46279 100644 --- a/module/Apps/ActorSheets/HeroSummaryCardV1.mjs +++ b/module/Apps/ActorSheets/HeroSummaryCardV1.mjs @@ -42,7 +42,10 @@ export class HeroSummaryCardV1 extends GenericAppMixin(HandlebarsApplicationMixi // #region Lifecycle async _onRender(context, options) { await super._onRender(context, options); + HeroSummaryCardV1._onRender.bind(this)(context, options); + }; + static async _onRender() { const itemMenuOptions = [ { name: `Edit`, @@ -63,7 +66,7 @@ export class HeroSummaryCardV1 extends GenericAppMixin(HandlebarsApplicationMixi ]; if (itemMenuOptions.length) { new ContextMenu(this.element, `.weapon-ctx-menu`, itemMenuOptions, { jQuery: false, fixed: true }); - } + }; }; async _preparePartContext(partId, ctx, opts) { diff --git a/module/hooks/init.mjs b/module/hooks/init.mjs index 9abc757..c8e1e03 100644 --- a/module/hooks/init.mjs +++ b/module/hooks/init.mjs @@ -1,5 +1,6 @@ // Applications import { AllItemSheetV1 } from "../Apps/ItemSheets/AllItemSheetV1.mjs"; +import { CombinedHeroSheet } from "../Apps/ActorSheets/CombinedHeroSheet.mjs"; import { HeroSkillsCardV1 } from "../Apps/ActorSheets/HeroSkillsCardV1.mjs"; import { HeroSummaryCardV1 } from "../Apps/ActorSheets/HeroSummaryCardV1.mjs"; @@ -46,8 +47,13 @@ Hooks.once(`init`, () => { /* eslint-enabled no-undef */ // #region Actors - Actors.registerSheet(game.system.id, HeroSummaryCardV1, { + Actors.registerSheet(game.system.id, CombinedHeroSheet, { makeDefault: true, + types: [`hero`], + label: `RipCrypt.sheet-names.CombinedHeroSheet`, + themes: CombinedHeroSheet.themes, + }); + Actors.registerSheet(game.system.id, HeroSummaryCardV1, { types: [`hero`], label: `RipCrypt.sheet-names.HeroSummaryCardV1`, themes: HeroSummaryCardV1.themes, diff --git a/templates/Apps/CombinedHeroSheet/style.css b/templates/Apps/CombinedHeroSheet/style.css new file mode 100644 index 0000000..6143a9f --- /dev/null +++ b/templates/Apps/CombinedHeroSheet/style.css @@ -0,0 +1,9 @@ +.ripcrypt.ripcrypt--CombinedHeroSheet { + > .window-content { + gap: 4px; + } + + .HeroSkillsCardV1 { + --col-gap: 2px; + } +} diff --git a/templates/Apps/apps.css b/templates/Apps/apps.css index 07bfaf1..d28c847 100644 --- a/templates/Apps/apps.css +++ b/templates/Apps/apps.css @@ -1,3 +1,4 @@ @import url("./AllItemSheetV1/style.css"); +@import url("./CombinedHeroSheet/style.css"); @import url("./HeroSummaryCardV1/style.css"); @import url("./HeroSkillsCardV1/style.css");