Fenêtre de stress avec acteurs à cocher

Remplacement de la liste d'acteurs par des cases à cocher car la
sélection n'est pas visible
This commit is contained in:
Vincent Vandemeulebrouck 2022-09-23 20:23:35 +02:00
parent 3a29c25b09
commit fe80881405
3 changed files with 46 additions and 40 deletions

View File

@ -1,18 +1,19 @@
import { Misc } from "./misc.js";
import { RdDSheetUtility } from "./rdd-sheet-utility.js";
export class DialogStress extends Dialog {
static async distribuerStress() {
let dialogData = {
const dialogData = {
motif: "Motif",
stress: 10,
immediat: false,
actors: game.actors.filter(actor => actor.hasPlayerOwner && actor.isPersonnage())
.map(actor => {
let actorData = duplicate(actor);
actorData.selected = actor.hasPlayerOwner;
return actorData;
.map(actor => ({
id: actor.id,
name: actor.name,
selected: true
})
)
};
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-stress.html", dialogData);
@ -21,52 +22,44 @@ export class DialogStress extends Dialog {
}
constructor(dialogData, html) {
let options = { classes: ["DialogStress"], width: 400, height: 320, 'z-index': 99999 };
let conf = {
const options = { classes: ["DialogStress"],
width: 400,
height: 205+dialogData.actors.length*25,
'z-index': 99999
};
const conf = {
title: "Donner du stress",
content: html,
buttons: {
"Stress": { label: "Stress !", callback: it => { this._onStress(); } }
}
stress: { label: "Stress !", callback: it => { this.onStress(); } }
},
default: "stress"
};
super(conf, options);
this.dialogData = dialogData;
}
async _onStress() {
this.validerStress();
const compteur = this.dialogData.immediat ? 'experience' : 'stress';
const stress = this.dialogData.stress;
const motif = this.dialogData.motif;
async onStress() {
const motif = $("form.rdddialogstress input[name='motif']").val();
const stress = Number($("form.rdddialogstress input[name='stress']").val());
const compteur = ($("form.rdddialogstress input[name='immediat']").prop("checked")) ? 'experience' : 'stress';
this.dialogData.actors.filter(it => it.selected)
.map(it => game.actors.get(it._id))
.map(it => game.actors.get(it.id))
.forEach(actor => actor.distribuerStress(compteur, stress, motif));
}
validerStress() {
this.dialogData.motif = $("form.rdddialogstress input[name='motif']").val();
this.dialogData.stress = $("form.rdddialogstress input[name='stress']").val();
this.dialogData.immediat = $("form.rdddialogstress input[name='immediat']").prop("checked");;
}
/* -------------------------------------------- */
activateListeners(html) {
super.activateListeners(html);
html.find(".select-actor").change((event) => this.onSelectActor(event));
html.find("input.select-actor").change((event) => this.onSelectActor(event));
}
async onSelectActor(event) {
event.preventDefault();
const options = event.currentTarget.options;
for (var i = 0; i < options.length; i++) { // looping over the options
const actorId = options[i].attributes["data-actor-id"].value;
const actor = this.dialogData.actors.find(it => it._id == actorId);
const actorId = $(event.currentTarget)?.data("actor-id");
const actor = this.dialogData.actors.find(it => it.id == actorId);
if (actor) {
actor.selected = options[i].selected;
actor.selected = event.currentTarget.checked;
}
};
}
}

View File

@ -840,6 +840,15 @@ ul, li {
margin-left: 3rem;
}
.grid-select-actor {
display: grid;
grid-column: span 2 / span 2;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 0.1rem;
margin: 0.1rem;
padding: 0;
}
.sheet-competence-img {
width: 24px;
height: 24px;

View File

@ -12,13 +12,17 @@
<label for="immediat">Expérience immédiate</label>
<input class="flex-shrink" type="checkbox" name="immediat" {{#if immediat}}checked{{/if}} />
</div>
<div class="form-group">
<label for="actors">Personnages concernés</label>
<select class="select-actor" id="actors" size="7" multiple>
<div class="flexcol">
<label>Personnages concernés</label>
<div class="grid-select-actor">
{{#each actors as |actor key|}}
<option value="{{actor.name}}" data-actor-id="{{actor._id}}" {{#if actor.selected}}selected{{/if}}>{{actor.name}}</option>
<label class="flexrow">
<input type="checkbox" data-dtype="Boolean" class="select-actor"
data-actor-id="{{actor.id}}" {{#if actor.selected}}checked{{/if}} />
{{actor.name}}
</label>
{{/each}}
</select>
</div>
</div>
</div>
</form>