From a4705f42043a3c9b6f6aa53de5660f2e8d1c7ead Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Thu, 4 Dec 2025 16:41:18 -0500 Subject: [PATCH] Support drag and drop in adversary and environment sheets --- .../applications/sheets/actors/adversary.mjs | 11 ++--------- .../applications/sheets/actors/character.mjs | 15 --------------- .../sheets/actors/environment.mjs | 13 +++---------- module/applications/sheets/actors/party.mjs | 12 ------------ module/applications/sheets/api/base-actor.mjs | 19 +++++++++++++++---- 5 files changed, 20 insertions(+), 50 deletions(-) diff --git a/module/applications/sheets/actors/adversary.mjs b/module/applications/sheets/actors/adversary.mjs index 15bfb46f..6b6354ef 100644 --- a/module/applications/sheets/actors/adversary.mjs +++ b/module/applications/sheets/actors/adversary.mjs @@ -25,7 +25,8 @@ export default class AdversarySheet extends DHBaseActorSheet { action: 'editAttribution' } ] - } + }, + dragDrop: [{ dragSelector: '[data-item-id][draggable="true"]', dropSelector: null }] }; static PARTS = { @@ -163,14 +164,6 @@ export default class AdversarySheet extends DHBaseActorSheet { }); } - _onDropItem(event, item) { - if (this.document.uuid !== item.parent?.uuid) { - return null; // block all drag drop except internal ones - } - - return super._onDropItem(event, item); - } - /* -------------------------------------------- */ /* Application Clicks Actions */ /* -------------------------------------------- */ diff --git a/module/applications/sheets/actors/character.mjs b/module/applications/sheets/actors/character.mjs index ea875b2a..7dc70956 100644 --- a/module/applications/sheets/actors/character.mjs +++ b/module/applications/sheets/actors/character.mjs @@ -877,21 +877,6 @@ export default class CharacterSheet extends DHBaseActorSheet { }); } - async _onDragStart(event) { - const item = await getDocFromElement(event.target); - - const dragData = { - originActor: this.document.uuid, - originId: item.id, - type: item.documentName, - uuid: item.uuid - }; - - event.dataTransfer.setData('text/plain', JSON.stringify(dragData)); - - super._onDragStart(event); - } - async _onDropItem(event, item) { if (this.document.uuid === item.parent?.uuid) { return this._onSortItem(event, item); diff --git a/module/applications/sheets/actors/environment.mjs b/module/applications/sheets/actors/environment.mjs index 242dd8a4..944b9d13 100644 --- a/module/applications/sheets/actors/environment.mjs +++ b/module/applications/sheets/actors/environment.mjs @@ -130,23 +130,16 @@ export default class DhpEnvironment extends DHBaseActorSheet { /* -------------------------------------------- */ async _onDragStart(event) { - const item = event.currentTarget.closest('.inventory-item'); - + const item = event.currentTarget.closest('.inventory-item[data-type=adversary]'); if (item) { const adversaryData = { type: 'Actor', uuid: item.dataset.itemUuid }; event.dataTransfer.setData('text/plain', JSON.stringify(adversaryData)); event.dataTransfer.setDragImage(item, 60, 0); + } else { + return super._onDragStart(event); } } - _onDropItem(event, item) { - if (this.document.uuid !== item.parent?.uuid) { - return null; // block all drag drop except internal ones - } - - return super._onDropItem(event, item); - } - /* -------------------------------------------- */ /* Application Clicks Actions */ /* -------------------------------------------- */ diff --git a/module/applications/sheets/actors/party.mjs b/module/applications/sheets/actors/party.mjs index 2dfaeb1d..5c448b49 100644 --- a/module/applications/sheets/actors/party.mjs +++ b/module/applications/sheets/actors/party.mjs @@ -419,18 +419,6 @@ export default class Party extends DHBaseActorSheet { } /* -------------------------------------------- */ - async _onDragStart(event) { - const item = await getDocFromElement(event.target); - const dragData = { - originActor: this.document.uuid, - originId: item.id, - type: item.documentName, - uuid: item.uuid - }; - - event.dataTransfer.setData('text/plain', JSON.stringify(dragData)); - super._onDragStart(event); - } async _onDropActor(event, document) { const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event); diff --git a/module/applications/sheets/api/base-actor.mjs b/module/applications/sheets/api/base-actor.mjs index fab9e9f3..02dcc448 100644 --- a/module/applications/sheets/api/base-actor.mjs +++ b/module/applications/sheets/api/base-actor.mjs @@ -1,4 +1,4 @@ -import { itemIsIdentical } from '../../../helpers/utils.mjs'; +import { getDocFromElement, itemIsIdentical } from '../../../helpers/utils.mjs'; import DHBaseActorSettings from './actor-setting.mjs'; import DHApplicationMixin from './application-mixin.mjs'; @@ -301,7 +301,6 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) { */ async _onDragStart(event) { const attackItem = event.currentTarget.closest('.inventory-item[data-type="attack"]'); - if (attackItem) { const attackData = { type: 'Attack', @@ -311,8 +310,20 @@ export default class DHBaseActorSheet extends DHApplicationMixin(ActorSheetV2) { }; event.dataTransfer.setData('text/plain', JSON.stringify(attackData)); event.dataTransfer.setDragImage(attackItem.querySelector('img'), 60, 0); - } else if (this.document.type !== 'environment') { - super._onDragStart(event); + return; + } + + const item = await getDocFromElement(event.target); + if (item) { + const dragData = { + originActor: this.document.uuid, + originId: item.id, + type: item.documentName, + uuid: item.uuid + }; + event.dataTransfer.setData('text/plain', JSON.stringify(dragData)); } + + super._onDragStart(event); } }