diff --git a/module/applications/sheets-configs/adversary-settings.mjs b/module/applications/sheets-configs/adversary-settings.mjs index e3549efc..c55bc9d5 100644 --- a/module/applications/sheets-configs/adversary-settings.mjs +++ b/module/applications/sheets-configs/adversary-settings.mjs @@ -32,7 +32,10 @@ export default class DHAdversarySettings extends HandlebarsApplicationMixin(Appl submitOnChange: true, closeOnSubmit: false }, - dragDrop: [{ dragSelector: null, dropSelector: '.tab.features' }] + dragDrop: [ + { dragSelector: null, dropSelector: '.tab.features' }, + { dragSelector: '.feature-item', dropSelector: null } + ] }; static PARTS = { @@ -114,6 +117,7 @@ export default class DHAdversarySettings extends HandlebarsApplicationMixin(Appl _createDragDropHandlers() { return this.options.dragDrop.map(d => { d.callbacks = { + dragstart: this._onDragStart.bind(this), drop: this._onDrop.bind(this) }; return new foundry.applications.ux.DragDrop.implementation(d); @@ -170,8 +174,21 @@ export default class DHAdversarySettings extends HandlebarsApplicationMixin(Appl this.render(); } + async _onDragStart(event) { + const featureItem = event.currentTarget.closest('.feature-item'); + + if (featureItem) { + const feature = this.actor.items.get(featureItem.id); + const featureData = { type: 'Item', uuid: feature.uuid, fromInternal: true }; + event.dataTransfer.setData('text/plain', JSON.stringify(featureData)); + event.dataTransfer.setDragImage(featureItem.querySelector('img'), 60, 0); + } + } + async _onDrop(event) { const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event); + if (data.fromInternal) return; + const item = await fromUuid(data.uuid); if (item.type === 'feature') { await this.actor.createEmbeddedDocuments('Item', [item]); diff --git a/module/applications/sheets-configs/environment-settings.mjs b/module/applications/sheets-configs/environment-settings.mjs index 5f627ffc..c008b76c 100644 --- a/module/applications/sheets-configs/environment-settings.mjs +++ b/module/applications/sheets-configs/environment-settings.mjs @@ -36,7 +36,8 @@ export default class DHEnvironmentSettings extends HandlebarsApplicationMixin(Ap }, dragDrop: [ { dragSelector: null, dropSelector: '.category-container' }, - { dragSelector: null, dropSelector: '.tab.features' } + { dragSelector: null, dropSelector: '.tab.features' }, + { dragSelector: '.feature-item', dropSelector: null } ] }; @@ -106,6 +107,7 @@ export default class DHEnvironmentSettings extends HandlebarsApplicationMixin(Ap _createDragDropHandlers() { return this.options.dragDrop.map(d => { d.callbacks = { + dragstart: this._onDragStart.bind(this), drop: this._onDrop.bind(this) }; return new foundry.applications.ux.DragDrop.implementation(d); @@ -175,8 +177,21 @@ export default class DHEnvironmentSettings extends HandlebarsApplicationMixin(Ap this.render(); } + async _onDragStart(event) { + const featureItem = event.currentTarget.closest('.feature-item'); + + if (featureItem) { + const feature = this.actor.items.get(featureItem.id); + const featureData = { type: 'Item', uuid: feature.uuid, fromInternal: true }; + event.dataTransfer.setData('text/plain', JSON.stringify(featureData)); + event.dataTransfer.setDragImage(featureItem.querySelector('img'), 60, 0); + } + } + async _onDrop(event) { const data = foundry.applications.ux.TextEditor.implementation.getDragEventData(event); + if (data.fromInternal) return; + const item = await fromUuid(data.uuid); if (item.type === 'adversary' && event.target.closest('.category-container')) { const target = event.target.closest('.category-container'); diff --git a/templates/sheets-settings/adversary-settings/features.hbs b/templates/sheets-settings/adversary-settings/features.hbs index e3a73490..b5807fd5 100644 --- a/templates/sheets-settings/adversary-settings/features.hbs +++ b/templates/sheets-settings/adversary-settings/features.hbs @@ -10,7 +10,7 @@ {{localize tabs.features.label}}