added checkboxes and check for save attributes

This commit is contained in:
Patryk Hegenberg 2023-12-15 18:34:16 +01:00
parent 88cfe035e0
commit 6db6d78ad9
6 changed files with 545 additions and 519 deletions

View file

@ -98,12 +98,12 @@ func parseMonster(r *http.Request) model.Monster {
Wis: parseInt(r.FormValue("wis")),
Cha: parseInt(r.FormValue("cha")),
Save: model.Save{
Dex: r.FormValue("saveDex"),
Con: r.FormValue("saveCon"),
Wis: r.FormValue("saveWis"),
Str: r.FormValue("saveStr"),
Cha: r.FormValue("saveCha"),
Int: r.FormValue("saveInt"),
Dex: checkCheckbox("savedex", r),
Con: checkCheckbox("savecon", r),
Wis: checkCheckbox("savewis", r),
Str: checkCheckbox("savestr", r),
Cha: checkCheckbox("savecha", r),
Int: checkCheckbox("saveint", r),
},
Skill: model.Skill{
Perception: checkCheckbox("perception", r),

View file

@ -68,12 +68,12 @@ func SkillCalculationHandler(content embed.FS) http.HandlerFunc {
"sleightOfHand": strconv.Itoa(calcAbilityScore(dex) + crBonus),
"stealth": strconv.Itoa(calcAbilityScore(dex) + crBonus),
"survival": strconv.Itoa(calcAbilityScore(wis) + crBonus),
"saveStr": strconv.Itoa(calcAbilityScore(str)),
"saveWis": strconv.Itoa(calcAbilityScore(wis)),
"saveCon": strconv.Itoa(calcAbilityScore(con)),
"saveInt": strconv.Itoa(calcAbilityScore(int)),
"saveCha": strconv.Itoa(calcAbilityScore(cha)),
"saveDex": strconv.Itoa(calcAbilityScore(dex)),
"saveStr": strconv.Itoa(calcAbilityScore(str) + crBonus),
"saveWis": strconv.Itoa(calcAbilityScore(wis) + crBonus),
"saveCon": strconv.Itoa(calcAbilityScore(con) + crBonus),
"saveInt": strconv.Itoa(calcAbilityScore(int) + crBonus),
"saveCha": strconv.Itoa(calcAbilityScore(cha) + crBonus),
"saveDex": strconv.Itoa(calcAbilityScore(dex) + crBonus),
}
// Execute template with skill values.

View file

@ -88,7 +88,7 @@
<th>Save Con</th>
<th>Save Wis</th>
<th>Save Str</th>
<th>Save Con</th>
<th>Save Int</th>
<th>Save Cha</th>
<th>Perception</th>
<th>Stealth</th>

View file

@ -24,7 +24,7 @@
<td>{{.Save.Con}}</td>
<td>{{.Save.Wis}}</td>
<td>{{.Save.Str}}</td>
<td>{{.Save.Con}}</td>
<td>{{.Save.Int}}</td>
<td>{{.Save.Cha}}</td>
<td>{{.Skill.Perception}}</td>
<td>{{.Skill.Stealth}}</td>

View file

@ -4,7 +4,8 @@
<div class="tile is-child field">
<label for="name">Monster Name:</label>
<div class="control">
<input type="text" name="name" required placeholder="Type here" class="input input-bordered w-full max-w-xs">
<input type="text" name="name" required placeholder="Type here"
class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
@ -87,68 +88,14 @@
</div>
</div>
</div>
<div class="card tile is-ancestor is-vertical">
<header class="card-header">
<p class="card-header-title">
Speed
</p>
</header>
<div class="card-content">
<div class="content">
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="walk">Walk:</label>
<div class="control">
<input type="number" name="walk" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="burrow">Burrow:</label>
<div class="control">
<input type="number" name="burrow" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="climb">Climb:</label>
<div class="control">
<input type="number" name="climb" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
</div>
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="fly">Fly:</label>
<div class="control">
<input type="number" name="fly" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="swim">Swim:</label>
<div class="control">
<input type="number" name="swim" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="str">Str:</label>
<div class="control">
<input type="number" name="str" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML">
</div>
</div>
</div>
@ -157,7 +104,8 @@
<label for="dex">Dex:</label>
<div class="control">
<input type="number" name="dex" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML">
</div>
</div>
</div>
@ -166,7 +114,8 @@
<label for="con">Con:</label>
<div class="control">
<input type="number" name="con" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML">
</div>
</div>
</div>
@ -174,9 +123,9 @@
<div class="tile is-child field">
<label for="cr">CR:</label>
<div class="control">
<input type="text" name="cr" required class="input input-bordered w-full max-w-xs" hx-post="/calculate-skills"
hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML" hx-target="#skills"
hx-swap="outerHTML">
<input type="text" name="cr" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML" hx-target="#skills" hx-swap="outerHTML">
</div>
</div>
</div>
@ -187,7 +136,8 @@
<label for="int">Int:</label>
<div class="control">
<input type="number" name="int" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML">
</div>
</div>
</div>
@ -196,7 +146,8 @@
<label for="wis">Wis:</label>
<div class="control">
<input type="number" name="wis" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML">
</div>
</div>
</div>
@ -205,16 +156,8 @@
<label for="cha">Cha:</label>
<div class="control">
<input type="number" name="cha" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="passive">Passive:</label>
<div class="control">
<input type="number" name="passive" required class="input input-bordered w-full max-w-xs"
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills" hx-swap="innerHTML">
hx-post="/calculate-skills" hx-trigger="keyup changed delay:100ms" hx-target="#skills"
hx-swap="innerHTML">
</div>
</div>
</div>
@ -222,6 +165,61 @@
<div id="skills" class="tile is-ancestor is-vertical">
{{ template "skills" }}
</div>
<div class="card tile is-ancestor is-vertical">
<header class="card-header">
<p class="card-header-title">
Speed
</p>
</header>
<div class="card-content">
<div class="content">
<div class="tile is-ancestor">
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="walk">Walk:</label>
<div class="control">
<input type="number" name="walk" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="burrow">Burrow:</label>
<div class="control">
<input type="number" name="burrow" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="climb">Climb:</label>
<div class="control">
<input type="number" name="climb" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
</div>
<div class="tile is-ancestor">
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="fly">Fly:</label>
<div class="control">
<input type="number" name="fly" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="swim">Swim:</label>
<div class="control">
<input type="number" name="swim" required class="input input-bordered w-full max-w-xs">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">

View file

@ -11,25 +11,31 @@
<div class="tile is-ancestor">
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="saveDex">Dex:</label>
<label class="checkbox" for="savedex"><input type="checkbox"
name="checkSavedex">Dex:</label>
<div class="control">
<input type="text" name="saveDex" required class="input input-bordered w-full max-w-xs" value="{{.saveDex}}">
<input type="text" name="savedex" required class="input input-bordered w-full max-w-xs"
value="{{.saveDex}}" readonly>
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="saveCon">Con:</label>
<label class="checkbox" for="savecon"><input type="checkbox"
name="checkSavecon">Con:</label>
<div class="control">
<input type="text" name="saveCon" required class="input input-bordered w-full max-w-xs" value="{{.saveCon}}">
<input type="text" name="savecon" required class="input input-bordered w-full max-w-xs"
value="{{.saveCon}}" readonly>
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="saveWis">Wis:</label>
<label class="checkbox" for="savewis"><input type="checkbox"
name="checkSavewis">Wis:</label>
<div class="control">
<input type="text" name="saveWis" required class="input input-bordered w-full max-w-xs" value="{{.saveWis}}">
<input type="text" name="savewis" required class="input input-bordered w-full max-w-xs"
value="{{.saveWis}}" readonly>
</div>
</div>
</div>
@ -38,25 +44,28 @@
<div class="tile is-ancestor">
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="saveCha">Cha:</label>
<label class="checkbox" for="savecha"><input type="checkbox" name="checkSavecha">Cha:</label>
<div class="control">
<input type="text" name="saveCha" required class="input input-bordered w-full max-w-xs" value="{{.saveCha}}">
<input type="text" name="savecha" required class="input input-bordered w-full max-w-xs"
value="{{.saveCha}}" readonly>
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="saveInt">Int:</label>
<label class="checkbox" for="saveint"><input type="checkbox" name="checkSaveint">Int:</label>
<div class="control">
<input type="text" name="saveInt" required class="input input-bordered w-full max-w-xs" value="{{.saveInt}}">
<input type="text" name="saveint" required class="input input-bordered w-full max-w-xs"
value="{{.saveInt}}" readonly>
</div>
</div>
</div>
<div class="tile is-parent gap">
<div class="tile is-child field">
<label for="saveStr">Str:</label>
<label class="checkbox" for="savestr"><input type="checkbox" name="checkSavestr">Str:</label>
<div class="control">
<input type="text" name="saveStr" required class="input input-bordered w-full max-w-xs" value="{{.saveStr}}">
<input type="text" name="savestr" required class="input input-bordered w-full max-w-xs"
value="{{.saveStr}}" readonly>
</div>
</div>
</div>
@ -76,28 +85,32 @@
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label class="checkbox" for="acrobatics"><input type="checkbox" name="checkAcrobatics">Acrobatics:</label>
<label class="checkbox" for="acrobatics"><input type="checkbox"
name="checkAcrobatics">Acrobatics:</label>
<div class="control">
<input type="text" name="acrobatics" required class="input input-bordered w-full max-w-xs" value="{{
<input type="text" name="acrobatics" required
class="input input-bordered w-full max-w-xs" value="{{
.acrobatics }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="animalhandling" class="checkbox"><input type="checkbox" name="checkAnimalhandling">Animal Handling:</label>
<label for="animalhandling" class="checkbox"><input type="checkbox"
name="checkAnimalhandling">Animal Handling:</label>
<div class="control">
<input type="text" name="animalhandling" required class="input input-bordered w-full max-w-xs"
value="{{ .animalHandling }}" readonly>
<input type="text" name="animalhandling" required
class="input input-bordered w-full max-w-xs" value="{{ .animalHandling }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="arcana" class="ceckbox"><input type="checkbox" name="checkArcana">Arcana:</label>
<label for="arcana" class="ceckbox"><input type="checkbox"
name="checkArcana">Arcana:</label>
<div class="control">
<input type="text" name="arcana" required class="input input-bordered w-full max-w-xs" value="{{ .arcana }}"
readonly>
<input type="text" name="arcana" required class="input input-bordered w-full max-w-xs"
value="{{ .arcana }}" readonly>
</div>
</div>
</div>
@ -105,25 +118,28 @@
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="athletics" class="checkbox"><input type="checkbox" name="checkAthletics">Athletics:</label>
<label for="athletics" class="checkbox"><input type="checkbox"
name="checkAthletics">Athletics:</label>
<div class="control">
<input type="text" name="athletics" required class="input input-bordered w-full max-w-xs"
value="{{ .athletics }}" readonly>
<input type="text" name="athletics" required
class="input input-bordered w-full max-w-xs" value="{{ .athletics }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="deception" class="checkbox"><input type="checkbox" name="checkDeception">Deception:</label>
<label for="deception" class="checkbox"><input type="checkbox"
name="checkDeception">Deception:</label>
<div class="control">
<input type="text" name="deception" required class="input input-bordered w-full max-w-xs"
value="{{ .deception }}" readonly>
<input type="text" name="deception" required
class="input input-bordered w-full max-w-xs" value="{{ .deception }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="history" class="checkbox"><input type="checkbox" name="checkHistory">History:</label>
<label for="history" class="checkbox"><input type="checkbox"
name="checkHistory">History:</label>
<div class="control">
<input type="text" name="history" required class="input input-bordered w-full max-w-xs"
value="{{ .history }}" readonly>
@ -134,7 +150,8 @@
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="insight" class="checkbox"><input type="checkbox" name="checkInsight">Insight:</label>
<label for="insight" class="checkbox"><input type="checkbox"
name="checkInsight">Insight:</label>
<div class="control">
<input type="text" name="insight" required class="input input-bordered w-full max-w-xs"
value="{{ .insight }}" readonly>
@ -143,19 +160,21 @@
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="intimidation" class="checkbox"><input type="checkbox" name="checkIntimidation">Intimidation:</label>
<label for="intimidation" class="checkbox"><input type="checkbox"
name="checkIntimidation">Intimidation:</label>
<div class="control">
<input type="text" name="intimidation" required class="input input-bordered w-full max-w-xs"
value="{{ .intimidation }}" readonly>
<input type="text" name="intimidation" required
class="input input-bordered w-full max-w-xs" value="{{ .intimidation }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="investigation" class="checkbox"><input type="checkbox" name="checkInvestigation">Investigation:</label>
<label for="investigation" class="checkbox"><input type="checkbox"
name="checkInvestigation">Investigation:</label>
<div class="control">
<input type="text" name="investigation" required class="input input-bordered w-full max-w-xs"
value="{{ .investigation }}" readonly>
<input type="text" name="investigation" required
class="input input-bordered w-full max-w-xs" value="{{ .investigation }}" readonly>
</div>
</div>
</div>
@ -163,7 +182,8 @@
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="medicine" class="checkbox"><input type="checkbox" name="checkMedicine">Medicine:</label>
<label for="medicine" class="checkbox"><input type="checkbox"
name="checkMedicine">Medicine:</label>
<div class="control">
<input type="text" name="medicine" required class="input input-bordered w-full max-w-xs"
value="{{ .medicine }}" readonly>
@ -172,19 +192,21 @@
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="nature" class="checkbox"><input type="checkbox" name="checkNature">Nature:</label>
<label for="nature" class="checkbox"><input type="checkbox"
name="checkNature">Nature:</label>
<div class="control">
<input type="text" name="nature" required class="input input-bordered w-full max-w-xs" value="{{ .nature }}"
readonly>
<input type="text" name="nature" required class="input input-bordered w-full max-w-xs"
value="{{ .nature }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="performance" class="checkbox"><input type="checkbox" name="checkPerformance">Performance:</label>
<label for="performance" class="checkbox"><input type="checkbox"
name="checkPerformance">Performance:</label>
<div class="control">
<input type="text" name="performance" required class="input input-bordered w-full max-w-xs"
value="{{ .performance }}" readonly>
<input type="text" name="performance" required
class="input input-bordered w-full max-w-xs" value="{{ .performance }}" readonly>
</div>
</div>
</div>
@ -192,16 +214,18 @@
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="perception" class="checkbox"><input type="checkbox" name="checkPerception">Perception:</label>
<label for="perception" class="checkbox"><input type="checkbox"
name="checkPerception">Perception:</label>
<div class="control">
<input type="text" name="perception" required class="input input-bordered w-full max-w-xs"
value="{{ .perception }}" readonly>
<input type="text" name="perception" required
class="input input-bordered w-full max-w-xs" value="{{ .perception }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="stealth" class="checkbox"><input type="checkbox" name="checkStealth">Stealth:</label>
<label for="stealth" class="checkbox"><input type="checkbox"
name="checkStealth">Stealth:</label>
<div class="control">
<input type="text" name="stealth" required class="input input-bordered w-full max-w-xs"
value="{{ .stealth }}" readonly>
@ -210,10 +234,11 @@
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="persuasion" class="checkbox"><input type="checkbox" name="checkPersuasion">Persuasion:</label>
<label for="persuasion" class="checkbox"><input type="checkbox"
name="checkPersuasion">Persuasion:</label>
<div class="control">
<input type="text" name="persuasion" required class="input input-bordered w-full max-w-xs"
value="{{ .persuasion }}" readonly>
<input type="text" name="persuasion" required
class="input input-bordered w-full max-w-xs" value="{{ .persuasion }}" readonly>
</div>
</div>
</div>
@ -221,16 +246,18 @@
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child field">
<label for="sleightofhand" class="checkbox"><input type="checkbox" name="checkSleightofhand">Sleight of Hand:</label>
<label for="sleightofhand" class="checkbox"><input type="checkbox"
name="checkSleightofhand">Sleight of Hand:</label>
<div class="control">
<input type="text" name="sleightofhand" required class="input input-bordered w-full max-w-xs"
value="{{.sleightOfHand }}" readonly>
<input type="text" name="sleightofhand" required
class="input input-bordered w-full max-w-xs" value="{{.sleightOfHand }}" readonly>
</div>
</div>
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="religion" class="checkbox"><input type="checkbox" name="checkReligion">Religion:</label>
<label for="religion" class="checkbox"><input type="checkbox"
name="checkReligion">Religion:</label>
<div class="control">
<input type="text" name="religion" required class="input input-bordered w-full max-w-xs"
value="{{ .religion }}" readonly>
@ -239,7 +266,8 @@
</div>
<div class="tile is-parent">
<div class="tile is-child field">
<label for="survival" class="checkbox"><input type="checkbox" name="checkSurvival">Survival:</label>
<label for="survival" class="checkbox"><input type="checkbox"
name="checkSurvival">Survival:</label>
<div class="control">
<input type="text" name="survival" required class="input input-bordered w-full max-w-xs"
value="{{ .survival }}" readonly>