Arbre de conteneurs et recherche améliorée #546
| @@ -37,8 +37,7 @@ export class RdDActorSheet extends ActorSheet { | |||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   async getData() { |   async getData() { | ||||||
|     const objectData = Misc.data(this.object); |     const objectData = Misc.data(this.object); | ||||||
|  |     this.timerRecherche = undefined; | ||||||
|     //this.actor.checkMonnaiePresence(this.actor.data.items); // Always check  |  | ||||||
|  |  | ||||||
|     let formData = { |     let formData = { | ||||||
|       title: this.title, |       title: this.title, | ||||||
| @@ -78,8 +77,8 @@ export class RdDActorSheet extends ActorSheet { | |||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     formData.competences.forEach(item => { |     formData.competences.forEach(item => { | ||||||
|       item.visible = this.options.cherchercompetence |       item.visible = this.options.recherche | ||||||
|         ? RdDItemCompetence.nomContientTexte(item, this.options.cherchercompetence) |         ? RdDItemCompetence.nomContientTexte(item, this.options.recherche.text) | ||||||
|         : (!this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(item)); |         : (!this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(item)); | ||||||
|       RdDItemCompetence.levelUp(item, formData.data.compteurs.experience.value); |       RdDItemCompetence.levelUp(item, formData.data.compteurs.experience.value); | ||||||
|     }); |     }); | ||||||
| @@ -424,12 +423,28 @@ export class RdDActorSheet extends ActorSheet { | |||||||
|       this.options.editCaracComp = !this.options.editCaracComp; |       this.options.editCaracComp = !this.options.editCaracComp; | ||||||
|       this.render(true); |       this.render(true); | ||||||
|     }); |     }); | ||||||
|     html.find('.cherchercompetence').change(async event => { |  | ||||||
|       this.options.cherchercompetence = event.currentTarget.value; |     html.find('.recherche') | ||||||
|       this.render(true); |       .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 => { |     html.find('.vue-detaillee').click(async event => { | ||||||
|       console.log("CONTROLS", this.options.vueDetaillee) |  | ||||||
|       this.options.vueDetaillee = !this.options.vueDetaillee; |       this.options.vueDetaillee = !this.options.vueDetaillee; | ||||||
|       this.render(true); |       this.render(true); | ||||||
|     }); |     }); | ||||||
| @@ -515,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) { |   _getEventArmeCombat(event) { | ||||||
|     const li = $(event.currentTarget)?.parents(".item"); |     const li = $(event.currentTarget)?.parents(".item"); | ||||||
|     let armeName = li.data("arme-name"); |     let armeName = li.data("arme-name"); | ||||||
|   | |||||||
| @@ -465,34 +465,32 @@ export class RdDUtility { | |||||||
|   /** Construit la structure récursive des conteneurs, avec imbrication potentielle |   /** Construit la structure récursive des conteneurs, avec imbrication potentielle | ||||||
|    *  |    *  | ||||||
|    */ |    */ | ||||||
|   static buildConteneur(objet, niveau) { |   static buildConteneur(objet, profondeur) { | ||||||
|     if (!niveau) niveau = 1; |     if (!profondeur) profondeur = 1; | ||||||
|     objet.niveau = niveau; |     objet.niveau = profondeur; | ||||||
|     //console.log("OBJ:", objet); |     const isConteneur = objet.type == 'conteneur'; | ||||||
|     let str = Handlebars.partials['systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html']({ item: objet }); |     const isOuvert = isConteneur && this.getAfficheContenu(objet._id); | ||||||
|     if (objet.type == 'conteneur') { |     const isVide = isConteneur && Misc.templateData(objet).contenu.length == 0; | ||||||
|       const afficherContenu = this.getAfficheContenu(objet._id); |     const conteneur = Handlebars.partials['systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html']({ | ||||||
|       str = str + RdDUtility.buildContenu(objet, niveau, afficherContenu); |       item: objet, | ||||||
|     } |       vide: isVide, | ||||||
|     return str; |       ouvert: isOuvert | ||||||
|  |     }); | ||||||
|  |     const contenu = isConteneur ? RdDUtility.buildContenu(objet, profondeur, isOuvert) : ''; | ||||||
|  |     return conteneur + contenu; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   static buildContenu(objet, niveau, afficherContenu) { |   static buildContenu(objet, profondeur, afficherContenu) { | ||||||
|     if (!niveau) niveau = 1; |     if (!profondeur) profondeur = 1; | ||||||
|     objet.niveau = niveau; |     objet.niveau = profondeur; | ||||||
|     let strContenu = ""; |     const display = afficherContenu ? 'item-display-show' : 'item-display-hide'; | ||||||
|     //console.log("ITEM DISPLAYED", objet ); |     //console.log("ITEM DISPLAYED", objet ); | ||||||
|     if (afficherContenu) { |     let strContenu = `<ul class='item-list alterne-list ${display} list-item-margin${profondeur}'>`; | ||||||
|       strContenu = "<ul class='item-list alterne-list item-display-show list-item-margin" + niveau + "'>"; |  | ||||||
|     } else { |  | ||||||
|       strContenu = "<ul class='item-list alterne-list item-display-hide list-item-margin" + niveau + "'>"; |  | ||||||
|     } |  | ||||||
|     for (let subItem of objet.subItems) { |     for (let subItem of objet.subItems) { | ||||||
|       strContenu = strContenu + this.buildConteneur(subItem, niveau + 1); |       strContenu += this.buildConteneur(subItem, profondeur + 1); | ||||||
|     } |     } | ||||||
|     strContenu = strContenu + "</ul>"; |     return strContenu + "</ul>"; | ||||||
|     return strContenu; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /* -------------------------------------------- */ |   /* -------------------------------------------- */ | ||||||
|   | |||||||
| @@ -806,16 +806,22 @@ ul, li { | |||||||
| } | } | ||||||
|  |  | ||||||
| .list-item-margin1 { | .list-item-margin1 { | ||||||
|   margin-left: 1rem; |   margin-left: 0.5rem; | ||||||
| } | } | ||||||
| .list-item-margin2 { | .list-item-margin2 { | ||||||
|   margin-left: 2rem; |   margin-left: 1rem; | ||||||
| } | } | ||||||
| .list-item-margin3 { | .list-item-margin3 { | ||||||
|   margin-left: 3rem; |   margin-left: 1.5rem; | ||||||
| } | } | ||||||
| .list-item-margin4 { | .list-item-margin4 { | ||||||
|   margin-left: 4rem; |   margin-left: 2rem; | ||||||
|  | } | ||||||
|  | .list-item-margin5 { | ||||||
|  |   margin-left: 2.5rem; | ||||||
|  | } | ||||||
|  | .list-item-margin6 { | ||||||
|  |   margin-left: 3rem; | ||||||
| } | } | ||||||
|  |  | ||||||
| .sheet-competence-img { | .sheet-competence-img { | ||||||
|   | |||||||
| @@ -1,9 +1,28 @@ | |||||||
| <li class="item flexrow list-item" data-item-id="{{item._id}}" draggable="true"> | <li class="item flexrow list-item" data-item-id="{{item._id}}" draggable="true"> | ||||||
|   <img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/> |  | ||||||
|  |  | ||||||
|   {{#if (eq item.type 'conteneur')}} |   {{#if (eq item.type 'conteneur')}} | ||||||
|   <span class="item-name conteneur-name flex-grow"><a data-item-id="{{item._id}}">+{{item.name}}</a></span> |     <span class="sheet-competence-img conteneur-name"> | ||||||
|  |       {{#if vide}} | ||||||
|  |        <i class="far fa-square"></i> | ||||||
|  |       {{else}} | ||||||
|  |         <a data-item-id="{{item._id}}"> | ||||||
|  |         {{#if ouvert}} | ||||||
|  |         <i class="far fa-minus-square"></i> | ||||||
|  |         <!-- <i class="far fa-caret-square-down"></i> --> | ||||||
|  |         {{else}} | ||||||
|  |         <i class="far fa-plus-square"></i> | ||||||
|  |         <!-- <i class="fas fa-caret-square-right"></i> --> | ||||||
|  |         {{/if}} | ||||||
|  |         </a> | ||||||
|  |       {{/if}} | ||||||
|  |     </span> | ||||||
|  |     <span class="item-name conteneur-name flex-grow"> | ||||||
|  |       <a data-item-id="{{item._id}}"> | ||||||
|  |         <img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/> | ||||||
|  |         {{item.name}} | ||||||
|  |       </a> | ||||||
|  |     </span> | ||||||
|   {{else}} |   {{else}} | ||||||
|  |   <img class="sheet-competence-img" src="{{item.img}}" title="{{item.name}}"/> | ||||||
|   <span class="item-name flex-grow">{{item.name}}</span> |   <span class="item-name flex-grow">{{item.name}}</span> | ||||||
|   {{/if}} |   {{/if}} | ||||||
|   <span class="item-quantite">{{item.data.quantite}} |   <span class="item-quantite">{{item.data.quantite}} | ||||||
| @@ -30,3 +49,4 @@ | |||||||
|     {{/if}} |     {{/if}} | ||||||
|   </div> |   </div> | ||||||
| </li> | </li> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -217,7 +217,7 @@ | |||||||
|               {{#if options.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}</a></span> |               {{#if options.editCaracComp}}Verrouiller{{else}}Déverrouiller{{/if}}</a></span> | ||||||
|             <span class="flexrow"> |             <span class="flexrow"> | ||||||
|               <i class="fas fa-search"></i> |               <i class="fas fa-search"></i> | ||||||
|               <input class="cherchercompetence" type="text" value="{{options.cherchercompetence}}" name="cherchercompetence"  |               <input class="recherche" type="text" value="{{options.recherche.text}}" name="recherche"  | ||||||
|                 size="8" data-dtype="String" placeholder="chercher"/> |                 size="8" data-dtype="String" placeholder="chercher"/> | ||||||
|               <span></span> |               <span></span> | ||||||
|             </span> |             </span> | ||||||
| @@ -690,7 +690,7 @@ | |||||||
|           {{#each objets as |item id|}} |           {{#each objets as |item id|}} | ||||||
|             {{#unless item.estContenu}} |             {{#unless item.estContenu}} | ||||||
|             {{#if (ne item.type 'conteneur')}} |             {{#if (ne item.type 'conteneur')}} | ||||||
|               {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html" item=item }} |               {{> "systems/foundryvtt-reve-de-dragon/templates/actor-sheet-inventaire-conteneur.html" item=item vide=true ouvert=true }} | ||||||
|             {{/if}} |             {{/if}} | ||||||
|             {{/unless}} |             {{/unless}} | ||||||
|           {{/each}} |           {{/each}} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user