Move sheet logic into the sheet class...
This commit is contained in:
parent
59b64f57db
commit
0304af3695
2 changed files with 112 additions and 89 deletions
|
|
@ -1,13 +1,4 @@
|
||||||
import { localizer } from "../../utils/localizer.mjs";
|
|
||||||
|
|
||||||
export class DotDungeonActor extends Actor {
|
export class DotDungeonActor extends Actor {
|
||||||
|
|
||||||
async openEmbeddedSheet($event) {
|
|
||||||
const data = $event.target.dataset;
|
|
||||||
let item = await fromUuid(data.embeddedEdit);
|
|
||||||
item?.sheet.render(true);
|
|
||||||
};
|
|
||||||
|
|
||||||
async createEmbeddedItem(defaults, opts = {}) {
|
async createEmbeddedItem(defaults, opts = {}) {
|
||||||
let items = await this.createEmbeddedDocuments(`Item`, defaults);
|
let items = await this.createEmbeddedDocuments(`Item`, defaults);
|
||||||
if (items.length == 0) {
|
if (items.length == 0) {
|
||||||
|
|
@ -23,78 +14,4 @@ export class DotDungeonActor extends Actor {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
async genericEmbeddedCreate($event) {
|
|
||||||
const data = $event.currentTarget.dataset;
|
|
||||||
if (!this[`createCustom${data.embeddedCreate}`]) {
|
|
||||||
this.createEmbeddedItem({
|
|
||||||
type: data.embeddedCreate,
|
|
||||||
name: localizer(
|
|
||||||
`dotdungeon.default.name`,
|
|
||||||
{ document: `Actor`, type: data.embeddedCreate }
|
|
||||||
),
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this[`createCustom${data.embeddedCreate}`]($event);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
async genericEmbeddedUpdate($event) {
|
|
||||||
const target = $event.delegateTarget;
|
|
||||||
const data = target.dataset;
|
|
||||||
const item = await fromUuid(data.embeddedId);
|
|
||||||
|
|
||||||
let value = target.value;
|
|
||||||
switch (target.type) {
|
|
||||||
case "checkbox": value = target.checked; break;
|
|
||||||
};
|
|
||||||
|
|
||||||
await item?.update({ [data.embeddedUpdate]: value });
|
|
||||||
};
|
|
||||||
|
|
||||||
async genericEmbeddedDelete($event) {
|
|
||||||
let data = $event.currentTarget.dataset;
|
|
||||||
let item = await fromUuid(data.embeddedId);
|
|
||||||
|
|
||||||
if (!item) {
|
|
||||||
ui.notifications.error(
|
|
||||||
`dotdungeon.notification.error.item-not-found`,
|
|
||||||
{ console: false }
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
Dialog.confirm({
|
|
||||||
title: game.i18n.format(
|
|
||||||
`dotdungeon.dialogs.${item.type}.delete.title`,
|
|
||||||
item
|
|
||||||
),
|
|
||||||
content: game.i18n.format(
|
|
||||||
`dotdungeon.dialogs.${item.type}.delete.content`,
|
|
||||||
item
|
|
||||||
),
|
|
||||||
yes: () => {
|
|
||||||
item.delete();
|
|
||||||
},
|
|
||||||
defaultYes: false,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
async genericSendToChat($event) {
|
|
||||||
const data = $event.currentTarget.dataset;
|
|
||||||
const type = data.messageType;
|
|
||||||
if (this[`send${type}ToChat`]) {
|
|
||||||
return await this[`send${type}ToChat`]($event);
|
|
||||||
};
|
|
||||||
if (!data.messageContent) {
|
|
||||||
console.warn(`.dungeon | Tried to send a chat message with no content`);
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
let message = await ChatMessage.create({
|
|
||||||
content: data.messageContent,
|
|
||||||
flavor: data.messageFlavor,
|
|
||||||
speaker: { actor: this.actor },
|
|
||||||
});
|
|
||||||
message.render();
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -43,21 +43,25 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
html.find(`summary`).on(`click`, this._handleSummaryToggle.bind(this));
|
html.find(`summary`).on(`click`, this._handleSummaryToggle.bind(this));
|
||||||
html.find(`[data-roll-formula]`).on(`click`, this._handleRoll.bind(this));
|
html.find(`[data-roll-formula]`).on(`click`, this._handleRoll.bind(this));
|
||||||
html.find(`[data-embedded-update-on="change"]`)
|
html.find(`[data-embedded-update-on="change"]`)
|
||||||
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
|
.on(`change`, this.genericEmbeddedUpdate.bind(this));
|
||||||
html.find(`[data-embedded-update-on="blur"]`)
|
html.find(`[data-embedded-update-on="blur"]`)
|
||||||
.on(`blur`, this.actor.genericEmbeddedUpdate.bind(this.actor));
|
.on(`blur`, this.genericEmbeddedUpdate.bind(this));
|
||||||
html.find(`[data-embedded-delete]`)
|
html.find(`[data-embedded-delete]`)
|
||||||
.on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor));
|
.on(`click`, this.genericEmbeddedDelete.bind(this));
|
||||||
html.find(`[data-embedded-create]`)
|
html.find(`[data-embedded-create]`)
|
||||||
.on(`click`, this.actor.genericEmbeddedCreate.bind(this.actor));
|
.on(`click`, this.genericEmbeddedCreate.bind(this));
|
||||||
html.find(`[data-message-type]`)
|
html.find(`[data-message-type]`)
|
||||||
.on(`click`, this.actor.genericSendToChat.bind(this.actor));
|
.on(`click`, this.genericSendToChat.bind(this));
|
||||||
html.find(`[data-embedded-edit]`)
|
html.find(`[data-embedded-edit]`)
|
||||||
.on(`click`, this.actor.openEmbeddedSheet.bind(this.actor));
|
.on(`click`, this.openEmbeddedSheet.bind(this));
|
||||||
html.find(`button[data-increment]`)
|
html.find(`button[data-increment]`)
|
||||||
.on(`click`, this._incrementValue.bind(this));
|
.on(`click`, this._incrementValue.bind(this));
|
||||||
html.find(`button[data-decrement]`)
|
html.find(`button[data-decrement]`)
|
||||||
.on(`click`, this._decrementValue.bind(this));
|
.on(`click`, this._decrementValue.bind(this));
|
||||||
|
html.find(`button[data-embedded-increment]`)
|
||||||
|
.on(`click`, this.genericEmbeddedIncrement.bind(this));
|
||||||
|
html.find(`button[data-embedded-decrement]`)
|
||||||
|
.on(`click`, this.genericEmbeddedDecrement.bind(this));
|
||||||
};
|
};
|
||||||
|
|
||||||
async _handleRoll($e) {
|
async _handleRoll($e) {
|
||||||
|
|
@ -114,4 +118,106 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
this._expanded.delete(data.collapseId);
|
this._expanded.delete(data.collapseId);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async openEmbeddedSheet($event) {
|
||||||
|
const data = $event.target.dataset;
|
||||||
|
let item = await fromUuid(data.embeddedEdit);
|
||||||
|
item?.sheet.render(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericEmbeddedCreate($event) {
|
||||||
|
const data = $event.currentTarget.dataset;
|
||||||
|
if (!this[`createCustom${data.embeddedCreate}`]) {
|
||||||
|
this.createEmbeddedItem({
|
||||||
|
type: data.embeddedCreate,
|
||||||
|
name: localizer(
|
||||||
|
`dotdungeon.default.name`,
|
||||||
|
{ document: `Actor`, type: data.embeddedCreate }
|
||||||
|
),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this[`createCustom${data.embeddedCreate}`]($event);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericEmbeddedUpdate($event) {
|
||||||
|
const target = $event.currentTarget;
|
||||||
|
const data = target.dataset;
|
||||||
|
const item = await fromUuid(data.embeddedId);
|
||||||
|
|
||||||
|
let value = target.value;
|
||||||
|
switch (target.type) {
|
||||||
|
case "checkbox": value = target.checked; break;
|
||||||
|
};
|
||||||
|
|
||||||
|
await item?.update({ [data.embeddedUpdate]: value });
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericEmbeddedIncrement($event) {
|
||||||
|
const target = $event.currentTarget;
|
||||||
|
const data = target.dataset;
|
||||||
|
const item = await fromUuid(data.embeddedId);
|
||||||
|
const value = getProperty(item, data.embeddedIncrement);
|
||||||
|
if (typeof value != "number") {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
await item?.update({ [data.embeddedIncrement]: value + 1 });
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericEmbeddedDecrement($event) {
|
||||||
|
const target = $event.currentTarget;
|
||||||
|
const data = target.dataset;
|
||||||
|
const item = await fromUuid(data.embeddedId);
|
||||||
|
const value = getProperty(item, data.embeddedDecrement);
|
||||||
|
if (typeof value != "number") {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
await item?.update({ [data.embeddedDecrement]: value - 1 });
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericEmbeddedDelete($event) {
|
||||||
|
let data = $event.currentTarget.dataset;
|
||||||
|
let item = await fromUuid(data.embeddedId);
|
||||||
|
|
||||||
|
if (!item) {
|
||||||
|
ui.notifications.error(
|
||||||
|
`dotdungeon.notification.error.item-not-found`,
|
||||||
|
{ console: false }
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
Dialog.confirm({
|
||||||
|
title: game.i18n.format(
|
||||||
|
`dotdungeon.dialogs.${item.type}.delete.title`,
|
||||||
|
item
|
||||||
|
),
|
||||||
|
content: game.i18n.format(
|
||||||
|
`dotdungeon.dialogs.${item.type}.delete.content`,
|
||||||
|
item
|
||||||
|
),
|
||||||
|
yes: () => {
|
||||||
|
item.delete();
|
||||||
|
},
|
||||||
|
defaultYes: false,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericSendToChat($event) {
|
||||||
|
const data = $event.currentTarget.dataset;
|
||||||
|
const type = data.messageType;
|
||||||
|
if (this[`send${type}ToChat`]) {
|
||||||
|
return await this[`send${type}ToChat`]($event);
|
||||||
|
};
|
||||||
|
if (!data.messageContent) {
|
||||||
|
console.warn(`.dungeon | Tried to send a chat message with no content`);
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let message = await ChatMessage.create({
|
||||||
|
content: data.messageContent,
|
||||||
|
flavor: data.messageFlavor,
|
||||||
|
speaker: { actor: this.actor },
|
||||||
|
});
|
||||||
|
message.render();
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue