ENH: Monster sheet improv
							parent
							
								
									5afadf6039
								
							
						
					
					
						commit
						d9ec802338
					
				|  | @ -22,6 +22,7 @@ | |||
|     "OSE.Morale": "Morale", | ||||
|     "OSE.Retainer": "Retainer", | ||||
|     "OSE.Appearing": "NA", | ||||
|     "OSE.Attack": "Attack", | ||||
| 
 | ||||
|     "OSE.Loyalty": "Loyalty Rating", | ||||
|     "OSE.LoyaltyShort": "LR", | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ export class OseActorSheet extends ActorSheet { | |||
|    */ | ||||
|   _prepareItems(data) { | ||||
|     // Partition items by category
 | ||||
|     let [inventory, weapons, armors, abilities, spells] = data.items.reduce( | ||||
|     let [items, weapons, armors, abilities, spells] = data.items.reduce( | ||||
|       (arr, item) => { | ||||
|         // Classify items into types
 | ||||
|         if (item.type === "item") arr[0].push(item); | ||||
|  | @ -42,19 +42,44 @@ export class OseActorSheet extends ActorSheet { | |||
|     // Sort spells by level
 | ||||
|     var sortedSpells = {}; | ||||
|     for (var i = 0; i < spells.length; i++) { | ||||
|       let lvl = spells[i].data.lvl | ||||
|       let lvl = spells[i].data.lvl; | ||||
|       if (!sortedSpells[lvl]) sortedSpells[lvl] = []; | ||||
|       sortedSpells[lvl].push(spells[i]); | ||||
|     } | ||||
|     // Assign and return
 | ||||
|     data.inventory = inventory; | ||||
|     data.weapons = weapons; | ||||
|     data.armors = armors; | ||||
|     data.spells = sortedSpells; | ||||
|     data.owned = { | ||||
|       items: items, | ||||
|       weapons: weapons, | ||||
|       armors: armors, | ||||
|     }; | ||||
|     data.abilities = abilities; | ||||
|     data.spells = sortedSpells; | ||||
|   } | ||||
| 
 | ||||
|   _onItemSummary(event) { | ||||
|     event.preventDefault(); | ||||
|     let li = $(event.currentTarget).parents(".item"), | ||||
|       item = this.actor.getOwnedItem(li.data("item-id")), | ||||
|       description = TextEditor.enrichHTML(item.data.data.description); | ||||
|     // Toggle summary
 | ||||
|     if (li.hasClass("expanded")) { | ||||
|       let summary = li.parents(".item-entry").children(".item-summary"); | ||||
|       summary.slideUp(200, () => summary.remove()); | ||||
|     } else { | ||||
|       let div = $(`<div class="item-summary">${description}</div>`); | ||||
|       li.parents(".item-entry").append(div.hide()); | ||||
|       div.slideDown(200); | ||||
|     } | ||||
|     li.toggleClass("expanded"); | ||||
|   } | ||||
| 
 | ||||
|    | ||||
|   activateListeners(html) { | ||||
|     // Item summaries
 | ||||
|     html | ||||
|       .find(".item .item-name h4") | ||||
|       .click((event) => this._onItemSummary(event)); | ||||
| 
 | ||||
|     html.find(".saving-throw .attribute-name a").click((ev) => { | ||||
|       let actorObject = this.actor; | ||||
|       let element = event.currentTarget; | ||||
|  | @ -91,7 +116,6 @@ export class OseActorSheet extends ActorSheet { | |||
|       item.roll(); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     super.activateListeners(html); | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -57,23 +57,6 @@ export class OseActorSheetCharacter extends OseActorSheet { | |||
| 
 | ||||
|   /* -------------------------------------------- */ | ||||
| 
 | ||||
|   _onItemSummary(event) { | ||||
|     event.preventDefault(); | ||||
|     let li = $(event.currentTarget).parents(".item"), | ||||
|       item = this.actor.getOwnedItem(li.data("item-id")), | ||||
|       description = TextEditor.enrichHTML(item.data.data.description); | ||||
|     // Toggle summary
 | ||||
|     if (li.hasClass("expanded")) { | ||||
|       let summary = li.parents(".item-entry").children(".item-summary"); | ||||
|       summary.slideUp(200, () => summary.remove()); | ||||
|     } else { | ||||
|       let div = $(`<div class="item-summary">${description}</div>`); | ||||
|       li.parents(".item-entry").append(div.hide()); | ||||
|       div.slideDown(200); | ||||
|     } | ||||
|     li.toggleClass("expanded"); | ||||
|   } | ||||
| 
 | ||||
|   async _onQtChange(event) { | ||||
|     event.preventDefault(); | ||||
|     const itemId = event.currentTarget.closest(".item").dataset.itemId; | ||||
|  | @ -133,11 +116,6 @@ export class OseActorSheetCharacter extends OseActorSheet { | |||
|       .click((ev) => ev.target.select()) | ||||
|       .change(this._onQtChange.bind(this)); | ||||
| 
 | ||||
|     // Item summaries
 | ||||
|     html | ||||
|       .find(".item .item-name h4") | ||||
|       .click((event) => this._onItemSummary(event)); | ||||
| 
 | ||||
|     html.find(".ability-score .attribute-name a").click((ev) => { | ||||
|       let actorObject = this.actor; | ||||
|       let element = event.currentTarget; | ||||
|  | @ -145,6 +123,13 @@ export class OseActorSheetCharacter extends OseActorSheet { | |||
|       actorObject.rollCheck(score, { event: event }); | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".attack a").click(ev => { | ||||
|       let actorObject = this.actor; | ||||
|       let element = event.currentTarget; | ||||
|       let attack = element.parentElement.parentElement.dataset.attack; | ||||
|       actorObject.rollAttack(attack, { event: event }); | ||||
|     }) | ||||
| 
 | ||||
|     // Handle default listeners last so system listeners are triggered first
 | ||||
|     super.activateListeners(html); | ||||
|   } | ||||
|  |  | |||
|  | @ -42,6 +42,21 @@ export class OseActor extends Actor { | |||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   rollAttack(attack, options={}) { | ||||
|     const label = game.i18n.localize(`OSE.${attack}`); | ||||
|     const rollParts = ['1d20']; | ||||
| 
 | ||||
|     // Roll and return
 | ||||
|     return OseDice.Roll({ | ||||
|       event: options.event, | ||||
|       parts: rollParts, | ||||
|       data: this.data, | ||||
|       speaker: ChatMessage.getSpeaker({ actor: this }), | ||||
|       flavor: `${label} ${game.i18n.localize('OSE.Attack')}`, | ||||
|       title: `${label} ${game.i18n.localize('OSE.Attack')}`, | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   computeModifiers() { | ||||
|     let _valueToMod = (val) => { | ||||
|       switch (val) { | ||||
|  |  | |||
|  | @ -45,25 +45,42 @@ export class OseActorSheetMonster extends OseActorSheet { | |||
|     return data; | ||||
|   } | ||||
| 
 | ||||
|   _onItemSummary(event) { | ||||
|     event.preventDefault(); | ||||
|     let li = $(event.currentTarget).parents(".item"), | ||||
|         item = this.actor.getOwnedItem(li.data("item-id")), | ||||
|         description = TextEditor.enrichHTML(item.data.data.description); | ||||
|     // Toggle summary
 | ||||
|     if ( li.hasClass("expanded") ) { | ||||
|       let summary = li.parents('.item-entry').children(".item-summary"); | ||||
|       summary.slideUp(200, () => summary.remove()); | ||||
|     } else { | ||||
|       let div = $(`<div class="item-summary">${description}</div>`); | ||||
|       li.parents('.item-entry').append(div.hide()); | ||||
|       div.slideDown(200); | ||||
|     } | ||||
|     li.toggleClass("expanded"); | ||||
|   } | ||||
| 
 | ||||
|   /* -------------------------------------------- */ | ||||
| 
 | ||||
|   async _chooseItemType( | ||||
|     choices = ['weapon', 'armor', 'shield', 'gear'], | ||||
|   ) { | ||||
|     let templateData = { upper: '', lower: '', types: choices }, | ||||
|       dlg = await renderTemplate( | ||||
|         'templates/sidebar/entity-create.html', | ||||
|         templateData, | ||||
|       ); | ||||
|     //Create Dialog window
 | ||||
|     return new Promise((resolve) => { | ||||
|       new Dialog({ | ||||
|         title: '', | ||||
|         content: dlg, | ||||
|         buttons: { | ||||
|           ok: { | ||||
|             label: game.i18n.localize('OSE.Ok'), | ||||
|             icon: '<i class="fas fa-check"></i>', | ||||
|             callback: (html) => { | ||||
|               resolve({ | ||||
|                 type: html.find('select[name="type"]').val(), | ||||
|                 name: html.find('input[name="name"]').val(), | ||||
|               }); | ||||
|             }, | ||||
|           }, | ||||
|           cancel: { | ||||
|             icon: '<i class="fas fa-times"></i>', | ||||
|             label: game.i18n.localize('OSE.Cancel'), | ||||
|           }, | ||||
|         }, | ||||
|         default: 'ok', | ||||
|       }).render(true); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Activate event listeners using the prepared sheet HTML | ||||
|    * @param html {HTML}   The prepared HTML object ready to be rendered into the DOM | ||||
|  | @ -90,17 +107,32 @@ export class OseActorSheetMonster extends OseActorSheet { | |||
|       event.preventDefault(); | ||||
|       const header = event.currentTarget; | ||||
|       const type = header.dataset.type; | ||||
| 
 | ||||
|       // item creation helper func
 | ||||
|       let createItem = function ( | ||||
|         type, | ||||
|         name = `New ${type.capitalize()}`, | ||||
|       ) { | ||||
|         const itemData = { | ||||
|         name: `New ${type.capitalize()}`, | ||||
|           name: name ? name : `New ${type.capitalize()}`, | ||||
|           type: type, | ||||
|           data: duplicate(header.dataset), | ||||
|         }; | ||||
|       delete itemData.data["type"]; | ||||
|       return this.actor.createOwnedItem(itemData); | ||||
|     }); | ||||
|         delete itemData.data['type']; | ||||
|         return itemData; | ||||
|       }; | ||||
|        | ||||
|     html.find(".item-name").click((event) => { | ||||
|       this._onItemSummary(event); | ||||
|       // Getting back to main logic
 | ||||
|       if (type == 'choice') { | ||||
|         const choices = header.dataset.choices.split(','); | ||||
|         this._chooseItemType(choices).then((dialogInput) => { | ||||
|           const itemData = createItem(dialogInput.type, dialogInput.name); | ||||
|           this.actor.createOwnedItem(itemData, {}); | ||||
|         }); | ||||
|         return; | ||||
|       } | ||||
|       const itemData = createItem(type); | ||||
|       return this.actor.createOwnedItem(itemData, {}); | ||||
|     }); | ||||
| 
 | ||||
|     // Handle default listeners last so system listeners are triggered first
 | ||||
|  |  | |||
|  | @ -55,7 +55,6 @@ export class OseItem extends Item { | |||
|       item: this.data, | ||||
|       data: this.getChatData(), | ||||
|       labels: this.labels, | ||||
|       hasAttack: this.hasAttack, | ||||
|       isHealing: this.isHealing, | ||||
|       hasDamage: this.hasDamage, | ||||
|       isSpell: this.data.type === "spell", | ||||
|  |  | |||
|  | @ -84,7 +84,7 @@ | |||
|       padding: 2px 10px 0; | ||||
|       margin-left: -5px; | ||||
|       text-indent: 4px; | ||||
|       background: url('/ui/parchment.jpg'); | ||||
|       background: url("/ui/parchment.jpg"); | ||||
|       border-top-right-radius: 4px; | ||||
|       border-top-left-radius: 80px; | ||||
|       box-shadow: 0 0 6px 1px $colorDark; | ||||
|  | @ -163,6 +163,127 @@ | |||
|         } | ||||
|       } | ||||
|     } | ||||
|     .inventory { | ||||
|       overflow: auto; | ||||
|       .header-spells { | ||||
|         line-height: 30px; | ||||
|       } | ||||
|       .item-titles { | ||||
|         text-align: center; | ||||
|         padding-top: 4px; | ||||
|         .item-name { | ||||
|           text-align: left; | ||||
|           text-indent: 8px; | ||||
|         } | ||||
|         font-weight: 300; | ||||
|         font-size: 12px; | ||||
|         background: $colorDark; | ||||
|         color: white; | ||||
|         input { | ||||
|           color: white; | ||||
|           margin: auto; | ||||
|         } | ||||
|       } | ||||
|       .item-list { | ||||
|         list-style: none; | ||||
|         margin: 0; | ||||
|         padding: 0; | ||||
|         & > * { | ||||
|           line-height: 30px; | ||||
|         } | ||||
|         .item-summary { | ||||
|           font-size: 13px; | ||||
|           padding: 0 4px; | ||||
|           line-height: 20px; | ||||
|         } | ||||
|         .item-header { | ||||
|           @extend %header-field !optional; | ||||
|           padding: 0px; | ||||
|           margin-bottom: 0px; | ||||
|         } | ||||
|         .item-entry { | ||||
|           &:nth-child(even) { | ||||
|             .item { | ||||
|               background: rgba(0, 0, 0, 0.1); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         .item { | ||||
|           line-height: 30px; | ||||
|           height: 30px; | ||||
|           overflow: hidden; | ||||
|         } | ||||
|         .item-equipped { | ||||
|           grid-area: item-equipped; | ||||
|           justify-self: center; | ||||
|         } | ||||
|         .item-name { | ||||
|           text-indent: 8px; | ||||
|           text-align: left; | ||||
|           overflow: hidden; | ||||
|           height: 30px; | ||||
|           margin: 0; | ||||
|           line-height: 30px; | ||||
|           &:hover .item-image { | ||||
|             background-image: url("/icons/svg/d20-grey.svg") !important; | ||||
|             cursor: pointer; | ||||
|           } | ||||
|           .item-image { | ||||
|             flex-basis: 30px; | ||||
|             flex-grow: 0; | ||||
|             background-size: contain; | ||||
|             background-repeat: no-repeat; | ||||
|             &:hover { | ||||
|               background-image: url("/icons/svg/d20-black.svg") !important; | ||||
|             } | ||||
|           } | ||||
|           h4 { | ||||
|             margin: 0; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       .field-longer { | ||||
|         text-indent: 8px; | ||||
|         text-align: left; | ||||
|         flex-basis: 150px; | ||||
|         font-size: 12px; | ||||
|         flex-grow: 0; | ||||
|       } | ||||
|       .field-long { | ||||
|         flex-basis: 65px; | ||||
|         flex-grow: 0; | ||||
|         text-align: center; | ||||
|         font-size: 12px; | ||||
|       } | ||||
|       .field-short { | ||||
|         font-size: 12px; | ||||
|         flex-basis: 45px; | ||||
|         flex-grow: 0; | ||||
|         text-align: center; | ||||
|         &.quantity { | ||||
|           display: flex; | ||||
|           input { | ||||
|             margin: 3px 0; | ||||
|             border-bottom: none; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       .item-controls { | ||||
|         font-size: 12px; | ||||
|         flex-basis: 60px; | ||||
|         flex-grow: 0; | ||||
|         text-align: right; | ||||
|         margin-right: 4px; | ||||
|         .item-unequipped { | ||||
|           color: rgba(0, 0, 0, 0.2); | ||||
|         } | ||||
|       } | ||||
|       &.spells { | ||||
|         .item-controls { | ||||
|           flex-basis: 30px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     .editor { | ||||
|       height: 300px; | ||||
|       padding: 4px; | ||||
|  |  | |||
|  | @ -64,135 +64,6 @@ | |||
|           background-position: bottom; | ||||
|         } | ||||
|     } | ||||
|     .inventory { | ||||
|       overflow: auto; | ||||
|       .header-spells { | ||||
|         line-height: 30px; | ||||
|       } | ||||
|       .item-titles { | ||||
|         text-align: center; | ||||
|         margin-top: 1px; | ||||
|         padding-top: 2px; | ||||
|         .item-name { | ||||
|           text-align: left; | ||||
|           text-indent: 8px; | ||||
|         } | ||||
|         font-weight: 300; | ||||
|         font-size: 12px; | ||||
|         background: $colorDark; | ||||
|         color: white; | ||||
|         input { | ||||
|           color: white; | ||||
|           margin: auto; | ||||
|         } | ||||
|       } | ||||
|       .item-list { | ||||
|         list-style: none; | ||||
|         margin: 0; | ||||
|         padding: 0; | ||||
|         &>* { | ||||
|           line-height: 30px; | ||||
|         } | ||||
|         .item-summary { | ||||
|           font-size: 13px; | ||||
|           padding: 0 4px; | ||||
|           line-height: 20px; | ||||
|         } | ||||
|         .item-header { | ||||
|           @extend %header-field !optional; | ||||
|           padding: 0px; | ||||
|           margin-bottom: 0px; | ||||
|         } | ||||
|         .item-entry { | ||||
|           &:nth-child(even) { | ||||
|             .item { | ||||
|               background: rgba(0, 0, 0, 0.1); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         .item { | ||||
|           line-height: 30px; | ||||
|           height: 30px; | ||||
|           overflow: hidden; | ||||
|         } | ||||
|         .item-equipped { | ||||
|           grid-area: item-equipped; | ||||
|           justify-self: center; | ||||
|         } | ||||
|         .item-name { | ||||
|           text-indent: 8px; | ||||
|           text-align: left; | ||||
|           overflow: hidden; | ||||
|           height: 30px; | ||||
|           margin: 0; | ||||
|           line-height: 30px; | ||||
|           &:hover .item-image { | ||||
|             background-image: url("/icons/svg/d20-grey.svg") !important; | ||||
|             cursor: pointer; | ||||
|           } | ||||
|           .item-image { | ||||
|             flex-basis: 30px; | ||||
|             flex-grow: 0; | ||||
|             background-size: contain; | ||||
|             background-repeat: no-repeat; | ||||
|             &:hover { | ||||
|               background-image: url("/icons/svg/d20-black.svg") !important; | ||||
|             } | ||||
|           } | ||||
|           h4 { | ||||
|             margin: 0; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       .field-longer { | ||||
|         text-indent: 8px; | ||||
|         text-align: left; | ||||
|         flex-basis: 150px; | ||||
|         font-size: 12px; | ||||
|         flex-grow: 0; | ||||
|       } | ||||
|       .field-long { | ||||
|         flex-basis: 65px; | ||||
|         flex-grow: 0; | ||||
|         text-align: center; | ||||
|         font-size: 12px; | ||||
|       } | ||||
|       .field-short { | ||||
|         font-size: 12px; | ||||
|         flex-basis: 45px; | ||||
|         flex-grow: 0; | ||||
|         text-align: center; | ||||
|         &.quantity { | ||||
|           display: flex; | ||||
|           input { | ||||
|             margin: 3px 0; | ||||
|             border-bottom: none; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       .item-controls { | ||||
|         font-size: 12px; | ||||
|         flex-basis: 60px; | ||||
|         flex-grow: 0; | ||||
|         text-align: right; | ||||
|         margin-right: 4px; | ||||
|         .item-unequipped { | ||||
|           color: rgba(0, 0, 0, 0.2); | ||||
|         } | ||||
|       } | ||||
|       &.spells { | ||||
|         .item-controls { | ||||
|           flex-basis: 30px; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   /* ----------------------------------------- */ | ||||
|   /*  Inventory                                */ | ||||
|   /* ----------------------------------------- */ | ||||
|   .inventory { | ||||
| 
 | ||||
|   } | ||||
|   /* ----------------------------------------- */ | ||||
|   /*  Item Controls                            */ | ||||
|  |  | |||
|  | @ -6,68 +6,4 @@ | |||
|       height: 300px; | ||||
|     } | ||||
|   } | ||||
|   .abilities { | ||||
|     .panel-content { | ||||
|       height: 230px; | ||||
|       overflow: auto; | ||||
|     } | ||||
|   } | ||||
|   .attribute-row { | ||||
|     padding: 2px; | ||||
|     .abilities { | ||||
|       margin: 2px; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   .inventory { | ||||
|     .item-entry { | ||||
|       padding: 0; | ||||
|       margin: 0; | ||||
|       list-style: none; | ||||
|       .item { | ||||
|         .item-image { | ||||
|           flex: 0 0 30px; | ||||
|           height: 30px; | ||||
|           background-size: cover; | ||||
|         } | ||||
|         .item-name { | ||||
|           line-height: 30px; | ||||
|           height: 30px; | ||||
|           overflow: hidden; | ||||
|           h4 { | ||||
|             text-indent: 4px; | ||||
|             margin: 0; | ||||
|             cursor: pointer; | ||||
|             &:hover { | ||||
|               color: whitesmoke; | ||||
|               background: linear-gradient( | ||||
|                 45deg, | ||||
|                 rgba(0, 0, 0, 0.5), | ||||
|                 transparent | ||||
|               ); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         .item-controls { | ||||
|           line-height: 30px; | ||||
|           flex: 0 0 32px; | ||||
|           margin: 0 3px; | ||||
|           .fas { | ||||
|             color: $colorTan; | ||||
|             font-size: 12px; | ||||
|             &:hover { | ||||
|               color: $colorDark; | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|       .item-summary { | ||||
|         font-size: 13px; | ||||
|         padding: 0 4px; | ||||
|       } | ||||
|       &:nth-child(odd) { | ||||
|         background: rgba(0, 0, 0, 0.1); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -43,7 +43,6 @@ | |||
|       "spellcaster": { | ||||
|         "spells": { | ||||
|           "enabled": false, | ||||
|           "dc": 0, | ||||
|           "1": { | ||||
|             "value": 0, | ||||
|             "max": 0 | ||||
|  |  | |||
|  | @ -113,8 +113,8 @@ | |||
|         </div> | ||||
|         <div class="flexrow"> | ||||
|             <ul class="attributes flexrow"> | ||||
|                 <li class="attribute attribute-secondaries"> | ||||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Melee'}}">{{localize 'OSE.MeleeShort'}}</h4> | ||||
|                 <li class="attribute attribute-secondaries attack" data-attack="Melee"> | ||||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Melee'}}"><a>{{localize 'OSE.MeleeShort'}}</a></h4> | ||||
|                     <div class="flexrow"> | ||||
|                         <div class="attribute-value"> | ||||
|                             {{subtract data.thac0.mod.melee (subtract mods.str data.thac0.value)}} | ||||
|  | @ -131,8 +131,8 @@ | |||
|                         </div> | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 <li class="attribute attribute-secondaries"> | ||||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Missile'}}">{{localize 'OSE.MissileShort'}}</h4> | ||||
|                 <li class="attribute attribute-secondaries attack" data-attack="Missile"> | ||||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Missile'}}"><a>{{localize 'OSE.MissileShort'}}</a></h4> | ||||
|                     <div class="flexrow"> | ||||
|                         <div class="attribute-value"> | ||||
|                             {{subtract data.thac0.mod.missile (subtract mods.dex data.thac0.value)}} | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ | |||
|       </div> | ||||
|     </li> | ||||
|     <ol class="item-list"> | ||||
|       {{#each weapons as |item|}} | ||||
|       {{#each owned.weapons as |item|}} | ||||
|       <li class="item-entry"> | ||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|           <div class="item-name flexrow"> | ||||
|  | @ -63,7 +63,7 @@ | |||
|       </div> | ||||
|     </li> | ||||
|     <ol class="item-list"> | ||||
|       {{#each armors as |item|}} | ||||
|       {{#each owned.armors as |item|}} | ||||
|       <li class="item-entry"> | ||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|           <div class="item-name flexrow"> | ||||
|  | @ -109,7 +109,7 @@ | |||
|       </div> | ||||
|     </li> | ||||
|     <ol class="item-list"> | ||||
|       {{#each inventory as |item|}} | ||||
|       {{#each owned.items as |item|}} | ||||
|       <li class="item-entry"> | ||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|           <div class="item-name flexrow"> | ||||
|  |  | |||
|  | @ -1,12 +1,4 @@ | |||
| <section class="inventory spells resizable" data-base-size="320"> | ||||
|   <div> | ||||
|     <li class="flexrow header-spells"> | ||||
|       <div class="item-name"></div> | ||||
|       <div class="field-short">{{localize 'OSE.SpellDC'}}</div> | ||||
|       <div class="field-short"><input type="text" value="{{data.spells.dc}}" name="data.spells.dc" data-dtype="Number" | ||||
|           placeholder="0"></div> | ||||
|     </li> | ||||
|   </div> | ||||
|   {{#each spells as |spellGroup id|}} | ||||
|   <ol class="item-list"> | ||||
|     <li class="item-titles flexrow"> | ||||
|  |  | |||
|  | @ -62,18 +62,18 @@ | |||
| </section> | ||||
| <section class="flexrow attribute-row"> | ||||
|     {{!-- Skills and abilities --}} | ||||
|     <div class="flex3 panel abilities"> | ||||
|         <div class="panel-title"> | ||||
|             <h4>{{localize 'OSE.panel.abilities'}}</h4> | ||||
|     <div class="flex3 panel inventory abilities"> | ||||
|         <div> | ||||
|             <li class="item-titles flexrow panel-title"> | ||||
|               <div class="item-name">{{localize 'OSE.panel.abilities'}} & {{localize 'OSE.panel.equipment'}}</div> | ||||
|               <div class="item-controls"> | ||||
|                 {{#if owner}} | ||||
|                 <a class="item-control item-create" title='{{localize "OSE.Add"}}' data-type="ability"><i | ||||
|                         class="fas fa-plus"></i></a> | ||||
|                 <a class="item-control item-create" title='{{localize "OSE.Add"}}' data-type="choice" | ||||
|                     data-choices="weapon,ability,armor,item"><i class="fas fa-plus"></i></a> | ||||
|                 {{/if}} | ||||
|               </div> | ||||
|         </div> | ||||
|         <ul class="panel-content inventory resizable" data-base-size="220"> | ||||
|             <div class=""> | ||||
|             </li> | ||||
|             <ol class="item-list resizable" data-base-size="240"> | ||||
|                 {{#each abilities as |item|}} | ||||
|                 <li class="item-entry"> | ||||
|                     <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|  | @ -85,32 +85,17 @@ | |||
|                         </div> | ||||
|                         <div class="item-controls"> | ||||
|                             {{#if ../owner}} | ||||
|                             <a class="item-control item-edit" title='{{localize "Ose.Edit"}}'><i | ||||
|                             <a class="item-control item-edit" title='{{localize "OSE.Edit"}}'><i | ||||
|                                     class="fas fa-edit"></i></a> | ||||
|                             <a class="item-control item-delete" title='{{localize "Ose.Delete"}}'><i | ||||
|                             <a class="item-control item-delete" title='{{localize "OSE.Delete"}}'><i | ||||
|                                     class="fas fa-trash"></i></a> | ||||
|                             {{/if}} | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 {{/each}} | ||||
|             </div> | ||||
|         </ul> | ||||
|     </div> | ||||
|     {{!-- Equipment --}} | ||||
|     <div class="flex3 panel abilities"> | ||||
|         <div class="panel-title"> | ||||
|             <h4>{{localize 'OSE.panel.equipment'}}</h4> | ||||
|             <div class="item-controls"> | ||||
|                 {{#if owner}} | ||||
|                 <a class="item-control item-create" title='{{localize "OSE.Add"}}' data-type="item"><i | ||||
|                         class="fas fa-plus"></i></a> | ||||
|                 {{/if}} | ||||
|             </div> | ||||
|         </div> | ||||
|         <ul class="panel-content inventory resizable" data-base-size="220"> | ||||
|             <div class=""> | ||||
|                 {{#each inventory as |item|}} | ||||
|                 {{#each owned as |section| }} | ||||
|                 {{#each section as |item|}} | ||||
|                 <li class="item-entry"> | ||||
|                     <div class="item flexrow" data-item-id="{{item._id}}"> | ||||
|                         <div class="item-name flexrow"> | ||||
|  | @ -120,18 +105,19 @@ | |||
|                             </h4> | ||||
|                         </div> | ||||
|                         <div class="item-controls"> | ||||
|                             {{#if ../owner}} | ||||
|                             <a class="item-control item-edit" title='{{localize "Ose.Edit"}}'><i | ||||
|                             {{#if ../../owner}} | ||||
|                             <a class="item-control item-edit" title='{{localize "OSE.Edit"}}'><i | ||||
|                                     class="fas fa-edit"></i></a> | ||||
|                             <a class="item-control item-delete" title='{{localize "Ose.Delete"}}'><i | ||||
|                             <a class="item-control item-delete" title='{{localize "OSE.Delete"}}'><i | ||||
|                                     class="fas fa-trash"></i></a> | ||||
|                             {{/if}} | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </li> | ||||
|                 {{/each}} | ||||
|                 {{/each}} | ||||
|             </ol> | ||||
|         </div> | ||||
|         </ul> | ||||
|     </div> | ||||
|     {{!-- Saving throws --}} | ||||
|     <div class="attribute-group"> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue