added a basic function to add multiple Monsters

This commit is contained in:
Patryk Hegenberg 2023-11-29 22:36:00 +01:00
parent bf021090ab
commit 4dd9c18832
4 changed files with 207 additions and 122 deletions

77
main.go
View file

@ -101,6 +101,7 @@ var (
//go:embed templates/*.html //go:embed templates/*.html
//go:embed images/* //go:embed images/*
content embed.FS content embed.FS
Monsters []Monster
) )
func main() { func main() {
@ -109,6 +110,7 @@ func main() {
http.HandleFunc("/", formHandler(filename)) http.HandleFunc("/", formHandler(filename))
http.HandleFunc("/submit", submitHandler(filename)) http.HandleFunc("/submit", submitHandler(filename))
http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.FS(content)))) http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.FS(content))))
http.HandleFunc("/addMonster", addMonster())
fmt.Println("Server gestartet, erreichbar unter http://localhost:8080") fmt.Println("Server gestartet, erreichbar unter http://localhost:8080")
http.ListenAndServe(":8080", nil) http.ListenAndServe(":8080", nil)
@ -149,7 +151,7 @@ func submitHandler(filename string) http.HandlerFunc {
// Monster-Objekt erstellen // Monster-Objekt erstellen
filename := r.FormValue("filename") filename := r.FormValue("filename")
monster := Monster{ /*monster := Monster{
Name: r.FormValue("name"), Name: r.FormValue("name"),
Source: r.FormValue("source"), Source: r.FormValue("source"),
Size: []string{r.FormValue("size")}, Size: []string{r.FormValue("size")},
@ -199,14 +201,14 @@ func submitHandler(filename string) http.HandlerFunc {
Entries: []string{r.FormValue("actionEntry")}, Entries: []string{r.FormValue("actionEntry")},
}, },
}, },
} }*/
// Charakter-Objekt erstellen oder aktualisieren // Charakter-Objekt erstellen oder aktualisieren
mu.Lock() mu.Lock()
defer mu.Unlock() defer mu.Unlock()
char := getOrCreateCharacter(filename) char := getOrCreateCharacter(filename)
char.Monster = append(char.Monster, monster) char.Monster = append(char.Monster, Monsters...)
// Charakterdaten in JSON umwandeln // Charakterdaten in JSON umwandeln
charJSON, err := json.Marshal(char) charJSON, err := json.Marshal(char)
@ -293,3 +295,72 @@ func parseInt(s string) int {
} }
return i return i
} }
func addMonster() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// TODO
if r.Method != http.MethodPost {
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
return
}
err := r.ParseForm()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
monster := Monster{
Name: r.FormValue("name"),
Source: r.FormValue("source"),
Size: []string{r.FormValue("size")},
Type: r.FormValue("type"),
Alignment: []string{r.FormValue("alignment")},
AC: []AC{
{
AC: parseInt(r.FormValue("ac")),
From: []string{r.FormValue("acFrom")},
},
},
HP: HP{
Average: parseInt(r.FormValue("hpAverage")),
Formula: r.FormValue("hpFormula"),
},
Speed: Speed{
Walk: parseInt(r.FormValue("speed")),
},
Str: parseInt(r.FormValue("str")),
Dex: parseInt(r.FormValue("dex")),
Con: parseInt(r.FormValue("con")),
Int: parseInt(r.FormValue("int")),
Wis: parseInt(r.FormValue("wis")),
Cha: parseInt(r.FormValue("cha")),
Save: Save{
Dex: r.FormValue("saveDex"),
Con: r.FormValue("saveCon"),
Wis: r.FormValue("saveWis"),
},
Skill: Skill{
Perception: r.FormValue("perception"),
Stealth: r.FormValue("stealth"),
},
DamageRes: []string{r.FormValue("damageRes")},
Senses: []string{r.FormValue("senses")},
Languages: []string{r.FormValue("languages")},
CR: r.FormValue("cr"),
Traits: []Trait{
{
Name: r.FormValue("traitName"),
Entries: []string{r.FormValue("traitEntry")},
},
},
Actions: []Action{
{
Name: r.FormValue("actionName"),
Entries: []string{r.FormValue("actionEntry")},
},
},
}
Monsters = append(Monsters, monster)
}
}

View file

@ -9,6 +9,9 @@
<!-- Hier könnten weitere Meta-Tags, Stylesheets, JavaScript-Dateien usw. eingefügt werden --> <!-- Hier könnten weitere Meta-Tags, Stylesheets, JavaScript-Dateien usw. eingefügt werden -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css">
<link href="https://cdn.jsdelivr.net/npm/daisyui@2.31.0/dist/full.css" rel="stylesheet" type="text/css"> <link href="https://cdn.jsdelivr.net/npm/daisyui@2.31.0/dist/full.css" rel="stylesheet" type="text/css">
<script src="https://unpkg.com/htmx.org@1.9.9"
integrity="sha384-QFjmbokDn2DjBjq+fM+8LUIVrAgqcNW2s0PjAxHETgRn9l4fvX31ZxDxvwQnyMOX"
crossorigin="anonymous"></script>
<style> <style>
body { body {
display: flex; display: flex;

View file

@ -7,7 +7,18 @@
<input type="text" name="filename" required placeholder="Dateiname" <input type="text" name="filename" required placeholder="Dateiname"
class="input input-bordered w-full max-w-xs"><br> class="input input-bordered w-full max-w-xs"><br>
</div> </div>
<div class="grid grid-cols-1">
<button type="button" hx-post="/addMonster" class="btn">Add Monster</button>
</div>
<div class="collapse bg-base-200">
<input type="checkbox" />
<div class="collapse-title text-xl font-medium">
Monster
</div>
<div class="collapse-content">
{{ template "monsterform" . }} {{ template "monsterform" . }}
</div>
</div>
<input type="hidden" name="filename" value="{{.Filename}}"> <input type="hidden" name="filename" value="{{.Filename}}">
<div class="card-actions justify-end"> <div class="card-actions justify-end">
<input type="submit" value="Submit" class="btn"> <input type="submit" value="Submit" class="btn">