From 63770790b9c75792489ccbafe016d5f8ca7ed406 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 9 Dec 2022 02:00:31 +0100 Subject: [PATCH] Fix multi-dialogs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Arrêter d'utiliser le jQuery $(selector) qui cause des effets de bord si plusieurs élements de la page (ie: foundry) correspondent au selector. Stocker le html dans les Sheet/Dialogs lors de l'appel activateListeners afin de pouvoir s'y référer ensuite. Utiliser this.html.find pour chercher dans le html de la fenêtre courante. Eliminer les référence par id html car l'id est unique (donc ne marche pas en multi-fenêtres) --- module/actor-creature-sheet.js | 6 +- module/actor-entite-sheet.js | 6 +- module/actor-sheet.js | 241 ++++++++++++----------- module/actor-vehicule-sheet.js | 8 +- module/actor.js | 4 +- module/dialog-chronologie.js | 19 +- module/dialog-create-signedraconique.js | 51 ++--- module/dialog-fabriquer-potion.js | 59 +++--- module/dialog-item-achat.js | 16 +- module/dialog-item-consommer.js | 27 ++- module/dialog-item-vente.js | 42 ++-- module/dialog-repos.js | 21 +- module/dialog-select-target.js | 5 +- module/dialog-split-item.js | 26 +-- module/dialog-stress.js | 20 +- module/dialog-validation-encaissement.js | 7 +- module/environnement.js | 36 ++-- module/html-utility.js | 6 +- module/item-conteneur-sheet.js | 3 +- module/item-faune-sheet.js | 2 +- module/item-herbe-sheet.js | 2 +- module/item-ingredient-sheet.js | 2 +- module/item-rencontre-sheet.js | 12 +- module/item-sheet.js | 39 ++-- module/rdd-astrologie-editeur.js | 17 +- module/rdd-astrologie-joueur.js | 47 ++--- module/rdd-calendrier-editeur.js | 38 ++-- module/rdd-calendrier.js | 202 ++++++++++--------- module/rdd-roll-encaisser.js | 65 +++--- module/rdd-roll-ethylisme.js | 44 ++--- module/rdd-roll-resolution-table.js | 75 ++++--- module/rdd-roll.js | 231 ++++++++++------------ module/rdd-tmr-dialog.js | 29 +-- module/tmr-rencontres.js | 1 + styles/simple.css | 9 +- templates/actor/astrologie.html | 2 +- templates/dialog-astrologie-joueur.html | 4 +- templates/dialog-roll-encaisser.html | 10 +- templates/dialog-roll-sort.html | 21 +- templates/item-competence-sheet.html | 4 +- templates/item-potion-sheet.html | 4 +- templates/partial-description-sort.html | 2 +- 42 files changed, 706 insertions(+), 759 deletions(-) diff --git a/module/actor-creature-sheet.js b/module/actor-creature-sheet.js index acfd115f..d8187818 100644 --- a/module/actor-creature-sheet.js +++ b/module/actor-creature-sheet.js @@ -27,15 +27,15 @@ export class RdDActorCreatureSheet extends RdDActorSheet { if (!this.options.editable) return; // On competence change - html.find('.creature-carac').change(async event => { + this.html.find('.creature-carac').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCreatureCompetence(compName, "carac_value", parseInt(event.target.value)); }); - html.find('.creature-niveau').change(async event => { + this.html.find('.creature-niveau').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCreatureCompetence(compName, "niveau", parseInt(event.target.value)); }); - html.find('.creature-dommages').change(async event => { + this.html.find('.creature-dommages').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCreatureCompetence(compName, "dommages", parseInt(event.target.value)); }); diff --git a/module/actor-entite-sheet.js b/module/actor-entite-sheet.js index 42577475..0b0e54c2 100644 --- a/module/actor-entite-sheet.js +++ b/module/actor-entite-sheet.js @@ -23,15 +23,15 @@ export class RdDActorEntiteSheet extends RdDActorSheet { if (!this.options.editable) return; // On competence change - html.find('.creature-carac').change(async event => { + this.html.find('.creature-carac').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCreatureCompetence( compName, "carac_value", parseInt(event.target.value) ); } ); - html.find('.creature-niveau').change(async event => { + this.html.find('.creature-niveau').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCreatureCompetence( compName, "niveau", parseInt(event.target.value) ); } ); - html.find('.creature-dommages').change(async event => { + this.html.find('.creature-dommages').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCreatureCompetence( compName, "dommages", parseInt(event.target.value) ); } ); diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 7965a19d..6be3f32a 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -118,58 +118,26 @@ export class RdDActorSheet extends ActorSheet { return formData; } - isCompetenceAffichable(competence) { - return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence); - } - - /* -------------------------------------------- */ - async _onDropActor(event, dragData) { - const dropActor = fromUuidSync(dragData.uuid); - this.actor.addSubActeur(dropActor); - super._onDropActor(event, dragData); - } - - /* -------------------------------------------- */ - async _onDropItem(event, dragData) { - const destItemId = $(event.target)?.closest('.item').attr('data-item-id') - const dropParams = RdDSheetUtility.prepareItemDropParameters(destItemId, this.actor, dragData, this.objetVersConteneur) - if (dropParams) { - const callSuper = await this.actor.processDropItem(dropParams) - if (callSuper) { - await super._onDropItem(event, dragData) - } - } - } - - /* -------------------------------------------- */ - async createItem(name, type) { - await this.actor.createEmbeddedDocuments('Item', [{ name: name, type: type }], { renderSheet: true }); - } - - /* -------------------------------------------- */ - async createEmptyTache() { - await this.createItem('Nouvelle tache', 'tache'); - } - /* -------------------------------------------- */ /** @override */ activateListeners(html) { super.activateListeners(html); + this.html = html; - HtmlUtility._showControlWhen($(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue")); + HtmlUtility._showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue")); // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; - html.find('.item-split').click(async event => { + this.html.find('.item-split').click(async event => { const item = RdDSheetUtility.getItem(event, this.actor); RdDSheetUtility.splitItem(item, this.actor); }); - html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true)) - html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor))); - html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente()); - html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem()); - html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor)); - html.find('.subacteur-delete').click(async event => { + this.html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true)) + this.html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor))); + this.html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente()); + this.html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem()); + this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor)); + this.html.find('.subacteur-delete').click(async event => { const li = RdDSheetUtility.getEventElement(event); const actorId = li.data("actor-id"); if (actorId) { @@ -177,54 +145,54 @@ export class RdDActorSheet extends ActorSheet { RdDUtility.confirmerSuppressionSubacteur(this, subActor, li); } }); - html.find('.experiencelog-delete').click(async event => { - const li = $(event.currentTarget)?.parents(".experiencelog"); + this.html.find('.experiencelog-delete').click(async event => { + const li = this.html.find(event.currentTarget)?.parents(".experiencelog"); const key = Number(li.data("key") ?? -1); await this.actor.deleteExperienceLog(key, 1); }); - html.find('.experiencelog-delete-previous').click(async event => { - const li = $(event.currentTarget)?.parents(".experiencelog"); + this.html.find('.experiencelog-delete-previous').click(async event => { + const li = this.html.find(event.currentTarget)?.parents(".experiencelog"); const key = Number(li.data("key") ?? -1); await this.actor.deleteExperienceLog(0, key + 1); }); - html.find('.encaisser-direct').click(async event => { + this.html.find('.encaisser-direct').click(async event => { this.actor.encaisser(); }) - html.find('.sheet-possession-attack').click(async event => { + this.html.find('.sheet-possession-attack').click(async event => { const poss = RdDSheetUtility.getItem(event, this.actor) this.actor.conjurerPossession(poss) }) - html.find('.remise-a-neuf').click(async event => { + this.html.find('.remise-a-neuf').click(async event => { if (game.user.isGM) { this.actor.remiseANeuf(); } }); - html.find('.creer-tache').click(async event => { + this.html.find('.creer-tache').click(async event => { this.createEmptyTache(); }); - html.find('.creer-un-objet').click(async event => { + this.html.find('.creer-un-objet').click(async event => { RdDUtility.selectObjetType(this); }); - html.find('.creer-une-oeuvre').click(async event => { + this.html.find('.creer-une-oeuvre').click(async event => { RdDUtility.selectTypeOeuvre(this); }); - html.find('.nettoyer-conteneurs').click(async event => { + this.html.find('.nettoyer-conteneurs').click(async event => { this.actor.nettoyerConteneurs(); }); // Blessure control - html.find('.blessure-control').click(async event => { - const tr = $(event.currentTarget).parents(".item"); + this.html.find('.blessure-control').click(async event => { + const tr = this.html.find(event.currentTarget).parents(".item"); let btype = tr.data("blessure-type"); let index = tr.data('blessure-index'); - let active = $(event.currentTarget).data('blessure-active'); + let active = this.html.find(event.currentTarget).data('blessure-active'); //console.log(btype, index, active); await this.actor.manageBlessureFromSheet(btype, index, active); }); // Blessure data - html.find('.blessure-soins').change(async event => { - const tr = $(event.currentTarget).parents(".item"); + this.html.find('.blessure-soins').change(async event => { + const tr = this.html.find(event.currentTarget).parents(".item"); let btype = tr.data('blessure-type'); let index = tr.data('blessure-index'); let psoins = tr.find('.blessure-premiers_soins').val(); @@ -238,57 +206,57 @@ export class RdDActorSheet extends ActorSheet { }); // Equip Inventory Item - html.find('.item-equip').click(async event => { + this.html.find('.item-equip').click(async event => { this.actor.equiperObjet(RdDSheetUtility.getItemId(event)); }); // Roll Carac - html.find('.carac-label a').click(async event => { + this.html.find('.carac-label a').click(async event => { let caracName = event.currentTarget.attributes.name.value; this.actor.rollCarac(caracName.toLowerCase()); }); - html.find('.chance-actuelle').click(async event => { + this.html.find('.chance-actuelle').click(async event => { this.actor.rollCarac('chance-actuelle'); }); - html.find('.chance-appel').click(async event => { + this.html.find('.chance-appel').click(async event => { this.actor.rollAppelChance(); }); - html.find('#jet-astrologie').click(async event => { + this.html.find('[name="jet-astrologie"]').click(async event => { this.actor.astrologieNombresAstraux(); }); // Roll Skill - html.find('a.competence-label').click(async event => { + this.html.find('a.competence-label').click(async event => { this.actor.rollCompetence(RdDSheetUtility.getItemId(event)); }); - html.find('.tache-label a').click(async event => { + this.html.find('.tache-label a').click(async event => { this.actor.rollTache(RdDSheetUtility.getItemId(event)); }); - html.find('.meditation-label a').click(async event => { + this.html.find('.meditation-label a').click(async event => { this.actor.rollMeditation(RdDSheetUtility.getItemId(event)); }); - html.find('.chant-label a').click(async event => { + this.html.find('.chant-label a').click(async event => { this.actor.rollChant(RdDSheetUtility.getItemId(event)); }); - html.find('.danse-label a').click(async event => { + this.html.find('.danse-label a').click(async event => { this.actor.rollDanse(RdDSheetUtility.getItemId(event)); }); - html.find('.musique-label a').click(async event => { + this.html.find('.musique-label a').click(async event => { this.actor.rollMusique(RdDSheetUtility.getItemId(event)); }); - html.find('.oeuvre-label a').click(async event => { + this.html.find('.oeuvre-label a').click(async event => { this.actor.rollOeuvre(RdDSheetUtility.getItemId(event)); }); - html.find('.jeu-label a').click(async event => { + this.html.find('.jeu-label a').click(async event => { this.actor.rollJeu(RdDSheetUtility.getItemId(event)); }); - html.find('.recettecuisine-label a').click(async event => { + this.html.find('.recettecuisine-label a').click(async event => { this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event)); }); - html.find('.subacteur-label a').click(async event => { + this.html.find('.subacteur-label a').click(async event => { let actorId = RdDSheetUtility.getEventItemData(event, 'actor-id'); let actor = game.actors.get(actorId); if (actor) { @@ -297,25 +265,25 @@ export class RdDActorSheet extends ActorSheet { }); // Boutons spéciaux MJs - html.find('.forcer-tmr-aleatoire').click(async event => { + this.html.find('.forcer-tmr-aleatoire').click(async event => { this.actor.reinsertionAleatoire("Action MJ"); }); - html.find('.afficher-tmr').click(async event => { + this.html.find('.afficher-tmr').click(async event => { this.actor.changeTMRVisible(); }); // Points de reve actuel - html.find('.ptreve-actuel a').click(async event => { + this.html.find('.ptreve-actuel a').click(async event => { this.actor.rollCarac('reve-actuel'); }); // Roll Weapon1 - html.find('.arme-label a').click(async event => { + this.html.find('.arme-label a').click(async event => { let arme = this._getEventArmeCombat(event); this.actor.rollArme(duplicate(arme)); }); // Initiative pour l'arme - html.find('.arme-initiative a').click(async event => { + this.html.find('.arme-initiative a').click(async event => { let combatant = game.combat.combatants.find(c => c.actor.id == this.actor.id); if (combatant) { let action = this._getEventArmeCombat(event); @@ -325,88 +293,88 @@ export class RdDActorSheet extends ActorSheet { } }); // Display TMR, visualisation - html.find('.visu-tmr').click(async event => { + this.html.find('.visu-tmr').click(async event => { this.actor.displayTMR("visu"); }); // Display TMR, normal - html.find('.monte-tmr').click(async event => { + this.html.find('.monte-tmr').click(async event => { this.actor.displayTMR("normal"); }); // Display TMR, fast - html.find('.monte-tmr-rapide').click(async event => { + this.html.find('.monte-tmr-rapide').click(async event => { this.actor.displayTMR("rapide"); }); - html.find('.repos').click(async event => { + this.html.find('.repos').click(async event => { await DialogRepos.create(this.actor); }); - html.find('.delete-active-effect').click(async event => { + this.html.find('.delete-active-effect').click(async event => { if (game.user.isGM) { - let effect = $(event.currentTarget).parents(".active-effect").data('effect'); + let effect = this.html.find(event.currentTarget).parents(".active-effect").data('effect'); this.actor.removeEffect(effect); } }); - html.find('.enlever-tous-effets').click(async event => { + this.html.find('.enlever-tous-effets').click(async event => { if (game.user.isGM) { await this.actor.removeEffects(); } }); - html.find('.conteneur-name a').click(async event => { + this.html.find('.conteneur-name a').click(async event => { RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event)); this.render(true); }); - html.find('.carac-xp-augmenter').click(async event => { + this.html.find('.carac-xp-augmenter').click(async event => { let caracName = event.currentTarget.name.replace("augmenter.", ""); this.actor.updateCaracXPAuto(caracName); }); - html.find('.competence-xp-augmenter').click(async event => { + this.html.find('.competence-xp-augmenter').click(async event => { this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event)); }); - html.find('.competence-stress-augmenter').click(async event => { + this.html.find('.competence-stress-augmenter').click(async event => { this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event)); }); if (this.options.vueDetaillee) { // On carac change - html.find('.carac-value').change(async event => { + this.html.find('.carac-value').change(async event => { let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", ""); this.actor.updateCarac(caracName, parseInt(event.target.value)); }); - html.find('input.carac-xp').change(async event => { + this.html.find('input.carac-xp').change(async event => { let caracName = event.currentTarget.name.replace(".xp", "").replace("system.carac.", ""); this.actor.updateCaracXP(caracName, parseInt(event.target.value)); }); // On competence change - html.find('.competence-value').change(async event => { + this.html.find('.competence-value').change(async event => { let compName = event.currentTarget.attributes.compname.value; //console.log("Competence changed :", compName); this.actor.updateCompetence(compName, parseInt(event.target.value)); }); // On competence xp change - html.find('input.competence-xp').change(async event => { + this.html.find('input.competence-xp').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCompetenceXP(compName, parseInt(event.target.value)); }); // On competence xp change - html.find('input.competence-xp-sort').change(async event => { + this.html.find('input.competence-xp-sort').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCompetenceXPSort(compName, parseInt(event.target.value)); }); // On competence archetype change - html.find('.competence-archetype').change(async event => { + this.html.find('.competence-archetype').change(async event => { let compName = event.currentTarget.attributes.compname.value; this.actor.updateCompetenceArchetype(compName, parseInt(event.target.value)); }); } - html.find('.show-hide-competences').click(async event => { + this.html.find('.show-hide-competences').click(async event => { this.options.showCompNiveauBase = !this.options.showCompNiveauBase; this.render(true); }); - html.find('.recherche') + this.html.find('.recherche') .each((index, field) => { if (this.options.recherche) { field.focus(); @@ -429,92 +397,125 @@ export class RdDActorSheet extends ActorSheet { .change(async event => this.options.recherche = this._optionRecherche(event.currentTarget) ); - html.find('.vue-detaillee').click(async event => { + this.html.find('.vue-detaillee').click(async event => { this.options.vueDetaillee = !this.options.vueDetaillee; this.render(true); }); // On pts de reve change - html.find('.pointsreve-value').change(async event => { + this.html.find('.pointsreve-value').change(async event => { let reveValue = event.currentTarget.value; this.actor.update({ "system.reve.reve.value": reveValue }); }); // On seuil de reve change - html.find('.seuil-reve-value').change(async event => { + this.html.find('.seuil-reve-value').change(async event => { console.log("seuil-reve-value", event.currentTarget) this.actor.setPointsDeSeuil(event.currentTarget.value); }); - html.find('#attribut-protection-edit').change(async event => { + this.html.find('#attribut-protection-edit').change(async event => { this.actor.updateAttributeValue(event.currentTarget.attributes.name.value, parseInt(event.target.value)); }); // On stress change - html.find('.compteur-edit').change(async event => { + this.html.find('.compteur-edit').change(async event => { let fieldName = event.currentTarget.attributes.name.value; this.actor.updateCompteurValue(fieldName, parseInt(event.target.value)); }); - html.find('#ethylisme').change(async event => { + this.html.find('#ethylisme').change(async event => { this.actor.setEthylisme(parseInt(event.target.value)); }); - html.find('.stress-test').click(async event => { + this.html.find('.stress-test').click(async event => { this.actor.transformerStress(); }); - html.find('.moral-malheureux').click(async event => { + this.html.find('.moral-malheureux').click(async event => { this.actor.jetDeMoral('malheureuse'); }); - html.find('.moral-neutre').click(async event => { + this.html.find('.moral-neutre').click(async event => { this.actor.jetDeMoral('neutre'); }); - html.find('.moral-heureux').click(async event => { + this.html.find('.moral-heureux').click(async event => { this.actor.jetDeMoral('heureuse'); }); - html.find('.ethylisme-test').click(async event => { + this.html.find('.ethylisme-test').click(async event => { this.actor.jetEthylisme(); }); - html.find('.jet-vie').click(async event => { + this.html.find('.jet-vie').click(async event => { this.actor.jetVie(); }); - html.find('.jet-endurance').click(async event => { + this.html.find('.jet-endurance').click(async event => { this.actor.jetEndurance(); }); - html.find('.monnaie-plus').click(async event => { + this.html.find('.monnaie-plus').click(async event => { this.actor.monnaieIncDec(RdDSheetUtility.getItemId(event), 1); }); - html.find('.monnaie-moins').click(async event => { + this.html.find('.monnaie-moins').click(async event => { this.actor.monnaieIncDec(RdDSheetUtility.getItemId(event), -1); }); - html.find('.vie-plus').click(async event => { + this.html.find('.vie-plus').click(async event => { this.actor.santeIncDec("vie", 1); }); - html.find('.vie-moins').click(async event => { + this.html.find('.vie-moins').click(async event => { this.actor.santeIncDec("vie", -1); }); - html.find('.endurance-plus').click(async event => { + this.html.find('.endurance-plus').click(async event => { this.actor.santeIncDec("endurance", 1); }); - html.find('.endurance-moins').click(async event => { + this.html.find('.endurance-moins').click(async event => { this.actor.santeIncDec("endurance", -1); }); - html.find('.ptreve-actuel-plus').click(async event => { + this.html.find('.ptreve-actuel-plus').click(async event => { this.actor.reveActuelIncDec(1); }); - html.find('.ptreve-actuel-moins').click(async event => { + this.html.find('.ptreve-actuel-moins').click(async event => { this.actor.reveActuelIncDec(-1); }); - html.find('.fatigue-plus').click(async event => { + this.html.find('.fatigue-plus').click(async event => { this.actor.santeIncDec("fatigue", 1); }); - html.find('.fatigue-moins').click(async event => { + this.html.find('.fatigue-moins').click(async event => { this.actor.santeIncDec("fatigue", -1); }); } + isCompetenceAffichable(competence) { + return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence); + } + + /* -------------------------------------------- */ + async _onDropActor(event, dragData) { + const dropActor = fromUuidSync(dragData.uuid); + this.actor.addSubActeur(dropActor); + super._onDropActor(event, dragData); + } + + /* -------------------------------------------- */ + async _onDropItem(event, dragData) { + const destItemId = this.html.find(event.target)?.closest('.item').attr('data-item-id') + const dropParams = RdDSheetUtility.prepareItemDropParameters(destItemId, this.actor, dragData, this.objetVersConteneur) + if (dropParams) { + const callSuper = await this.actor.processDropItem(dropParams) + if (callSuper) { + await super._onDropItem(event, dragData) + } + } + } + + /* -------------------------------------------- */ + async createItem(name, type) { + await this.actor.createEmbeddedDocuments('Item', [{ name: name, type: type }], { renderSheet: true }); + } + + /* -------------------------------------------- */ + async createEmptyTache() { + await this.createItem('Nouvelle tache', 'tache'); + } + _optionRecherche(target) { if (!target.value?.length){ return undefined; @@ -527,7 +528,7 @@ export class RdDActorSheet extends ActorSheet { } _getEventArmeCombat(event) { - const li = $(event.currentTarget)?.parents(".item"); + const li = this.html.find(event.currentTarget)?.parents(".item"); let armeName = li.data("arme-name"); let compName = li.data('competence-name'); const arme = this.armesList.find(a => a.name == armeName && a.system.competence == compName); diff --git a/module/actor-vehicule-sheet.js b/module/actor-vehicule-sheet.js index 5803f3f7..0124de0c 100644 --- a/module/actor-vehicule-sheet.js +++ b/module/actor-vehicule-sheet.js @@ -22,16 +22,16 @@ export class RdDActorVehiculeSheet extends RdDActorSheet { super.activateListeners(html); if (!this.options.editable) return; - html.find('.resistance-moins').click(async event => { + this.html.find('.resistance-moins').click(async event => { this.actor.vehicleIncDec("resistance", -1); }); - html.find('.resistance-plus').click(async event => { + this.html.find('.resistance-plus').click(async event => { this.actor.vehicleIncDec("resistance", 1); }); - html.find('.structure-moins').click(async event => { + this.html.find('.structure-moins').click(async event => { this.actor.vehicleIncDec("structure", -1); }); - html.find('.structure-plus').click(async event => { + this.html.find('.structure-plus').click(async event => { this.actor.vehicleIncDec("structure", 1); }); } diff --git a/module/actor.js b/module/actor.js index 5975448c..d4106077 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3414,9 +3414,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ async encaisser() { - let dialogData = { ajustementsEncaissement: RdDUtility.getAjustementsEncaissement() }; - let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html', dialogData); - new RdDEncaisser(html, this).render(true); + await RdDEncaisser.encaisser(this); } /* -------------------------------------------- */ diff --git a/module/dialog-chronologie.js b/module/dialog-chronologie.js index 98762087..c86dd519 100644 --- a/module/dialog-chronologie.js +++ b/module/dialog-chronologie.js @@ -62,6 +62,7 @@ export class DialogChronologie extends Dialog { activateListeners(html) { super.activateListeners(html); + this.html = html; } async ajouter() { @@ -74,11 +75,11 @@ export class DialogChronologie extends Dialog { } async forceValidation() { - await $("form.rdddialogchrono :input").change(); + await this.html.find("form.rdddialogchrono :input").change(); } findJournal() { - const journalId = $("form.rdddialogchrono :input[name='journalId']").val(); + const journalId = this.html.find("form.rdddialogchrono :input[name='journalId']").val(); const journalEntry = game.journal.get(journalId); return { journalId, journalEntry }; } @@ -89,15 +90,15 @@ export class DialogChronologie extends Dialog { extractJournalParameters() { return { - auteur: $("form.rdddialogchrono :input[name='auteur']").val(), - information: $("form.rdddialogchrono :input[name='information']").val(), + auteur: this.html.find("form.rdddialogchrono :input[name='auteur']").val(), + information: this.html.find("form.rdddialogchrono :input[name='information']").val(), dateRdD: { - jour: $("form.rdddialogchrono :input[name='jourRdD']").val(), - moisRdD: $("form.rdddialogchrono :input[name='dateRdD.moisRdD.key']").val(), - annee: $("form.rdddialogchrono :input[name='dateRdD.annee']").val() + jour: this.html.find("form.rdddialogchrono :input[name='jourRdD']").val(), + moisRdD: this.html.find("form.rdddialogchrono :input[name='dateRdD.moisRdD.key']").val(), + annee: this.html.find("form.rdddialogchrono :input[name='dateRdD.annee']").val() }, - heureRdD: $("form.rdddialogchrono :input[name='heureRdD']").val(), - dateReel: $("form.rdddialogchrono :input[name='dateReel']").val().replace('T', ' ') + heureRdD: this.html.find("form.rdddialogchrono :input[name='heureRdD']").val(), + dateReel: this.html.find("form.rdddialogchrono :input[name='dateReel']").val().replace('T', ' ') } } diff --git a/module/dialog-create-signedraconique.js b/module/dialog-create-signedraconique.js index 2b4aa444..86b98d45 100644 --- a/module/dialog-create-signedraconique.js +++ b/module/dialog-create-signedraconique.js @@ -35,16 +35,16 @@ export class DialogCreateSigneDraconique extends Dialog { super(conf, options); this.dialogData = dialogData; } - + async _onCreerSigneActeurs() { - await $("[name='signe.system.ephemere']").change(); - await $(".signe-xp-sort").change(); + await this.html.find("[name='signe.system.ephemere']").change(); + await this.html.find(".signe-xp-sort").change(); this.validerSigne(); this.dialogData.actors.filter(it => it.selected) - .map(it => game.actors.get(it.id)) - .forEach(actor => this._createSigneForActor(actor, this.dialogData.signe)); + .map(it => game.actors.get(it.id)) + .forEach(actor => this._createSigneForActor(actor, this.dialogData.signe)); } - + async _createSigneForActor(actor, signe) { actor.createEmbeddedDocuments("Item", [signe]); ChatMessage.create({ @@ -57,19 +57,20 @@ export class DialogCreateSigneDraconique extends Dialog { } validerSigne() { - this.dialogData.signe.name = $("[name='signe.name']").val(); - this.dialogData.signe.system.valeur.norm = $("[name='signe.system.valeur.norm']").val(); - this.dialogData.signe.system.valeur.sign = $("[name='signe.system.valeur.sign']").val(); - this.dialogData.signe.system.valeur.part = $("[name='signe.system.valeur.part']").val(); - this.dialogData.signe.system.difficulte = $("[name='signe.system.difficulte']").val(); - this.dialogData.signe.system.ephemere = $("[name='signe.system.ephemere']").prop("checked"); - this.dialogData.signe.system.duree = $("[name='signe.system.duree']").val(); + this.dialogData.signe.name = this.html.find("[name='signe.name']").val(); + this.dialogData.signe.system.valeur.norm = this.html.find("[name='signe.system.valeur.norm']").val(); + this.dialogData.signe.system.valeur.sign = this.html.find("[name='signe.system.valeur.sign']").val(); + this.dialogData.signe.system.valeur.part = this.html.find("[name='signe.system.valeur.part']").val(); + this.dialogData.signe.system.difficulte = this.html.find("[name='signe.system.difficulte']").val(); + this.dialogData.signe.system.ephemere = this.html.find("[name='signe.system.ephemere']").prop("checked"); + this.dialogData.signe.system.duree = this.html.find("[name='signe.system.duree']").val(); this.dialogData.signe.system.typesTMR = TMRUtility.buildListTypesTMRSelection(this.dialogData.tmrs); } - + /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); + this.html = html; this.setEphemere(this.dialogData.signe.system.ephemere); html.find(".signe-aleatoire").click(event => this.setSigneAleatoire()); html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked)); @@ -81,27 +82,27 @@ export class DialogCreateSigneDraconique extends Dialog { async setSigneAleatoire() { const newSigne = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true}); - $("[name='signe.name']").val(newSigne.name); - $("[name='signe.system.valeur.norm']").val(newSigne.system.valeur.norm); - $("[name='signe.system.valeur.sign']").val(newSigne.system.valeur.sign); - $("[name='signe.system.valeur.part']").val(newSigne.system.valeur.part); - $("[name='signe.system.difficulte']").val(newSigne.system.difficulte); - $("[name='signe.system.duree']").val(newSigne.system.duree); - $("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere); + this.html.find("[name='signe.name']").val(newSigne.name); + this.html.find("[name='signe.system.valeur.norm']").val(newSigne.system.valeur.norm); + this.html.find("[name='signe.system.valeur.sign']").val(newSigne.system.valeur.sign); + this.html.find("[name='signe.system.valeur.part']").val(newSigne.system.valeur.part); + this.html.find("[name='signe.system.difficulte']").val(newSigne.system.difficulte); + this.html.find("[name='signe.system.duree']").val(newSigne.system.duree); + this.html.find("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere); this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR); this.dialogData.tmrs.forEach(t => { - $(`[data-tmr-name='${t.name}']`).prop( "checked", t.selected); + this.html.find(`[data-tmr-name='${t.name}']`).prop( "checked", t.selected); }) this.setEphemere(newSigne.system.ephemere); } async setEphemere(ephemere) { this.dialogData.signe.system.ephemere = ephemere; - HtmlUtility._showControlWhen($(".signe-system-duree"), ephemere); + HtmlUtility._showControlWhen(this.html.find(".signe-system-duree"), ephemere); } async onSelectActor(event) { - const actorId = $(event.currentTarget)?.data("actor-id"); + const actorId = this.html.find(event.currentTarget)?.data("actor-id"); const actor = this.dialogData.actors.find(it => it.id == actorId); if (actor) { actor.selected = event.currentTarget.checked; @@ -109,7 +110,7 @@ export class DialogCreateSigneDraconique extends Dialog { } onSelectTmr(event) { - const tmrName = $(event.currentTarget)?.data("tmr-name"); + const tmrName = this.html.find(event.currentTarget)?.data("tmr-name"); const onTmr = this.tmrs.find(it => it.name == tmrName); if (onTmr){ onTmr.selected = event.currentTarget.checked; diff --git a/module/dialog-fabriquer-potion.js b/module/dialog-fabriquer-potion.js index a9e552b5..3d3dd236 100644 --- a/module/dialog-fabriquer-potion.js +++ b/module/dialog-fabriquer-potion.js @@ -13,18 +13,12 @@ export class DialogFabriquerPotion extends Dialog { } let potionData = DialogFabriquerPotion.prepareData(actor, item); - let conf = { - title: `Fabriquer une potion de ${potionData.system.categorie}`, - content: await renderTemplate(dialogConfig.html, potionData), - default: potionData.buttonName, - }; + const html = await renderTemplate(dialogConfig.html, potionData); let options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 }; mergeObject(options, dialogConfig.options ?? {}, { overwrite: true }) - const dialog = new DialogFabriquerPotion(actor, potionData, conf, options); - dialog.render(true); - return dialog; + new DialogFabriquerPotion(actor, potionData, html, options).render(true); } /* -------------------------------------------- */ @@ -40,10 +34,15 @@ export class DialogFabriquerPotion extends Dialog { } /* -------------------------------------------- */ - constructor(actor, potionData, conf, options) { - conf.buttons = { - [potionData.buttonName]: { - label: potionData.buttonName, callback: it => this.onFabriquer(it) + constructor(actor, potionData, html, options) { + const conf = { + title: `Fabriquer une potion de ${potionData.system.categorie}`, + content: html, + default: 'fabriquer', + buttons: { + 'fabriquer': { + label: potionData.buttonName, callback: it => this.onFabriquer(html) + } } }; @@ -53,6 +52,24 @@ export class DialogFabriquerPotion extends Dialog { this.potionData = potionData; } + /* -------------------------------------------- */ + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.html.find("[name='nbBrins']").change(event => { + this.potionData.nbBrins = Misc.toInt(event.currentTarget.value); + const brinsManquants = Math.max(0, DialogFabriquerPotion.nombreBrinsOptimal(this.potionData) - this.potionData.nbBrins); + this.potionData.herbebonus = Math.max(0, this.potionData.system.niveau - brinsManquants) + }); + } + + /* -------------------------------------------- */ + async onFabriquer(html) { + await this.html.find("[name='nbBrins']").change(); + this.actor.fabriquerPotion(this.potionData); + this.close(); + } + static nombreBrinsMinimum(herbeData) { switch (herbeData.system.categorie ?? '') { case "Soin": return 1 + Math.max(0, 12 - 2 * herbeData.system.niveau); @@ -68,22 +85,4 @@ export class DialogFabriquerPotion extends Dialog { } return 1; } - - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - html.find("[name='nbBrins']").change(event => { - this.potionData.nbBrins = Misc.toInt(event.currentTarget.value); - const brinsManquants = Math.max(0, DialogFabriquerPotion.nombreBrinsOptimal(this.potionData) - this.potionData.nbBrins); - this.potionData.herbebonus = Math.max(0, this.potionData.system.niveau - brinsManquants) - }); - } - - /* -------------------------------------------- */ - async onFabriquer(it) { - await $("[name='nbBrins']").change(); - this.actor.fabriquerPotion(this.potionData); - this.close(); - } } \ No newline at end of file diff --git a/module/dialog-item-achat.js b/module/dialog-item-achat.js index 649b1545..01162e97 100644 --- a/module/dialog-item-achat.js +++ b/module/dialog-item-achat.js @@ -42,8 +42,7 @@ export class DialogItemAchat extends Dialog { static async onAcheter(venteData) { const html = await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/dialog-item-achat.html`, venteData); - const dialog = new DialogItemAchat(html, venteData); - dialog.render(true); + new DialogItemAchat(html, venteData).render(true); } constructor(html, venteData) { @@ -65,12 +64,11 @@ export class DialogItemAchat extends Dialog { }; super(conf, options); - this.venteData = venteData; } async onAchat() { - await $(".nombreLots").change(); + await this.html.find(".nombreLots").change(); (this.venteData.vendeur ?? this.venteData.acheteur).achatVente({ userId: game.user.id, vendeurId: this.venteData.vendeur?.id, @@ -90,9 +88,9 @@ export class DialogItemAchat extends Dialog { /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); - - html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value))); - html.find(".se-forcer").change(event => this.setSeForcer(event)); + this.html = html; + this.html.find(".nombreLots").change(event => this.setNombreLots(Number(event.currentTarget.value))); + this.html.find(".se-forcer").change(event => this.setSeForcer(event)); } setSeForcer(event) { @@ -105,8 +103,8 @@ export class DialogItemAchat extends Dialog { } this.venteData.choix.nombreLots = Math.min(nombreLots, this.venteData.quantiteNbLots); this.venteData.prixTotal = (nombreLots * this.venteData.prixLot).toFixed(2); - $(".nombreLots").val(this.venteData.choix.nombreLots); - $(".prixTotal").text(this.venteData.prixTotal); + this.html.find(".nombreLots").val(this.venteData.choix.nombreLots); + this.html.find(".prixTotal").text(this.venteData.prixTotal); } } \ No newline at end of file diff --git a/module/dialog-item-consommer.js b/module/dialog-item-consommer.js index 69642e7d..d669b5e9 100644 --- a/module/dialog-item-consommer.js +++ b/module/dialog-item-consommer.js @@ -17,7 +17,7 @@ export class DialogConsommer extends Dialog { buttons: { [consommerData.buttonName]: { label: consommerData.buttonName, callback: async it => { - await this.onConsommer(it); + await this.onConsommer(); await onActionItem(); } } @@ -31,9 +31,16 @@ export class DialogConsommer extends Dialog { this.consommerData = consommerData; } - async onConsommer(event) { - await $(".se-forcer").change(); - await $(".consommer-doses").change(); + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.html.find(".se-forcer").change(event => this.setSeForcer(event)); + this.html.find(".consommer-doses").change(event => this.selectDoses(event)); + } + + async onConsommer() { + await this.html.find(".se-forcer").change(); + await this.html.find(".consommer-doses").change(); await this.actor.consommer(this.item, this.consommerData.choix); } @@ -92,14 +99,6 @@ export class DialogConsommer extends Dialog { } - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - html.find(".se-forcer").change(event => this.setSeForcer(event)); - html.find(".consommer-doses").change(event => this.selectDoses(event)); - } - - setSeForcer(event) { this.consommerData.choix.seForcer = event.currentTarget.checked; } @@ -107,7 +106,7 @@ export class DialogConsommer extends Dialog { selectDoses(event) { this.consommerData.choix.doses = Number(event.currentTarget.value); DialogConsommer.calculDoses(this.consommerData, this.item); - $(".total-sust").text(this.consommerData.totalSust); - $(".total-desaltere").text(this.consommerData.totalDesaltere); + this.html.find(".total-sust").text(this.consommerData.totalSust); + this.html.find(".total-desaltere").text(this.consommerData.totalDesaltere); } } \ No newline at end of file diff --git a/module/dialog-item-vente.js b/module/dialog-item-vente.js index 32639eef..2b09b60b 100644 --- a/module/dialog-item-vente.js +++ b/module/dialog-item-vente.js @@ -37,26 +37,26 @@ export class DialogItemVente extends Dialog { this.venteData = venteData; } - async onProposer(it) { - await $(".tailleLot").change(); - await $(".quantiteNbLots").change(); - await $(".quantiteIllimite").change(); - await $(".prixLot").change(); - this.callback(this.venteData); - } - - /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); + this.html = html; + HtmlUtility._showControlWhen(this.html.find(".quantiteNbLots"), !this.venteData.quantiteIllimite) - HtmlUtility._showControlWhen($(".quantiteNbLots"), !this.venteData.quantiteIllimite) - - html.find(".tailleLot").change(event => this.setTailleLot(Number(event.currentTarget.value))); - html.find(".quantiteNbLots").change(event => this.setNbLots(Number(event.currentTarget.value))); - html.find(".quantiteIllimite").change(event => this.setQuantiteIllimite(event.currentTarget.checked)); - html.find(".prixLot").change(event => this.setPrixLot(Number(event.currentTarget.value))); + this.html.find(".tailleLot").change(event => this.setTailleLot(Number(event.currentTarget.value))); + this.html.find(".quantiteNbLots").change(event => this.setNbLots(Number(event.currentTarget.value))); + this.html.find(".quantiteIllimite").change(event => this.setQuantiteIllimite(event.currentTarget.checked)); + this.html.find(".prixLot").change(event => this.setPrixLot(Number(event.currentTarget.value))); } + async onProposer(it) { + await this.html.find(".tailleLot").change(); + await this.html.find(".quantiteNbLots").change(); + await this.html.find(".quantiteIllimite").change(); + await this.html.find(".prixLot").change(); + this.callback(this.venteData); + } + + /* -------------------------------------------- */ setPrixLot(prixLot) { this.venteData.prixLot = prixLot; } @@ -65,15 +65,15 @@ export class DialogItemVente extends Dialog { // recalculer le prix du lot if (tailleLot != this.venteData.tailleLot) { this.venteData.prixLot = (tailleLot * this.venteData.prixOrigine).toFixed(2); - $(".prixLot").val(this.venteData.prixLot); + this.html.find(".prixLot").val(this.venteData.prixLot); } this.venteData.tailleLot = tailleLot; if (this.venteData.isOwned) { // recalculer le nombre de lots max this.venteData.quantiteMaxLots = Math.floor(this.venteData.quantiteMax / tailleLot); this.venteData.quantiteNbLots = Math.min(this.venteData.quantiteMaxLots, this.venteData.quantiteNbLots); - $(".quantiteNbLots").val(this.venteData.quantiteNbLots); - $(".quantiteNbLots").attr("max", this.venteData.quantiteMaxLots) + this.html.find(".quantiteNbLots").val(this.venteData.quantiteNbLots); + this.html.find(".quantiteNbLots").attr("max", this.venteData.quantiteMaxLots) } } @@ -82,12 +82,12 @@ export class DialogItemVente extends Dialog { nbLots = Math.max(0, Math.min(nbLots, this.venteData.quantiteMaxLots)); } this.venteData.quantiteNbLots = nbLots; - $(".quantiteNbLots").val(this.venteData.quantiteNbLots); + this.html.find(".quantiteNbLots").val(this.venteData.quantiteNbLots); } setQuantiteIllimite(checked) { this.venteData.quantiteIllimite = checked; - $(".label-quantiteIllimite").text(this.venteData.quantiteIllimite ? "Illimités" : "disponibles"); - HtmlUtility._showControlWhen($(".quantiteNbLots"), !this.venteData.quantiteIllimite) + this.html.find(".label-quantiteIllimite").text(this.venteData.quantiteIllimite ? "Illimités" : "disponibles"); + HtmlUtility._showControlWhen(this.html.find(".quantiteNbLots"), !this.venteData.quantiteIllimite) } } \ No newline at end of file diff --git a/module/dialog-repos.js b/module/dialog-repos.js index 324b6d91..e5e10576 100644 --- a/module/dialog-repos.js +++ b/module/dialog-repos.js @@ -21,13 +21,18 @@ export class DialogRepos extends Dialog { super(conf, options); this.actor = actor; } + activateListeners(html) { + super.activateListeners(html); + this.html = html; + } + /* -------------------------------------------- */ async repos() { - await $("[name='nb-heures']").change(); - await $("[name='nb-jours']").change(); - const selection = await $("[name='repos']:checked").val(); - const nbHeures = Number.parseInt(await $("[name='nb-heures']").val()); - const nbJours = Number.parseInt(await $("[name='nb-jours']").val()); + await this.html.find("[name='nb-heures']").change(); + await this.html.find("[name='nb-jours']").change(); + const selection = await this.html.find("[name='repos']:checked").val(); + const nbHeures = Number.parseInt(await this.html.find("[name='nb-heures']").val()); + const nbJours = Number.parseInt(await this.html.find("[name='nb-jours']").val()); switch (selection) { case "sieste": { await this.actor.dormir(nbHeures); @@ -35,7 +40,7 @@ export class DialogRepos extends Dialog { } case "nuit": { let heuresDormies = await this.actor.dormir(nbHeures); - if (heuresDormies == nbHeures){ + if (heuresDormies == nbHeures) { await this.actor.dormirChateauDormant(); } return; @@ -49,8 +54,4 @@ export class DialogRepos extends Dialog { } } } - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - } } \ No newline at end of file diff --git a/module/dialog-select-target.js b/module/dialog-select-target.js index 87f504f3..dd6140ff 100644 --- a/module/dialog-select-target.js +++ b/module/dialog-select-target.js @@ -20,8 +20,9 @@ export class DialogSelectTarget extends Dialog { activateListeners(html) { super.activateListeners(html); - html.find("li.select-target").click((event) => { - this.targetSelected($(event.currentTarget)?.data("token-id")); + this.html = html; + this.html.find("li.select-target").click((event) => { + this.targetSelected(this.html.find(event.currentTarget)?.data("token-id")); }); } diff --git a/module/dialog-split-item.js b/module/dialog-split-item.js index d5ba3298..4b21c6ef 100644 --- a/module/dialog-split-item.js +++ b/module/dialog-split-item.js @@ -13,39 +13,33 @@ export class DialogSplitItem extends Dialog { constructor(item, splitData, html, callback) { let options = { classes: ["dialogsplit"], width: 300, height: 160, 'z-index': 99999 }; - let conf = { title: "Séparer en deux", content: html, default: "separer", buttons: { - "separer": { - label: "Séparer", callback: it => { - this.onSplit(); - } - } + "separer": { label: "Séparer", callback: it => this.onSplit() } } }; - super(conf, options); - + this.callback = callback; this.item = item; this.splitData = splitData; } - async onSplit(){ - await $(".choix-quantite").change(); - this.callback(this.item, this.splitData.choix.quantite); - } - - /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); - - html.find(".choix-quantite").change(event => { + this.html = html; + this.html.find(".choix-quantite").change(event => { this.splitData.choix.quantite = Number(event.currentTarget.value); }); } + /* -------------------------------------------- */ + async onSplit() { + await this.html.find(".choix-quantite").change(); + this.callback(this.item, this.splitData.choix.quantite); + } + } \ No newline at end of file diff --git a/module/dialog-stress.js b/module/dialog-stress.js index 6ec1efb5..f0b9b8e6 100644 --- a/module/dialog-stress.js +++ b/module/dialog-stress.js @@ -37,24 +37,24 @@ export class DialogStress extends Dialog { this.dialogData = dialogData; } + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.html.find("input.select-actor").change((event) => this.onSelectActor(event)); + } + 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'; + const motif = this.html.find("form.rdddialogstress input[name='motif']").val(); + const stress = Number(this.html.find("form.rdddialogstress input[name='stress']").val()); + const compteur = (this.html.find("form.rdddialogstress input[name='immediat']").prop("checked")) ? 'experience' : 'stress'; this.dialogData.actors.filter(it => it.selected) .map(it => game.actors.get(it.id)) .forEach(actor => actor.distribuerStress(compteur, stress, motif)); } - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - html.find("input.select-actor").change((event) => this.onSelectActor(event)); - } - async onSelectActor(event) { - const actorId = $(event.currentTarget)?.data("actor-id"); + const actorId = this.html.find(event.currentTarget)?.data("actor-id"); const actor = this.dialogData.actors.find(it => it.id == actorId); if (actor) { actor.selected = event.currentTarget.checked; diff --git a/module/dialog-validation-encaissement.js b/module/dialog-validation-encaissement.js index 034b9502..a5d092ea 100644 --- a/module/dialog-validation-encaissement.js +++ b/module/dialog-validation-encaissement.js @@ -55,11 +55,12 @@ export class DialogValidationEncaissement extends Dialog { /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); - html.find('input.encaissement-roll-result').keyup(async event => { + this.html = html; + this.html.find('input.encaissement-roll-result').keyup(async event => { this.forceDiceResult.total = event.currentTarget.value; this.encaissement = await RdDUtility.jetEncaissement(this.rollData, this.armure, { showDice: HIDE_DICE, forceDiceResult: this.forceDiceResult}); - $('label.encaissement-total').text(this.encaissement.total); - $('label.encaissement-blessure').text(this.encaissement.blessures) + this.html.find('label.encaissement-total').text(this.encaissement.total); + this.html.find('label.encaissement-blessure').text(this.encaissement.blessures) }); } diff --git a/module/environnement.js b/module/environnement.js index eebc6834..0f278278 100644 --- a/module/environnement.js +++ b/module/environnement.js @@ -147,29 +147,29 @@ export class EnvironmentSheetHelper { }); } - static activateListeners(sheet, html) { + static activateListeners(sheet) { if (!sheet.options.editable) return; - html.find("input.input-selection-milieu").keypress(event => { + sheet.html.find("input.input-selection-milieu").keypress(event => { if (event.keyCode == '13') { - EnvironmentSheetHelper.onAddMilieu(html, sheet, event); + EnvironmentSheetHelper.onAddMilieu(sheet, event); } event.stopPropagation(); }) - html.find("a.milieu-add").click(event => EnvironmentSheetHelper.onAddMilieu(html, sheet, event)); - html.find("div.environnement-milieu a.milieu-delete").click(event => EnvironmentSheetHelper.onDeleteMilieu(sheet, event)); - html.find("div.environnement-milieu select.environnement-rarete").change(event => EnvironmentSheetHelper.onChange(sheet, event, - updated => EnvironmentSheetHelper.$changeRarete(event, updated))); - html.find("div.environnement-milieu input[name='environnement-frequence']").change(event => EnvironmentSheetHelper.onChange(sheet, event, - updated => EnvironmentSheetHelper.$changeFrequence(updated, event))); + sheet.html.find("a.milieu-add").click(event => EnvironmentSheetHelper.onAddMilieu(sheet, event)); + sheet.html.find("div.environnement-milieu a.milieu-delete").click(event => EnvironmentSheetHelper.onDeleteMilieu(sheet, event)); + sheet.html.find("div.environnement-milieu select.environnement-rarete").change(event => EnvironmentSheetHelper.onChange(sheet, event, + updated => EnvironmentSheetHelper.$changeRarete(sheet, event, updated))); + sheet.html.find("div.environnement-milieu input[name='environnement-frequence']").change(event => EnvironmentSheetHelper.onChange(sheet, event, + updated => EnvironmentSheetHelper.$changeFrequence(sheet, event, updated))); } - static $changeFrequence(updated, event) { - updated.frequence = Number($(event.currentTarget).val()); + static $changeFrequence(sheet, event, updated) { + updated.frequence = Number(sheet.html.find(event.currentTarget).val()); } - static $changeRarete(event, updated) { - const name = $(event.currentTarget).val(); + static $changeRarete(sheet, event, updated) { + const name = sheet.html.find(event.currentTarget).val(); const rarete = Environnement.getRarete(name); updated.rarete = rarete.name; updated.frequence = rarete.frequence; @@ -178,8 +178,8 @@ export class EnvironmentSheetHelper { // rarete.max); } - static async onAddMilieu(html, sheet, event) { - const milieu = html.find('input.input-selection-milieu').val(); + static async onAddMilieu(sheet, event) { + const milieu = sheet.html.find('input.input-selection-milieu').val(); if (!milieu) { ui.notifications.warn(`Choisissez le milieu dans lequel se trouve le/la ${sheet.item.name}`); return @@ -206,7 +206,7 @@ export class EnvironmentSheetHelper { static async onChange(sheet, event, doMutation) { const list = sheet.item.system.environnement; - const milieu = EnvironmentSheetHelper.$getEventMilieu(event); + const milieu = EnvironmentSheetHelper.$getEventMilieu(sheet, event); const updated = list.find(it => it.milieu == milieu); if (updated) { doMutation(updated); @@ -216,8 +216,8 @@ export class EnvironmentSheetHelper { } } - static $getEventMilieu(event) { - return $(event.currentTarget)?.parents("div.environnement-milieu").data("milieu"); + static $getEventMilieu(sheet, event) { + return sheet.html.find(event.currentTarget)?.parents("div.environnement-milieu").data("milieu"); } } \ No newline at end of file diff --git a/module/html-utility.js b/module/html-utility.js index 1566039c..c4754cc5 100644 --- a/module/html-utility.js +++ b/module/html-utility.js @@ -1,10 +1,10 @@ export class HtmlUtility{ - static _showControlWhen(control, condition) { + static _showControlWhen(jQuerySelector, condition) { if (condition) { - control.show(); + jQuerySelector.show(); } else { - control.hide(); + jQuerySelector.hide(); } } } \ No newline at end of file diff --git a/module/item-conteneur-sheet.js b/module/item-conteneur-sheet.js index 4cb398fb..0df3121a 100644 --- a/module/item-conteneur-sheet.js +++ b/module/item-conteneur-sheet.js @@ -16,9 +16,10 @@ export class RdDConteneurItemSheet extends RdDItemSheet { activateListeners(html) { super.activateListeners(html); + if (!this.options.editable) return; - html.find('.conteneur-name a').click(async event => { + this.html.find('.conteneur-name a').click(async event => { RdDUtility.toggleAfficheContenu(RdDSheetUtility.getItemId(event)); this.render(true); }); diff --git a/module/item-faune-sheet.js b/module/item-faune-sheet.js index 3b97d7ca..f49d2317 100644 --- a/module/item-faune-sheet.js +++ b/module/item-faune-sheet.js @@ -23,7 +23,7 @@ export class RdDFauneItemSheet extends RdDItemSheet { super.activateListeners(html); if (!this.options.editable) return; - EnvironmentSheetHelper.activateListeners(this, html); + EnvironmentSheetHelper.activateListeners(this); html.find("a.linked-actor-delete").click(event => this.onDeleteLinkedActor()); html.find("a.preparer-nourriture").click(event => this.preparerNourriture(event)); diff --git a/module/item-herbe-sheet.js b/module/item-herbe-sheet.js index 940eec58..0cc0c36b 100644 --- a/module/item-herbe-sheet.js +++ b/module/item-herbe-sheet.js @@ -20,6 +20,6 @@ export class RdDHerbeItemSheet extends RdDItemSheet { activateListeners(html) { super.activateListeners(html); - EnvironmentSheetHelper.activateListeners(this, html); + EnvironmentSheetHelper.activateListeners(this); } } diff --git a/module/item-ingredient-sheet.js b/module/item-ingredient-sheet.js index fe78bc68..fdfc66ae 100644 --- a/module/item-ingredient-sheet.js +++ b/module/item-ingredient-sheet.js @@ -20,6 +20,6 @@ export class RdDIngredientItemSheet extends RdDItemSheet { activateListeners(html) { super.activateListeners(html); - EnvironmentSheetHelper.activateListeners(this, html); + EnvironmentSheetHelper.activateListeners(this); } } diff --git a/module/item-rencontre-sheet.js b/module/item-rencontre-sheet.js index d4b74a98..e806222c 100644 --- a/module/item-rencontre-sheet.js +++ b/module/item-rencontre-sheet.js @@ -51,15 +51,15 @@ export class RdDRencontreItemSheet extends RdDItemSheet { activateListeners(html) { super.activateListeners(html); if (!this.options.editable) return; - html.find("a.effet-add").click(event => this.onAddEffet(event)); - html.find("a.effet-delete").click(event => this.onDeleteEffet(event)); + this.html.find("a.effet-add").click(event => this.onAddEffet(event)); + this.html.find("a.effet-delete").click(event => this.onDeleteEffet(event)); } async onAddEffet(event) { - const resultat = $(event.currentTarget)?.data("effet-resultat"); + const resultat = this.html.find(event.currentTarget)?.data("effet-resultat"); const keyEffets = `system.${resultat}.effets`; - const code = $(event.currentTarget)?.data("effet-code"); + const code = this.html.find(event.currentTarget)?.data("effet-code"); const liste = RdDRencontre.getListeEffets(this.item, resultat); liste.push(code); @@ -67,10 +67,10 @@ export class RdDRencontreItemSheet extends RdDItemSheet { } async onDeleteEffet(event) { - const resultat = $(event.currentTarget)?.data("effet-resultat"); + const resultat = this.html.find(event.currentTarget)?.data("effet-resultat"); const keyEffets = `system.${resultat}.effets`; - const pos = $(event.currentTarget)?.data("effet-pos"); + const pos = this.html.find(event.currentTarget)?.data("effet-pos"); const liste = RdDRencontre.getListeEffets(this.item, resultat); liste.splice(pos, 1); diff --git a/module/item-sheet.js b/module/item-sheet.js index baeb40e5..b928d36d 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -157,36 +157,39 @@ export class RdDItemSheet extends ItemSheet { /** @override */ activateListeners(html) { super.activateListeners(html); + this.html = html; + let itemSheetDialog = this; - HtmlUtility._showControlWhen($(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.item.isOwned); - HtmlUtility._showControlWhen($(".item-magique"), this.item.isMagique()); + HtmlUtility._showControlWhen(this.html.find(".item-cout"), ReglesOptionelles.isUsing('afficher-prix-joueurs') || game.user.isGM || !this.item.isOwned); + HtmlUtility._showControlWhen(this.html.find(".item-magique"), this.item.isMagique()); // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; + this.form.ondragstart = (event) => this._onDragStart(event); this.form.ondrop = (event) => this._onDrop(event); // Select competence categorie - html.find(".categorie").change(event => this._onSelectCategorie(event)); + this.html.find(".categorie").change(event => this._onSelectCategorie(event)); - html.find('.sheet-competence-xp').change((event) => { + this.html.find('.sheet-competence-xp').change((event) => { if (this.item.isCompetencePersonnage()) { RdDUtility.checkThanatosXP(this.item.name); } }); - html.find('.enchanteDate').change((event) => { - let jour = Number($('#jourMois').val()); - let mois = $('#nomMois').val(); + this.html.find('.enchanteDate').change((event) => { + let jour = Number(this.html.find('[name="splitDate.day"]').val()); + let mois = this.html.find('[name="splitDate.month"]').val(); this.dateUpdated = game.system.rdd.calendrier.getIndexFromDate(jour, mois); }); - html.find('.creer-tache-livre').click((event) => this._getEventActor(event).creerTacheDepuisLivre(this.item)); - html.find('.consommer-potion').click((event) => this._getEventActor(event).consommerPotion(this.item)); - html.find('.creer-potion-base').click((event) => this._getEventActor(event).dialogFabriquerPotion(this.item)); + this.html.find('.creer-tache-livre').click((event) => this._getEventActor(event).creerTacheDepuisLivre(this.item)); + this.html.find('.consommer-potion').click((event) => this._getEventActor(event).consommerPotion(this.item)); + this.html.find('.creer-potion-base').click((event) => this._getEventActor(event).dialogFabriquerPotion(this.item)); - html.find('.alchimie-tache a').click((event) => { + this.html.find('.alchimie-tache a').click((event) => { let actor = this._getEventActor(event); if (actor) { let recetteId = event.currentTarget.attributes['data-recette-id'].value; @@ -198,12 +201,12 @@ export class RdDItemSheet extends ItemSheet { } }); - html.find('.item-split').click(async event => RdDSheetUtility.splitItem(RdDSheetUtility.getItem(event, this.actor), this.actor, async () => itemSheetDialog.render(true))); - html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true)); - html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor))); - html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente()); - html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem()); - html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor, async () => itemSheetDialog.render(true))); + this.html.find('.item-split').click(async event => RdDSheetUtility.splitItem(RdDSheetUtility.getItem(event, this.actor), this.actor, async () => itemSheetDialog.render(true))); + this.html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true)); + this.html.find('.item-delete').click(async event => RdDUtility.confirmerSuppressionItem(this, RdDSheetUtility.getItem(event, this.actor))); + this.html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente()); + this.html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItem()); + this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor, async () => itemSheetDialog.render(true))); } _getEventActor(event) { @@ -219,7 +222,7 @@ export class RdDItemSheet extends ItemSheet { if (this.item.isCompetence()) { let level = RdDItemCompetence.getNiveauBase(event.currentTarget.value); this.item.system.base = level; - $("#base").val(level); + this.html.find('[name="system.base"]').val(level); } } diff --git a/module/rdd-astrologie-editeur.js b/module/rdd-astrologie-editeur.js index 13582a27..b2dd6260 100644 --- a/module/rdd-astrologie-editeur.js +++ b/module/rdd-astrologie-editeur.js @@ -22,6 +22,12 @@ this.updateData( calendrierData ); } + activateListeners(html) { + super.activateListeners(html); + this.html = html; + } + + /* -------------------------------------------- */ async resetNombreAstraux() { game.system.rdd.calendrier.resetNombreAstral(); @@ -39,15 +45,4 @@ this.calendrierData = duplicate(calendrierData); } - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - let astrologieData = this.astrologieData; - - $(function () { - }); - - } - } diff --git a/module/rdd-astrologie-joueur.js b/module/rdd-astrologie-joueur.js index 0a604d0a..5ec5660d 100644 --- a/module/rdd-astrologie-joueur.js +++ b/module/rdd-astrologie-joueur.js @@ -29,21 +29,35 @@ export class RdDAstrologieJoueur extends Dialog { /* -------------------------------------------- */ constructor(html, actor, dialogData) { - - let myButtons = { - saveButton: { label: "Fermer", callback: html => this.quitDialog() } + const dialogConf = { + title: "Nombres Astraux", + content: html, + default: "saveButton", + buttons: { + saveButton: { label: "Fermer", callback: html => this.quitDialog() } + }, }; - - // Get all n - // Common conf - let dialogConf = { content: html, title: "Nombres Astraux", buttons: myButtons, default: "saveButton" }; - let dialogOptions = { classes: ["rdd-roll-dialog"], width: 600, height: 300, 'z-index': 99999 }; + const dialogOptions = { classes: ["rdd-roll-dialog"], width: 600, height: 300, 'z-index': 99999 }; super(dialogConf, dialogOptions); this.actor = actor; this.dataNombreAstral = duplicate(dialogData); } + /* -------------------------------------------- */ + activateListeners(html) { + super.activateListeners(html); + this.html = html; + + this.html.find(function () { + this.html.find("[name='diffConditions']").val(0); + }); + + this.html.find('[name="jet-astrologie"]').click((event) => { + this.requestJetAstrologie(); + }); + } + /* -------------------------------------------- */ static organizeNombres(actor) { let itemNombres = actor.listItemsData('nombreastral'); @@ -68,8 +82,8 @@ export class RdDAstrologieJoueur extends Dialog { carac_vue: this.actor.system.carac['vue'].value, etat: this.dataNombreAstral.etat, astrologie: this.dataNombreAstral.astrologie, - conditions: $("[name='diffConditions']").val(), - date: $("#joursAstrologie").val(), + conditions: this.html.find('[name="diffConditions"]').val(), + date: this.html.find('[name="joursAstrologie"]').val(), userId: game.user.id } if (Misc.isUniqueConnectedGM()) { @@ -87,17 +101,4 @@ export class RdDAstrologieJoueur extends Dialog { quitDialog() { } - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - $(function () { - $("[name='diffConditions']").val(0); - }); - - html.find('#jet-astrologie').click((event) => { - this.requestJetAstrologie(); - }); - } - } diff --git a/module/rdd-calendrier-editeur.js b/module/rdd-calendrier-editeur.js index 6a740d5c..936dee45 100644 --- a/module/rdd-calendrier-editeur.js +++ b/module/rdd-calendrier-editeur.js @@ -23,15 +23,24 @@ export class RdDCalendrierEditeur extends Dialog { this.calendrierData = calendrierData; } + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.html.find("input[name='nomMois']").val(this.calendrierData.moisKey); + this.html.find("select[name='nomHeure']").val(this.calendrierData.heureKey); + this.html.find("select[name='jourMois']").val(this.calendrierData.jourMois); + this.html.find("select[name='minutesRelative']").val(calendrierData.minutesRelative); + this.html.find("select[name='annee']").val(this.calendrierData.annee); + } + /* -------------------------------------------- */ fillData() { - this.calendrierData.annee = $("input[name='annee']").val(); - this.calendrierData.moisKey = $("select[name='nomMois']").val(); - this.calendrierData.heureKey = $("select[name='nomHeure']").val(); - this.calendrierData.jourMois = $("select[name='jourMois']").val(); - this.calendrierData.minutesRelative = $("select[name='minutesRelative']").val(); + this.calendrierData.annee = this.html.find("input[name='annee']").val(); + this.calendrierData.moisKey = this.html.find("select[name='nomMois']").val(); + this.calendrierData.heureKey = this.html.find("select[name='nomHeure']").val(); + this.calendrierData.jourMois = this.html.find("select[name='jourMois']").val(); + this.calendrierData.minutesRelative = this.html.find("select[name='minutesRelative']").val(); - console.log("UPDATE ", this.calendrierData); this.calendrier.saveEditeur(this.calendrierData) } @@ -40,21 +49,4 @@ export class RdDCalendrierEditeur extends Dialog { this.calendrierData = duplicate(calendrierData); } - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - let calendrierData = this.calendrierData; - - $(function () { - console.log(calendrierData); - $("input[name='nomMois']").val(calendrierData.moisKey); - $("select[name='nomHeure']").val(calendrierData.heureKey); - $("select[name='jourMois']").val(calendrierData.jourMois); - $("select[name='minutesRelative']").val(calendrierData.minutesRelative); - $("select[name='annee']").val(calendrierData.annee); - }); - - } - } diff --git a/module/rdd-calendrier.js b/module/rdd-calendrier.js index f47ca3fd..554a11e2 100644 --- a/module/rdd-calendrier.js +++ b/module/rdd-calendrier.js @@ -43,6 +43,14 @@ const MAX_NOMBRE_ASTRAL = 12; /* -------------------------------------------- */ export class RdDCalendrier extends Application { + static get defaultOptions() { + return mergeObject(super.defaultOptions, { + template: "systems/foundryvtt-reve-de-dragon/templates/calendar-template.html", + popOut: false, + resizable: false + }); + } + static createCalendrierPos() { return { top: 200, left: 200 }; } @@ -121,20 +129,103 @@ export class RdDCalendrier extends Application { console.log('RdDCalendrier.constructor()', this.calendrier, this.calendrierPos, this.listeNombreAstral); } + /* -------------------------------------------- */ + /** @override */ + async activateListeners(html) { + super.activateListeners(html); + this.html = html; + + this.updateDisplay(); + + this.html.find('.ajout-chronologie').click(ev => DialogChronologie.create()); + + this.html.find('.calendar-btn').click(ev => this.onCalendarButton(ev)); + + this.html.find('.calendar-btn-edit').click(ev => { + ev.preventDefault(); + this.showCalendarEditor(); + }); + + this.html.find('.astrologie-btn-edit').click(ev => { + ev.preventDefault(); + this.showAstrologieEditor(); + }); + + this.html.find('#calendar-move-handle').mousedown(ev => { + ev.preventDefault(); + ev = ev || window.event; + let isRightMB = false; + if ("which" in ev) { // Gecko (Firefox), WebKit (Safari/Chrome) & Opera + isRightMB = ev.which == 3; + } else if ("button" in ev) { // IE, Opera + isRightMB = ev.button == 2; + } + + if (!isRightMB) { + dragElement(document.getElementById("calendar-time-container")); + let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; + + function dragElement(elmnt) { + elmnt.onmousedown = dragMouseDown; + function dragMouseDown(e) { + e = e || window.event; + e.preventDefault(); + pos3 = e.clientX; + pos4 = e.clientY; + + document.onmouseup = closeDragElement; + document.onmousemove = elementDrag; + } + + function elementDrag(e) { + e = e || window.event; + e.preventDefault(); + // calculate the new cursor position: + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + // set the element's new position: + elmnt.style.bottom = undefined + elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; + elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + } + + function closeDragElement() { + // stop moving when mouse button is released: + elmnt.onmousedown = undefined; + document.onmouseup = undefined; + document.onmousemove = undefined; + let xPos = (elmnt.offsetLeft - pos1) > window.innerWidth ? window.innerWidth - 200 : (elmnt.offsetLeft - pos1); + let yPos = (elmnt.offsetTop - pos2) > window.innerHeight - 20 ? window.innerHeight - 100 : (elmnt.offsetTop - pos2) + xPos = xPos < 0 ? 0 : xPos; + yPos = yPos < 0 ? 0 : yPos; + if (xPos != (elmnt.offsetLeft - pos1) || yPos != (elmnt.offsetTop - pos2)) { + elmnt.style.top = (yPos) + "px"; + elmnt.style.left = (xPos) + "px"; + } + game.system.rdd.calendrier.calendrierPos.top = yPos; + game.system.rdd.calendrier.calendrierPos.left = xPos; + if (game.user.isGM) { + game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos)); + } + } + } + } else if (isRightMB) { + game.system.rdd.calendrier.calendrierPos.top = 200; + game.system.rdd.calendrier.calendrierPos.left = 200; + if (game.user.isGM) { + game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos)); + } + this.setPos(game.system.rdd.calendrier.calendrierPos); + } + }); + } /* -------------------------------------------- */ getListeNombreAstral() { return game.settings.get(SYSTEM_RDD, "liste-nombre-astral") ?? []; } - /* -------------------------------------------- */ - static get defaultOptions() { - return mergeObject(super.defaultOptions, { - template: "systems/foundryvtt-reve-de-dragon/templates/calendar-template.html", - popOut: false, - resizable: false - }); - } - /* -------------------------------------------- */ getDateFromIndex(index) { const dateRdD = this.getCalendrier(index); @@ -555,97 +646,4 @@ export class RdDCalendrier extends Application { astrologieEditeur.updateData(calendrierData); astrologieEditeur.render(true); } - - /* -------------------------------------------- */ - /** @override */ - async activateListeners(html) { - super.activateListeners(html); - - this.updateDisplay(); - - html.find('.ajout-chronologie').click(ev => DialogChronologie.create()); - - html.find('.calendar-btn').click(ev => this.onCalendarButton(ev)); - - html.find('.calendar-btn-edit').click(ev => { - ev.preventDefault(); - this.showCalendarEditor(); - }); - - html.find('.astrologie-btn-edit').click(ev => { - ev.preventDefault(); - this.showAstrologieEditor(); - }); - - html.find('#calendar-move-handle').mousedown(ev => { - ev.preventDefault(); - ev = ev || window.event; - let isRightMB = false; - if ("which" in ev) { // Gecko (Firefox), WebKit (Safari/Chrome) & Opera - isRightMB = ev.which == 3; - } else if ("button" in ev) { // IE, Opera - isRightMB = ev.button == 2; - } - - if (!isRightMB) { - dragElement(document.getElementById("calendar-time-container")); - let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; - - function dragElement(elmnt) { - elmnt.onmousedown = dragMouseDown; - function dragMouseDown(e) { - e = e || window.event; - e.preventDefault(); - pos3 = e.clientX; - pos4 = e.clientY; - - document.onmouseup = closeDragElement; - document.onmousemove = elementDrag; - } - - function elementDrag(e) { - e = e || window.event; - e.preventDefault(); - // calculate the new cursor position: - pos1 = pos3 - e.clientX; - pos2 = pos4 - e.clientY; - pos3 = e.clientX; - pos4 = e.clientY; - // set the element's new position: - elmnt.style.bottom = undefined - elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; - elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; - } - - function closeDragElement() { - // stop moving when mouse button is released: - elmnt.onmousedown = undefined; - document.onmouseup = undefined; - document.onmousemove = undefined; - let xPos = (elmnt.offsetLeft - pos1) > window.innerWidth ? window.innerWidth - 200 : (elmnt.offsetLeft - pos1); - let yPos = (elmnt.offsetTop - pos2) > window.innerHeight - 20 ? window.innerHeight - 100 : (elmnt.offsetTop - pos2) - xPos = xPos < 0 ? 0 : xPos; - yPos = yPos < 0 ? 0 : yPos; - if (xPos != (elmnt.offsetLeft - pos1) || yPos != (elmnt.offsetTop - pos2)) { - elmnt.style.top = (yPos) + "px"; - elmnt.style.left = (xPos) + "px"; - } - game.system.rdd.calendrier.calendrierPos.top = yPos; - game.system.rdd.calendrier.calendrierPos.left = xPos; - if (game.user.isGM) { - game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos)); - } - } - } - } else if (isRightMB) { - game.system.rdd.calendrier.calendrierPos.top = 200; - game.system.rdd.calendrier.calendrierPos.left = 200; - if (game.user.isGM) { - game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos)); - } - this.setPos(game.system.rdd.calendrier.calendrierPos); - } - }); - } - } \ No newline at end of file diff --git a/module/rdd-roll-encaisser.js b/module/rdd-roll-encaisser.js index 1968d744..4d98e413 100644 --- a/module/rdd-roll-encaisser.js +++ b/module/rdd-roll-encaisser.js @@ -1,4 +1,5 @@ -import { ENTITE_BLURETTE, ENTITE_INCARNE} from "./constants.js"; +import { ENTITE_BLURETTE, ENTITE_INCARNE } from "./constants.js"; +import { RdDUtility } from "./rdd-utility.js"; /** * Extend the base Dialog entity by defining a custom window to perform roll. @@ -6,30 +7,35 @@ import { ENTITE_BLURETTE, ENTITE_INCARNE} from "./constants.js"; */ export class RdDEncaisser extends Dialog { + static async encaisser(actor) { + let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-encaisser.html', + { ajustementsEncaissement: RdDUtility.getAjustementsEncaissement() } + ); + new RdDEncaisser(html, actor).render(true); + } + /* -------------------------------------------- */ constructor(html, actor) { - // Common conf - let buttons = {}; - if (!actor.isEntite()){ - buttons = { + let dialogConf = { + title: "Jet d'Encaissement", + content: html, + } + + if (!actor.isEntite()) { + dialogConf.default = "mortel"; + dialogConf.buttons = { "mortel": { label: "Mortel", callback: html => this.performEncaisser("mortel") }, "non-mortel": { label: "Non-mortel", callback: html => this.performEncaisser("non-mortel") }, "sonne": { label: "Sonné", callback: html => this.actor.setSonne() }, }; } - else if (actor.isEntite([ENTITE_BLURETTE, ENTITE_INCARNE])){ - buttons = { - "cauchemar": { label: "cauchemar", callback: html => this.performEncaisser("cauchemar") } + else if (actor.isEntite([ENTITE_BLURETTE, ENTITE_INCARNE])) { + dialogConf.default = "cauchemar" + dialogConf.buttons = { + "cauchemar": { label: "Cauchemar", callback: html => this.performEncaisser("cauchemar") } } } - let dialogConf = { - title: "Jet d'Encaissement", - content: html, - buttons: buttons, - default: "mortel" - } - let dialogOptions = { classes: ["rdd-roll-dialog"], width: 320, @@ -44,7 +50,18 @@ export class RdDEncaisser extends Dialog { this.encaisserSpecial = "aucun"; } + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.html.find('[name="modificateurDegats"]').val("0"); + this.html.find('[name="modificateurDegats"]').change((event) => { + this.modifier = event.currentTarget.value; // Update the selected bonus/malus + }); + this.html.find('[name="encaisserSpecial"]').change((event) => { + this.encaisserSpecial = event.currentTarget.value; // Update the selected bonus/malus + }); + } /* -------------------------------------------- */ performEncaisser(mortalite) { @@ -58,22 +75,4 @@ export class RdDEncaisser extends Dialog { } }); } - - /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - // Setup everything onload - $(function () { - $("#modificateurDegats").val("0"); - }); - - html.find('#modificateurDegats').change((event) => { - this.modifier = event.currentTarget.value; // Update the selected bonus/malus - }); - html.find('#encaisserSpecial').change((event) => { - this.encaisserSpecial = event.currentTarget.value; // Update the selected bonus/malus - }); - } - } diff --git a/module/rdd-roll-ethylisme.js b/module/rdd-roll-ethylisme.js index 157ecaec..440d7a08 100644 --- a/module/rdd-roll-ethylisme.js +++ b/module/rdd-roll-ethylisme.js @@ -13,47 +13,33 @@ export class RdDRollDialogEthylisme extends Dialog { title: "Test d'éthylisme", content: html, default: "rollButton", - buttons: { "rollButton": { label: "Test d'éthylisme", callback: html => this.onButton(html) } } + buttons: { "rollButton": { label: "Test d'éthylisme", callback: html => onRoll(this.rollData) } } }; let dialogOptions = { classes: ["rdd-roll-dialog"], width: 400, height: 'fit-content', 'z-index': 99999 } super(dialogConf, dialogOptions) - //console.log("ETH", rollData); - this.onRoll = onRoll; this.rollData = rollData; this.actor = actor; } - async onButton(html) { - this.onRoll(this.rollData); + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.bringToTop(); + + this.html.find(".force-alcool").change((event) => { + this.rollData.forceAlcool = Misc.toInt(event.currentTarget.value); + this.updateRollResult(); + }); + + this.html.find(".force-alcool").val(Misc.toInt(this.rollData.forceAlcool)); + this.updateRollResult(); } /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - this.bringToTop(); // Ensure top level - // Get the rollData stuff - var rollData = this.rollData; - var dialog = this; - - // Setup everything onload - $(function () { - html.find(".force-alcool").val(Misc.toInt(rollData.forceAlcool)); - dialog.updateRollResult(); - }); - - // Update ! - html.find(".force-alcool").change((event) => { - rollData.forceAlcool = Misc.toInt(event.currentTarget.value); - dialog.updateRollResult(); - }); - } async updateRollResult() { - - // Mise à jour valeurs - $(".roll-ethylisme").text(this.rollData.vie + " / " + Misc.toSignedString(Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses)); - $(".table-resolution").remove(); + this.html.find(".roll-ethylisme").text(this.rollData.vie + " / " + Misc.toSignedString(Number(this.rollData.etat) + Number(this.rollData.forceAlcool) + this.rollData.diffNbDoses)); + this.html.find(".table-resolution").remove(); } } diff --git a/module/rdd-roll-resolution-table.js b/module/rdd-roll-resolution-table.js index 5b44778f..ed73babf 100644 --- a/module/rdd-roll-resolution-table.js +++ b/module/rdd-roll-resolution-table.js @@ -65,6 +65,35 @@ export class RdDRollResolutionTable extends Dialog { this.rollData = rollData; } + activateListeners(html) { + super.activateListeners(html); + this.html = html; + this.bringToTop(); + + + this.html.find("[name='diffLibre']").val(Misc.toInt(this.rollData.diffLibre)); + this.html.find("[name='diffConditions']").val(Misc.toInt(this.rollData.diffConditions)); + this.updateRollResult(); + + this.html.find('.lancer-table-resolution').click((event) => { + this.onLancer(); + }); + // Update ! + this.html.find("[name='diffLibre']").change((event) => { + this.rollData.diffLibre = Misc.toInt(event.currentTarget.value); + this.updateRollResult(); + }); + this.html.find("[name='diffConditions']").change((event) => { + this.rollData.diffConditions = Misc.toInt(event.currentTarget.value); + this.updateRollResult(); + }); + this.html.find("[name='carac']").change((event) => { + let caracKey = event.currentTarget.value; + this.rollData.selectedCarac = this.rollData.carac[caracKey]; + this.updateRollResult(); + }); + } + /* -------------------------------------------- */ async onLancer() { await RdDResolutionTable.rollData(this.rollData); @@ -80,41 +109,7 @@ export class RdDRollResolutionTable extends Dialog { } /* -------------------------------------------- */ - activateListeners(html) { - super.activateListeners(html); - - this.bringToTop(); - - var dialog = this; - - // Setup everything onload - function onLoad(){ - $("[name='diffLibre']").val(Misc.toInt(dialog.rollData.diffLibre)); - $("[name='diffConditions']").val(Misc.toInt(dialog.rollData.diffConditions)); - dialog.updateRollResult(html); - } - $(function () { onLoad();}); - html.find('.lancer-table-resolution').click((event) => { - this.onLancer(); - }); - // Update ! - html.find("[name='diffLibre']").change((event) => { - this.rollData.diffLibre = Misc.toInt(event.currentTarget.value); - this.updateRollResult(html); - }); - html.find("[name='diffConditions']").change((event) => { - this.rollData.diffConditions = Misc.toInt(event.currentTarget.value); - this.updateRollResult(html); - }); - html.find("[name='carac']").change((event) => { - let caracKey = event.currentTarget.value; - this.rollData.selectedCarac = this.rollData.carac[caracKey]; - this.updateRollResult(html); - }); - } - - /* -------------------------------------------- */ - async updateRollResult(html) { + async updateRollResult() { let rollData = this.rollData; rollData.caracValue = parseInt(rollData.selectedCarac.value) rollData.finalLevel = this._computeFinalLevel(rollData); @@ -125,12 +120,12 @@ export class RdDRollResolutionTable extends Dialog { }); // Mise à jour valeurs - html.find("[name='carac']").val(rollData.caracValue); - $(".roll-param-resolution").text(rollData.selectedCarac.value + " / " + Misc.toSignedString(rollData.finalLevel)); - $(".table-resolution").remove(); - $(".table-proba-reussite").remove(); + this.html.find("[name='carac']").val(rollData.caracValue); + this.html.find(".roll-param-resolution").text(rollData.selectedCarac.value + " / " + Misc.toSignedString(rollData.finalLevel)); + this.html.find(".table-resolution").remove(); + this.html.find(".table-proba-reussite").remove(); - html.find("div.placeholder-resolution").append(htmlTable) + this.html.find("div.placeholder-resolution").append(htmlTable) } diff --git a/module/rdd-roll.js b/module/rdd-roll.js index 8c7a8e17..57c5ff70 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -16,17 +16,17 @@ import { ReglesOptionelles } from "./settings/regles-optionelles.js"; export class RdDRoll extends Dialog { /* -------------------------------------------- */ - static async create(actor, rollData, dialogConfig, ...actions) { - RdDRoll._ensureCorrectActions(actions); + static async create(actor, rollData, dialogConfig, action) { + RdDRoll._ensureCorrectAction(action); RdDRoll._setDefaultOptions(actor, rollData); const html = await renderTemplate(dialogConfig.html, rollData); - let options = { classes: [ "rdd-roll-dialog"], width: 600, height: 'fit-content', 'z-index': 99999 }; - if (dialogConfig.options) { - mergeObject(options, dialogConfig.options, { overwrite: true }) + let options = { classes: ["rdd-roll-dialog"], width: 600, height: 'fit-content', 'z-index': 99999, close: html => {} }; + if (dialogConfig.close) { + options.close = dialogConfig.close; } - return new RdDRoll(actor, rollData, html, options, actions); + return new RdDRoll(actor, rollData, html, options, action); } /* -------------------------------------------- */ @@ -60,7 +60,7 @@ export class RdDRoll extends Dialog { forceDiceResult: -1 } // Mini patch :Ajout du rêve actuel - if ( actor.system.type == "personnage") { + if (actor.system.type == "personnage") { defaultRollData.carac["reve-actuel"] = actor.system.reve.reve } @@ -72,6 +72,7 @@ export class RdDRoll extends Dialog { RollDataAjustements.calcul(rollData, actor); } + /* -------------------------------------------- */ static getDiviseurSignificative(rollData) { let facteurSign = 1; @@ -91,167 +92,131 @@ export class RdDRoll extends Dialog { } /* -------------------------------------------- */ - static _ensureCorrectActions(actions) { - if (actions.length == 0) { - throw 'No action defined'; + static _ensureCorrectAction(action) { + if (action.callbacks == undefined) { + console.warn('No callback defined for ', action.name); + action.callbacks = [{ action: r => console.warn(action.name, r) }]; } - actions.forEach(action => { - if (action.callbacks == undefined) { - action.callbacks = [{ action: r => console.log(action.name, r) }]; - } - }); } /* -------------------------------------------- */ - constructor(actor, rollData, html, options, actions) { + constructor(actor, rollData, html, options, action) { let conf = { - title: actions[0].label, + title: action.label, content: html, - buttons: {}, - default: actions[0].name, + buttons: { + "onAction": { + label: action.label, callback: html => { + this.rollData.canClose = true; + this.onAction(action) + } + } + }, + default: "onAction", close: options.close }; - for (let action of actions) { - conf.buttons[action.name] = { - label: action.label, callback: html => { - this.rollData.canClose = true; - this.onAction(action, html) - } - }; - } - super(conf, options); this.actor = actor; this.rollData = rollData; } - close() { - if (this.rollData.canClose) { - return super.close(); - } - ui.notifications.info("Vous devez faire ce jet de dés!"); - } - - - /* -------------------------------------------- */ - async onAction(action, html) { - this.rollData.forceDiceResult = Number.parseInt(html.find("[name='force-dice-result']").val()) ?? -1; - await RdDResolutionTable.rollData(this.rollData); - console.log("RdDRoll -=>", this.rollData, this.rollData.rolled); - if (action.callbacks) - for (let callback of action.callbacks) { - if (callback.condition == undefined || callback.condition(this.rollData)) { - await callback.action(this.rollData); - } - } - } - - /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); - + this.html = html; this.bringToTop(); - var dialog = this; + console.log('RdDRoll.activateListeners', this.rollData); - function onLoad() { - let rollData = dialog.rollData; - console.log('Ouverture RdDRoll', rollData); - // Update html, according to rollData - if (rollData.competence) { - const defaut_carac = rollData.competence.system.defaut_carac - // Set the default carac from the competence item - rollData.selectedCarac = rollData.carac[defaut_carac]; - html.find("[name='carac']").val(defaut_carac); - } - if (rollData.selectedSort) { - dialog.setSelectedSort(rollData.selectedSort, html); - html.find(".draconic").val(rollData.selectedSort.system.listIndex); // Uniquement a la selection du sort, pour permettre de changer - } - RdDItemSort.setCoutReveReel(rollData.selectedSort); - html.find("[name='diffLibre']").val(Misc.toInt(rollData.diffLibre)); - html.find("[name='diffConditions']").val(Misc.toInt(rollData.diffConditions)); - dialog.updateRollResult(html); + // Update html, according to rollData + if (this.rollData.competence) { + const defaut_carac = this.rollData.competence.system.defaut_carac + // Set the default carac from the competence item + this.rollData.selectedCarac = this.rollData.carac[defaut_carac]; + this.html.find("[name='carac']").val(defaut_carac); } + if (this.rollData.selectedSort) { + this.setSelectedSort(this.rollData.selectedSort); + this.html.find(".draconic").val(this.rollData.selectedSort.system.listIndex); // Uniquement a la selection du sort, pour permettre de changer + } + RdDItemSort.setCoutReveReel(this.rollData.selectedSort); + this.html.find("[name='diffLibre']").val(Misc.toInt(this.rollData.diffLibre)); + this.html.find("[name='diffConditions']").val(Misc.toInt(this.rollData.diffConditions)); + this.updateRollResult(html); - // Setup everything onload - $(function () { onLoad(); }); - - // Update ! - html.find("[name='diffLibre']").change((event) => { + this.html.find("[name='diffLibre']").change((event) => { this.rollData.diffLibre = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus this.updateRollResult(html); }); - html.find("[name='diffConditions']").change((event) => { + this.html.find("[name='diffConditions']").change((event) => { this.rollData.diffConditions = Misc.toInt(event.currentTarget.value); // Update the selected bonus/malus this.updateRollResult(html); }); - html.find("[name='force-dice-result']").change((event) => { + this.html.find("[name='force-dice-result']").change((event) => { this.rollData.forceDiceResult = Misc.toInt(event.currentTarget.value); }); - html.find("[name='carac']").change((event) => { + this.html.find("[name='carac']").change((event) => { let caracKey = event.currentTarget.value; this.rollData.selectedCarac = this.rollData.carac[caracKey]; // Update the selectedCarac this.updateRollResult(html); }); - html.find('.roll-draconic').change((event) => { + this.html.find('.roll-draconic').change((event) => { let draconicKey = Misc.toInt(event.currentTarget.value); this.rollData.competence = this.rollData.draconicList[draconicKey]; // Update the selectedCarac this.updateRollResult(html); }); - html.find('.roll-sort').change((event) => { + this.html.find('.roll-sort').change((event) => { let sortKey = Misc.toInt(event.currentTarget.value); - this.setSelectedSort(this.rollData.sortList[sortKey], html); + this.setSelectedSort(this.rollData.sortList[sortKey]); this.updateRollResult(html); - html.find("[name='diffLibre']").val(this.rollData.diffLibre); + this.html.find("[name='diffLibre']").val(this.rollData.diffLibre); }); - html.find('.roll-carac-competence').change((event) => { + this.html.find('.roll-carac-competence').change((event) => { const competence = event.currentTarget.value; this.rollData.competence = this.rollData.competences.find(it => it.name == competence); this.updateRollResult(html); }); - html.find('.roll-signedraconique').change((event) => { + this.html.find('.roll-signedraconique').change((event) => { let sortKey = Misc.toInt(event.currentTarget.value); this.setSelectedSigneDraconique(this.rollData.signes[sortKey]); this.updateRollResult(html); }); - html.find("[name='ptreve-variable']").change((event) => { + this.html.find("[name='ptreve-variable']").change((event) => { let ptreve = Misc.toInt(event.currentTarget.value); this.rollData.selectedSort.system.ptreve_reel = ptreve; console.log("RdDRollSelectDialog - Cout reve", ptreve); this.updateRollResult(html); }); - html.find("[name='coupsNonMortels']").change((event) => { + this.html.find("[name='coupsNonMortels']").change((event) => { this.rollData.dmg.mortalite = event.currentTarget.checked ? "non-mortel" : "mortel"; this.updateRollResult(html); }); - html.find('.cuisine-proportions').change((event) => { + this.html.find('.cuisine-proportions').change((event) => { this.rollData.proportions = Number(event.currentTarget.value); this.updateRollResult(html); }); - html.find('.select-by-name').change((event) => { + this.html.find('.select-by-name').change((event) => { const attribute = event.currentTarget.attributes['name'].value; this.rollData[attribute] = event.currentTarget.value; this.updateRollResult(html); }); - html.find('.checkbox-by-name').change((event) => { + this.html.find('.checkbox-by-name').change((event) => { const attribute = event.currentTarget.attributes['name'].value; this.rollData[attribute] = event.currentTarget.checked; this.updateRollResult(html); }); - html.find('input.use-encTotal').change((event) => { + this.html.find('input.use-encTotal').change((event) => { this.rollData.use.encTotal = event.currentTarget.checked; this.updateRollResult(html); }); - html.find('input.use-surenc').change((event) => { + this.html.find('input.use-surenc').change((event) => { this.rollData.use.surenc = event.currentTarget.checked; this.updateRollResult(html); }); - html.find('.appel-moral').click((event) => { /* l'appel au moral, qui donne un bonus de +1 */ + this.html.find('.appel-moral').click((event) => { /* l'appel au moral, qui donne un bonus de +1 */ this.rollData.use.moral = !this.rollData.use.moral; - const appelMoral = html.find('.icon-appel-moral')[0]; - const tooltip = html.find('.tooltipAppelAuMoralText')[0]; + const appelMoral = this.html.find('.icon-appel-moral')[0]; + const tooltip = this.html.find('.tooltipAppelAuMoralText')[0]; if (this.rollData.use.moral) { if (this.rollData.moral > 0) { tooltip.innerHTML = "Appel au moral"; @@ -267,41 +232,61 @@ export class RdDRoll extends Dialog { this.updateRollResult(html); }); // Section Méditation - html.find('.conditionMeditation').change((event) => { + this.html.find('.conditionMeditation').change((event) => { let condition = event.currentTarget.attributes['name'].value; this.rollData.conditionMeditation[condition] = event.currentTarget.checked; this.updateRollResult(html); }); } - async setSelectedSort(sort, html) { + /* -------------------------------------------- */ + close() { + if (this.rollData.canClose) { + return super.close(); + } + ui.notifications.info("Vous devez faire ce jet de dés!"); + } + + async onAction(action) { + this.rollData.forceDiceResult = Number.parseInt(this.html.find("[name='force-dice-result']").val()) ?? -1; + await RdDResolutionTable.rollData(this.rollData); + console.log("RdDRoll -=>", this.rollData, this.rollData.rolled); + if (action.callbacks) + for (let callback of action.callbacks) { + if (callback.condition == undefined || callback.condition(this.rollData)) { + await callback.action(this.rollData); + } + } + } + + async setSelectedSort(sort) { this.rollData.selectedSort = sort; // Update the selectedCarac this.rollData.competence = RdDItemCompetence.getVoieDraconic(this.rollData.draconicList, sort.system.draconic); this.rollData.bonus = RdDItemSort.getCaseBonus(sort, this.rollData.tmr.coord); this.rollData.diffLibre = RdDItemSort.getDifficulte(sort, -7); RdDItemSort.setCoutReveReel(sort); const htmlSortDescription = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html", { sort: sort }); - html.find(".sort-ou-rituel").text(sort.system.isrituel ? "rituel" : "sort"); - html.find(".bonus-case").text(`${this.rollData.bonus}%`); - html.find(".details-sort").remove(); - html.find(".description-sort").append(htmlSortDescription); - html.find(".roll-draconic").val(sort.system.listIndex); - html.find(".div-sort-difficulte-fixe").text(Misc.toSignedString(sort.system.difficulte)); - html.find(".div-sort-ptreve-fixe").text(sort.system.ptreve); + this.html.find(".sort-ou-rituel").text(sort.system.isrituel ? "rituel" : "sort"); + this.html.find(".bonus-case").text(`${this.rollData.bonus}%`); + this.html.find(".placeholder-description-sort").children().remove(); + this.html.find(".placeholder-description-sort").append(htmlSortDescription); + this.html.find(".roll-draconic").val(sort.system.listIndex); + this.html.find(".div-sort-difficulte-fixe").text(Misc.toSignedString(sort.system.difficulte)); + this.html.find(".div-sort-ptreve-fixe").text(sort.system.ptreve); const diffVariable = RdDItemSort.isDifficulteVariable(sort); const coutVariable = RdDItemSort.isCoutVariable(sort); - HtmlUtility._showControlWhen(html.find(".div-sort-non-rituel"), !sort.system.isrituel); - HtmlUtility._showControlWhen(html.find(".div-sort-difficulte-var"), diffVariable); - HtmlUtility._showControlWhen(html.find(".div-sort-difficulte-fixe"), !diffVariable); - HtmlUtility._showControlWhen(html.find(".div-sort-ptreve-var"), coutVariable); - HtmlUtility._showControlWhen(html.find(".div-sort-ptreve-fixe"), !coutVariable); + HtmlUtility._showControlWhen(this.html.find(".div-sort-non-rituel"), !sort.system.isrituel); + HtmlUtility._showControlWhen(this.html.find(".div-sort-difficulte-var"), diffVariable); + HtmlUtility._showControlWhen(this.html.find(".div-sort-difficulte-fixe"), !diffVariable); + HtmlUtility._showControlWhen(this.html.find(".div-sort-ptreve-var"), coutVariable); + HtmlUtility._showControlWhen(this.html.find(".div-sort-ptreve-fixe"), !coutVariable); } - async setSelectedSigneDraconique(signe){ + async setSelectedSigneDraconique(signe) { this.rollData.signe = signe; this.rollData.diffLibre = signe.system.difficulte, - $(".signe-difficulte").text(Misc.toSignedString(this.rollData.diffLibre)); + $(".signe-difficulte").text(Misc.toSignedString(this.rollData.diffLibre)); } /* -------------------------------------------- */ @@ -315,9 +300,9 @@ export class RdDRoll extends Dialog { rollData.use.appelAuMoral = this.actor.isPersonnage() && RdDCarac.isActionPhysique(rollData.selectedCarac); let dmgText = Misc.toSignedString(rollData.dmg.total); - switch (rollData.mortalite){ - case 'non-mortel': dmgText = `(${dmgText}) non-mortel`; break; - case 'empoignade': dmgText = `empoignade`; break; + switch (rollData.mortalite) { + case 'non-mortel': dmgText = `(${dmgText}) non-mortel`; break; + case 'empoignade': dmgText = `empoignade`; break; } RollDataAjustements.calcul(rollData, this.actor); @@ -326,18 +311,18 @@ export class RdDRoll extends Dialog { const resolutionTable = await RdDResolutionTable.buildHTMLTable(RdDResolutionTable.subTable(rollData.caracValue, rollData.finalLevel)) const adjustements = await this.buildAjustements(rollData); - HtmlUtility._showControlWhen($(".use-encTotal"), rollData.ajustements.encTotal.visible && RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac)); - HtmlUtility._showControlWhen($(".use-surenc"), rollData.ajustements.surenc.visible && RdDCarac.isActionPhysique(rollData.selectedCarac)); - HtmlUtility._showControlWhen($(".utilisation-moral"), rollData.use.appelAuMoral); - HtmlUtility._showControlWhen($(".diffMoral"), rollData.ajustements.moralTotal.used); - HtmlUtility._showControlWhen($(".divAppelAuMoral"), rollData.use.appelAuMoral); + HtmlUtility._showControlWhen(this.html.find(".use-encTotal"), rollData.ajustements.encTotal.visible && RdDCarac.isAgiliteOuDerivee(rollData.selectedCarac)); + HtmlUtility._showControlWhen(this.html.find(".use-surenc"), rollData.ajustements.surenc.visible && RdDCarac.isActionPhysique(rollData.selectedCarac)); + HtmlUtility._showControlWhen(this.html.find(".utilisation-moral"), rollData.use.appelAuMoral); + HtmlUtility._showControlWhen(this.html.find(".diffMoral"), rollData.ajustements.moralTotal.used); + HtmlUtility._showControlWhen(this.html.find(".divAppelAuMoral"), rollData.use.appelAuMoral); // Mise à jour valeurs - html.find(".dialog-roll-title").text(this._getTitle(rollData)); - html.find("[name='coupsNonMortels']").prop('checked', rollData.mortalite == 'non-mortel'); - html.find(".dmg-arme-actor").text(dmgText); - html.find("div.placeholder-ajustements").empty().append(adjustements); - html.find("div.placeholder-resolution").empty().append(resolutionTable) + this.html.find(".dialog-roll-title").text(this._getTitle(rollData)); + this.html.find("[name='coupsNonMortels']").prop('checked', rollData.mortalite == 'non-mortel'); + this.html.find(".dmg-arme-actor").text(dmgText); + this.html.find("div.placeholder-ajustements").empty().append(adjustements); + this.html.find("div.placeholder-resolution").empty().append(resolutionTable) } diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index 368bcdd3..f818bed2 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -197,32 +197,33 @@ export class RdDTMRDialog extends Dialog { /* -------------------------------------------- */ async activateListeners(html) { super.activateListeners(html); + this.html = html; document.getElementById("tmrrow1").insertCell(0).append(this.pixiApp.view); if (this.viewOnly) { - html.find('.lancer-sort').remove(); - html.find('.lire-signe-draconique').remove(); + this.html.find('.lancer-sort').remove(); + this.html.find('.lire-signe-draconique').remove(); return; } - HtmlUtility._showControlWhen($(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue")); - HtmlUtility._showControlWhen($(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(this._getActorCoord())); + HtmlUtility._showControlWhen(this.html.find(".appliquerFatigue"), ReglesOptionelles.isUsing("appliquer-fatigue")); + HtmlUtility._showControlWhen(this.html.find(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(this._getActorCoord())); // Roll Sort - html.find('.lancer-sort').click((event) => { + this.html.find('.lancer-sort').click((event) => { this.actor.rollUnSort(this._getActorCoord()); }); - html.find('.lire-signe-draconique').click((event) => { + this.html.find('.lire-signe-draconique').click((event) => { this.actor.rollLireSigneDraconique(this._getActorCoord()); }); - html.find('#dir-top').click((event) => this.moveFromKey("top")); - html.find('#dir-top-left').click((event) => this.moveFromKey("top-left")); - html.find('#dir-top-right').click((event) => this.moveFromKey("top-right")); - html.find('#dir-bottom-left').click((event) => this.moveFromKey("bottom-left")); - html.find('#dir-bottom-right').click((event) => this.moveFromKey("bottom-right")); - html.find('#dir-bottom').click((event) => this.moveFromKey("bottom")); + this.html.find('#dir-top').click((event) => this.moveFromKey("top")); + this.html.find('#dir-top-left').click((event) => this.moveFromKey("top-left")); + this.html.find('#dir-top-right').click((event) => this.moveFromKey("top-right")); + this.html.find('#dir-bottom-left').click((event) => this.moveFromKey("bottom-left")); + this.html.find('#dir-bottom-right').click((event) => this.moveFromKey("bottom-right")); + this.html.find('#dir-bottom').click((event) => this.moveFromKey("bottom")); // Gestion du cout de montée en points de rêve let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse(); @@ -244,7 +245,7 @@ export class RdDTMRDialog extends Dialog { } const coord = this._getActorCoord(); - HtmlUtility._showControlWhen($(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(coord)); + HtmlUtility._showControlWhen(this.html.find(".lire-signe-draconique"), this.actor.isResonanceSigneDraconique(coord)); let ptsreve = document.getElementById("tmr-pointsreve-value"); ptsreve.innerHTML = this.actor.system.reve.reve.value; @@ -279,7 +280,7 @@ export class RdDTMRDialog extends Dialog { } await this.actor.santeIncDec("fatigue", this.cumulFatigue) } - await super.close(); // moving 1 cell costs 1 fatigue + await super.close(); } /* -------------------------------------------- */ diff --git a/module/tmr-rencontres.js b/module/tmr-rencontres.js index 2c7e6163..0d7bfcd1 100644 --- a/module/tmr-rencontres.js +++ b/module/tmr-rencontres.js @@ -1,6 +1,7 @@ import { Grammar } from "./grammar.js"; import { Misc } from "./misc.js"; import { RdDDice } from "./rdd-dice.js"; +import { RdDUtility } from "./rdd-utility.js"; import { SystemCompendiums, CompendiumTable, CompendiumTableHelpers } from "./settings/system-compendiums.js"; import { TMRUtility } from "./tmr-utility.js"; diff --git a/styles/simple.css b/styles/simple.css index 7c2b6e42..724bb2eb 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -618,13 +618,10 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) { opacity: 0.7 ; } -.rdd-roll-dialog .dialog-roll-sort { - width: 600px; - height: 430px; - z-index: 9999; - display: block; +.rdd-roll-dialog .description-sort { + max-width: 550px; } -.rdd-roll-part{ +.rdd-roll-part { align-items: center; border-radius: 6px; padding: 3px; background: var(--gradient-gold); diff --git a/templates/actor/astrologie.html b/templates/actor/astrologie.html index d5094e1e..90e15b53 100644 --- a/templates/actor/astrologie.html +++ b/templates/actor/astrologie.html @@ -1,2 +1,2 @@

Astrologie

-Astrologie : Nombres Astraux +Astrologie : Nombres Astraux diff --git a/templates/dialog-astrologie-joueur.html b/templates/dialog-astrologie-joueur.html index 60f0d40a..24096304 100644 --- a/templates/dialog-astrologie-joueur.html +++ b/templates/dialog-astrologie-joueur.html @@ -14,7 +14,7 @@ {{/select}} - {{#select joursSuivants}} {{#each dates as |date key|}} @@ -22,7 +22,7 @@ {{/select}} - + {{!-- Sheet Body --}}
diff --git a/templates/dialog-roll-encaisser.html b/templates/dialog-roll-encaisser.html index a794c67a..16e3bba7 100644 --- a/templates/dialog-roll-encaisser.html +++ b/templates/dialog-roll-encaisser.html @@ -1,8 +1,7 @@
-

- {{#select modificateurDegats}} {{#each ajustementsEncaissement as |key|}} @@ -11,11 +10,14 @@
- -
+
+ +
diff --git a/templates/dialog-roll-sort.html b/templates/dialog-roll-sort.html index 9f40430a..ff7cf3a6 100644 --- a/templates/dialog-roll-sort.html +++ b/templates/dialog-roll-sort.html @@ -1,16 +1,18 @@
-

Lancer le {{#if sort.system.isrituel}}rituel{{else}}sort{{/if}}: + {{competence.name}} +
+

Lancer le {{#if sort.system.isrituel}}rituel{{else}}sort{{/if}}

-

- {{competence.name}} +
@@ -67,13 +69,8 @@
-
-
- {{> "systems/foundryvtt-reve-de-dragon/templates/partial-description-sort.html" sort=selectedSort}} +
- - \ No newline at end of file diff --git a/templates/item-competence-sheet.html b/templates/item-competence-sheet.html index c53a9274..77b2115b 100644 --- a/templates/item-competence-sheet.html +++ b/templates/item-competence-sheet.html @@ -33,13 +33,13 @@
{{#if isGM}} - {{#select system.base}} {{>"systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html"}} {{/select}} {{else}} - + {{/if}}
diff --git a/templates/item-potion-sheet.html b/templates/item-potion-sheet.html index f696d0e5..b7ecd665 100644 --- a/templates/item-potion-sheet.html +++ b/templates/item-potion-sheet.html @@ -85,14 +85,14 @@
- {{#select splitDate.day}} {{#each jourMoisOptions as |key|}} {{/each}} {{/select}} - {{#select splitDate.month}} {{>"systems/foundryvtt-reve-de-dragon/templates/enum-heures.html"}} {{/select}} diff --git a/templates/partial-description-sort.html b/templates/partial-description-sort.html index efb6d1ef..ff63cbee 100644 --- a/templates/partial-description-sort.html +++ b/templates/partial-description-sort.html @@ -5,6 +5,6 @@ {{#if sort.system.duree}}{{/if}} {{#if sort.system.coutseuil}}{{/if}}
-
+
{{> "systems/foundryvtt-reve-de-dragon/templates/partial-description-overflow.html" sort.system}}
\ No newline at end of file