Allow editing embedded documents (used for spells here) in the item's sheet itself.
This commit is contained in:
parent
516f7ac826
commit
7381a2a7fe
6 changed files with 56 additions and 7 deletions
|
|
@ -67,6 +67,10 @@
|
||||||
"supplies": "Supplies",
|
"supplies": "Supplies",
|
||||||
"resources": "Resources"
|
"resources": "Resources"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"openEmbeddedOnCreate": {
|
||||||
|
"name": "Edit Custom Items Immediately When Created",
|
||||||
|
"description": "Tells the character sheets that have \"Add\" buttons to open the Item's sheet when you create the new item so that you can immediately edit it without needing to click more buttons."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sheet-names": {
|
"sheet-names": {
|
||||||
|
|
@ -220,7 +224,8 @@
|
||||||
"notification": {
|
"notification": {
|
||||||
"error": {
|
"error": {
|
||||||
"invalid-integer": "You must enter a valid whole number",
|
"invalid-integer": "You must enter a valid whole number",
|
||||||
"item-not-found": "Failed to find an item to delete."
|
"item-not-found": "Failed to find an item to delete",
|
||||||
|
"spell-create-failed": "Failed to create a custom spell"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
|
|
@ -262,6 +267,11 @@
|
||||||
"explosives": "Explosives",
|
"explosives": "Explosives",
|
||||||
"piloting": "Piloting"
|
"piloting": "Piloting"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"defaults": {
|
||||||
|
"spell": {
|
||||||
|
"name": "(Unnamed Spell)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,17 +14,28 @@ export class ActorHandler extends Actor {
|
||||||
return this.actorTypes[this.type];
|
return this.actorTypes[this.type];
|
||||||
};
|
};
|
||||||
|
|
||||||
genericEmbeddedUpdate($event) {
|
async openEmbeddedSheet($event) {
|
||||||
|
console.log(`openEmbeddedSheet`)
|
||||||
|
if (this.fn?.openEmbeddedSheet) {
|
||||||
|
this.fn.openEmbeddedSheet.bind(this)($event);
|
||||||
|
} else {
|
||||||
|
const data = $event.currentTarget.dataset;
|
||||||
|
let item = await fromUuid(data.embeddedEdit);
|
||||||
|
item?.sheet.render(true);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
async genericEmbeddedUpdate($event) {
|
||||||
if (!this.fn?.genericEmbeddedUpdate) return;
|
if (!this.fn?.genericEmbeddedUpdate) return;
|
||||||
this.fn.genericEmbeddedUpdate.bind(this)($event);
|
this.fn.genericEmbeddedUpdate.bind(this)($event);
|
||||||
};
|
};
|
||||||
|
|
||||||
genericEmbeddedDelete($event) {
|
async genericEmbeddedDelete($event) {
|
||||||
if (!this.fn?.genericEmbeddedDelete) return;
|
if (!this.fn?.genericEmbeddedDelete) return;
|
||||||
this.fn.genericEmbeddedDelete.bind(this)($event);
|
this.fn.genericEmbeddedDelete.bind(this)($event);
|
||||||
};
|
};
|
||||||
|
|
||||||
createCustomSpell() {
|
async createCustomSpell() {
|
||||||
if (!this.fn?.createCustomSpell) return;
|
if (!this.fn?.createCustomSpell) return;
|
||||||
this.fn.createCustomSpell.bind(this)();
|
this.fn.createCustomSpell.bind(this)();
|
||||||
this.sheet.render(true);
|
this.sheet.render(true);
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,26 @@ export class PlayerActor {
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @this {Actor} */
|
/** @this {Actor} */
|
||||||
static createCustomSpell() {
|
static async createCustomSpell() {
|
||||||
this.createEmbeddedDocuments(
|
let items = await this.createEmbeddedDocuments(
|
||||||
"Item",
|
"Item",
|
||||||
[{ type: `spell`, name: `New Spell` }]
|
[{
|
||||||
|
type: `spell`,
|
||||||
|
name: game.i18n.format(`dotdungeon.defaults.spell.name`),
|
||||||
|
}]
|
||||||
);
|
);
|
||||||
|
if (items.length == 0) {
|
||||||
|
ui.notifications.error(
|
||||||
|
`dotdungeon.notifications.error.spell-create-failed`,
|
||||||
|
{ localize: true, console: false }
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
};
|
||||||
this.sheet.render();
|
this.sheet.render();
|
||||||
|
if (game.settings.get(`dotdungeon`, `openEmbeddedOnCreate`)) {
|
||||||
|
for (const item of items) {
|
||||||
|
item.sheet.render(true);
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,14 @@ export default function() {
|
||||||
default: true,
|
default: true,
|
||||||
requiresReload: false,
|
requiresReload: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
game.settings.register(`dotdungeon`, `openEmbeddedOnCreate`, {
|
||||||
|
name: `dotdungeon.settings.openEmbeddedOnCreate.name`,
|
||||||
|
hint: `dotdungeon.settings.openEmbeddedOnCreate.description`,
|
||||||
|
scope: `client`,
|
||||||
|
type: Boolean,
|
||||||
|
config: true,
|
||||||
|
default: true,
|
||||||
|
requiresReload: false,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -24,6 +24,8 @@ export class PlayerSheet extends GenericActorSheet {
|
||||||
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
|
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
|
||||||
html.find(`[data-embedded-delete]`)
|
html.find(`[data-embedded-delete]`)
|
||||||
.on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor));
|
.on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor));
|
||||||
|
html.find(`[data-embedded-edit]`)
|
||||||
|
.on(`click`, this.actor.openEmbeddedSheet.bind(this.actor));
|
||||||
};
|
};
|
||||||
|
|
||||||
async getData() {
|
async getData() {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@
|
||||||
<div class="spell__actions">
|
<div class="spell__actions">
|
||||||
<button
|
<button
|
||||||
class="confirm"
|
class="confirm"
|
||||||
|
data-embedded-edit="{{spell.uuid}}"
|
||||||
>
|
>
|
||||||
Edit
|
Edit
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue