diff --git a/module/actor-sheet.js b/module/actor-sheet.js index f79339f9..035acb38 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -37,6 +37,7 @@ export class RdDActorSheet extends ActorSheet { /* -------------------------------------------- */ async getData() { const objectData = this.object.system + this.timerRecherche = undefined; console.log("New actor", objectData) let formData = { @@ -76,8 +77,8 @@ export class RdDActorSheet extends ActorSheet { }; formData.competences.forEach(item => { - item.system.visible = this.options.cherchercompetence - ? RdDItemCompetence.nomContientTexte(item, this.options.cherchercompetence) + item.visible = this.options.recherche + ? RdDItemCompetence.nomContientTexte(item, this.options.recherche.text) : (!this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(item)); RdDItemCompetence.levelUp(item, formData.data.compteurs.experience.value); }); @@ -422,12 +423,28 @@ export class RdDActorSheet extends ActorSheet { this.options.editCaracComp = !this.options.editCaracComp; this.render(true); }); - html.find('.cherchercompetence').change(async event => { - this.options.cherchercompetence = event.currentTarget.value; - this.render(true); - }); + + html.find('.recherche') + .each((index, field) => { + if (this.options.recherche) { + field.focus(); + field.setSelectionRange(this.options.recherche.start, this.options.recherche.end); + } + }) + .keyup(async event => { + this.options.recherche = this._optionRecherche(event.currentTarget) + if (this.timerRecherche) { + clearTimeout(this.timerRecherche); + } + this.timerRecherche = setTimeout(() => { + this.timerRecherche = undefined; + this.render(true); + }, 500); + }) + .change(async event => + this.options.recherche = this._optionRecherche(event.currentTarget) + ); html.find('.vue-detaillee').click(async event => { - console.log("CONTROLS", this.options.vueDetaillee) this.options.vueDetaillee = !this.options.vueDetaillee; this.render(true); }); @@ -513,6 +530,17 @@ export class RdDActorSheet extends ActorSheet { }); } + _optionRecherche(target) { + if (!target.value?.length){ + return undefined; + } + return { + text: target.value, + start: target.selectionStart, + end: target.selectionEnd, + }; + } + _getEventArmeCombat(event) { const li = $(event.currentTarget)?.parents(".item"); let armeName = li.data("arme-name"); diff --git a/module/rdd-utility.js b/module/rdd-utility.js index b2301a4b..7c3c22c7 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -464,34 +464,32 @@ export class RdDUtility { /** Construit la structure récursive des conteneurs, avec imbrication potentielle * */ - static buildConteneur(objet, niveau) { - if (!niveau) niveau = 1; - objet.niveau = niveau; - //console.log("OBJ:", objet); - let str = Handlebars.partials['systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html']({ item: objet }); - if (objet.type == 'conteneur') { - const afficherContenu = this.getAfficheContenu(objet._id); - str = str + RdDUtility.buildContenu(objet, niveau, afficherContenu); - } - return str; + static buildConteneur(objet, profondeur) { + if (!profondeur) profondeur = 1; + objet.niveau = profondeur; + const isConteneur = objet.type == 'conteneur'; + const isOuvert = isConteneur && this.getAfficheContenu(objet._id); + const isVide = isConteneur && Misc.templateData(objet).contenu.length == 0; + const conteneur = Handlebars.partials['systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html']({ + item: objet, + vide: isVide, + ouvert: isOuvert + }); + const contenu = isConteneur ? RdDUtility.buildContenu(objet, profondeur, isOuvert) : ''; + return conteneur + contenu; } /* -------------------------------------------- */ - static buildContenu(objet, niveau, afficherContenu) { - if (!niveau) niveau = 1; - objet.niveau = niveau; - let strContenu = ""; + static buildContenu(objet, profondeur, afficherContenu) { + if (!profondeur) profondeur = 1; + objet.niveau = profondeur; + const display = afficherContenu ? 'item-display-show' : 'item-display-hide'; //console.log("ITEM DISPLAYED", objet ); - if (afficherContenu) { - strContenu = "