update ActorSheet to ActorSheetV2 and do a general cleanup pass

move editable-input partial into its own file so it doesn't have to be copy-pasted everywhere
change css to use nesting
This commit is contained in:
Sven Balzer 2024-11-05 13:07:17 +01:00
parent 2f9410180c
commit 6aa65be7a0
8 changed files with 721 additions and 803 deletions

View File

@ -1,52 +1,18 @@
{{#*inline "editable-input"}}
<div class="editable-input editable-{{type}}">
{{#if @root.editable}}
<input type="{{type}}" name="{{name}}" value="{{value}}" placeholder="{{placeholder}}">
{{else}}
<div>
{{value}}
{{#unless value}}{{placeholder}}{{/unless}}
</div>
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>
{{/inline}}
{{#*inline "editable-checkbox"}}
<div class="editable-input editable-checkbox">
{{#if @root.editable}}
<input type="checkbox" name="{{name}}" {{checked value}}>
{{else}}
<div>
{{value}}
{{#unless value}}{{placeholder}}{{/unless}}
</div>
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>
{{/inline}}
{{#*inline "die-type"}} {{#*inline "die-type"}}
<div class="center die die-{{type}}">{{localize (concat "DSA41.attributes.short." type)}}</div> <div class="center die die-{{type}}">{{localize (concat "DSA41.attributes.short." type)}}</div>
{{/inline}} {{/inline}}
{{#*inline "die-value"}} {{#*inline "die-value"}}
<div class="col noflex"> <div class="col noflex center">
{{#if header}}<div class="center">{{header}}</div>{{/if}} {{#if header}}<div class="center">{{header}}</div>{{/if}}
<div class="die die-{{type}} roll" data-roll-type="{{type}}" {{#if value}}data-success-value="{{value}}"{{/if}} {{#if data-roll}}data-roll="{{data-roll}}"{{/if}} {{#if data-tooltip}}data-tooltip="{{data-tooltip}}"{{/if}}> <div class="die die-{{type}}" data-action="roll" data-roll-type="{{type}}" {{#if success-value}}data-success-value="{{success-value}}"{{/if}} {{#if data-roll}}data-roll="{{data-roll}}"{{/if}} {{#if data-tooltip}}data-tooltip='{{> (lookup . "data-tooltip")}}'{{/if}}>
<div><svg viewbox="0 0 64 64"><use href="/systems/dsa-4th-edition/src/Assets/d20.svg#d20"></use></svg></div> <div><svg viewbox="0 0 64 64"><use href="/systems/dsa-4th-edition/src/Assets/d20.svg#d20"></use></svg></div>
<div>{{{value}}}</div> <div>{{{value}}}</div>
</div> </div>
</div> </div>
{{/inline}} {{/inline}}
<form class="actor-sheet {{ cssClass }}" autocomplete="off"> <div class="actor-sheet ActorSheet">
<div class="row"> <div class="row">
{{>editable-input type="text" name="name" value=actor.name placeholder=(localize "DSA41.name")}} {{>editable-input type="text" name="name" value=actor.name placeholder=(localize "DSA41.name")}}
{{>editable-input type="text" name="system.race" value=actor.system.race placeholder=(localize "DSA41.race")}} {{>editable-input type="text" name="system.race" value=actor.system.race placeholder=(localize "DSA41.race")}}
@ -57,284 +23,262 @@
<div class="row"> <div class="row">
<img class="character-image" src="{{ actor.img }}" title="{{ actor.name }}" {{#if editable}}data-edit="img"{{/if}}> <img class="character-image" src="{{ actor.img }}" title="{{ actor.name }}" {{#if editable}}data-edit="img"{{/if}}>
{{#each actor.system.attributes}} {{#each actor.system.attributes}}
{{>die-value type=@key header=(localize (concat "DSA41.attributes.short." @key)) value=(lookup @root.actor.system.computed.attributes @key)data-roll="1d20" data-tooltip=(lookup @root.tooltips.attributes @key)}} {{>die-value type=@key header=(localize (concat "DSA41.attributes.short." @key)) value=(lookup @root.actor.system.computed.attributes @key) success-value=(lookup @root.actor.system.computed.attributes @key) data-roll="1d20" data-tooltip="attribute_tooltip"}}
{{/each}} {{/each}}
</div> </div>
<nav class="tabs" data-group="primary"> <nav class="tabs">
<div class="row noflex"> <div class="row noflex {{#if (eq tabGroups.primary 'tab1')}}active{{/if}}" data-group="primary" data-tab="tab1">
<a data-tab="tab1">{{localize "DSA41.character.eigenschaften"}}</a> <a data-group="primary" data-tab="tab1" data-action="tab">{{localize "DSA41.character.eigenschaften"}}</a>
</div> </div>
<div class="row noflex"> <div class="row noflex {{#if (eq tabGroups.primary 'tab2')}}active{{/if}}" data-group="primary" data-tab="tab2">
<a data-tab="tab2">{{localize "DSA41.character.talente"}}</a> <a data-group="primary" data-tab="tab2" data-action="tab">{{localize "DSA41.character.talente"}}</a>
</div> </div>
<div class="row noflex"> <div class="row noflex {{#if (eq tabGroups.primary 'tab3')}}active{{/if}}" data-group="primary" data-tab="tab3">
<a data-tab="tab3">{{localize "DSA41.character.inventar"}}</a> <a data-group="primary" data-tab="tab3" data-action="tab">{{localize "DSA41.character.inventar"}}</a>
</div> </div>
<div class="row noflex"> <div class="row noflex {{#if (eq tabGroups.primary 'tab4')}}active{{/if}}" data-group="primary" data-tab="tab4">
<a data-tab="tab4">{{localize "DSA41.character.kampf"}}</a> <a data-group="primary" data-tab="tab4" data-action="tab">{{localize "DSA41.character.kampf"}}</a>
</div> </div>
</nav> </nav>
<section class="content"> <div class="tab {{#if (eq tabGroups.primary 'tab1')}}active{{/if}}" data-group="primary" data-tab="tab1">
<div class="tab" data-group="primary" data-tab="tab1"> <fieldset>
<div class="row"> <legend>{{localize "DSA41.attributes.label"}}</legend>
<fieldset> <div class="Eigenschaften">
<legend>{{localize "DSA41.attributes.label"}}</legend> <span></span>
<table> {{#each actor.system.attributes}}
<tr> <span class="center">{{localize (concat "DSA41.attributes.short." @key)}}</span>
<th></th> {{/each}}
{{#each actor.system.attributes}}
<th>{{localize (concat "DSA41.attributes.short." @key)}}</th> <span>{{localize "DSA41.attributes.initial"}}</span>
{{/each}} {{#each actor.system.attributes}}
</tr> {{>editable-input type="number" name=(concat "system.attributes." @key ".initial") value=(lookup this "initial")}}
<tr> {{/each}}
<td>{{localize "DSA41.attributes.initial"}}</td>
{{#each actor.system.attributes}} <span>{{localize "DSA41.attributes.advancement"}}</span>
<td>{{>editable-input type="number" name=(concat "system.attributes." @key ".initial") value=(lookup this "initial")}}</td> {{#each actor.system.attributes}}
{{/each}} {{>editable-input type="number" name=(concat "system.attributes." @key ".advancement") value=(lookup this "advancement")}}
</tr> {{/each}}
<tr>
<td>{{localize "DSA41.attributes.advancement"}}</td> <span>{{localize "DSA41.attributes.modifier"}}</span>
{{#each actor.system.attributes}} {{#each actor.system.attributes}}
<td>{{>editable-input type="number" name=(concat "system.attributes." @key ".advancement") value=(lookup this "advancement")}}</td> <span>{{>editable-input type="number" name=(concat "system.attributes." @key ".modifier") value=(lookup this "modifier")}}</span>
{{/each}} {{/each}}
</tr>
<tr>
<td>{{localize "DSA41.attributes.modifier"}}</td>
{{#each actor.system.attributes}}
<td>{{>editable-input type="number" name=(concat "system.attributes." @key ".modifier") value=(lookup this "modifier")}}</td>
{{/each}}
</tr>
</table>
</fieldset>
</div> </div>
<table> </fieldset>
<tr> <div class="Basiswerte">
<td>Lebenspunkte</td> <span>Lebenspunkte</span>
<td>{{actor.system.computed.max_lebenspunkte}}</td> <span>{{actor.system.computed.max_lebenspunkte}}</span>
<td>Ausdauer</td> <span>Ausdauer</span>
<td>{{actor.system.computed.max_ausdauer}}</td> <span>{{actor.system.computed.max_ausdauer}}</span>
</tr>
<tr> <span>Astralenergie</span>
<td>Astralenergie</td> <span>{{actor.system.computed.max_atralenergie}}</span>
<td>{{actor.system.computed.max_atralenergie}}</td> <span>Magieresistenz</span>
<td>Magieresistenz</td> <span>{{actor.system.computed.magieresistenz}}</span>
<td>{{actor.system.computed.magieresistenz}}</td>
</tr> <span>INI-Basiswert</span>
<tr> <span>{{actor.system.computed.ini_basiswert}}</span>
<td>INI-Basiswert</td> <span>AT-Basiswert</span>
<td>{{actor.system.computed.ini_basiswert}}</td> <span>{{actor.system.computed.at_basiswert}}</span>
<td>AT-Basiswert</td>
<td>{{actor.system.computed.at_basiswert}}</td> <span>PA-Basiswert</span>
</tr> <span>{{actor.system.computed.pa_basiswert}}</span>
<tr> <span>FK-Basiswert</span>
<td>PA-Basiswert</td> <span>{{actor.system.computed.fk_basiswert}}</span>
<td>{{actor.system.computed.pa_basiswert}}</td>
<td>FK-Basiswert</td>
<td>{{actor.system.computed.fk_basiswert}}</td>
</tr>
</table>
</div> </div>
</div>
<div class="tab" data-group="primary" data-tab="tab2"> <div class="tab {{#if (eq tabGroups.primary 'tab2')}}active{{/if}}" data-group="primary" data-tab="tab2">
<div class="row"> <fieldset>
<fieldset> <legend>{{localize "DSA41.talente.kampf.label"}}</legend>
<legend>{{localize "DSA41.talente.kampf.label"}}</legend> <div class="Kampftalente">
<table> <span class="center">{{localize "DSA41.talente.label"}}</span>
<tr> <span class="center">{{localize "DSA41.talente.label_talentwert"}}</span>
<th>{{localize "DSA41.talente.label"}}</th> <span class="center">{{localize "DSA41.talente.kampf.label_attacke"}}</span>
<th>{{localize "DSA41.talente.label_talentwert"}}</th> <span class="center">{{localize "DSA41.talente.kampf.label_parade"}}</span>
<th>{{localize "DSA41.talente.kampf.label_attacke"}}</th> <span class="center">{{localize "DSA41.talente.kampf.label_attacke_total"}}</span>
<th>{{localize "DSA41.talente.kampf.label_parade"}}</th> <span class="center">{{localize "DSA41.talente.kampf.label_parade_total"}}</span>
<th>{{localize "DSA41.talente.kampf.label_attacke_total"}}</th>
<th>{{localize "DSA41.talente.kampf.label_parade_total"}}</th> {{#each actor.system.kampf_talente}}
</tr> <span>{{localize (concat "DSA41.talente.kampf.name." @key)}}</span>
{{#each actor.system.kampf_talente}} <span>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".talentwert") value=(lookup this "talentwert")}}</span>
<tr> <span>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".attacke") value=(lookup this "attacke")}}</span>
<td>{{localize (concat "DSA41.talente.kampf.name." @key)}}</td> <span>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".parade") value=(lookup this "parade")}}</span>
<td>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".talentwert") value=(lookup this "talentwert")}}</td> <span class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "attacke"}}</span>
<td>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".attacke") value=(lookup this "attacke")}}</td> <span class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "parade"}}</span>
<td>{{>editable-input type="number" name=(concat "system.kampf_talente." @key ".parade") value=(lookup this "parade")}}</td> {{/each}}
<td class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "attacke"}}</td>
<td class="center">{{lookup (lookup @root.actor.system.computed.kampf.talente @key) "parade"}}</td>
</tr>
{{/each}}
</table>
</fieldset>
</div> </div>
</fieldset>
{{#each actor.system.talente}} {{#each actor.system.talente}}
<div class="row"> <fieldset>
<fieldset> <legend>{{localize (concat "DSA41.talente." @key ".label")}}</legend>
<legend>{{localize (concat "DSA41.talente." @key ".label")}}</legend> <div class="Talente">
<table> <span class="center">{{localize "DSA41.talente.label"}}</span>
<tr> <span class="center">{{localize "DSA41.talente.label_eigenschaften"}}</span>
<th>{{localize "DSA41.talente.label"}}</th> <span class="center">{{localize "DSA41.talente.label_talentwert"}}</span>
<th>{{localize "DSA41.talente.label_eigenschaften"}}</th>
<th>{{localize "DSA41.talente.label_talentwert"}}</th> {{#each @this}}
</tr> <span>{{localize (concat "DSA41.talente." @../key ".name." @key)}}</span>
{{#each @this}} <span></span>
<tr> <span>{{>editable-input type="number" name=(concat "system.talente." @../key "." @key) value=@this}}</span>
<td>{{localize (concat "DSA41.talente." @../key ".name." @key)}}</td> {{/each}}
<td></td> </div>
<td>{{>editable-input type="number" name=(concat "system.talente." @../key "." @key) value=@this}}</td> </fieldset>
</tr> {{/each}}
{{/each}} </div>
</table>
</fieldset> <div class="tab {{#if (eq tabGroups.primary 'tab3')}}active{{/if}}" data-group="primary" data-tab="tab3">
<div class="list Bewaffnung subgrid-columns">
<div class="list-header">
<div>{{localize "DSA41.inventar.bewaffnung"}}</div>
<div></div>
<div class="center">{{localize "DSA41.weight"}}</div>
<div></div>
</div>
{{#each actor.itemTypes.Bewaffnung}}
<div class="list-item" data-item-id="{{this._id}}">
<div class="item-name row" data-action="item-open">
<img class="item-image" src="{{this.img}}" title="{{this.name}}">
<div class="col">
<span>{{this.name}}</span>
<span class="small">
{{#if this.system.nahkampfwaffe.aktiv}} Nahkampfwaffe {{/if}}
{{#if this.system.parierwaffe.aktiv}} Parierwaffe {{/if}}
{{#if this.system.schild.aktiv}} Schild {{/if}}
{{#if this.system.fernkampfwaffe.aktiv}} Fernkampfwaffe {{/if}}
</span>
</div>
</div>
<div></div>
<div class="center">{{this.system.gewicht}}</div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div> </div>
{{/each}} {{/each}}
</div> </div>
<div class="tab" data-group="primary" data-tab="tab3"> <div class="list Ruestung subgrid-columns">
<div class="col inventar"> <div class="list-header">
<div class="col list"> <div class="row">{{localize "DSA41.inventar.ruestungen"}}</div>
<div class="row list-header"> <div></div>
<div class="row">{{localize "DSA41.inventar.bewaffnung"}}</div> <div class="center">{{localize "DSA41.weight"}}</div>
<div>{{localize "DSA41.weight"}}</div>
</div>
{{#each actor.itemTypes.Bewaffnung}}
<div class="row list-item" data-item-id="{{this._id}}">
<div class="row item-name item-open">
<img class="item-image" src="{{this.img}}" title="{{this.name}}">
<div class="col">
<span>{{this.name}}</span>
<span class="item-sub">
{{#if this.system.nahkampfwaffe.aktiv}} Nahkampfwaffe {{/if}}
{{#if this.system.parierwaffe.aktiv}} Parierwaffe {{/if}}
{{#if this.system.schild.aktiv}} Schild {{/if}}
{{#if this.system.fernkampfwaffe.aktiv}} Fernkampfwaffe {{/if}}
</span>
</div>
</div>
<div class="row"></div>
<div class="center">{{this.system.gewicht}}</div>
<div class="center fas fa-trash item-delete"></div>
</div>
{{/each}}
</div>
<div class="col list">
<div class="row list-header">
<div class="row">{{localize "DSA41.inventar.ruestungen"}}</div>
<div>{{localize "DSA41.weight"}}</div>
</div>
{{#each actor.itemTypes.Ruestung}}
<div class="row list-item" data-item-id="{{this._id}}">
<div class="row item-name item-open">
<img class="item-image" src="{{this.img}}" title="{{this.name}}">
<span class="center">{{this.name}}</span>
</div>
<div class="row"></div>
<div class="center fas fa-trash item-delete"></div>
</div>
{{/each}}
</div>
<div class="col list">
<div class="row list-header">
<div class="row">{{localize "DSA41.inventar.gegenstaende"}}</div>
<div>{{localize "DSA41.weight"}}</div>
</div>
{{#each actor.itemTypes.Gegenstand}}
<div class="row list-item" data-item-id="{{this._id}}">
<div class="row item-name item-open">
<img class="item-image" src="{{this.img}}" title="{{this.name}}">
<span class="center">{{this.name}}</span>
</div>
<div class="row"></div>
<div class="center">{{this.system.gewicht}}</div>
<div class="center fas fa-trash item-delete"></div>
</div>
{{/each}}
</div>
</div> </div>
{{#each actor.itemTypes.Ruestung}}
<div class="list-item" data-item-id="{{this._id}}">
<div class="item-name row" data-action="item-open">
<img class="item-image" src="{{this.img}}" title="{{this.name}}">
<span class="center">{{this.name}}</span>
</div>
<div></div>
<div class="center">{{this.system.gewicht}}</div>
<div class="center fas fa-trash" data-action="item-delete"></div>
</div>
{{/each}}
</div> </div>
<div class="tab" data-group="primary" data-tab="tab4"> <div class="list Gegenstand subgrid-columns">
<div class="col kampf"> <div class="list-header">
<div class="col list"> <div>{{localize "DSA41.inventar.gegenstaende"}}</div>
<div class="row list-header"> <div></div>
<div class="row">{{localize "DSA41.kampf.bewaffnung"}}</div> <div class="center">{{localize "DSA41.weight"}}</div>
<div>{{localize "DSA41.kampf.attacke"}}</div> </div>
<div>{{localize "DSA41.kampf.parade"}}</div> {{#each actor.itemTypes.Gegenstand}}
<div>{{localize "DSA41.kampf.trefferpunkte"}}</div> <div class="list-item" data-item-id="{{this._id}}">
<div class="item-name row" data-action="item-open">
<img class="item-image" src="{{this.img}}" title="{{this.name}}">
<span class="center">{{this.name}}</span>
</div> </div>
{{#each actor.system.computed.kampf.waffen}} <div></div>
<div class="row list-item" data-item-id="{{item._id}}"> <div class="center">{{this.system.gewicht}}</div>
<div class="row item-name item-open"> <div class="center fas fa-trash" data-action="item-delete"></div>
<img class="item-image" src="{{item.img}}" title="{{item.name}}">
<div class="col">
<span>{{item.name}}</span>
</div>
</div>
<div class="row"></div>
<div class="center">{{>die-value type="attacke" data-roll="1d20" value=attacke data-tooltip=(lookup @root.tooltips.kampf.attacke item._id)}}</div>
<div class="center">{{>die-value type="parade" data-roll="1d20" value=parade data-tooltip=(lookup @root.tooltips.kampf.parade item._id)}}</div>
<div class="center">{{>die-value type="trefferpunkte" data-roll=trefferpunkte value=trefferpunkte_display data-tooltip=(lookup @root.tooltips.kampf.trefferpunkte item._id)}}</div>
</div>
{{/each}}
</div> </div>
{{/each}}
</div>
</div>
<div class="ruestungen list"> <div class="tab Kampf {{#if (eq tabGroups.primary 'tab4')}}active{{/if}}" data-group="primary" data-tab="tab4">
<div> <div class="list Bewaffnung">
<div class="rowspan2">{{localize "DSA41.kampf.ruestungen"}}</div> <div class="list-header ">
<div class="rowspan2">{{localize "DSA41.ruestungen.kopf"}}</div> <div>{{localize "DSA41.kampf.bewaffnung"}}</div>
<div class="rowspan2">{{localize "DSA41.ruestungen.brust"}}</div> <div class="center">{{localize "DSA41.kampf.attacke"}}</div>
<div class="rowspan2">{{localize "DSA41.ruestungen.ruecken"}}</div> <div class="center">{{localize "DSA41.kampf.parade"}}</div>
<div class="rowspan2">{{localize "DSA41.ruestungen.bauch"}}</div> <div class="center">{{localize "DSA41.kampf.trefferpunkte"}}</div>
<div class="colspan2 rowspan2 subgrid"> </div>
<div class="colspan2">{{localize "DSA41.ruestungen.arm"}}</div>
<div>{{localize "DSA41.ruestungen.links"}}</div> {{#each actor.system.computed.kampf.waffen}}
<div>{{localize "DSA41.ruestungen.rechts"}}</div> <div class="list-item" data-item-id="{{item._id}}">
</div> <div class="item-name row" data-action="item-open">
<div class="colspan2 rowspan2 subgrid"> <img class="item-image" src="{{item.img}}" title="{{item.name}}">
<div class="colspan2">{{localize "DSA41.ruestungen.bein"}}</div> <div class="col">
<div>{{localize "DSA41.ruestungen.links"}}</div> <span>{{item.name}}</span>
<div>{{localize "DSA41.ruestungen.rechts"}}</div>
</div>
<div class="colspan2 rowspan2 subgrid">
<div class="colspan2">{{localize "DSA41.ruestungen.gesamt"}}</div>
<div>{{localize "DSA41.ruestungen.ruestungsschutz"}}</div>
<div>{{localize "DSA41.ruestungen.behinderung"}}</div>
</div> </div>
</div> </div>
<div class="center">{{>die-value type="attacke" data-roll="1d20" value=attacke success-value=attacke data-tooltip="attacke_tooltip"}}</div>
<div class="center">{{>die-value type="parade" data-roll="1d20" value=parade success-value=parade data-tooltip="parade_tooltip"}}</div>
<div class="center">{{>die-value type="trefferpunkte" data-roll=trefferpunkte value=trefferpunkte_display data-tooltip="trefferpunkte_tooltip"}}</div>
</div>
{{/each}}
</div>
{{#each actor.system.computed.kampf.ruestungen}} <div class="list Ruestung">
<div data-item-id="{{item._id}}"> <div class="list-header rowspan2">
<div class="left row item-name item-open"> <div class="rowspan2">{{localize "DSA41.kampf.ruestungen"}}</div>
<img class="item-image" src="{{item.img}}" title="{{item.name}}"> <div class="rowspan2">{{localize "DSA41.ruestungen.kopf"}}</div>
<span class="center">{{item.name}}</span> <div class="rowspan2">{{localize "DSA41.ruestungen.brust"}}</div>
</div> <div class="rowspan2">{{localize "DSA41.ruestungen.ruecken"}}</div>
<div>{{item.system.kopf}}</div> <div class="rowspan2">{{localize "DSA41.ruestungen.bauch"}}</div>
<div>{{item.system.brust}}</div> <div class="colspan2 rowspan2 subgrid">
<div>{{item.system.ruecken}}</div> <div class="colspan2">{{localize "DSA41.ruestungen.arm"}}</div>
<div>{{item.system.bauch}}</div> <div>{{localize "DSA41.ruestungen.links"}}</div>
<div>{{item.system.linker_arm}}</div> <div>{{localize "DSA41.ruestungen.rechts"}}</div>
<div>{{item.system.rechter_arm}}</div> </div>
<div>{{item.system.linkes_bein}}</div> <div class="colspan2 rowspan2 subgrid">
<div>{{item.system.rechtes_bein}}</div> <div class="colspan2">{{localize "DSA41.ruestungen.bein"}}</div>
<div>{{item.system.gesamt_ruestungsschutz}}</div> <div>{{localize "DSA41.ruestungen.links"}}</div>
<div>{{item.system.gesamt_behinderung}}</div> <div>{{localize "DSA41.ruestungen.rechts"}}</div>
</div> </div>
{{/each}} <div class="colspan2 rowspan2 subgrid">
<div class="colspan2">{{localize "DSA41.ruestungen.gesamt"}}</div>
<div> <div>{{localize "DSA41.ruestungen.ruestungsschutz"}}</div>
<div class="left">Total</div> <div>{{localize "DSA41.ruestungen.behinderung"}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.kopf}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.brust}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.ruecken}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.bauch}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.linker_arm}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.rechter_arm}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.linkes_bein}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.rechtes_bein}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.gesamt_ruestungsschutz}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.gesamt_behinderung}}</div>
</div>
</div> </div>
</div> </div>
{{#each actor.system.computed.kampf.ruestungen}}
<div class="list-item" data-item-id="{{item._id}}">
<div class="row item-name" data-action="item-open">
<img class="item-image" src="{{item.img}}" title="{{item.name}}">
<span class="center">{{item.name}}</span>
</div>
<div>{{item.system.kopf}}</div>
<div>{{item.system.brust}}</div>
<div>{{item.system.ruecken}}</div>
<div>{{item.system.bauch}}</div>
<div>{{item.system.linker_arm}}</div>
<div>{{item.system.rechter_arm}}</div>
<div>{{item.system.linkes_bein}}</div>
<div>{{item.system.rechtes_bein}}</div>
<div>{{item.system.gesamt_ruestungsschutz}}</div>
<div>{{item.system.gesamt_behinderung}}</div>
</div>
{{/each}}
<div class="list-item">
<div class="left">Total</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.kopf}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.brust}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.ruecken}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.bauch}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.linker_arm}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.rechter_arm}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.linkes_bein}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.rechtes_bein}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.gesamt_ruestungsschutz}}</div>
<div>{{actor.system.computed.kampf.ruestungen_gesamt.gesamt_behinderung}}</div>
</div>
</div> </div>
</section> </div>
</form> </div>

11
src/EditableInput.hbs Normal file
View File

@ -0,0 +1,11 @@
<div class="editable-input editable-{{type}}">
{{#if (eq type "checkbox")}}
<input type="checkbox" name="{{name}}" {{checked value}}>
{{else}}
<input type="{{type}}" name="{{name}}" value="{{value}}" placeholder="{{placeholder}}">
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>

View File

@ -1,38 +1,4 @@
{{#*inline "editable-input"}} <div class="Bewaffnung {{ cssClass }}">
<div class="editable-input editable-{{type}}">
{{#if @root.editable}}
<input type="{{type}}" name="{{name}}" value="{{value}}" placeholder="{{placeholder}}">
{{else}}
<div>
{{value}}
{{#unless value}}{{placeholder}}{{/unless}}
</div>
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>
{{/inline}}
{{#*inline "editable-checkbox"}}
<div class="editable-input editable-checkbox">
{{#if @root.editable}}
<input type="checkbox" name="{{name}}" {{checked value}}>
{{else}}
<div>
{{value}}
{{#unless value}}{{placeholder}}{{/unless}}
</div>
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>
{{/inline}}
<div class="Bewaffnung {{ cssClass }}" autocomplete="off">
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>
<div class="col"> <div class="col">
@ -44,129 +10,121 @@
</div> </div>
</div> </div>
<nav class="tabs"> <nav class="tabs">
<div class="row noflex active" data-group="primary" data-tab="tab1"> <div class="row noflex {{#if (eq tabGroups.primary 'tab1')}}active{{/if}}" data-group="primary" data-tab="tab1">
<a data-group="primary" data-tab="tab1" data-action="tab">{{localize "DSA41.bewaffnung.nahkampfwaffe.label"}}</a> <a data-group="primary" data-tab="tab1" data-action="tab">{{localize "DSA41.bewaffnung.nahkampfwaffe.label"}}</a>
{{>editable-checkbox name="system.nahkampfwaffe.aktiv" value=item.system.nahkampfwaffe.aktiv}} {{>editable-input type="checkbox" name="system.nahkampfwaffe.aktiv" value=item.system.nahkampfwaffe.aktiv}}
</div> </div>
<div class="row noflex" data-group="primary" data-tab="tab2"> <div class="row noflex {{#if (eq tabGroups.primary 'tab2')}}active{{/if}}" data-group="primary" data-tab="tab2">
<a data-group="primary" data-tab="tab2" data-action="tab">{{localize "DSA41.bewaffnung.parierwaffe.label"}}</a> <a data-group="primary" data-tab="tab2" data-action="tab">{{localize "DSA41.bewaffnung.parierwaffe.label"}}</a>
{{>editable-checkbox name="system.parierwaffe.aktiv" value=item.system.parierwaffe.aktiv}} {{>editable-input type="checkbox" name="system.parierwaffe.aktiv" value=item.system.parierwaffe.aktiv}}
</div> </div>
<div class="row noflex" data-group="primary" data-tab="tab3"> <div class="row noflex {{#if (eq tabGroups.primary 'tab3')}}active{{/if}}" data-group="primary" data-tab="tab3">
<a data-group="primary" data-tab="tab3" data-action="tab">{{localize "DSA41.bewaffnung.schild.label"}}</a> <a data-group="primary" data-tab="tab3" data-action="tab">{{localize "DSA41.bewaffnung.schild.label"}}</a>
{{>editable-checkbox name="system.schild.aktiv" value=item.system.schild.aktiv}} {{>editable-input type="checkbox" name="system.schild.aktiv" value=item.system.schild.aktiv}}
</div> </div>
<div class="row noflex" data-group="primary" data-tab="tab4"> <div class="row noflex {{#if (eq tabGroups.primary 'tab4')}}active{{/if}}" data-group="primary" data-tab="tab4">
<a data-group="primary" data-tab="tab4" data-action="tab">{{localize "DSA41.bewaffnung.fernkampfwaffe.label"}}</a> <a data-group="primary" data-tab="tab4" data-action="tab">{{localize "DSA41.bewaffnung.fernkampfwaffe.label"}}</a>
{{>editable-checkbox name="system.fernkampfwaffe.aktiv" value=item.system.fernkampfwaffe.aktiv}} {{>editable-input type="checkbox" name="system.fernkampfwaffe.aktiv" value=item.system.fernkampfwaffe.aktiv}}
</div> </div>
</nav> </nav>
<div class="tab active" data-group="primary" data-tab="tab1"> <div class="tab {{#if (eq tabGroups.primary 'tab1')}}active{{/if}}" data-group="primary" data-tab="tab1">
<div> <span>{{localize "DSA41.bewaffnung.nahkampfwaffe.trefferpunkte"}}</span>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.trefferpunkte"}}</span> <div class="grid3 center">
<div class="grid3 center"> {{>editable-input type="text" name="system.nahkampfwaffe.basis" value=item.system.nahkampfwaffe.basis placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.basis")}}
{{>editable-input type="text" name="system.nahkampfwaffe.basis" value=item.system.nahkampfwaffe.basis placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.basis")}} {{>editable-input type="number" name="system.nahkampfwaffe.schwellenwert" value=item.system.nahkampfwaffe.schwellenwert placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.schwellenwert")}}
{{>editable-input type="number" name="system.nahkampfwaffe.schwellenwert" value=item.system.nahkampfwaffe.schwellenwert placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.schwellenwert")}} {{>editable-input type="number" name="system.nahkampfwaffe.schadensschritte" value=item.system.nahkampfwaffe.schadensschritte placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.schadensschritte")}}
{{>editable-input type="number" name="system.nahkampfwaffe.schadensschritte" value=item.system.nahkampfwaffe.schadensschritte placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.schadensschritte")}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.modifikator"}}</span>
<div class="grid2">
{{>editable-input type="number" name="system.nahkampfwaffe.modifikator_attacke" value=item.system.nahkampfwaffe.modifikator_attacke placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.attacke")}}
{{>editable-input type="number" name="system.nahkampfwaffe.modifikator_parade" value=item.system.nahkampfwaffe.modifikator_parade placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.parade")}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.initiative"}}</span>
<div>{{>editable-input type="number" name="system.nahkampfwaffe.initiative" value=item.system.nahkampfwaffe.initiative}}</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{>editable-input type="number" name="system.nahkampfwaffe.bruchfaktor" value=item.system.nahkampfwaffe.bruchfaktor}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.distanzklasse"}}</span>
<div>{{>editable-input type="text" name="system.nahkampfwaffe.distanzklasse" value=item.system.nahkampfwaffe.distanzklasse}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.kampftalente"}}</span>
<div>{{>editable-input type="text" name="system.nahkampfwaffe.kampftalente" value=item.system.nahkampfwaffe.kampftalente}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.laenge"}}</span>
<div>{{>editable-input type="number" name="system.nahkampfwaffe.laenge" value=item.system.nahkampfwaffe.laenge}}</div>
<div class="colspan2"></div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.zweihaendig"}}</span>
<div>{{>editable-checkbox name="system.nahkampfwaffe.zweihaendig" value=item.system.nahkampfwaffe.zweihaendig}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.werfbar"}}</span>
<div>{{>editable-checkbox name="system.nahkampfwaffe.werfbar" value=item.system.nahkampfwaffe.werfbar}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.improvisiert"}}</span>
<div>{{>editable-checkbox name="system.nahkampfwaffe.improvisiert" value=item.system.nahkampfwaffe.improvisiert}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.priviligiert"}}</span>
<div>{{>editable-checkbox name="system.nahkampfwaffe.priviligiert" value=item.system.nahkampfwaffe.priviligiert}}</div>
</div> </div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.modifikator"}}</span>
<div class="grid2">
{{>editable-input type="number" name="system.nahkampfwaffe.modifikator_attacke" value=item.system.nahkampfwaffe.modifikator_attacke placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.attacke")}}
{{>editable-input type="number" name="system.nahkampfwaffe.modifikator_parade" value=item.system.nahkampfwaffe.modifikator_parade placeholder=(localize "DSA41.bewaffnung.nahkampfwaffe.parade")}}
</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.initiative"}}</span>
<div>{{>editable-input type="number" name="system.nahkampfwaffe.initiative" value=item.system.nahkampfwaffe.initiative}}</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{>editable-input type="number" name="system.nahkampfwaffe.bruchfaktor" value=item.system.nahkampfwaffe.bruchfaktor}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.distanzklasse"}}</span>
<div>{{>editable-input type="text" name="system.nahkampfwaffe.distanzklasse" value=item.system.nahkampfwaffe.distanzklasse}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.kampftalente"}}</span>
<div>{{>editable-input type="text" name="system.nahkampfwaffe.kampftalente" value=item.system.nahkampfwaffe.kampftalente}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.laenge"}}</span>
<div>{{>editable-input type="number" name="system.nahkampfwaffe.laenge" value=item.system.nahkampfwaffe.laenge}}</div>
<div class="colspan2"></div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.zweihaendig"}}</span>
<div>{{>editable-input type="checkbox" name="system.nahkampfwaffe.zweihaendig" value=item.system.nahkampfwaffe.zweihaendig}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.werfbar"}}</span>
<div>{{>editable-input type="checkbox" name="system.nahkampfwaffe.werfbar" value=item.system.nahkampfwaffe.werfbar}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.improvisiert"}}</span>
<div>{{>editable-input type="checkbox" name="system.nahkampfwaffe.improvisiert" value=item.system.nahkampfwaffe.improvisiert}}</div>
<span>{{localize "DSA41.bewaffnung.nahkampfwaffe.priviligiert"}}</span>
<div>{{>editable-input type="checkbox" name="system.nahkampfwaffe.priviligiert" value=item.system.nahkampfwaffe.priviligiert}}</div>
</div> </div>
<div class="tab" data-group="primary" data-tab="tab2"> <div class="tab {{#if (eq tabGroups.primary 'tab2')}}active{{/if}}" data-group="primary" data-tab="tab2">
<div> <span>{{localize "DSA41.bewaffnung.parierwaffe.initiative"}}</span>
<span>{{localize "DSA41.bewaffnung.parierwaffe.initiative"}}</span> <div>{{>editable-input type="number" name="system.parierwaffe.initiative" value=item.system.parierwaffe.initiative}}</div>
<div>{{>editable-input type="number" name="system.parierwaffe.initiative" value=item.system.parierwaffe.initiative}}</div> <span>{{localize "DSA41.bewaffnung.parierwaffe.modifikator"}}</span>
<span>{{localize "DSA41.bewaffnung.parierwaffe.modifikator"}}</span> <div class="grid2">
<div class="grid2"> {{>editable-input type="number" name="system.parierwaffe.modifikator_attacke" value=item.system.parierwaffe.modifikator_attacke placeholder=(localize "DSA41.bewaffnung.parierwaffe.attacke")}}
{{>editable-input type="number" name="system.parierwaffe.modifikator_attacke" value=item.system.parierwaffe.modifikator_attacke placeholder=(localize "DSA41.bewaffnung.parierwaffe.attacke")}} {{>editable-input type="number" name="system.parierwaffe.modifikator_parade" value=item.system.parierwaffe.modifikator_parade placeholder=(localize "DSA41.bewaffnung.parierwaffe.parade")}}
{{>editable-input type="number" name="system.parierwaffe.modifikator_parade" value=item.system.parierwaffe.modifikator_parade placeholder=(localize "DSA41.bewaffnung.parierwaffe.parade")}}
</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{>editable-input type="number" name="system.parierwaffe.bruchfaktor" value=item.system.parierwaffe.bruchfaktor}}</div>
</div> </div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{>editable-input type="number" name="system.parierwaffe.bruchfaktor" value=item.system.parierwaffe.bruchfaktor}}</div>
</div> </div>
<div class="tab" data-group="primary" data-tab="tab3"> <div class="tab {{#if (eq tabGroups.primary 'tab3')}}active{{/if}}" data-group="primary" data-tab="tab3">
<div> <span>{{localize "DSA41.bewaffnung.schild.groesse.label"}}</span>
<span>{{localize "DSA41.bewaffnung.schild.groesse.label"}}</span> <select name="system.schild.groesse">
<select name="system.schild.groesse"> <option value="klein" {{#if (eq item.system.schild.groesse "klein")}} selected {{/if}}>{{localize "DSA41.bewaffnung.schild.groesse.klein"}}</option>
<option value="klein" {{#if (eq item.system.schild.groesse "klein")}} selected {{/if}}>{{localize "DSA41.bewaffnung.schild.groesse.klein"}}</option> <option value="gross" {{#if (eq item.system.schild.groesse "gross")}} selected {{/if}}>{{localize "DSA41.bewaffnung.schild.groesse.gross"}}</option>
<option value="gross" {{#if (eq item.system.schild.groesse "gross")}} selected {{/if}}>{{localize "DSA41.bewaffnung.schild.groesse.gross"}}</option> <option value="sehr_gross" {{#if (eq item.system.schild.groesse "sehr_gross")}} selected {{/if}}>{{localize "DSA41.bewaffnung.schild.groesse.sehr_gross"}}</option>
<option value="sehr_gross" {{#if (eq item.system.schild.groesse "sehr_gross")}} selected {{/if}}>{{localize "DSA41.bewaffnung.schild.groesse.sehr_gross"}}</option> </select>
</select> <span>{{localize "DSA41.bewaffnung.schild.modifikator"}}</span>
<span>{{localize "DSA41.bewaffnung.schild.modifikator"}}</span> <div class="grid2">
<div class="grid2"> {{>editable-input type="number" name="system.schild.modifikator_attacke" value=item.system.schild.modifikator_attacke placeholder=(localize "DSA41.bewaffnung.schild.attacke")}}
{{>editable-input type="number" name="system.schild.modifikator_attacke" value=item.system.schild.modifikator_attacke placeholder=(localize "DSA41.bewaffnung.schild.attacke")}} {{>editable-input type="number" name="system.schild.modifikator_parade" value=item.system.schild.modifikator_parade placeholder=(localize "DSA41.bewaffnung.schild.parade")}}
{{>editable-input type="number" name="system.schild.modifikator_parade" value=item.system.schild.modifikator_parade placeholder=(localize "DSA41.bewaffnung.schild.parade")}}
</div>
<span>{{localize "DSA41.bewaffnung.schild.initiative"}}</span>
<div>{{>editable-input type="number" name="system.schild.initiative" value=item.system.schild.initiative}}</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{>editable-input type="number" name="system.schild.bruchfaktor" value=item.system.schild.bruchfaktor}}</div>
</div> </div>
<span>{{localize "DSA41.bewaffnung.schild.initiative"}}</span>
<div>{{>editable-input type="number" name="system.schild.initiative" value=item.system.schild.initiative}}</div>
<span>{{localize "DSA41.bewaffnung.bruchfaktor"}}</span>
<div>{{>editable-input type="number" name="system.schild.bruchfaktor" value=item.system.schild.bruchfaktor}}</div>
</div> </div>
<div class="tab" data-group="primary" data-tab="tab4"> <div class="tab {{#if (eq tabGroups.primary 'tab4')}}active{{/if}}" data-group="primary" data-tab="tab4">
<div> <span>{{localize "DSA41.bewaffnung.fernkampfwaffe.trefferpunkte"}}</span>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.trefferpunkte"}}</span> <div class="center">{{>editable-input type="text" name="system.fernkampfwaffe.basis" value=item.system.fernkampfwaffe.basis}}</div>
<div class="center">{{>editable-input type="text" name="system.fernkampfwaffe.basis" value=item.system.fernkampfwaffe.basis}}</div> <span>{{localize "DSA41.bewaffnung.fernkampfwaffe.laden"}}</span>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.laden"}}</span> <div>{{>editable-input type="number" name="system.fernkampfwaffe.laden" value=item.system.fernkampfwaffe.laden}}</div>
<div>{{>editable-input type="number" name="system.fernkampfwaffe.laden" value=item.system.fernkampfwaffe.laden}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionskosten"}}</span> <span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionskosten"}}</span>
<div>{{>editable-input type="number" name="system.fernkampfwaffe.munitionskosten" value=item.system.fernkampfwaffe.munitionskosten}}</div> <div>{{>editable-input type="number" name="system.fernkampfwaffe.munitionskosten" value=item.system.fernkampfwaffe.munitionskosten}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionsgewicht"}}</span> <span>{{localize "DSA41.bewaffnung.fernkampfwaffe.munitionsgewicht"}}</span>
<div>{{>editable-input type="number" name="system.fernkampfwaffe.munitionsgewicht" value=item.system.fernkampfwaffe.munitionsgewicht}}</div> <div>{{>editable-input type="number" name="system.fernkampfwaffe.munitionsgewicht" value=item.system.fernkampfwaffe.munitionsgewicht}}</div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.reichweiten"}}</span> <span>{{localize "DSA41.bewaffnung.fernkampfwaffe.reichweiten"}}</span>
<div class="colspan3 grid5"> <div class="colspan3 grid5">
{{>editable-input type="number" name="system.fernkampfwaffe.reichweite1" value=item.system.fernkampfwaffe.reichweite1}} {{>editable-input type="number" name="system.fernkampfwaffe.reichweite1" value=item.system.fernkampfwaffe.reichweite1}}
{{>editable-input type="number" name="system.fernkampfwaffe.reichweite2" value=item.system.fernkampfwaffe.reichweite2}} {{>editable-input type="number" name="system.fernkampfwaffe.reichweite2" value=item.system.fernkampfwaffe.reichweite2}}
{{>editable-input type="number" name="system.fernkampfwaffe.reichweite3" value=item.system.fernkampfwaffe.reichweite3}} {{>editable-input type="number" name="system.fernkampfwaffe.reichweite3" value=item.system.fernkampfwaffe.reichweite3}}
{{>editable-input type="number" name="system.fernkampfwaffe.reichweite4" value=item.system.fernkampfwaffe.reichweite4}} {{>editable-input type="number" name="system.fernkampfwaffe.reichweite4" value=item.system.fernkampfwaffe.reichweite4}}
{{>editable-input type="number" name="system.fernkampfwaffe.reichweite5" value=item.system.fernkampfwaffe.reichweite5}} {{>editable-input type="number" name="system.fernkampfwaffe.reichweite5" value=item.system.fernkampfwaffe.reichweite5}}
</div> </div>
<span>{{localize "DSA41.bewaffnung.fernkampfwaffe.modifikator"}}</span> <span>{{localize "DSA41.bewaffnung.fernkampfwaffe.modifikator"}}</span>
<div class="row colspan3 grid5"> <div class="row colspan3 grid5">
{{>editable-input type="number" name="system.fernkampfwaffe.modifikator1" value=item.system.fernkampfwaffe.modifikator1}} {{>editable-input type="number" name="system.fernkampfwaffe.modifikator1" value=item.system.fernkampfwaffe.modifikator1}}
{{>editable-input type="number" name="system.fernkampfwaffe.modifikator2" value=item.system.fernkampfwaffe.modifikator2}} {{>editable-input type="number" name="system.fernkampfwaffe.modifikator2" value=item.system.fernkampfwaffe.modifikator2}}
{{>editable-input type="number" name="system.fernkampfwaffe.modifikator3" value=item.system.fernkampfwaffe.modifikator3}} {{>editable-input type="number" name="system.fernkampfwaffe.modifikator3" value=item.system.fernkampfwaffe.modifikator3}}
{{>editable-input type="number" name="system.fernkampfwaffe.modifikator4" value=item.system.fernkampfwaffe.modifikator4}} {{>editable-input type="number" name="system.fernkampfwaffe.modifikator4" value=item.system.fernkampfwaffe.modifikator4}}
{{>editable-input type="number" name="system.fernkampfwaffe.modifikator5" value=item.system.fernkampfwaffe.modifikator5}} {{>editable-input type="number" name="system.fernkampfwaffe.modifikator5" value=item.system.fernkampfwaffe.modifikator5}}
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,20 +1,3 @@
{{#*inline "editable-input"}}
<div class="editable-input editable-{{type}}">
{{#if @root.editable}}
<input type="{{type}}" name="{{name}}" value="{{value}}" placeholder="{{placeholder}}">
{{else}}
<div>
{{value}}
{{#unless value}}{{placeholder}}{{/unless}}
</div>
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>
{{/inline}}
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div class="item-sheet {{ cssClass }}" autocomplete="off">
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>

View File

@ -1,20 +1,3 @@
{{#*inline "editable-input"}}
<div class="editable-input editable-{{type}}">
{{#if @root.editable}}
<input type="{{type}}" name="{{name}}" value="{{value}}" placeholder="{{placeholder}}">
{{else}}
<div>
{{value}}
{{#unless value}}{{placeholder}}{{/unless}}
</div>
{{/if}}
{{#if placeholder}}
<div class="placeholder">{{placeholder}}</div>
{{/if}}
</div>
{{/inline}}
<div class="item-sheet {{ cssClass }}" autocomplete="off"> <div class="item-sheet {{ cssClass }}" autocomplete="off">
<div class="row"> <div class="row">
<img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}> <img class="item-image" src="{{ item.img }}" title="{{ item.name }}" {{#if editable}}data-edit="img"{{/if}}>
@ -27,7 +10,7 @@
</div> </div>
</div> </div>
<div class="Ruestung"> <div class="tab active">
<span>{{localize "DSA41.ruestungen.kopf"}}</span> <span>{{localize "DSA41.ruestungen.kopf"}}</span>
<div>{{>editable-input type="number" name="system.kopf" value=item.system.kopf}}</div> <div>{{>editable-input type="number" name="system.kopf" value=item.system.kopf}}</div>
<span>{{localize "DSA41.ruestungen.brust"}}</span> <span>{{localize "DSA41.ruestungen.brust"}}</span>

View File

@ -1,268 +1,305 @@
.tabs > [data-tab] > * { .DSA41 {
pointer-events: auto; font-size: 14px;
}
/* Change from FoundryVTT's default of 'none' to 'auto' to allow checkboxes in the nav bar */
& .tabs > [data-tab] > * {
.row { pointer-events: auto;
display: flex; }
flex-direction: row;
flex: 1; /* Allow application content to be scrolled */
} & .window-content {
overflow-y: scroll;
.col { }
display: flex;
flex-direction: column; & [data-action] {
flex: 1; cursor: pointer;
}
&:hover {
.noflex { transform: scale(1.05);
flex: 0; }
} }
.wrap { & .small {
flex-wrap: wrap; font-size: 0.75em;
} }
.left { & .left {
text-align: left; text-align: left;
justify-content: left; justify-content: left;
justify-self: left; justify-self: left;
} }
.center { & .right {
text-align: center; text-align: right;
justify-content: center; justify-content: right;
align-content: center; justify-self: right;
} }
.none { & .center {
display: none; text-align: center;
} justify-content: center;
align-content: center;
.grid2 { align-items: center;
display: grid; }
grid-template-columns: repeat(2, minmax(0, 1fr));
} & .row {
display: flex;
.grid3 { flex-direction: row;
display: grid; flex: 1;
grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
& .col {
.grid4 { display: flex;
display: grid; flex-direction: column;
grid-template-columns: repeat(4, minmax(0, 1fr)); flex: 1;
} }
.grid5 { & .noflex {
display: grid; flex: 0;
grid-template-columns: repeat(5, minmax(0, 1fr)); }
}
& .subgrid {
.subgrid { display: grid;
display: grid; grid-template-rows: subgrid;
grid-template-rows: subgrid; grid-template-columns: subgrid;
grid-template-columns: subgrid; }
}
& .subgrid-columns {
.colspan2 { grid-column: span 2; } display: grid;
.colspan3 { grid-column: span 3; } grid-template-columns: subgrid;
.colspan4 { grid-column: span 4; } }
.colspan5 { grid-column: span 5; }
.colspan6 { grid-column: span 6; } & .subgrid-rows {
.colspan7 { grid-column: span 7; } display: grid;
.colspan8 { grid-column: span 8; } grid-template-rows: subgrid;
.colspan9 { grid-column: span 9; } }
.rowspan2 { grid-row: span 2; } & .grid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.rowspan3 { grid-row: span 3; } & .grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.rowspan4 { grid-row: span 4; } & .grid4 { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.rowspan5 { grid-row: span 5; } & .grid5 { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); }
.rowspan6 { grid-row: span 6; } & .grid6 { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); }
.rowspan7 { grid-row: span 7; } & .grid7 { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
.rowspan8 { grid-row: span 8; } & .grid8 { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); }
.rowspan9 { grid-row: span 9; } & .grid9 { display: grid; grid-template-columns: repeat(9, minmax(0, 1fr)); }
& .colspan2 { grid-column: span 2; }
& .colspan3 { grid-column: span 3; }
.editable-input { & .colspan4 { grid-column: span 4; }
flex: 1; & .colspan5 { grid-column: span 5; }
padding: 0px 3px; & .colspan6 { grid-column: span 6; }
} & .colspan7 { grid-column: span 7; }
& .colspan8 { grid-column: span 8; }
.editable-input input { & .colspan9 { grid-column: span 9; }
border: none; & .colspan-all { grid-column: 1 / -1; }
}
& .rowspan2 { grid-row: span 2; }
.editable-number { & .rowspan3 { grid-row: span 3; }
text-align: center; & .rowspan4 { grid-row: span 4; }
} & .rowspan5 { grid-row: span 5; }
& .rowspan6 { grid-row: span 6; }
.placeholder { & .rowspan7 { grid-row: span 7; }
font-size: 0.8em; & .rowspan8 { grid-row: span 8; }
border-top: 1px solid; & .rowspan9 { grid-row: span 9; }
overflow: hidden; & .rowspan-all { grid-row: 1 / -1; }
white-space: nowrap;
text-overflow: ellipsis; & .editable-input {
} flex: 1;
padding: 0px 3px;
& input {
.sheet .die { border: none;
display: inline-grid; }
text-align: center; &.editable-number {
align-items: center; text-align: center;
color: #fff; }
width: 48px; & .placeholder {
height: 48px; font-size: 0.8em;
} border-top: 1px solid;
overflow: hidden;
.sheet .die > * { white-space: nowrap;
grid-row: 1; text-overflow: ellipsis;
grid-column: 1; }
} }
.sheet .die-courage { fill: #b22319; } & .character-image {
.sheet .die-cleverness { fill: #8158a3; } width: 115px;
.sheet .die-intuition { fill: #388834; } height: 115px;
.sheet .die-charisma { fill: #0c0c0c; } }
.sheet .die-dexterity { fill: #d4b366; }
.sheet .die-agility { fill: #678ec3; } & .item-image {
.sheet .die-constitution { fill: #a3a3a3; } width: 80px;
.sheet .die-strength { fill: #d5a877; } height: 80px;
}
.sheet .die-attacke { fill: #b22319; }
.sheet .die-parade { fill: #388834; } & .die {
.sheet .die-trefferpunkte { fill: #0c0c0c; } display: inline-grid;
.sheet .item-open, text-align: center;
.sheet .item-delete, align-items: center;
.sheet .roll { color: #fff;
cursor: pointer;
} width: 3.5em;
height: 3.5em;
.sheet .item-open:hover,
.sheet .item-delete:hover, & > * {
.sheet .roll:hover { grid-row: 1;
transform: scale(1.05); grid-column: 1;
} }
&.die-courage { fill: #b22319; }
.character-image { &.die-cleverness { fill: #8158a3; }
width: 115px; &.die-intuition { fill: #388834; }
height: 115px; &.die-charisma { fill: #0c0c0c; }
} &.die-dexterity { fill: #d4b366; }
&.die-agility { fill: #678ec3; }
.item-image { &.die-constitution { fill: #a3a3a3; }
width: 80px; &.die-strength { fill: #d5a877; }
height: 80px;
} &.die-attacke { fill: #b22319; }
&.die-parade { fill: #388834; }
.list-header { &.die-trefferpunkte { fill: #0c0c0c; }
padding: 0.5rem; }
}
& .tabs {
.list { padding: .5rem;
box-shadow: 0 0 6px rgba(0, 0, 0, 0.45); margin-top: .5rem;
} margin-bottom: .5rem;
border-top: 1px solid;
.list-item { border-bottom: 1px solid;
padding: 0.25rem;
border-bottom: 1px dotted; & > * {
} align-items: center;
}
.list-item:last-child {
border: none; & .active {
} text-decoration: underline;
}
.item-name { }
gap: 0.5rem;
flex: 0 1 auto; & .tab.active {
} display: grid;
gap: 0.5rem;
.item-sub { }
font-size: 0.625rem;
} & .list {
display: grid;
.inventar {
gap: 16px; background: #252830;
} box-shadow: 0 0 6px rgba(0, 0, 0, 0.45);
.kampf { & .item-image {
gap: 16px; width: 40px;
} height: 40px;
}
.actor-sheet fieldset { & .item-name {
width: 100%; gap: 0.5rem;
} }
}
.actor-sheet table {
border: none; & .list-header {
background: none; display: grid;
table-layout: fixed; grid-column: 1 / -1;
}
grid-template-rows: subgrid;
.actor-sheet .item-image { grid-template-columns: subgrid;
width: 32px;
height: 32px; align-items: center;
}
padding: 0.5rem;
.actor-sheet .tabs, border-radius: 5px 5px 0px 0px;
.DSA41 .tabs { background: linear-gradient(90deg, rgb(36, 133, 44) 0%, rgb(0, 79, 7) 40%, rgb(0, 51, 5) 100%);
padding: .5rem; }
margin-top: .5rem;
margin-bottom: .5rem; & .list-item {
border-top: 1px solid; display: grid;
border-bottom: 1px solid; grid-column: 1 / -1;
}
grid-template-rows: subgrid;
.DSA41 .tabs > * { grid-template-columns: subgrid;
align-items: center;
} align-items: center;
.DSA41 .tabs .active { padding: 0.25rem;
text-decoration: underline; border-bottom: 1px dotted;
}
&:last-child {
.actor-sheet .kampf .ruestungen { border: none;
display: grid; }
grid-template-columns: 2fr repeat(8, 1fr) repeat(2, 1.5fr); }
}
& [data-application-part="Bewaffnung"] {
.actor-sheet .kampf .ruestungen > * { & .tab {
display: grid; grid-template-columns: minmax(0, max-content) minmax(0, 1fr) minmax(0, max-content) minmax(0, 1fr);
grid-column: 1 / -1; align-items: center;
grid-template-columns: subgrid; }
}
padding: 0.25rem;
border-bottom: 1px dotted; & [data-application-part="Ruestung"] {
& .tab {
text-align: center; grid-template-columns: minmax(0, max-content) minmax(0, 1fr) minmax(0, max-content) minmax(0, 1fr);
place-items: center; align-items: center;
} }
}
.actor-sheet .kampf .ruestungen > *:last-child {
border: none; & [data-application-part="ActorSheet"] {
} & .tab {
&[data-tab="tab1"] {
.DSA41 .Bewaffnung .tab > * { & .Eigenschaften {
display: grid; display: grid;
grid-template-columns: minmax(0, max-content) minmax(0, 1fr) minmax(0, max-content) minmax(0, 1fr); grid-template-columns: minmax(0, max-content) repeat(8, minmax(0, 1fr));
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
} }
.DSA41 .Ruestung {
display: grid; & .Basiswerte {
grid-template-columns: minmax(0, max-content) minmax(0, 1fr) minmax(0, max-content) minmax(0, 1fr); display: grid;
align-items: center; grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 0.5rem; }
margin-top: 0.5rem; }
}
&[data-tab="tab2"] {
#tooltip:has(> .dsa41-tooltip) { & .Kampftalente {
/* background-color: #678ec3; */ display: grid;
grid-template-columns: minmax(0, max-content) repeat(5, minmax(0, 1fr));
align-items: center;
gap: 0.5rem;
}
& .Talente {
display: grid;
grid-template-columns: minmax(0, max-content) repeat(2, minmax(0, 1fr));
align-items: center;
gap: 0.5rem;
}
}
&[data-tab="tab3"] {
grid-template-columns: minmax(min-content, max-content) auto minmax(min-content, max-content) min-content;
& > * {
grid-column: 1 / -1;
}
}
&[data-tab="tab4"] {
& .Bewaffnung {
grid-template-columns: minmax(0, max-content) repeat(3, minmax(0, auto));
& .die {
font-size: 12px;
}
}
& .Ruestung {
grid-template-columns: 2fr repeat(8, 1fr) repeat(2, 1.5fr);
text-align: center;
}
}
}
}
} }

View File

@ -1,6 +1,6 @@
const { TypeDataModel } = foundry.abstract; const { TypeDataModel } = foundry.abstract;
const { SchemaField, NumberField, StringField, BooleanField } = foundry.data.fields; const { SchemaField, NumberField, StringField, BooleanField } = foundry.data.fields;
const { ItemSheetV2 } = foundry.applications.sheets; const { ActorSheetV2, ItemSheetV2 } = foundry.applications.sheets;
const { HandlebarsApplicationMixin } = foundry.applications.api; const { HandlebarsApplicationMixin } = foundry.applications.api;
const { OperatorTerm, NumericTerm } = foundry.dice.terms; const { OperatorTerm, NumericTerm } = foundry.dice.terms;
@ -33,6 +33,8 @@ Hooks.once("init", function() {
}); });
loadTemplates({ loadTemplates({
"editable-input": "systems/dsa-4th-edition/src/EditableInput.hbs",
"attribute_tooltip": "systems/dsa-4th-edition/src/Tooltips/Attribute.hbs", "attribute_tooltip": "systems/dsa-4th-edition/src/Tooltips/Attribute.hbs",
"attacke_tooltip": "systems/dsa-4th-edition/src/Tooltips/Attacke.hbs", "attacke_tooltip": "systems/dsa-4th-edition/src/Tooltips/Attacke.hbs",
@ -533,96 +535,96 @@ class DSA41_BewaffnungData extends TypeDataModel {
} }
} }
class DSA41_ActorSheet extends ActorSheet { function DSA41_ApplicationMixin(BaseApplication) {
static get defaultOptions() { class DSA41_Application extends HandlebarsApplicationMixin(BaseApplication) {
return foundry.utils.mergeObject(super.defaultOptions, { static DEFAULT_OPTIONS= {
tabs: [{ navSelector: ".tabs", contentSelector: ".content", initial: "tab1" }], classes: [ "DSA41" ],
template: "systems/dsa-4th-edition/src/ActorSheet.hbs", window: { resizable: true },
}); form: { submitOnChange: true },
}
async getData() {
let data = super.getData();
data.tooltips = {
attributes: {},
kampf: {
attacke: {},
parade: {},
trefferpunkte: {},
}
}; };
for (const [attribute, value] of Object.entries(data.actor.system.attributes)) { async _prepareContext(options) {
data.tooltips.attributes[attribute] = await renderTemplate("attribute_tooltip", value); return this;
} }
for (const [id, computed] of Object.entries(data.actor.system.computed.kampf.waffen)) {
data.tooltips.kampf.attacke [id] = await renderTemplate("attacke_tooltip", computed);
data.tooltips.kampf.parade [id] = await renderTemplate("parade_tooltip", computed);
data.tooltips.kampf.trefferpunkte[id] = await renderTemplate("trefferpunkte_tooltip", computed);
}
return data;
} }
activateListeners(html) { return DSA41_Application;
super.activateListeners(html);
html.on("click", ".item-open", async (event) => {
const item_id = event.currentTarget.closest("[data-item-id]").dataset.itemId;
const item = this.object.items.get(item_id);
item.sheet.render(true)
});
html.on("click", ".item-delete", async (event) => {
const item_id = event.currentTarget.closest("[data-item-id]").dataset.itemId;
const item = this.object.items.get(item_id);
item.delete();
});
html.on("click", ".roll", async (event) => {
const roll_formula = event.currentTarget.closest("[data-roll]").dataset.roll;
const roll_type = event.currentTarget.closest("[data-roll]").dataset.rollType;
const success_value = event.currentTarget.closest("[data-roll]").dataset.successValue;
let flavor = game.i18n.localize("DSA41.roll_types." + roll_type);
if (typeof success_value !== 'undefined') {
flavor += " <= " + success_value;
}
let roll = new Roll(roll_formula, this.object.system);
roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.object }),
flavor: flavor,
});
});
}
} }
class DSA41_ItemSheetV2 extends HandlebarsApplicationMixin(ItemSheetV2) { class DSA41_ActorSheet extends DSA41_ApplicationMixin(ActorSheetV2) {
static DEFAULT_OPTIONS = { static PARTS = {
classes: [ "DSA41" ], ActorSheet: { template: "systems/dsa-4th-edition/src/ActorSheet.hbs" },
position: { width: "480", height: "480" },
window: { resizable: true },
form: { submitOnChange: true },
}; };
static DEFAULT_OPTIONS = {
position: { width: "800", height: "650" },
actions: {
"roll": async function(event, target) {
const roll_formula = event.target.closest("[data-roll]").dataset.roll;
const roll_type = event.target.closest("[data-roll-type]").dataset.rollType;
const success_value = event.target.closest("[data-success-value]")?.dataset.successValue;
let flavor = game.i18n.localize("DSA41.roll_types." + roll_type);
if (typeof success_value !== 'undefined') {
flavor += " <= " + success_value;
}
let roll = new Roll(roll_formula, this.document.system);
roll.toMessage({
speaker: ChatMessage.getSpeaker({ actor: this.document }),
flavor: flavor,
});
},
"item-open": async function(event, target) {
const item_id = event.target.closest("[data-item-id]").dataset.itemId;
const item = this.document.items.get(item_id);
item.sheet.render(true)
},
"item-delete": async function(event, target) {
const item_id = event.target.closest("[data-item-id]").dataset.itemId;
const item = this.document.items.get(item_id);
item.delete();
},
},
};
_onFirstRender(context, options) {
super._onFirstRender(context, options);
const content = this.element.querySelector(".window-content");
content.addEventListener("drop", async (event) => {
event.preventDefault();
const data = TextEditor.getDragEventData(event);
switch (data.type) {
case "Item": {
const item = await Item.implementation.fromDropData(data);
await this.actor.createEmbeddedDocuments("Item", [item.toObject()]);
} break;
}
});
}
tabGroups = { primary: "tab1" };
}
class DSA41_ItemSheetV2 extends DSA41_ApplicationMixin(ItemSheetV2) {
static PARTS = { static PARTS = {
Bewaffnung: { template: "systems/dsa-4th-edition/src/ItemSheets/Bewaffnung.hbs" }, Bewaffnung: { template: "systems/dsa-4th-edition/src/ItemSheets/Bewaffnung.hbs" },
Gegenstand: { template: "systems/dsa-4th-edition/src/ItemSheets/Gegenstand.hbs" }, Gegenstand: { template: "systems/dsa-4th-edition/src/ItemSheets/Gegenstand.hbs" },
Ruestung: { template: "systems/dsa-4th-edition/src/ItemSheets/Ruestung.hbs" }, Ruestung: { template: "systems/dsa-4th-edition/src/ItemSheets/Ruestung.hbs" },
}; };
static DEFAULT_OPTIONS = {
position: { width: "600", height: "auto" },
};
tabGroups = { primary: "tab1" };
_configureRenderOptions(options) { _configureRenderOptions(options) {
super._configureRenderOptions(options); super._configureRenderOptions(options);
options.parts = [ this.options.document.type ]; options.parts = [ this.options.document.type ];
} }
_prepareContext(options) {
return {
editable: true,
item: this.options.document,
};
}
} }