Work towards better editing of embedded items

This commit is contained in:
Oliver-Akins 2024-01-11 23:20:35 -07:00
parent 0496be73b0
commit 10dcec3bd7
12 changed files with 136 additions and 77 deletions

View file

@ -16,7 +16,7 @@
background: #048A81; background: #048A81;
color: white; color: white;
} }
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:focus { .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:focus-visible {
background: transparent; background: transparent;
color: #048A81; color: #048A81;
border-color: #048A81; border-color: #048A81;
@ -25,7 +25,7 @@
background: #007ACC; background: #007ACC;
color: white; color: white;
} }
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:focus { .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:focus-visible {
background: transparent; background: transparent;
color: #007ACC; color: #007ACC;
border-color: #007ACC; border-color: #007ACC;
@ -34,7 +34,7 @@
background: #960200; background: #960200;
color: white; color: white;
} }
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:focus { .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:focus-visible {
background: transparent; background: transparent;
color: #960200; color: #960200;
border-color: #960200; border-color: #960200;

View file

@ -118,7 +118,7 @@
background: #048A81; background: #048A81;
color: white; color: white;
} }
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:focus { .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.confirm:focus-visible {
background: transparent; background: transparent;
color: #048A81; color: #048A81;
border-color: #048A81; border-color: #048A81;
@ -127,7 +127,7 @@
background: #007ACC; background: #007ACC;
color: white; color: white;
} }
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:focus { .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.neutral:focus-visible {
background: transparent; background: transparent;
color: #007ACC; color: #007ACC;
border-color: #007ACC; border-color: #007ACC;
@ -136,7 +136,7 @@
background: #960200; background: #960200;
color: white; color: white;
} }
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:focus { .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover, .dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:focus-visible {
background: transparent; background: transparent;
color: #960200; color: #960200;
border-color: #960200; border-color: #960200;
@ -328,6 +328,14 @@
.dotdungeon .actor--pc .panel--aspect .panel__content textarea { .dotdungeon .actor--pc .panel--aspect .panel__content textarea {
resize: vertical; resize: vertical;
} }
.dotdungeon .actor--pc .panel--aspect .aspect__used {
display: flex;
align-items: center;
gap: 4px;
}
.dotdungeon .actor--pc .panel--aspect .aspect__used--input {
margin: 0;
}
.dotdungeon .actor--pc .panel--weapons { .dotdungeon .actor--pc .panel--weapons {
grid-area: weapons; grid-area: weapons;
} }
@ -385,12 +393,6 @@
.dotdungeon .actor--pc .panel--spells .spell .placeholder { .dotdungeon .actor--pc .panel--spells .spell .placeholder {
opacity: 75%; opacity: 75%;
} }
.dotdungeon .actor--pc .panel--spells .spell__actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
.dotdungeon .actor--pc .panel--mounts { .dotdungeon .actor--pc .panel--mounts {
grid-area: mounts; grid-area: mounts;
} }
@ -400,6 +402,12 @@
.dotdungeon .actor--pc .panel--storage { .dotdungeon .actor--pc .panel--storage {
grid-area: storage; grid-area: storage;
} }
.dotdungeon .actor--pc .actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
@container (max-width: 620px) { @container (max-width: 620px) {
.dotdungeon .actor--pc { .dotdungeon .actor--pc {
@ -482,4 +490,4 @@
resize: vertical; resize: vertical;
} }
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/global/icons.scss%22,%22../styles/global/buttons.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22,%22../styles/sheets/items/spell.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAGD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YEzDW;;AF2DX;EACC;EACA,aE/DS;EFgET;;;AIhEF;EACC;EACA;EACA;;AAIC;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;ACTH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,YHXc;EGYd,OHXe;;AGYf;EACC;EACA,OHfa;EGgBb,cHhBa;;AGoBf;EACC,YHlBc;EGmBd,OHlBe;;AGmBf;EACC;EACA,OHtBa;EGuBb,cHvBa;;AG2Bf;EACC,YHzBa;EG0Bb,OHzBc;;AG0Bd;EACC;EACA,OH7BY;EG8BZ,cH9BY;;AGkCd;EACC;;AAID;EACC;;AACA;EACC;;;ACvDJ;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EPlBD;EACA;EACA;EOkBE;EACA;EACA,aNrBU;EMsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;EACA;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;;AD5NF;ECoOC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD5PL;ECsQC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AC9RL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */ /*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/global/icons.scss%22,%22../styles/global/buttons.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22,%22../styles/sheets/items/spell.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAGD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YEzDW;;AF2DX;EACC;EACA,aE/DS;EFgET;;;AIhEF;EACC;EACA;EACA;;AAIC;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;ACTH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,YHXc;EGYd,OHXe;;AGYf;EACC;EACA,OHfa;EGgBb,cHhBa;;AGoBf;EACC,YHlBc;EGmBd,OHlBe;;AGmBf;EACC;EACA,OHtBa;EGuBb,cHvBa;;AG2Bf;EACC,YHzBa;EG0Bb,OHzBc;;AG0Bd;EACC;EACA,OH7BY;EG8BZ,cH9BY;;AGkCd;EACC;;AAID;EACC;;AACA;EACC;;;ACvDJ;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EPlBD;EACA;EACA;EOkBE;EACA;EACA,aNrBU;EMsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAKD;EACC;EACA;EACA;;AAEA;EACC;;AAKJ;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAIF;EACC;EACA;EACA;EACA;;;ADzOD;ECgPC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;ADxQL;ECkRC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AC1SL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */

View file

@ -111,6 +111,14 @@
.dotdungeon .actor--pc .panel--aspect .panel__content textarea { .dotdungeon .actor--pc .panel--aspect .panel__content textarea {
resize: vertical; resize: vertical;
} }
.dotdungeon .actor--pc .panel--aspect .aspect__used {
display: flex;
align-items: center;
gap: 4px;
}
.dotdungeon .actor--pc .panel--aspect .aspect__used--input {
margin: 0;
}
.dotdungeon .actor--pc .panel--weapons { .dotdungeon .actor--pc .panel--weapons {
grid-area: weapons; grid-area: weapons;
} }
@ -168,12 +176,6 @@
.dotdungeon .actor--pc .panel--spells .spell .placeholder { .dotdungeon .actor--pc .panel--spells .spell .placeholder {
opacity: 75%; opacity: 75%;
} }
.dotdungeon .actor--pc .panel--spells .spell__actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
.dotdungeon .actor--pc .panel--mounts { .dotdungeon .actor--pc .panel--mounts {
grid-area: mounts; grid-area: mounts;
} }
@ -183,6 +185,12 @@
.dotdungeon .actor--pc .panel--storage { .dotdungeon .actor--pc .panel--storage {
grid-area: storage; grid-area: storage;
} }
.dotdungeon .actor--pc .actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
@container (max-width: 620px) { @container (max-width: 620px) {
.dotdungeon .actor--pc { .dotdungeon .actor--pc {
@ -209,4 +217,4 @@
} }
} }
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mvp.scss%22,%22../../../styles/mixins/_breakpoints.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAGA;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAGD;EACC;EACA;EACA;EACA;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;;AC5NF;EDoOC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AC5PL;EDsQC;IACC;IACA;IACA,qBACC;;EAeC;IACC%22,%22file%22:%22mvp.css%22%7D */ /*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mvp.scss%22,%22../../../styles/mixins/_breakpoints.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAGA;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAKD;EACC;EACA;EACA;;AAEA;EACC;;AAKJ;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAIF;EACC;EACA;EACA;EACA;;;ACzOD;EDgPC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;ACxQL;EDkRC;IACC;IACA;IACA,qBACC;;EAeC;IACC%22,%22file%22:%22mvp.css%22%7D */

View file

@ -130,8 +130,9 @@
"aspect": { "aspect": {
"name.placeholder": "Name...", "name.placeholder": "Name...",
"used": "Used", "used": "Used",
"duration": "Duration", "duration": "Duration: {duration}",
"description.placeholder": "Description..." "empty": "You don't have an Aspect yet, add one using the button below or drag one onto your character sheet.",
"add": "Add An Aspect"
}, },
"respawns.header": "Respawns", "respawns.header": "Respawns",
"sync.header": "Sync", "sync.header": "Sync",

View file

@ -15,11 +15,10 @@ export class ActorHandler extends Actor {
}; };
async openEmbeddedSheet($event) { async openEmbeddedSheet($event) {
console.log(`openEmbeddedSheet`)
if (this.fn?.openEmbeddedSheet) { if (this.fn?.openEmbeddedSheet) {
this.fn.openEmbeddedSheet.bind(this)($event); this.fn.openEmbeddedSheet.bind(this)($event);
} else { } else {
const data = $event.currentTarget.dataset; const data = $event.target.dataset;
let item = await fromUuid(data.embeddedEdit); let item = await fromUuid(data.embeddedEdit);
item?.sheet.render(true); item?.sheet.render(true);
}; };
@ -35,9 +34,8 @@ export class ActorHandler extends Actor {
this.fn.genericEmbeddedDelete.bind(this)($event); this.fn.genericEmbeddedDelete.bind(this)($event);
}; };
async createCustomSpell() { async createCustomSpell($event) {
if (!this.fn?.createCustomSpell) return; if (!this.fn?.createCustomSpell) return;
this.fn.createCustomSpell.bind(this)(); this.fn.createCustomSpell.bind(this)($event);
this.sheet.render(true);
}; };
}; };

View file

@ -9,7 +9,7 @@ export class PlayerActor {
/** @this {Actor} */ /** @this {Actor} */
static async genericEmbeddedDelete($event) { static async genericEmbeddedDelete($event) {
let data = $event.delegateTarget.dataset; let data = $event.currentTarget.dataset;
let item = await fromUuid(data.embeddedId); let item = await fromUuid(data.embeddedId);
if (!item) { if (!item) {
@ -36,6 +36,20 @@ export class PlayerActor {
}); });
}; };
/** @this {Actor} */
static async createCustomItem(defaults) {
let items = await this.createEmbeddedDocuments(`Item`, defaults);
if (items.length == 0) {
throw new Error();
};
this.sheet.render();
if (game.settings.get(`dotdungeon`, `openEmbeddedOnCreate`)) {
for (const item of items) {
item.sheet.render(true);
};
};
};
/** @this {Actor} */ /** @this {Actor} */
static async createCustomSpell() { static async createCustomSpell() {
let items = await this.createEmbeddedDocuments( let items = await this.createEmbeddedDocuments(

View file

@ -15,6 +15,7 @@ export default {
// Simple helpers // Simple helpers
"dd-stringify": v => JSON.stringify(v, null, ` `), "dd-stringify": v => JSON.stringify(v, null, ` `),
"dd-empty": v => v.length == 0,
// Logic helpers // Logic helpers
"eq": (a, b) => a == b, "eq": (a, b) => a == b,
@ -26,5 +27,5 @@ export default {
"nand": (a, b) => !(a && b), "nand": (a, b) => !(a && b),
"xor": (a, b) => (a || b) && !(a && b), "xor": (a, b) => (a || b) && !(a && b),
"xnor": (a, b) => !((a || b) && !(a && b)), "xnor": (a, b) => !((a || b) && !(a && b)),
"defined": v => v != null "defined": v => v != null,
}; };

View file

@ -20,8 +20,9 @@ export class PlayerSheet extends GenericActorSheet {
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`); console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor)); html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor));
html.find(`[data-embedded-update]`) // TODO: Apparently the `change` event is bad to use in Foundry
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor)); // html.find(`[data-embedded-update]`)
// .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]`) html.find(`[data-embedded-edit]`)
@ -38,6 +39,7 @@ export class PlayerSheet extends GenericActorSheet {
ctx.computed = { ctx.computed = {
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM, canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
canAddAspect: ctx.items.aspect.length == 0,
}; };
console.log(ctx) console.log(ctx)

View file

@ -18,7 +18,7 @@
&.confirm { &.confirm {
background: $colour-confirm; background: $colour-confirm;
color: $text-on-confirm; color: $text-on-confirm;
&:hover, &:focus { &:hover, &:focus-visible {
background: transparent; background: transparent;
color: $colour-confirm; color: $colour-confirm;
border-color: $colour-confirm; border-color: $colour-confirm;
@ -28,7 +28,7 @@
&.neutral { &.neutral {
background: $colour-neutral; background: $colour-neutral;
color: $text-on-neutral; color: $text-on-neutral;
&:hover, &:focus { &:hover, &:focus-visible {
background: transparent; background: transparent;
color: $colour-neutral; color: $colour-neutral;
border-color: $colour-neutral; border-color: $colour-neutral;
@ -38,7 +38,7 @@
&.danger { &.danger {
background: $colour-danger; background: $colour-danger;
color: $text-on-danger; color: $text-on-danger;
&:hover, &:focus { &:hover, &:focus-visible {
background: transparent; background: transparent;
color: $colour-danger; color: $colour-danger;
border-color: $colour-danger; border-color: $colour-danger;

View file

@ -141,6 +141,18 @@
resize: vertical; resize: vertical;
} }
} }
.aspect {
&__used {
display: flex;
align-items: center;
gap: 4px;
&--input {
margin: 0;
}
}
}
} }
&--weapons { &--weapons {
grid-area: weapons; grid-area: weapons;
@ -203,13 +215,6 @@
.placeholder { .placeholder {
opacity: 75%; opacity: 75%;
} }
&__actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
} }
} }
&--mounts { &--mounts {
@ -222,6 +227,13 @@
grid-area: storage; grid-area: storage;
} }
} }
.actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
} }

View file

@ -1,37 +1,52 @@
{{#> dotdungeon.panel class="aspect" title="dotdungeon.actor.pc.panel.aspect"}} {{#> dotdungeon.panel class="aspect" title="dotdungeon.actor.pc.panel.aspect"}}
<input {{#each items.aspect as | aspect |}}
type="text" <div class="aspect">
class="aspect__name--input" <h3 class="aspect__name">{{aspect.name}}</h3>
name="system.aspect.name" {{#if (defined aspect.system.deactivateAfter)}}
placeholder="{{localize "dotdungeon.actor.pc.aspect.name.placeholder"}}" <p class="aspect__duration">
value="{{system.aspect.name}}" {{localize "dotdungeon.actor.pc.aspect.duration" duration=(dd-toFriendlyDuration aspect.system.deactivateAfter)}}
> </p>
<label class="aspect__used--label"> {{/if}}
{{localize "dotdungeon.actor.pc.aspect.used"}} {{#if aspect.system.info}}
<input <div class="aspect__description">
type="checkbox" <p>
class="aspect__used--input" {{aspect.system.info}}
name="system.aspect.used" </p>
{{checked system.aspect.used}} </div>
{{/if}}
<div class="aspect__used">
<input
id="{{aspect.uuid}}-used"
type="checkbox"
class="aspect__used--input"
{{checked aspect.system.used}}
>
<label
class="aspect__used--label"
for="{{aspect.uuid}}-used"
>
{{localize "dotdungeon.actor.pc.aspect.used"}}
</label>
</div>
<div class="actions">
<button
class="confirm"
data-embedded-edit="{{aspect.uuid}}"
>
Edit
</button>
</div>
</div>
{{else}}
<p>
{{localize "dotdungeon.actor.pc.aspect.empty"}}
</p>
{{/each}}
{{#if (or computed.canAddAspect (not (dd-empty items.aspect)))}}
<button
class="confirm"
> >
</label> {{localize "dotdungeon.actor.pc.aspect.add"}}
<label class="aspect__duration--label"> </button>
{{localize "dotdungeon.actor.pc.aspect.duration"}} {{/if}}
{{#if system.aspect.deactivateAfter}} {{/ dotdungeon.panel}}
<span class="friendly-duration aspect__duration--friendly">
({{dd-toFriendlyDuration system.aspect.deactivateAfter}})
</span>
{{/if}}
<input
type="number"
class="aspect__duration--input"
name="system.aspect.deactivateAfter"
value="{{system.aspect.deactivateAfter}}"
>
</label>
<textarea
class="aspect__description--input"
name="system.aspect.description"
placeholder="{{localize "dotdungeon.actor.pc.aspect.description.placeholder"}}"
>{{system.aspect.description}}</textarea>
{{/ dotdungeon.panel}}

View file

@ -30,7 +30,7 @@
}} }}
</div> </div>
{{/if}} {{/if}}
<div class="spell__actions"> <div class="actions">
<button <button
class="confirm" class="confirm"
data-embedded-edit="{{spell.uuid}}" data-embedded-edit="{{spell.uuid}}"