Merge pull request #136 from Oliver-Akins/feature/item-context-menus
Embedded Material context menu
This commit is contained in:
commit
c03cd1dcd7
8 changed files with 42 additions and 17 deletions
|
|
@ -2,6 +2,7 @@ import { GenericActorSheet } from "../../GenericActorSheet.mjs";
|
||||||
import DOTDUNGEON from "../../../config.mjs";
|
import DOTDUNGEON from "../../../config.mjs";
|
||||||
import { localizer } from "../../../utils/localizer.mjs";
|
import { localizer } from "../../../utils/localizer.mjs";
|
||||||
import { modifierToString } from "../../../utils/modifierToString.mjs";
|
import { modifierToString } from "../../../utils/modifierToString.mjs";
|
||||||
|
import { GenericContextMenu } from "../../../utils/GenericContextMenu.mjs";
|
||||||
|
|
||||||
export class PlayerSheetv2 extends GenericActorSheet {
|
export class PlayerSheetv2 extends GenericActorSheet {
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
|
|
@ -47,6 +48,24 @@ export class PlayerSheetv2 extends GenericActorSheet {
|
||||||
this.toggleItemFilter(filter);
|
this.toggleItemFilter(filter);
|
||||||
this._renderInner();
|
this._renderInner();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Make materials be able to be edited/deleted
|
||||||
|
new GenericContextMenu(html, `.material`, [
|
||||||
|
{
|
||||||
|
name: localizer(`dotdungeon.common.edit`),
|
||||||
|
callback: (html) => {
|
||||||
|
const data = html[0].dataset;
|
||||||
|
this.openEmbeddedSheet.bind(this)(data.embeddedId);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: localizer(`dotdungeon.common.delete`),
|
||||||
|
callback: (html) => {
|
||||||
|
const data = html[0].dataset;
|
||||||
|
this.genericEmbeddedDelete.bind(this)(data.embeddedId);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
async getData() {
|
async getData() {
|
||||||
|
|
|
||||||
|
|
@ -59,12 +59,19 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
html.find(`[data-embedded-update-on="blur"]`)
|
html.find(`[data-embedded-update-on="blur"]`)
|
||||||
.on(`blur`, this.genericEmbeddedUpdate.bind(this));
|
.on(`blur`, this.genericEmbeddedUpdate.bind(this));
|
||||||
html.find(`[data-embedded-delete]`)
|
html.find(`[data-embedded-delete]`)
|
||||||
.on(`click`, this.genericEmbeddedDelete.bind(this));
|
.on(`click`, ($e) => {
|
||||||
|
const id = $e.currentTarget.dataset.embeddedDelete;
|
||||||
|
this.genericEmbeddedDelete.bind(this)(id);
|
||||||
|
});
|
||||||
html.find(`[data-embedded-create]`)
|
html.find(`[data-embedded-create]`)
|
||||||
.on(`click`, this.genericEmbeddedCreate.bind(this));
|
.on(`click`, this.genericEmbeddedCreate.bind(this));
|
||||||
html.find(`[data-message-type]`)
|
html.find(`[data-message-type]`)
|
||||||
.on(`click`, this.genericSendToChat.bind(this));
|
.on(`click`, this.genericSendToChat.bind(this));
|
||||||
html.find(`[data-embedded-edit]`)
|
html.find(`[data-embedded-edit]`)
|
||||||
|
.on(`click`, ($e) => {
|
||||||
|
const id = $e.currentTarget.dataset.embeddedEdit;
|
||||||
|
this.openEmbeddedSheet.bind(this)(id);
|
||||||
|
})
|
||||||
.on(`click`, this.openEmbeddedSheet.bind(this));
|
.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));
|
||||||
|
|
@ -129,10 +136,8 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
async openEmbeddedSheet($event) {
|
async openEmbeddedSheet(item_id) {
|
||||||
const data = $event.currentTarget.dataset;
|
let item = await fromUuid(item_id);
|
||||||
let item = await fromUuid(data.embeddedEdit);
|
|
||||||
console.log(data)
|
|
||||||
item?.sheet.render(true);
|
item?.sheet.render(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -186,9 +191,8 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
await item?.update({ [data.embeddedDecrement]: value - 1 });
|
await item?.update({ [data.embeddedDecrement]: value - 1 });
|
||||||
};
|
};
|
||||||
|
|
||||||
async genericEmbeddedDelete($event) {
|
async genericEmbeddedDelete(item_uuid) {
|
||||||
let data = $event.currentTarget.dataset;
|
let item = await fromUuid(item_uuid);
|
||||||
let item = await fromUuid(data.embeddedId);
|
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
ui.notifications.error(
|
ui.notifications.error(
|
||||||
|
|
|
||||||
6
module/utils/GenericContextMenu.mjs
Normal file
6
module/utils/GenericContextMenu.mjs
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
export class GenericContextMenu extends ContextMenu {
|
||||||
|
constructor(element, selector, menuItems, opts = {}) {
|
||||||
|
super(element, selector, menuItems, opts);
|
||||||
|
this.menuItems.forEach(i => i.icon ??= ``);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -85,8 +85,7 @@
|
||||||
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
||||||
data-tooltip-direction="RIGHT"
|
data-tooltip-direction="RIGHT"
|
||||||
class="aspect__button--delete"
|
class="aspect__button--delete"
|
||||||
data-embedded-delete
|
data-embedded-delete="{{item.uuid}}"
|
||||||
data-embedded-id="{{item.uuid}}"
|
|
||||||
>
|
>
|
||||||
<div aria-hidden="true" class="icon icon--20">
|
<div aria-hidden="true" class="icon icon--20">
|
||||||
{{{ icons.garbage-bin }}}
|
{{{ icons.garbage-bin }}}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="material">
|
<div class="material" data-embedded-id="{{item.uuid}}">
|
||||||
<label
|
<label
|
||||||
for="{{meta.idp}}-{{item.uuid}}-quantity-input"
|
for="{{meta.idp}}-{{item.uuid}}-quantity-input"
|
||||||
class="material__label"
|
class="material__label"
|
||||||
|
|
|
||||||
|
|
@ -85,8 +85,7 @@
|
||||||
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
||||||
data-tooltip-direction="RIGHT"
|
data-tooltip-direction="RIGHT"
|
||||||
class="pet__button--delete"
|
class="pet__button--delete"
|
||||||
data-embedded-delete
|
data-embedded-delete="{{item.uuid}}"
|
||||||
data-embedded-id="{{item.uuid}}"
|
|
||||||
>
|
>
|
||||||
<div aria-hidden="true" class="icon icon--20">
|
<div aria-hidden="true" class="icon icon--20">
|
||||||
{{{ icons.garbage-bin }}}
|
{{{ icons.garbage-bin }}}
|
||||||
|
|
|
||||||
|
|
@ -89,8 +89,7 @@
|
||||||
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
||||||
data-tooltip-direction="RIGHT"
|
data-tooltip-direction="RIGHT"
|
||||||
class="untyped__button--delete"
|
class="untyped__button--delete"
|
||||||
data-embedded-delete
|
data-embedded-delete="{{item.uuid}}"
|
||||||
data-embedded-id="{{item.uuid}}"
|
|
||||||
>
|
>
|
||||||
<div aria-hidden="true" class="icon icon--20">
|
<div aria-hidden="true" class="icon icon--20">
|
||||||
{{{ icons.garbage-bin }}}
|
{{{ icons.garbage-bin }}}
|
||||||
|
|
|
||||||
|
|
@ -104,8 +104,7 @@
|
||||||
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
data-tooltip="{{dd-i18n 'dotdungeon.common.delete'}}"
|
||||||
data-tooltip-direction="RIGHT"
|
data-tooltip-direction="RIGHT"
|
||||||
class="weapon__button--delete"
|
class="weapon__button--delete"
|
||||||
data-embedded-delete
|
data-embedded-delete="{{item.uuid}}"
|
||||||
data-embedded-id="{{item.uuid}}"
|
|
||||||
>
|
>
|
||||||
<div aria-hidden="true" class="icon icon--20">
|
<div aria-hidden="true" class="icon icon--20">
|
||||||
{{{ icons.garbage-bin }}}
|
{{{ icons.garbage-bin }}}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue