From 7381a2a7fe1535f2efd298e91e02bf44ff07139d Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Thu, 11 Jan 2024 19:03:24 -0700 Subject: [PATCH] Allow editing embedded documents (used for spells here) in the item's sheet itself. --- langs/en-ca.json | 12 ++++++++++- module/documents/Actor/Handler.mjs | 17 ++++++++++++--- module/documents/Actor/Player.mjs | 21 ++++++++++++++++--- module/settings/client_settings.mjs | 10 +++++++++ module/sheets/PlayerSheet.mjs | 2 ++ .../char-sheet-mvp/panels/spells.pc.hbs | 1 + 6 files changed, 56 insertions(+), 7 deletions(-) diff --git a/langs/en-ca.json b/langs/en-ca.json index a4574ab..de76603 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -67,6 +67,10 @@ "supplies": "Supplies", "resources": "Resources" } + }, + "openEmbeddedOnCreate": { + "name": "Edit Custom Items Immediately When Created", + "description": "Tells the character sheets that have \"Add\" buttons to open the Item's sheet when you create the new item so that you can immediately edit it without needing to click more buttons." } }, "sheet-names": { @@ -220,7 +224,8 @@ "notification": { "error": { "invalid-integer": "You must enter a valid whole number", - "item-not-found": "Failed to find an item to delete." + "item-not-found": "Failed to find an item to delete", + "spell-create-failed": "Failed to create a custom spell" } }, "dialogs": { @@ -262,6 +267,11 @@ "explosives": "Explosives", "piloting": "Piloting" } + }, + "defaults": { + "spell": { + "name": "(Unnamed Spell)" + } } }, diff --git a/module/documents/Actor/Handler.mjs b/module/documents/Actor/Handler.mjs index 2fbe384..8252ba2 100644 --- a/module/documents/Actor/Handler.mjs +++ b/module/documents/Actor/Handler.mjs @@ -14,17 +14,28 @@ export class ActorHandler extends Actor { return this.actorTypes[this.type]; }; - genericEmbeddedUpdate($event) { + async openEmbeddedSheet($event) { + console.log(`openEmbeddedSheet`) + if (this.fn?.openEmbeddedSheet) { + this.fn.openEmbeddedSheet.bind(this)($event); + } else { + const data = $event.currentTarget.dataset; + let item = await fromUuid(data.embeddedEdit); + item?.sheet.render(true); + }; + }; + + async genericEmbeddedUpdate($event) { if (!this.fn?.genericEmbeddedUpdate) return; this.fn.genericEmbeddedUpdate.bind(this)($event); }; - genericEmbeddedDelete($event) { + async genericEmbeddedDelete($event) { if (!this.fn?.genericEmbeddedDelete) return; this.fn.genericEmbeddedDelete.bind(this)($event); }; - createCustomSpell() { + async createCustomSpell() { if (!this.fn?.createCustomSpell) return; this.fn.createCustomSpell.bind(this)(); this.sheet.render(true); diff --git a/module/documents/Actor/Player.mjs b/module/documents/Actor/Player.mjs index 39ae1a8..65239f8 100644 --- a/module/documents/Actor/Player.mjs +++ b/module/documents/Actor/Player.mjs @@ -37,11 +37,26 @@ export class PlayerActor { }; /** @this {Actor} */ - static createCustomSpell() { - this.createEmbeddedDocuments( + static async createCustomSpell() { + let items = await this.createEmbeddedDocuments( "Item", - [{ type: `spell`, name: `New Spell` }] + [{ + type: `spell`, + name: game.i18n.format(`dotdungeon.defaults.spell.name`), + }] ); + if (items.length == 0) { + ui.notifications.error( + `dotdungeon.notifications.error.spell-create-failed`, + { localize: true, console: false } + ); + return; + }; this.sheet.render(); + if (game.settings.get(`dotdungeon`, `openEmbeddedOnCreate`)) { + for (const item of items) { + item.sheet.render(true); + }; + }; }; }; diff --git a/module/settings/client_settings.mjs b/module/settings/client_settings.mjs index d319fd8..c3e568f 100644 --- a/module/settings/client_settings.mjs +++ b/module/settings/client_settings.mjs @@ -8,4 +8,14 @@ export default function() { default: true, requiresReload: false, }); + + game.settings.register(`dotdungeon`, `openEmbeddedOnCreate`, { + name: `dotdungeon.settings.openEmbeddedOnCreate.name`, + hint: `dotdungeon.settings.openEmbeddedOnCreate.description`, + scope: `client`, + type: Boolean, + config: true, + default: true, + requiresReload: false, + }); }; \ No newline at end of file diff --git a/module/sheets/PlayerSheet.mjs b/module/sheets/PlayerSheet.mjs index a867f47..c1f588c 100644 --- a/module/sheets/PlayerSheet.mjs +++ b/module/sheets/PlayerSheet.mjs @@ -24,6 +24,8 @@ export class PlayerSheet extends GenericActorSheet { .on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor)); html.find(`[data-embedded-delete]`) .on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor)); + html.find(`[data-embedded-edit]`) + .on(`click`, this.actor.openEmbeddedSheet.bind(this.actor)); }; async getData() { diff --git a/templates/actors/char-sheet-mvp/panels/spells.pc.hbs b/templates/actors/char-sheet-mvp/panels/spells.pc.hbs index e3d30a5..fc766d7 100644 --- a/templates/actors/char-sheet-mvp/panels/spells.pc.hbs +++ b/templates/actors/char-sheet-mvp/panels/spells.pc.hbs @@ -33,6 +33,7 @@