Sortierbare Items
Changes: + Items sind jetzt sortierbar + Items können jetzt auf andere Actor übertragen werden + Löschen button für Mods
This commit is contained in:
@@ -11,7 +11,13 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
width: 1000,
|
||||
height: 800,
|
||||
classes: ["midgard5", "sheet", "character"],
|
||||
tabs: [{ navSelector: ".sheet-navigation", contentSelector: ".sheet-content", initial: "base_values" }],
|
||||
tabs: [
|
||||
{
|
||||
navSelector: ".sheet-navigation",
|
||||
contentSelector: ".sheet-content",
|
||||
initial: "base_values",
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
@@ -68,28 +74,17 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".roll-attribute-button").on("click", async (event) => {
|
||||
let elem = event.target;
|
||||
let attributeStr = elem.dataset["attribute"];
|
||||
while (!attributeStr) {
|
||||
elem = elem.parentElement;
|
||||
if (!elem) return;
|
||||
attributeStr = elem.dataset["attribute"];
|
||||
}
|
||||
const attributeValue = parseInt(elem.dataset["value"]);
|
||||
let target = event.target.closest("[data-attribute]") as HTMLElement;
|
||||
let attributeValue = target ? parseInt(target.dataset.value) : null;
|
||||
let attributeStr = target ? target.dataset.attribute : null;
|
||||
|
||||
const roll = M5Roll.fromAttributeValue(this.actor, attributeStr, attributeValue);
|
||||
//console.log("roll-attribute-button", parent, attributeStr, attributeValue, roll)
|
||||
await roll.toMessage();
|
||||
});
|
||||
|
||||
html.find(".edit-item").on("click", async (event) => {
|
||||
let row = event.target.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
while (!itemId) {
|
||||
row = row.parentElement;
|
||||
if (!row) return;
|
||||
itemId = row.dataset["item"];
|
||||
}
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId);
|
||||
@@ -98,13 +93,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".quantity-increase").on("click", async (event) => {
|
||||
let row = event.target.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
while (!itemId) {
|
||||
row = row.parentElement;
|
||||
if (!row) return;
|
||||
itemId = row.dataset["item"];
|
||||
}
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId);
|
||||
@@ -120,13 +110,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".quantity-decrease").on("click", async (event) => {
|
||||
let row = event.target.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
while (!itemId) {
|
||||
row = row.parentElement;
|
||||
if (!row) return;
|
||||
itemId = row.dataset["item"];
|
||||
}
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId);
|
||||
@@ -141,13 +126,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".roll-consumable-item").on("click", async (event) => {
|
||||
let row = event.target.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
while (!itemId) {
|
||||
row = row.parentElement;
|
||||
if (!row) return;
|
||||
itemId = row.dataset["item"];
|
||||
}
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId);
|
||||
@@ -164,13 +144,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".item-delete").on("click", async (event) => {
|
||||
let row = event.target.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
while (!itemId) {
|
||||
row = row.parentElement;
|
||||
if (!row) return;
|
||||
itemId = row.dataset["item"];
|
||||
}
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId);
|
||||
@@ -179,8 +154,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".roll-learned-button").on("click", async (event) => {
|
||||
const row = event.target.parentElement.parentElement;
|
||||
let skillId = row.dataset["item"];
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let skillId = target ? target.dataset.itemId : null;
|
||||
|
||||
const actor = this.actor as any;
|
||||
const item = actor.items.get(skillId) as M5Item;
|
||||
@@ -188,8 +163,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".roll-general-button").on("click", async (event) => {
|
||||
const row = event.target.parentElement.parentElement;
|
||||
let skillName = row.dataset["skill"];
|
||||
let target = event.target.closest("[data-skill]") as HTMLElement;
|
||||
let skillName = target ? target.dataset.skill : null;
|
||||
|
||||
const data = this.actor.system;
|
||||
const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned;
|
||||
@@ -199,8 +174,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".learn-button").on("click", async (event) => {
|
||||
const row = event.target.parentElement.parentElement;
|
||||
let skillName = row.dataset["skill"];
|
||||
let target = event.target.closest("[data-skill]") as HTMLElement;
|
||||
let skillName = target ? target.dataset.skill : null;
|
||||
|
||||
const data = this.actor.system;
|
||||
const unlearnedSkill = data.skills.general[skillName] as M5SkillUnlearned;
|
||||
@@ -220,8 +195,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".roll-weapon-button").on("click", async (event) => {
|
||||
const row = event.target.parentElement.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId) as M5Item;
|
||||
@@ -260,13 +235,8 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
});
|
||||
|
||||
html.find(".change-equipped").on("click", async (event) => {
|
||||
let row = event.target.parentElement;
|
||||
let itemId = row.dataset["item"];
|
||||
while (!itemId) {
|
||||
row = row.parentElement;
|
||||
if (!row) return;
|
||||
itemId = row.dataset["item"];
|
||||
}
|
||||
let target = event.target.closest("[data-item-id]") as HTMLElement;
|
||||
let itemId = target ? target.dataset.itemId : null;
|
||||
|
||||
const context = this.actor as any;
|
||||
const item = context.items.get(itemId);
|
||||
@@ -275,6 +245,7 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
equipped: !item.system.equipped,
|
||||
},
|
||||
});
|
||||
|
||||
this.render();
|
||||
});
|
||||
|
||||
@@ -317,28 +288,36 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
const data = this.actor.system;
|
||||
|
||||
const character = this.actor as M5Character;
|
||||
character.createItem((game as Game).i18n.localize("TYPES.Item.innate-ability"), M5ItemType.SKILL, { type: M5SkillType.INNATE });
|
||||
character.createItem((game as Game).i18n.localize("midgard5.innate-ability"), M5ItemType.SKILL, {
|
||||
type: M5SkillType.INNATE,
|
||||
});
|
||||
});
|
||||
|
||||
html.find(".add-general-skill").on("click", async (event) => {
|
||||
const data = this.actor.system;
|
||||
|
||||
const character = this.actor as M5Character;
|
||||
character.createItem((game as Game).i18n.localize("TYPES.Item.skill"), M5ItemType.SKILL, { type: M5SkillType.GENERAL });
|
||||
character.createItem((game as Game).i18n.localize("TYPES.Item.skill"), M5ItemType.SKILL, {
|
||||
type: M5SkillType.GENERAL,
|
||||
});
|
||||
});
|
||||
|
||||
html.find(".add-combat-skill").on("click", async (event) => {
|
||||
const data = this.actor.system;
|
||||
|
||||
const character = this.actor as M5Character;
|
||||
character.createItem((game as Game).i18n.localize("TYPES.Item.weapon-skill"), M5ItemType.SKILL, { type: M5SkillType.COMBAT });
|
||||
character.createItem((game as Game).i18n.localize("midgard5.weapon-skill"), M5ItemType.SKILL, {
|
||||
type: M5SkillType.COMBAT,
|
||||
});
|
||||
});
|
||||
|
||||
html.find(".add-language-skill").on("click", async (event) => {
|
||||
const data = this.actor.system;
|
||||
|
||||
const character = this.actor as M5Character;
|
||||
character.createItem((game as Game).i18n.localize("TYPES.Item.language"), M5ItemType.SKILL, { type: M5SkillType.LANGUAGE });
|
||||
character.createItem((game as Game).i18n.localize("midgard5.language"), M5ItemType.SKILL, {
|
||||
type: M5SkillType.LANGUAGE,
|
||||
});
|
||||
});
|
||||
|
||||
html.find(".add-spell").on("click", async (event) => {
|
||||
@@ -419,9 +398,15 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
// Drag & Drop
|
||||
const dragDrop = new DragDrop({
|
||||
dragSelector: ".items-list .item",
|
||||
dropSelector: ".sheet-body",
|
||||
permissions: { dragstart: this._canDragStart.bind(this), drop: this._canDragDrop.bind(this) },
|
||||
callbacks: { dragstart: this._onTransferItemDragStart.bind(this), drop: this._onTransferItemDrop.bind(this) },
|
||||
dropSelector: null,
|
||||
permissions: {
|
||||
dragstart: this._canDragStart.bind(this),
|
||||
drop: this._canDragDrop.bind(this),
|
||||
},
|
||||
callbacks: {
|
||||
dragstart: this._onTransferItemDragStart.bind(this),
|
||||
drop: this._onTransferItemDrop.bind(this),
|
||||
},
|
||||
});
|
||||
dragDrop.bind(html[0]);
|
||||
}
|
||||
@@ -435,25 +420,20 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
}
|
||||
|
||||
_onTransferItemDragStart(event) {
|
||||
const li = event.currentTarget;
|
||||
$(event.currentTarget).attr("data-item-actorid", this.actor.id);
|
||||
const li = event.target;
|
||||
$(event.target).attr("data-item-actorid", this.actor.id);
|
||||
const item = this.actor.items.get(li.dataset.itemId);
|
||||
|
||||
// limit transfer on personal weapons/armour/gear
|
||||
if (["skill", "item", "weapon", "defensiveWeapon", "armor", "spell", "effect", "kampfkunst", "container"].includes(item.type)) {
|
||||
const dragData = {
|
||||
type: "Transfer",
|
||||
actorId: this.actor.id,
|
||||
data: item.toObject(false),
|
||||
tokenId: null,
|
||||
};
|
||||
const dragData = {
|
||||
type: "Transfer",
|
||||
actorId: this.actor.id,
|
||||
data: item.toObject(false),
|
||||
tokenId: null,
|
||||
};
|
||||
|
||||
if (this.actor.isToken) dragData.tokenId = this.actor.token.id;
|
||||
if (this.actor.isToken) dragData.tokenId = this.actor.token.id;
|
||||
|
||||
event.dataTransfer.setData("text/plain", JSON.stringify(dragData));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
event.dataTransfer.setData("text/plain", JSON.stringify(dragData));
|
||||
}
|
||||
|
||||
async _onTransferItemDrop(event) {
|
||||
@@ -468,14 +448,22 @@ export default class M5CharacterSheet extends ActorSheet {
|
||||
|
||||
if (!data.data) return false;
|
||||
|
||||
if (data.actorId === this.actor.id) return false;
|
||||
if (data.actorId === this.actor.id) {
|
||||
return this._onSortItem(event, data.data);
|
||||
}
|
||||
|
||||
try {
|
||||
this.actor.createEmbeddedDocuments("Item", [duplicate(data.data)]); // Create a new Item
|
||||
const actor = (game as any).actors.get(data.actorId);
|
||||
await actor.items.get(data.data._id)?.delete(); // Delete originating item from other actor
|
||||
} catch (e) {
|
||||
console.error("Error transfering item between actors", e);
|
||||
// limit transfer on personal weapons/armour/gear
|
||||
if (["item", "weapon", "defensiveWeapon", "armor", "container"].includes(data.data.type)) {
|
||||
try {
|
||||
this.actor.createEmbeddedDocuments("Item", [duplicate(data.data)]); // Create a new Item
|
||||
const actor = (game as any).actors.get(data.actorId);
|
||||
await actor.items.get(data.data._id)?.delete(); // Delete originating item from other actor
|
||||
} catch (e) {
|
||||
console.error("Error transfering item between actors", e);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Nur Gegenstände können übertragen werden.");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,195 +1,174 @@
|
||||
import { M5Item } from "../items/M5Item"
|
||||
import { M5Attributes, M5ItemMod, M5ModOperation, M5ModType, M5RollTemplate } from "../M5Base"
|
||||
import { M5Item } from "../items/M5Item";
|
||||
import { M5Attributes, M5ItemMod, M5ModOperation, M5ModType, M5RollTemplate } from "../M5Base";
|
||||
|
||||
export class M5ItemSheet extends ItemSheet {
|
||||
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
width: 640,
|
||||
height: 480,
|
||||
classes: ["midgard5", "sheet", "item"]
|
||||
})
|
||||
classes: ["midgard5", "sheet", "item"],
|
||||
});
|
||||
}
|
||||
|
||||
get template() {
|
||||
//console.log("M5ItemSheet", this.item.data.type)
|
||||
const path = "systems/midgard5/templates/sheets/item"
|
||||
return `${path}/${this.item.type}.hbs`
|
||||
const path = "systems/midgard5/templates/sheets/item";
|
||||
return `${path}/${this.item.type}.hbs`;
|
||||
}
|
||||
|
||||
override getData(options?: Partial<ItemSheet.Options>): ItemSheet.Data<ItemSheet.Options> | Promise<ItemSheet.Data<ItemSheet.Options>> {
|
||||
const item = this.item as M5Item
|
||||
return Promise.resolve(super.getData()).then(value => {
|
||||
item.prepareDerivedData()
|
||||
const context = value as any
|
||||
const item = this.item as M5Item;
|
||||
return Promise.resolve(super.getData()).then((value) => {
|
||||
item.prepareDerivedData();
|
||||
const context = value as any;
|
||||
|
||||
// Use a safe clone of the item data for further operations.
|
||||
const itemData = context.item
|
||||
const itemData = context.item;
|
||||
|
||||
// Retrieve the roll data for TinyMCE editors.
|
||||
context.rollData = {}
|
||||
let actor = this.object?.parent ?? null
|
||||
context.rollData = {};
|
||||
let actor = this.object?.parent ?? null;
|
||||
if (actor) {
|
||||
context.rollData = actor.getRollData()
|
||||
context.rollData = actor.getRollData();
|
||||
}
|
||||
|
||||
context.data = itemData.system
|
||||
context.flags = itemData.flags
|
||||
|
||||
return context
|
||||
})
|
||||
|
||||
context.data = itemData.system;
|
||||
context.flags = itemData.flags;
|
||||
|
||||
return context;
|
||||
});
|
||||
}
|
||||
|
||||
override activateListeners(html: JQuery) {
|
||||
super.activateListeners(html)
|
||||
super.activateListeners(html);
|
||||
|
||||
html.find(".add-mod").on("click", async (event) => {
|
||||
const context = this.object
|
||||
const mods = context.system.mods
|
||||
const modIndex = Object.keys(mods).length
|
||||
const context = this.object;
|
||||
const mods = context.system.mods;
|
||||
const modIndex = Object.keys(mods).length;
|
||||
mods[modIndex.toString()] = {
|
||||
type: M5ModType.ATTRIBUTE,
|
||||
id: M5Attributes.ST,
|
||||
operation: M5ModOperation.ADD,
|
||||
value: 0
|
||||
} as M5ItemMod
|
||||
value: 0,
|
||||
} as M5ItemMod;
|
||||
this.object.update({
|
||||
data: {
|
||||
mods: mods
|
||||
}
|
||||
})
|
||||
})
|
||||
mods: mods,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
html.find(".item-delete").on("click", async (event) => {
|
||||
let row = event.target.parentElement
|
||||
let itemId = row.dataset["item"]
|
||||
while (!itemId) {
|
||||
row = row.parentElement
|
||||
if (!row)
|
||||
return
|
||||
itemId = row.dataset["item"]
|
||||
}
|
||||
html.find(".mod-delete").on("click", async (event) => {
|
||||
let target = event.target.closest("[data-mod-id]") as HTMLElement;
|
||||
let modId = target ? target.dataset.modId : null;
|
||||
|
||||
const context = this.item
|
||||
const item = context.items.get(itemId)
|
||||
item.delete()
|
||||
this.render(false)
|
||||
})
|
||||
const context = this.item;
|
||||
delete context.system.mods[modId];
|
||||
this.render(false);
|
||||
});
|
||||
|
||||
html.find(".roll-delete").on("click", async (event) => {
|
||||
//console.log("roll-delete", this.item.data.data.rolls.formulas)
|
||||
let target = event.target.closest("[data-roll]") as HTMLElement;
|
||||
let rollIndex = target ? target.dataset.roll : null;
|
||||
|
||||
let row = event.target.parentElement
|
||||
let rollIndex = row.dataset["roll"]
|
||||
while (!rollIndex) {
|
||||
row = row.parentElement
|
||||
if (!row)
|
||||
return
|
||||
rollIndex = row.dataset["roll"]
|
||||
}
|
||||
|
||||
const rolls = this.item.system.rolls.formulas
|
||||
rolls[rollIndex] = null
|
||||
|
||||
this.item.update({
|
||||
data: {
|
||||
rolls: {
|
||||
formulas: rolls
|
||||
}
|
||||
}
|
||||
})
|
||||
this.render(false)
|
||||
})
|
||||
const rolls = this.item.system.rolls.formulas;
|
||||
delete rolls[rollIndex];
|
||||
this.render(false);
|
||||
});
|
||||
|
||||
html.find(".roll-create").on("click", async (event) => {
|
||||
const rolls = this.item.system.rolls.formulas
|
||||
const rolls = this.item.system.rolls.formulas;
|
||||
|
||||
const indeces = Object.keys(rolls).map(index => parseInt(index)).sort().reverse()
|
||||
const index = (indeces.find(index => !!rolls[index.toString()]) ?? -1) + 1
|
||||
console.log("roll-create", rolls, indeces, index)
|
||||
const indeces = Object.keys(rolls)
|
||||
.map((index) => parseInt(index))
|
||||
.sort()
|
||||
.reverse();
|
||||
const index = (indeces.find((index) => !!rolls[index.toString()]) ?? -1) + 1;
|
||||
console.log("roll-create", rolls, indeces, index);
|
||||
|
||||
rolls[index.toString()] = {
|
||||
formula: "1d6",
|
||||
label: (game as Game).i18n.localize("midgard5.roll"),
|
||||
enabled: true
|
||||
} as M5RollTemplate
|
||||
enabled: true,
|
||||
} as M5RollTemplate;
|
||||
|
||||
this.item.update({
|
||||
data: {
|
||||
rolls: {
|
||||
formulas: rolls
|
||||
}
|
||||
}
|
||||
})
|
||||
this.render(false)
|
||||
})
|
||||
formulas: rolls,
|
||||
},
|
||||
},
|
||||
});
|
||||
this.render(false);
|
||||
});
|
||||
|
||||
// Drag & Drop
|
||||
if (["item"].includes(this.object.type)) {
|
||||
const itemToItemAssociation = new DragDrop({
|
||||
dragSelector: ".item",
|
||||
dropSelector: null,
|
||||
permissions: { dragstart: this._canDragStart.bind(this), drop: this._canDragDrop.bind(this) },
|
||||
dropSelector: ".item-list",
|
||||
permissions: {
|
||||
dragstart: this._canDragStart.bind(this),
|
||||
drop: this._canDragDrop.bind(this),
|
||||
},
|
||||
callbacks: { drop: this._onDropItem.bind(this) },
|
||||
})
|
||||
itemToItemAssociation.bind(html[0])
|
||||
});
|
||||
itemToItemAssociation.bind(html[0]);
|
||||
}
|
||||
}
|
||||
|
||||
_canDragStart(selector) {
|
||||
console.log("M5ItemSheet._canDragStart", selector)
|
||||
return this.options.editable && this.object.isOwner
|
||||
console.log("M5ItemSheet._canDragStart", selector);
|
||||
return this.options.editable && this.object.isOwner;
|
||||
}
|
||||
|
||||
_canDragDrop(selector) {
|
||||
console.log("M5ItemSheet._canDragDrop", selector)
|
||||
return true
|
||||
console.log("M5ItemSheet._canDragDrop", selector);
|
||||
return true;
|
||||
}
|
||||
|
||||
async _onDropItem(event) {
|
||||
let data
|
||||
const obj = this.object
|
||||
const li = event.currentTarget
|
||||
let data;
|
||||
const obj = this.object;
|
||||
const li = event.currentTarget;
|
||||
|
||||
try {
|
||||
data = JSON.parse(event.dataTransfer.getData("text/plain"))
|
||||
if (data.type !== "Item")
|
||||
return false
|
||||
data = JSON.parse(event.dataTransfer.getData("text/plain"));
|
||||
if (data.type !== "Item") return false;
|
||||
} catch (err) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
|
||||
// Case 1 - Import from a Compendium pack
|
||||
let itemObject
|
||||
let itemObject;
|
||||
if (data.pack) {
|
||||
const compendiumObject = await (this as any).importItemFromCollection(data.pack, data.id)
|
||||
itemObject = compendiumObject.data
|
||||
const compendiumObject = await (this as any).importItemFromCollection(data.pack, data.id);
|
||||
itemObject = compendiumObject.data;
|
||||
}
|
||||
|
||||
// Case 2 - Import from World entity
|
||||
else {
|
||||
const originalItem = await (game as Game).items.get(data.id)
|
||||
itemObject = duplicate(originalItem)
|
||||
if (!itemObject)
|
||||
return
|
||||
const originalItem = await (game as Game).items.get(data.id);
|
||||
itemObject = duplicate(originalItem);
|
||||
if (!itemObject) return;
|
||||
}
|
||||
|
||||
if ((itemObject.type === "mod")) {
|
||||
let mods = obj?.system?.mods
|
||||
if (!mods)
|
||||
mods = []
|
||||
if (itemObject.type === "mod") {
|
||||
let mods = obj?.system?.mods;
|
||||
if (!mods) mods = [];
|
||||
|
||||
itemObject.id = randomID()
|
||||
console.log("M5ItemSheet._onDropItem", itemObject)
|
||||
mods.push(itemObject)
|
||||
itemObject.id = randomID();
|
||||
console.log("M5ItemSheet._onDropItem", itemObject);
|
||||
mods.push(itemObject);
|
||||
|
||||
obj.update({
|
||||
data: {
|
||||
mods: mods
|
||||
}
|
||||
})
|
||||
mods: mods,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async _onDragItemStart(event) { }
|
||||
async _onDragItemStart(event) {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user