Support drag-drop vers conteneur

This commit is contained in:
Vincent Vandemeulebrouck
2021-12-05 16:48:18 +01:00
parent 009ec47709
commit 9de1e7dae5
10 changed files with 126 additions and 65 deletions

View File

@ -23,10 +23,10 @@ export class RdDItemSheet extends ItemSheet {
template: "systems/foundryvtt-reve-de-dragon/templates/item-sheet.html",
width: 550,
height: 550
//tabs: [{navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description"}]
});
}
/* -------------------------------------------- */
_getHeaderButtons() {
let buttons = super._getHeaderButtons();
@ -130,6 +130,11 @@ export class RdDItemSheet extends ItemSheet {
activateListeners(html) {
super.activateListeners(html);
if (this.object.type == 'conteneur') {
this.form.ondragstart = (event) => this._onDragStart(event);
this.form.ondrop = (event) => this._onDrop(event);
}
let itemSheetDialog = this;
HtmlUtility._showControlWhen($(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.object.isOwned);
@ -221,7 +226,6 @@ export class RdDItemSheet extends ItemSheet {
/* -------------------------------------------- */
get template() {
//console.log(this);
let type = this.object.data.type;
return `systems/foundryvtt-reve-de-dragon/templates/item-${type}-sheet.html`;
}
@ -230,12 +234,56 @@ export class RdDItemSheet extends ItemSheet {
/** @override */
_updateObject(event, formData) { // Deprecated en v0.8 à clarifier
//console.log("UPDATE !", formData);
// Données de bonus de cases ?
formData = RdDItemSort.buildBonusCaseStringFromFormData(formData);
return this.object.update(formData);
}
async _onDragStart(event) {
console.log("_onDragStart", event);
if ( event.target.classList.contains("entity-link") ) return;
const itemId = event.srcElement?.attributes["data-item-id"].value;
const item = this.actor.items.get(itemId);
// Create drag data
const dragData = {
actorId: this.actor.id,
type: "Item",
data: item.data
};
event.dataTransfer.setData("text/plain", JSON.stringify(dragData));
}
async _onDrop(event) {
// Try to extract the data
let data;
try {
data = JSON.parse(event.dataTransfer.getData('text/plain'));
} catch (err) {
return false;
}
const allowed = Hooks.call("dropActorSheetData", this.actor, this, data);
if ( allowed === false ) return;
// Handle different data types
switch ( data.type ) {
case "Item":
return this._onDropItem(event, data);
}
return super._onDrop(event);
}
/* -------------------------------------------- */
async _onDropItem(event, dragData) {
if (this.actor) {
const dropParams = RdDSheetUtility.prepareItemDropParameters(this.object.id, this.actor.id, dragData, this.objetVersConteneur);
await this.actor.processDropItem(dropParams);
await this.render(true);
}
}
}