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;
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;
color: #048A81;
border-color: #048A81;
@ -25,7 +25,7 @@
background: #007ACC;
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;
color: #007ACC;
border-color: #007ACC;
@ -34,7 +34,7 @@
background: #960200;
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;
color: #960200;
border-color: #960200;

View file

@ -118,7 +118,7 @@
background: #048A81;
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;
color: #048A81;
border-color: #048A81;
@ -127,7 +127,7 @@
background: #007ACC;
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;
color: #007ACC;
border-color: #007ACC;
@ -136,7 +136,7 @@
background: #960200;
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;
color: #960200;
border-color: #960200;
@ -328,6 +328,14 @@
.dotdungeon .actor--pc .panel--aspect .panel__content textarea {
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 {
grid-area: weapons;
}
@ -385,12 +393,6 @@
.dotdungeon .actor--pc .panel--spells .spell .placeholder {
opacity: 75%;
}
.dotdungeon .actor--pc .panel--spells .spell__actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
.dotdungeon .actor--pc .panel--mounts {
grid-area: mounts;
}
@ -400,6 +402,12 @@
.dotdungeon .actor--pc .panel--storage {
grid-area: storage;
}
.dotdungeon .actor--pc .actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
@container (max-width: 620px) {
.dotdungeon .actor--pc {
@ -482,4 +490,4 @@
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 {
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 {
grid-area: weapons;
}
@ -168,12 +176,6 @@
.dotdungeon .actor--pc .panel--spells .spell .placeholder {
opacity: 75%;
}
.dotdungeon .actor--pc .panel--spells .spell__actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
.dotdungeon .actor--pc .panel--mounts {
grid-area: mounts;
}
@ -183,6 +185,12 @@
.dotdungeon .actor--pc .panel--storage {
grid-area: storage;
}
.dotdungeon .actor--pc .actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
@container (max-width: 620px) {
.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": {
"name.placeholder": "Name...",
"used": "Used",
"duration": "Duration",
"description.placeholder": "Description..."
"duration": "Duration: {duration}",
"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",
"sync.header": "Sync",

View file

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

View file

@ -9,7 +9,7 @@ export class PlayerActor {
/** @this {Actor} */
static async genericEmbeddedDelete($event) {
let data = $event.delegateTarget.dataset;
let data = $event.currentTarget.dataset;
let item = await fromUuid(data.embeddedId);
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} */
static async createCustomSpell() {
let items = await this.createEmbeddedDocuments(

View file

@ -15,6 +15,7 @@ export default {
// Simple helpers
"dd-stringify": v => JSON.stringify(v, null, ` `),
"dd-empty": v => v.length == 0,
// Logic helpers
"eq": (a, b) => a == b,
@ -26,5 +27,5 @@ export default {
"nand": (a, b) => !(a && b),
"xor": (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}`);
html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor));
html.find(`[data-embedded-update]`)
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
// TODO: Apparently the `change` event is bad to use in Foundry
// html.find(`[data-embedded-update]`)
// .on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
html.find(`[data-embedded-delete]`)
.on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor));
html.find(`[data-embedded-edit]`)
@ -38,6 +39,7 @@ export class PlayerSheet extends GenericActorSheet {
ctx.computed = {
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
canAddAspect: ctx.items.aspect.length == 0,
};
console.log(ctx)

View file

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

View file

@ -141,6 +141,18 @@
resize: vertical;
}
}
.aspect {
&__used {
display: flex;
align-items: center;
gap: 4px;
&--input {
margin: 0;
}
}
}
}
&--weapons {
grid-area: weapons;
@ -203,13 +215,6 @@
.placeholder {
opacity: 75%;
}
&__actions {
display: flex;
flex-direction: row;
justify-content: end;
gap: 4px;
}
}
}
&--mounts {
@ -222,6 +227,13 @@
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"}}
<input
type="text"
class="aspect__name--input"
name="system.aspect.name"
placeholder="{{localize "dotdungeon.actor.pc.aspect.name.placeholder"}}"
value="{{system.aspect.name}}"
>
<label class="aspect__used--label">
{{localize "dotdungeon.actor.pc.aspect.used"}}
<input
type="checkbox"
class="aspect__used--input"
name="system.aspect.used"
{{checked system.aspect.used}}
{{#each items.aspect as | aspect |}}
<div class="aspect">
<h3 class="aspect__name">{{aspect.name}}</h3>
{{#if (defined aspect.system.deactivateAfter)}}
<p class="aspect__duration">
{{localize "dotdungeon.actor.pc.aspect.duration" duration=(dd-toFriendlyDuration aspect.system.deactivateAfter)}}
</p>
{{/if}}
{{#if aspect.system.info}}
<div class="aspect__description">
<p>
{{aspect.system.info}}
</p>
</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>
<label class="aspect__duration--label">
{{localize "dotdungeon.actor.pc.aspect.duration"}}
{{#if system.aspect.deactivateAfter}}
<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}}
{{localize "dotdungeon.actor.pc.aspect.add"}}
</button>
{{/if}}
{{/ dotdungeon.panel}}

View file

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