ENH: Monster sheet improv
							parent
							
								
									5afadf6039
								
							
						
					
					
						commit
						d9ec802338
					
				|  | @ -22,6 +22,7 @@ | ||||||
|     "OSE.Morale": "Morale", |     "OSE.Morale": "Morale", | ||||||
|     "OSE.Retainer": "Retainer", |     "OSE.Retainer": "Retainer", | ||||||
|     "OSE.Appearing": "NA", |     "OSE.Appearing": "NA", | ||||||
|  |     "OSE.Attack": "Attack", | ||||||
| 
 | 
 | ||||||
|     "OSE.Loyalty": "Loyalty Rating", |     "OSE.Loyalty": "Loyalty Rating", | ||||||
|     "OSE.LoyaltyShort": "LR", |     "OSE.LoyaltyShort": "LR", | ||||||
|  |  | ||||||
|  | @ -26,7 +26,7 @@ export class OseActorSheet extends ActorSheet { | ||||||
|    */ |    */ | ||||||
|   _prepareItems(data) { |   _prepareItems(data) { | ||||||
|     // Partition items by category
 |     // Partition items by category
 | ||||||
|     let [inventory, weapons, armors, abilities, spells] = data.items.reduce( |     let [items, weapons, armors, abilities, spells] = data.items.reduce( | ||||||
|       (arr, item) => { |       (arr, item) => { | ||||||
|         // Classify items into types
 |         // Classify items into types
 | ||||||
|         if (item.type === "item") arr[0].push(item); |         if (item.type === "item") arr[0].push(item); | ||||||
|  | @ -42,19 +42,44 @@ export class OseActorSheet extends ActorSheet { | ||||||
|     // Sort spells by level
 |     // Sort spells by level
 | ||||||
|     var sortedSpells = {}; |     var sortedSpells = {}; | ||||||
|     for (var i = 0; i < spells.length; i++) { |     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] = []; |       if (!sortedSpells[lvl]) sortedSpells[lvl] = []; | ||||||
|       sortedSpells[lvl].push(spells[i]); |       sortedSpells[lvl].push(spells[i]); | ||||||
|     } |     } | ||||||
|     // Assign and return
 |     // Assign and return
 | ||||||
|     data.inventory = inventory; |     data.owned = { | ||||||
|     data.weapons = weapons; |       items: items, | ||||||
|     data.armors = armors; |       weapons: weapons, | ||||||
|     data.spells = sortedSpells; |       armors: armors, | ||||||
|  |     }; | ||||||
|     data.abilities = abilities; |     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) { |   activateListeners(html) { | ||||||
|  |     // Item summaries
 | ||||||
|  |     html | ||||||
|  |       .find(".item .item-name h4") | ||||||
|  |       .click((event) => this._onItemSummary(event)); | ||||||
|  | 
 | ||||||
|     html.find(".saving-throw .attribute-name a").click((ev) => { |     html.find(".saving-throw .attribute-name a").click((ev) => { | ||||||
|       let actorObject = this.actor; |       let actorObject = this.actor; | ||||||
|       let element = event.currentTarget; |       let element = event.currentTarget; | ||||||
|  | @ -91,7 +116,6 @@ export class OseActorSheet extends ActorSheet { | ||||||
|       item.roll(); |       item.roll(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     super.activateListeners(html); |     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) { |   async _onQtChange(event) { | ||||||
|     event.preventDefault(); |     event.preventDefault(); | ||||||
|     const itemId = event.currentTarget.closest(".item").dataset.itemId; |     const itemId = event.currentTarget.closest(".item").dataset.itemId; | ||||||
|  | @ -133,11 +116,6 @@ export class OseActorSheetCharacter extends OseActorSheet { | ||||||
|       .click((ev) => ev.target.select()) |       .click((ev) => ev.target.select()) | ||||||
|       .change(this._onQtChange.bind(this)); |       .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) => { |     html.find(".ability-score .attribute-name a").click((ev) => { | ||||||
|       let actorObject = this.actor; |       let actorObject = this.actor; | ||||||
|       let element = event.currentTarget; |       let element = event.currentTarget; | ||||||
|  | @ -145,6 +123,13 @@ export class OseActorSheetCharacter extends OseActorSheet { | ||||||
|       actorObject.rollCheck(score, { event: event }); |       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
 |     // Handle default listeners last so system listeners are triggered first
 | ||||||
|     super.activateListeners(html); |     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() { |   computeModifiers() { | ||||||
|     let _valueToMod = (val) => { |     let _valueToMod = (val) => { | ||||||
|       switch (val) { |       switch (val) { | ||||||
|  |  | ||||||
|  | @ -45,25 +45,42 @@ export class OseActorSheetMonster extends OseActorSheet { | ||||||
|     return data; |     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 |    * Activate event listeners using the prepared sheet HTML | ||||||
|    * @param html {HTML}   The prepared HTML object ready to be rendered into the DOM |    * @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(); |       event.preventDefault(); | ||||||
|       const header = event.currentTarget; |       const header = event.currentTarget; | ||||||
|       const type = header.dataset.type; |       const type = header.dataset.type; | ||||||
|       const itemData = { |  | ||||||
|         name: `New ${type.capitalize()}`, |  | ||||||
|         type: type, |  | ||||||
|         data: duplicate(header.dataset), |  | ||||||
|       }; |  | ||||||
|       delete itemData.data["type"]; |  | ||||||
|       return this.actor.createOwnedItem(itemData); |  | ||||||
|     }); |  | ||||||
| 
 | 
 | ||||||
|     html.find(".item-name").click((event) => { |       // item creation helper func
 | ||||||
|       this._onItemSummary(event); |       let createItem = function ( | ||||||
|  |         type, | ||||||
|  |         name = `New ${type.capitalize()}`, | ||||||
|  |       ) { | ||||||
|  |         const itemData = { | ||||||
|  |           name: name ? name : `New ${type.capitalize()}`, | ||||||
|  |           type: type, | ||||||
|  |           data: duplicate(header.dataset), | ||||||
|  |         }; | ||||||
|  |         delete itemData.data['type']; | ||||||
|  |         return itemData; | ||||||
|  |       }; | ||||||
|  |        | ||||||
|  |       // 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
 |     // Handle default listeners last so system listeners are triggered first
 | ||||||
|  |  | ||||||
|  | @ -55,7 +55,6 @@ export class OseItem extends Item { | ||||||
|       item: this.data, |       item: this.data, | ||||||
|       data: this.getChatData(), |       data: this.getChatData(), | ||||||
|       labels: this.labels, |       labels: this.labels, | ||||||
|       hasAttack: this.hasAttack, |  | ||||||
|       isHealing: this.isHealing, |       isHealing: this.isHealing, | ||||||
|       hasDamage: this.hasDamage, |       hasDamage: this.hasDamage, | ||||||
|       isSpell: this.data.type === "spell", |       isSpell: this.data.type === "spell", | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ | ||||||
|       padding: 0; |       padding: 0; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
|   /* Header Summary Details */ |   /* Header Summary Details */ | ||||||
|   .header-details { |   .header-details { | ||||||
|     h1 { |     h1 { | ||||||
|  | @ -84,7 +84,7 @@ | ||||||
|       padding: 2px 10px 0; |       padding: 2px 10px 0; | ||||||
|       margin-left: -5px; |       margin-left: -5px; | ||||||
|       text-indent: 4px; |       text-indent: 4px; | ||||||
|       background: url('/ui/parchment.jpg'); |       background: url("/ui/parchment.jpg"); | ||||||
|       border-top-right-radius: 4px; |       border-top-right-radius: 4px; | ||||||
|       border-top-left-radius: 80px; |       border-top-left-radius: 80px; | ||||||
|       box-shadow: 0 0 6px 1px $colorDark; |       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 { |     .editor { | ||||||
|       height: 300px; |       height: 300px; | ||||||
|       padding: 4px; |       padding: 4px; | ||||||
|  |  | ||||||
|  | @ -64,135 +64,6 @@ | ||||||
|           background-position: bottom; |           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                            */ |   /*  Item Controls                            */ | ||||||
|  |  | ||||||
|  | @ -6,68 +6,4 @@ | ||||||
|       height: 300px; |       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": { |       "spellcaster": { | ||||||
|         "spells": { |         "spells": { | ||||||
|           "enabled": false, |           "enabled": false, | ||||||
|           "dc": 0, |  | ||||||
|           "1": { |           "1": { | ||||||
|             "value": 0, |             "value": 0, | ||||||
|             "max": 0 |             "max": 0 | ||||||
|  |  | ||||||
|  | @ -113,8 +113,8 @@ | ||||||
|         </div> |         </div> | ||||||
|         <div class="flexrow"> |         <div class="flexrow"> | ||||||
|             <ul class="attributes flexrow"> |             <ul class="attributes flexrow"> | ||||||
|                 <li class="attribute attribute-secondaries"> |                 <li class="attribute attribute-secondaries attack" data-attack="Melee"> | ||||||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Melee'}}">{{localize 'OSE.MeleeShort'}}</h4> |                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Melee'}}"><a>{{localize 'OSE.MeleeShort'}}</a></h4> | ||||||
|                     <div class="flexrow"> |                     <div class="flexrow"> | ||||||
|                         <div class="attribute-value"> |                         <div class="attribute-value"> | ||||||
|                             {{subtract data.thac0.mod.melee (subtract mods.str data.thac0.value)}} |                             {{subtract data.thac0.mod.melee (subtract mods.str data.thac0.value)}} | ||||||
|  | @ -131,8 +131,8 @@ | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|                 </li> |                 </li> | ||||||
|                 <li class="attribute attribute-secondaries"> |                 <li class="attribute attribute-secondaries attack" data-attack="Missile"> | ||||||
|                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Missile'}}">{{localize 'OSE.MissileShort'}}</h4> |                     <h4 class="attribute-name box-title" title="{{localize 'OSE.Missile'}}"><a>{{localize 'OSE.MissileShort'}}</a></h4> | ||||||
|                     <div class="flexrow"> |                     <div class="flexrow"> | ||||||
|                         <div class="attribute-value"> |                         <div class="attribute-value"> | ||||||
|                             {{subtract data.thac0.mod.missile (subtract mods.dex data.thac0.value)}} |                             {{subtract data.thac0.mod.missile (subtract mods.dex data.thac0.value)}} | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ | ||||||
|       </div> |       </div> | ||||||
|     </li> |     </li> | ||||||
|     <ol class="item-list"> |     <ol class="item-list"> | ||||||
|       {{#each weapons as |item|}} |       {{#each owned.weapons as |item|}} | ||||||
|       <li class="item-entry"> |       <li class="item-entry"> | ||||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> |         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||||
|           <div class="item-name flexrow"> |           <div class="item-name flexrow"> | ||||||
|  | @ -63,7 +63,7 @@ | ||||||
|       </div> |       </div> | ||||||
|     </li> |     </li> | ||||||
|     <ol class="item-list"> |     <ol class="item-list"> | ||||||
|       {{#each armors as |item|}} |       {{#each owned.armors as |item|}} | ||||||
|       <li class="item-entry"> |       <li class="item-entry"> | ||||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> |         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||||
|           <div class="item-name flexrow"> |           <div class="item-name flexrow"> | ||||||
|  | @ -109,7 +109,7 @@ | ||||||
|       </div> |       </div> | ||||||
|     </li> |     </li> | ||||||
|     <ol class="item-list"> |     <ol class="item-list"> | ||||||
|       {{#each inventory as |item|}} |       {{#each owned.items as |item|}} | ||||||
|       <li class="item-entry"> |       <li class="item-entry"> | ||||||
|         <div class="item flexrow" data-item-id="{{item._id}}"> |         <div class="item flexrow" data-item-id="{{item._id}}"> | ||||||
|           <div class="item-name flexrow"> |           <div class="item-name flexrow"> | ||||||
|  |  | ||||||
|  | @ -1,12 +1,4 @@ | ||||||
| <section class="inventory spells resizable" data-base-size="320"> | <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|}} |   {{#each spells as |spellGroup id|}} | ||||||
|   <ol class="item-list"> |   <ol class="item-list"> | ||||||
|     <li class="item-titles flexrow"> |     <li class="item-titles flexrow"> | ||||||
|  |  | ||||||
|  | @ -62,18 +62,18 @@ | ||||||
| </section> | </section> | ||||||
| <section class="flexrow attribute-row"> | <section class="flexrow attribute-row"> | ||||||
|     {{!-- Skills and abilities --}} |     {{!-- Skills and abilities --}} | ||||||
|     <div class="flex3 panel abilities"> |     <div class="flex3 panel inventory abilities"> | ||||||
|         <div class="panel-title"> |         <div> | ||||||
|             <h4>{{localize 'OSE.panel.abilities'}}</h4> |             <li class="item-titles flexrow panel-title"> | ||||||
|             <div class="item-controls"> |               <div class="item-name">{{localize 'OSE.panel.abilities'}} & {{localize 'OSE.panel.equipment'}}</div> | ||||||
|  |               <div class="item-controls"> | ||||||
|                 {{#if owner}} |                 {{#if owner}} | ||||||
|                 <a class="item-control item-create" title='{{localize "OSE.Add"}}' data-type="ability"><i |                 <a class="item-control item-create" title='{{localize "OSE.Add"}}' data-type="choice" | ||||||
|                         class="fas fa-plus"></i></a> |                     data-choices="weapon,ability,armor,item"><i class="fas fa-plus"></i></a> | ||||||
|                 {{/if}} |                 {{/if}} | ||||||
|             </div> |               </div> | ||||||
|         </div> |             </li> | ||||||
|         <ul class="panel-content inventory resizable" data-base-size="220"> |             <ol class="item-list resizable" data-base-size="240"> | ||||||
|             <div class=""> |  | ||||||
|                 {{#each abilities as |item|}} |                 {{#each abilities as |item|}} | ||||||
|                 <li class="item-entry"> |                 <li class="item-entry"> | ||||||
|                     <div class="item flexrow" data-item-id="{{item._id}}"> |                     <div class="item flexrow" data-item-id="{{item._id}}"> | ||||||
|  | @ -85,32 +85,17 @@ | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="item-controls"> |                         <div class="item-controls"> | ||||||
|                             {{#if ../owner}} |                             {{#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> |                                     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> |                                     class="fas fa-trash"></i></a> | ||||||
|                             {{/if}} |                             {{/if}} | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|                 </li> |                 </li> | ||||||
|                 {{/each}} |                 {{/each}} | ||||||
|             </div> |                 {{#each owned as |section| }} | ||||||
|         </ul> |                 {{#each section as |item|}} | ||||||
|     </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|}} |  | ||||||
|                 <li class="item-entry"> |                 <li class="item-entry"> | ||||||
|                     <div class="item flexrow" data-item-id="{{item._id}}"> |                     <div class="item flexrow" data-item-id="{{item._id}}"> | ||||||
|                         <div class="item-name flexrow"> |                         <div class="item-name flexrow"> | ||||||
|  | @ -120,18 +105,19 @@ | ||||||
|                             </h4> |                             </h4> | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="item-controls"> |                         <div class="item-controls"> | ||||||
|                             {{#if ../owner}} |                             {{#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> |                                     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> |                                     class="fas fa-trash"></i></a> | ||||||
|                             {{/if}} |                             {{/if}} | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|                 </li> |                 </li> | ||||||
|                 {{/each}} |                 {{/each}} | ||||||
|             </div> |                 {{/each}} | ||||||
|         </ul> |             </ol> | ||||||
|  |         </div> | ||||||
|     </div> |     </div> | ||||||
|     {{!-- Saving throws --}} |     {{!-- Saving throws --}} | ||||||
|     <div class="attribute-group"> |     <div class="attribute-group"> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue