parent
032b006dd5
commit
62065a8d31
1793 changed files with 64779 additions and 67933 deletions
|
@ -48,15 +48,15 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
}),
|
||||
);
|
||||
|
||||
const enrichedEffectPromises = this.actor.effects.map(async (effect) => {
|
||||
const enrichedEffects = [...this.actor.allApplicableEffects()].map((effect) => {
|
||||
return {
|
||||
...effect.toObject(),
|
||||
sourceName: effect.sourceName,
|
||||
sourceName: effect.parent instanceof Item ? effect.parent.name : effect.sourceName,
|
||||
factor: effect.factor,
|
||||
active: effect.active,
|
||||
uuid: effect.uuid,
|
||||
};
|
||||
});
|
||||
const enrichedEffects = await Promise.all(enrichedEffectPromises);
|
||||
|
||||
const context = {
|
||||
...this.addTooltipsToData(await super.getData(options)),
|
||||
|
@ -127,7 +127,7 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
disableOverriddenFields(
|
||||
this.form,
|
||||
item.overrides,
|
||||
(key) => `[data-item-id="${item.id}"] .change-item[data-property="${key}"]`,
|
||||
(key) => `[data-item-uuid="${item.uuid}"] .change-item[data-property="${key}"]`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -161,7 +161,7 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
const { type } = foundry.utils.deepClone(event.currentTarget.dataset);
|
||||
const name = getGame().i18n.localize(`DS4.New${type.capitalize()}Name`);
|
||||
const itemData = { name, type };
|
||||
Item.create(itemData, { parent: this.actor, pack: this.actor.pack ?? undefined });
|
||||
Item.create(itemData, { parent: this.actor });
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -170,14 +170,15 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
* @param {JQuery.ClickEvent} event The originating click event
|
||||
* @protected
|
||||
*/
|
||||
onEditItem(event) {
|
||||
const id = $(event.currentTarget)
|
||||
.parents(embeddedDocumentListEntryProperties.Item.selector)
|
||||
.data(embeddedDocumentListEntryProperties.Item.idDataAttribute);
|
||||
const item = this.actor.items.get(id);
|
||||
enforce(item, getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { id, actor: this.actor.name }));
|
||||
enforce(item.sheet);
|
||||
item.sheet.render(true);
|
||||
async onEditItem(event) {
|
||||
const li = event.currentTarget.closest(embeddedDocumentListEntryProperties.Item.selector);
|
||||
const uuid = li.dataset[embeddedDocumentListEntryProperties.Item.uuidDataAttribute];
|
||||
const item = await fromUuid(uuid);
|
||||
enforce(
|
||||
item && item.parent === this.actor,
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
item.sheet?.render(true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -186,10 +187,16 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
* @param {JQuery.ClickEvent} event The originating click event
|
||||
* @protected
|
||||
*/
|
||||
onDeleteItem(event) {
|
||||
const li = $(event.currentTarget).parents(embeddedDocumentListEntryProperties.Item.selector);
|
||||
this.actor.deleteEmbeddedDocuments("Item", [li.data(embeddedDocumentListEntryProperties.Item.idDataAttribute)]);
|
||||
li.slideUp(200, () => this.render(false));
|
||||
async onDeleteItem(event) {
|
||||
const li = event.currentTarget.closest(embeddedDocumentListEntryProperties.Item.selector);
|
||||
const uuid = li.dataset[embeddedDocumentListEntryProperties.Item.uuidDataAttribute];
|
||||
const item = await fromUuid(uuid);
|
||||
enforce(
|
||||
item && item.parent === this.actor,
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
item.delete();
|
||||
$(li).slideUp(200, () => this.render(false));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -239,12 +246,14 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
* @param {JQuery.ClickEvent} event The originating click event
|
||||
* @protected
|
||||
*/
|
||||
onEditEffect(event) {
|
||||
const id = $(event.currentTarget)
|
||||
.parents(embeddedDocumentListEntryProperties.ActiveEffect.selector)
|
||||
.data(embeddedDocumentListEntryProperties.ActiveEffect.idDataAttribute);
|
||||
const effect = this.actor.effects.get(id);
|
||||
enforce(effect, getGame().i18n.format("DS4.ErrorActorDoesNotHaveEffect", { id, actor: this.actor.name }));
|
||||
async onEditEffect(event) {
|
||||
const li = event.currentTarget.closest(embeddedDocumentListEntryProperties.ActiveEffect.selector);
|
||||
const uuid = li.dataset[embeddedDocumentListEntryProperties.ActiveEffect.uuidDataAttribute];
|
||||
const effect = await fromUuid(uuid);
|
||||
enforce(
|
||||
effect && (effect.parent === this.actor || effect.parent.parent === this.actor),
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveEffect", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
effect.sheet?.render(true);
|
||||
}
|
||||
|
||||
|
@ -254,11 +263,16 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
* @param {JQuery.ClickEvent} event The originating click event
|
||||
* @protected
|
||||
*/
|
||||
onDeleteEffect(event) {
|
||||
const li = $(event.currentTarget).parents(embeddedDocumentListEntryProperties.ActiveEffect.selector);
|
||||
const id = li.data(embeddedDocumentListEntryProperties.ActiveEffect.idDataAttribute);
|
||||
this.actor.deleteEmbeddedDocuments("ActiveEffect", [id]);
|
||||
li.slideUp(200, () => this.render(false));
|
||||
async onDeleteEffect(event) {
|
||||
const li = event.currentTarget.closest(embeddedDocumentListEntryProperties.ActiveEffect.selector);
|
||||
const uuid = li.dataset[embeddedDocumentListEntryProperties.ActiveEffect.uuidDataAttribute];
|
||||
const effect = await fromUuid(uuid);
|
||||
enforce(
|
||||
effect && (effect.parent === this.actor || effect.parent.parent === this.actor),
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveEffect", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
effect.delete();
|
||||
$(li).slideUp(200, () => this.render(false));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -280,20 +294,32 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
* @param {"Item" | "ActiveEffect"} documentName The name of the embedded document to be changed.
|
||||
* @protected
|
||||
*/
|
||||
onChangeEmbeddedDocument(event, documentName) {
|
||||
async onChangeEmbeddedDocument(event, documentName) {
|
||||
event.preventDefault();
|
||||
const element = $(event.currentTarget).get(0);
|
||||
enforce(element instanceof HTMLInputElement);
|
||||
if (element.disabled) return;
|
||||
|
||||
const documentElement = element.closest(embeddedDocumentListEntryProperties[documentName].selector);
|
||||
enforce(documentElement instanceof HTMLElement);
|
||||
const id = documentElement.dataset[embeddedDocumentListEntryProperties[documentName].idDataAttribute];
|
||||
const uuid = documentElement.dataset[embeddedDocumentListEntryProperties[documentName].uuidDataAttribute];
|
||||
const property = element.dataset["property"];
|
||||
enforce(property !== undefined, TypeError("HTML element does not provide 'data-property' attribute"));
|
||||
|
||||
const newValue = this.parseValue(element);
|
||||
this.actor.updateEmbeddedDocuments(documentName, [{ _id: id, [property]: newValue }]);
|
||||
|
||||
const document = await fromUuid(uuid);
|
||||
|
||||
if (documentName === "Item") {
|
||||
enforce(
|
||||
document && document.parent === this.actor,
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
} else {
|
||||
enforce(
|
||||
document && (document.parent === this.actor || document.parent.parent === this.actor),
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveEffect", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
}
|
||||
document.update({ [property]: newValue });
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -335,13 +361,15 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
* @param {JQuery.ClickEvent} event The originating click event
|
||||
* @protected
|
||||
*/
|
||||
onRollItem(event) {
|
||||
async onRollItem(event) {
|
||||
event.preventDefault();
|
||||
const id = $(event.currentTarget)
|
||||
.parents(embeddedDocumentListEntryProperties.Item.selector)
|
||||
.data(embeddedDocumentListEntryProperties.Item.idDataAttribute);
|
||||
const item = this.actor.items.get(id);
|
||||
enforce(item, getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { id, actor: this.actor.name }));
|
||||
const li = event.currentTarget.closest(embeddedDocumentListEntryProperties.Item.selector);
|
||||
const uuid = li.dataset[embeddedDocumentListEntryProperties.Item.uuidDataAttribute];
|
||||
const item = await fromUuid(uuid);
|
||||
enforce(
|
||||
item && item.parent === this.actor,
|
||||
getGame().i18n.format("DS4.ErrorActorDoesNotHaveItem", { uuid, actor: this.actor.name }),
|
||||
);
|
||||
item.roll().catch((e) => notifications.error(e, { log: true }));
|
||||
}
|
||||
|
||||
|
@ -464,11 +492,11 @@ export class DS4ActorSheet extends ActorSheet {
|
|||
const embeddedDocumentListEntryProperties = Object.freeze({
|
||||
ActiveEffect: {
|
||||
selector: ".effect",
|
||||
idDataAttribute: "effectId",
|
||||
uuidDataAttribute: "effectUuid",
|
||||
},
|
||||
Item: {
|
||||
selector: ".item",
|
||||
idDataAttribute: "itemId",
|
||||
uuidDataAttribute: "itemUuid",
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
import { DS4 } from "../config";
|
||||
import { DS4ActiveEffect } from "../documents/active-effect";
|
||||
import { notifications } from "../ui/notifications";
|
||||
import { enforce, getGame } from "../utils/utils";
|
||||
import { disableOverriddenFields } from "./sheet-helpers";
|
||||
|
||||
|
@ -92,9 +91,6 @@ export class DS4ItemSheet extends ItemSheet {
|
|||
*/
|
||||
onControlEffect(event) {
|
||||
event.preventDefault();
|
||||
if (this.item.isOwned) {
|
||||
return notifications.warn(getGame().i18n.localize("DS4.WarningManageActiveEffectOnOwnedItem"));
|
||||
}
|
||||
const a = event.currentTarget;
|
||||
switch (a.dataset["action"]) {
|
||||
case "create":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue