From 8c3e7e24453809073c8ce830fc9e7666adeec26b Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Fri, 8 Oct 2021 23:25:50 +0200 Subject: [PATCH] Ajout de Misc.findFirstLike MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Méthode de recherche de valeur "proche" dans une liste. Cherche un élément correspondant strictement, sinon cherche les éléments contenant la valeur, et retourne le premier. Notification si plusieurs valeurs peuvent correspondre. --- module/actor.js | 13 ++----------- module/item-competence.js | 15 +-------------- module/misc.js | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/module/actor.js b/module/actor.js index c5014b77..132d668b 100644 --- a/module/actor.js +++ b/module/actor.js @@ -3020,17 +3020,8 @@ export class RdDActor extends Actor { case 'chance-actuelle': case 'chance actuelle': return carac.chance; } - const keys = Object.entries(carac) - .filter(it => it[0].includes(name) || Grammar.toLowerCaseNoAccent(it[1].label).includes(name)) - .map(it => it[0]); - if (keys.length > 1) { - const names = keys.reduce((a, b) => `${a}
${b}`); - ui.notifications.info(`Plusieurs caractéristiques possibles:
${names}
La première sera choisie.`); - } - if (keys.length > 0) { - return carac[keys[0]]; - } - return undefined; // Per default + let entry = Misc.findFirstLike(name, Object.entries(carac), it => it[1].label, 'caractéristiques'); + return entry.length>0 ? carac[entry[0]] : undefined; } /* -------------------------------------------- */ diff --git a/module/item-competence.js b/module/item-competence.js index 03939d03..c2355ab1 100644 --- a/module/item-competence.js +++ b/module/item-competence.js @@ -209,20 +209,7 @@ export class RdDItemCompetence extends Item { /* -------------------------------------------- */ static findCompetence(list, name) { - name = Grammar.toLowerCaseNoAccent(name); - const competences = list.filter(it => Grammar.toLowerCaseNoAccent(it.name).includes(name) && (it.type == "competence" || it.type == "competencecreature")); - if (competences.length == 0) { - return undefined; - } - let competence = competences.find(it => Grammar.toLowerCaseNoAccent(it.name) == name); - if (!competence) { - competence = competences[0]; - if (competences.length > 1) { - const names = competences.map(it => it.name).reduce((a, b) => `${a}
${b}`); - ui.notifications.info(`Plusieurs compétences possibles:
${names}
La première sera choisie: ${competence.name}`); - } - } - return competence; + return Misc.findFirstLike(name, list, it => it.name, 'compétences'); } /* -------------------------------------------- */ diff --git a/module/misc.js b/module/misc.js index da74c589..ea0d7aa1 100644 --- a/module/misc.js +++ b/module/misc.js @@ -1,3 +1,4 @@ +import { Grammar } from "./grammar.js"; import { RdDDice } from "./rdd-dice.js"; /** @@ -131,4 +132,22 @@ export class Misc { static isElectedUser() { return game.user.id == Misc.connectedGMOrUser(); } + + /* -------------------------------------------- */ + static findFirstLike(value, elements, mapper = it=>it.name, description = 'valeurs') { + value = Grammar.toLowerCaseNoAccent(value); + const subset = elements.filter(it => Grammar.toLowerCaseNoAccent(mapper(it)).includes(value)); + if (subset.length == 0) { + return undefined; + } + let single = subset.find(it => Grammar.toLowerCaseNoAccent(mapper(it)) == value); + if (!single) { + single = subset[0]; + if (subset.length > 1) { + const choices = subset.map(it => mapper(it)).reduce((a, b) => `${a}
${b}`); + ui.notifications.info(`Plusieurs choix de ${description} possibles:
${choices}
Le premier sera choisi: ${mapper(single)}`); + } + } + return single; + } } \ No newline at end of file