diff --git a/module/sheets/Actors/PC/PlayerSheetV2.mjs b/module/sheets/Actors/PC/PlayerSheetV2.mjs index 32d0ed9..51f8da2 100644 --- a/module/sheets/Actors/PC/PlayerSheetV2.mjs +++ b/module/sheets/Actors/PC/PlayerSheetV2.mjs @@ -2,6 +2,7 @@ import { GenericActorSheet } from "../../GenericActorSheet.mjs"; import DOTDUNGEON from "../../../config.mjs"; import { localizer } from "../../../utils/localizer.mjs"; import { modifierToString } from "../../../utils/modifierToString.mjs"; +import { GenericContextMenu } from "../../../utils/GenericContextMenu.mjs"; export class PlayerSheetv2 extends GenericActorSheet { static get defaultOptions() { @@ -47,6 +48,24 @@ export class PlayerSheetv2 extends GenericActorSheet { this.toggleItemFilter(filter); this._renderInner(); }); + + // Make materials be able to be edited/deleted + new GenericContextMenu(html, `.material`, [ + { + name: localizer(`dotdungeon.common.edit`), + callback: (html) => { + const data = html[0].dataset; + this.openEmbeddedSheet.bind(this)(data.embeddedId); + }, + }, + { + name: localizer(`dotdungeon.common.delete`), + callback: (html) => { + const data = html[0].dataset; + this.genericEmbeddedDelete.bind(this)(data.embeddedId); + }, + }, + ]); }; async getData() { diff --git a/module/sheets/GenericActorSheet.mjs b/module/sheets/GenericActorSheet.mjs index 660233e..d4d38b0 100644 --- a/module/sheets/GenericActorSheet.mjs +++ b/module/sheets/GenericActorSheet.mjs @@ -59,12 +59,19 @@ export class GenericActorSheet extends ActorSheet { html.find(`[data-embedded-update-on="blur"]`) .on(`blur`, this.genericEmbeddedUpdate.bind(this)); html.find(`[data-embedded-delete]`) - .on(`click`, this.genericEmbeddedDelete.bind(this)); + .on(`click`, ($e) => { + const id = $e.currentTarget.dataset.embeddedDelete; + this.genericEmbeddedDelete.bind(this)(id); + }); html.find(`[data-embedded-create]`) .on(`click`, this.genericEmbeddedCreate.bind(this)); html.find(`[data-message-type]`) .on(`click`, this.genericSendToChat.bind(this)); html.find(`[data-embedded-edit]`) + .on(`click`, ($e) => { + const id = $e.currentTarget.dataset.embeddedEdit; + this.openEmbeddedSheet.bind(this)(id); + }) .on(`click`, this.openEmbeddedSheet.bind(this)); html.find(`button[data-increment]`) .on(`click`, this._incrementValue.bind(this)); @@ -129,10 +136,8 @@ export class GenericActorSheet extends ActorSheet { }; }; - async openEmbeddedSheet($event) { - const data = $event.currentTarget.dataset; - let item = await fromUuid(data.embeddedEdit); - console.log(data) + async openEmbeddedSheet(item_id) { + let item = await fromUuid(item_id); item?.sheet.render(true); }; @@ -186,9 +191,8 @@ export class GenericActorSheet extends ActorSheet { await item?.update({ [data.embeddedDecrement]: value - 1 }); }; - async genericEmbeddedDelete($event) { - let data = $event.currentTarget.dataset; - let item = await fromUuid(data.embeddedId); + async genericEmbeddedDelete(item_uuid) { + let item = await fromUuid(item_uuid); if (!item) { ui.notifications.error( diff --git a/module/utils/GenericContextMenu.mjs b/module/utils/GenericContextMenu.mjs new file mode 100644 index 0000000..9749b4f --- /dev/null +++ b/module/utils/GenericContextMenu.mjs @@ -0,0 +1,6 @@ +export class GenericContextMenu extends ContextMenu { + constructor(element, selector, menuItems, opts = {}) { + super(element, selector, menuItems, opts); + this.menuItems.forEach(i => i.icon ??= ``); + }; +}; diff --git a/templates/actors/char-sheet/v2/partials/inventory/items/aspect.v2.pc.hbs b/templates/actors/char-sheet/v2/partials/inventory/items/aspect.v2.pc.hbs index ac80d51..ebb09c1 100644 --- a/templates/actors/char-sheet/v2/partials/inventory/items/aspect.v2.pc.hbs +++ b/templates/actors/char-sheet/v2/partials/inventory/items/aspect.v2.pc.hbs @@ -85,8 +85,7 @@ data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}" data-tooltip-direction="RIGHT" class="aspect__button--delete" - data-embedded-delete - data-embedded-id="{{item.uuid}}" + data-embedded-delete="{{item.uuid}}" >