@ -10,6 +10,7 @@ import templruntime "github.com/a-h/templ/runtime"
import (
"fmt"
"strconv"
"track-gopher/models"
)
@ -34,328 +35,242 @@ func Admin(groups []models.Group, racers []models.Racer) templ.Component {
templ_7745c5c3_Var1 = templ . NopComponent
}
ctx = templ . ClearChildren ( ctx )
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 1 , "<!doctype html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>Derby Race Admin</title><!-- Bootstrap CSS --><link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css\" rel=\"stylesheet\"><script src=\"/static/js/htmx.min.js\"></script><!-- Bootstrap JS Bundle with Popper --><script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js\"></script></head><body class=\"bg-light\"><div class=\"container py-4\"><header class=\"mb-4\"><h1 class=\"text-center\">Derby Race Admin</h1><nav class=\"nav nav-pills nav-fill mt-3\"><a class=\"nav-link active\" data-bs-toggle=\"tab\" href=\"#groups\">Groups</a> <a class=\"nav-link\" data-bs-toggle=\"tab\" href=\"#racers\">Racers</a> <a class=\"nav-link\" href=\"/\">Race Timer</a> <a class=\"nav-link\" href=\"/register\">Racer Registration</a> <a class=\"nav-link\" href=\"/heats\">Race Heats</a></nav></header><div class=\"tab-content\"><div class=\"tab-pane fade show active\" id=\"groups\"><div class=\"card mb-4\"><div class=\"card-header d-flex justify-content-between align-items-center\"><h5 class=\"mb-0\">Groups</h5><button class=\"btn btn-primary btn-sm\" data-bs-toggle=\"modal\" data-bs-target=\"#addGroupModal\">Add Group</button></div><div class=\"card-body\"><div class=\"table-responsive\"><table class=\"table table-striped\"><thead><tr><th>Name</th><th>Description</th><th>Actions</th></tr></thead> <tbody>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
templ_7745c5c3_Var2 := templruntime . GeneratedTemplate ( func ( templ_7745c5c3_Input templruntime . GeneratedComponentInput ) ( templ_7745c5c3_Err error ) {
templ_7745c5c3_W , ctx := templ_7745c5c3_Input . Writer , templ_7745c5c3_Input . Context
templ_7745c5c3_Buffer , templ_7745c5c3_IsBuffer := templruntime . GetBuffer ( templ_7745c5c3_W )
if ! templ_7745c5c3_IsBuffer {
defer func ( ) {
templ_7745c5c3_BufErr := templruntime . ReleaseBuffer ( templ_7745c5c3_Buffer )
if templ_7745c5c3_Err == nil {
templ_7745c5c3_Err = templ_7745c5c3_BufErr
}
for _ , group := range groups {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 2 , "<tr><td>" )
} ( )
}
ctx = templ . InitializeContext ( ctx )
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 1 , "<div class=\"container py-4\"><h1 class=\"mb-4\">Admin Dashboard</h1><div class=\"row\"><div class=\"col-md-6 mb-4\"><div class=\"card\"><div class=\"card-header d-flex justify-content-between align-items-center\"><h2 class=\"h5 mb-0\">Groups</h2><button class=\"btn btn-sm btn-primary\" hx-get=\"/admin/groups/new\" hx-target=\"#group-form-container\">Add Group</button></div><div class=\"card-body\"><div id=\"group-form-container\" class=\"mb-4\"></div><div id=\"groups-list\">" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var2 string
templ_7745c5c3_Var2 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Name )
if len ( groups ) == 0 {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 2 , "<div class=\"alert alert-info\"><p class=\"mb-0\">No groups added yet.</p></div>" )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 56 , Col : 28 }
return templ_7745c5c3_Err
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var2 ) )
} else {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 3 , "<div class=\"list-group\">" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 3 , "</td><td>" )
for _ , group := range groups {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 4 , "<div class=\"list-group-item list-group-item-action d-flex justify-content-between align-items-center\"><div><h5 class=\"mb-1\">" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var3 string
templ_7745c5c3_Var3 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Description )
templ_7745c5c3_Var3 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Name )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 57, Col : 35 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 40, Col : 42 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var3 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 4 , "</td><td><button class=\"btn btn-sm btn-outline-primary me-1\" data-bs-toggle=\"modal\" data-bs-target=\"#editGroupModal\" data-id=\"" )
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 5 , "</h5>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if group . Description != "" {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 6 , "<p class=\"mb-1 text-muted\">" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var4 string
templ_7745c5c3_Var4 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprint ( group . ID ) )
templ_7745c5c3_Var4 , templ_7745c5c3_Err = templ . JoinStringErrs ( group. Description )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 62, Col : 44 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 42, Col : 60 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var4 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 5 , "\" data-name=\"" )
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 7 , "</p>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 8 , "</div><div class=\"btn-group\"><button class=\"btn btn-sm btn-outline-primary\" hx-get=\"" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var5 string
templ_7745c5c3_Var5 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Name )
templ_7745c5c3_Var5 , templ_7745c5c3_Err = templ . JoinStringErrs ( "/admin/groups/edit/" + strconv . FormatInt ( group . ID , 10 ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 63, Col : 36 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 48, Col : 78 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var5 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 6, "\" data-description =\"")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 9, "\" hx-target=\"#group-form-container\">Edit</button> <button class=\"btn btn-sm btn-outline-danger\" hx-delete =\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var6 string
templ_7745c5c3_Var6 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Description )
templ_7745c5c3_Var6 , templ_7745c5c3_Err = templ . JoinStringErrs ( "/api/groups/" + strconv . FormatInt ( group . ID , 10 ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 64, Col : 50 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 55, Col : 74 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var6 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 7, "\">Edit</button> <button class=\"btn btn-sm btn-outline-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#deleteGroupModal\" data-id =\"")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 10, "\" hx-target=\"#groups-list\" hx-confirm =\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var7 string
templ_7745c5c3_Var7 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprint ( group . ID ) )
templ_7745c5c3_Var7 , templ_7745c5c3_Err = templ . JoinStringErrs ( "Are you sure you want to delete " + group . Name + "?" )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 70, Col : 44 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 57, Col : 80 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var7 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 8 , "\" data-name=\"" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var8 string
templ_7745c5c3_Var8 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Name )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 71 , Col : 36 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var8 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 9 , "\">Delete</button></td></tr>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 10 , "</tbody></table></div></div></div></div><div class=\"tab-pane fade\" id=\"racers\"><div class=\"card mb-4\"><div class=\"card-header\"><h5 class=\"mb-0\">Racers</h5></div><div class=\"card-body\"><div class=\"table-responsive\"><table class=\"table table-striped\"><thead><tr><th>Name</th><th>Car #</th><th>Weight</th><th>Group</th><th>Actions</th></tr></thead> <tbody>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
for _ , racer := range racers {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 11 , "<tr><td>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var9 string
templ_7745c5c3_Var9 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . FirstName )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 104 , Col : 33 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var9 ) )
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 11 , "\">Delete</button></div></div>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 12 , " " )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var10 string
templ_7745c5c3_Var10 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . LastName )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 104 , Col : 52 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var10 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 13 , "</td><td>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var11 string
templ_7745c5c3_Var11 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . CarNumber )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 105 , Col : 33 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var11 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 1 4, "</td><td >")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 12 , "</div>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var12 string
templ_7745c5c3_Var12 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprintf ( "%.1f" , racer . CarWeight ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 106 , Col : 54 }
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var12 ) )
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 13 , "</div></div></div></div><div class=\"col-md-6 mb-4\"><div class=\"card\"><div class=\"card-header d-flex justify-content-between align-items-center\"><h2 class=\"h5 mb-0\">Racers</h2><button class=\"btn btn-sm btn-primary\" hx-get=\"/admin/racers/new\" hx-target=\"#racer-form-container\">Add Racer</button></div><div class=\"card-body\"><div id=\"racer-form-container\" class=\"mb-4\"></div><div id=\"racers-list\">" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 15 , " oz</td><td>" )
if len ( racers ) == 0 {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 14 , "<div class=\"alert alert-info\"><p class=\"mb-0\">No racers added yet.</p></div>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var13 string
templ_7745c5c3_Var13 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . GroupName )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 107 , Col : 33 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var13 ) )
} else {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 15 , "<div class=\"table-responsive\"><table class=\"table table-striped table-hover\"><thead><tr><th>Name</th><th>Car #</th><th>Group</th><th>Actions</th></tr></thead> <tbody>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 16 , "</td><td><button class=\"btn btn-sm btn-outline-primary me-1\" data-bs-toggle=\"modal\" data-bs-target=\"#editRacerModal\" data-id=\"" )
for _ , racer := range racers {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 16 , "<tr><td>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var14 string
templ_7745c5c3_Var14 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt. Sprint ( racer . ID ) )
var templ_7745c5c3_Var8 string
templ_7745c5c3_Var8 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . FirstName + " " + racer . LastName )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 12, Col : 44 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 105 , Col : 58 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var 14 ) )
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var 8 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 17 , " \" data-firstname=\" ")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 17 , " </td><td> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var15 string
templ_7745c5c3_Var15 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . FirstName )
var templ_7745c5c3_Var9 string
templ_7745c5c3_Var9 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . CarNumber )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 13, Col : 46 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 06, Col : 35 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var 15 ) )
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var 9 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 18 , " \" data-lastname=\" ")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 18 , " </td><td> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var16 string
templ_7745c5c3_Var16 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . LastName )
var templ_7745c5c3_Var10 string
templ_7745c5c3_Var10 , templ_7745c5c3_Err = templ . JoinStringErrs ( getGroupNameForRacer ( groups , racer . GroupID ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 14, Col : 44 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 07, Col : 63 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 6 ) )
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 0 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 19 , " \" data-carnumber =\"")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 19 , " </td><td><div class=\"btn-group btn-group-sm\"><button class=\"btn btn-outline-primary\" hx-get =\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var17 string
templ_7745c5c3_Var17 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . CarNumber )
var templ_7745c5c3_Var11 string
templ_7745c5c3_Var11 , templ_7745c5c3_Err = templ . JoinStringErrs ( "/admin/racers/edit/" + strconv . FormatInt ( racer . ID , 10 ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 11 5, Col : 46 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 11 2, Col : 81 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 7 ) )
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 1 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 20 , "\" data-carweight =\"")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 20 , "\" hx-target=\"#racer-form-container\">Edit</button> <button class=\"btn btn-outline-danger\" hx-delete =\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var18 string
templ_7745c5c3_Var18 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprintf ( "%.1f" , racer . CarWeight ) )
var templ_7745c5c3_Var12 string
templ_7745c5c3_Var12 , templ_7745c5c3_Err = templ . JoinStringErrs ( "/api/racers/" + strconv . FormatInt ( racer . ID , 10 ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 11 6, Col : 6 7}
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 11 9, Col : 7 7}
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 8 ) )
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 2 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 21 , "\" data-groupid =\"")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 21 , "\" hx-target=\"#racers-list\" hx-confirm =\"")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var19 string
templ_7745c5c3_Var19 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprint ( racer . GroupID ) )
var templ_7745c5c3_Var13 string
templ_7745c5c3_Var13 , templ_7745c5c3_Err = templ . JoinStringErrs ( "Are you sure you want to delete " + racer . FirstName + " " + racer . LastName + "?" )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 17, Col : 54 }
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 1 21, Col : 111 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 9 ) )
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var1 3 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 22 , "\"> Edit</button> <button class=\"btn btn-sm btn-outline-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#deleteRacerModal\" data-id=\" ")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 22 , "\"> Delete</button></div></td></tr> ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var20 string
templ_7745c5c3_Var20 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprint ( racer . ID ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 123 , Col : 44 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var20 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 23 , " \" data-name=\" ")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 23 , "</tbody></table></div>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var21 string
templ_7745c5c3_Var21 , templ_7745c5c3_Err = templ . JoinStringErrs ( racer . FirstName + " " + racer . LastName )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 124 , Col : 64 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var21 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 24 , " \">Delete</button></td></tr >")
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 24 , "</div></div></div></div></div></div>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 25 , "</tbody></table></div></div></div></div></div></div><!-- Add Group Modal --><div class=\"modal fade\" id=\"addGroupModal\" tabindex=\"-1\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><h5 class=\"modal-title\">Add Group</h5><button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button></div><form hx-post=\"/api/groups\" hx-swap=\"none\" hx-on::after-request=\"location.reload()\"><div class=\"modal-body\"><div class=\"mb-3\"><label for=\"groupName\" class=\"form-label\">Name</label> <input type=\"text\" class=\"form-control\" id=\"groupName\" name=\"name\" required></div><div class=\"mb-3\"><label for=\"groupDescription\" class=\"form-label\">Description</label> <textarea class=\"form-control\" id=\"groupDescription\" name=\"description\" rows=\"3\"></textarea></div></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button> <button type=\"submit\" class=\"btn btn-primary\">Save</button></div></form></div></div></div><!-- Edit Group Modal --><div class=\"modal fade\" id=\"editGroupModal\" tabindex=\"-1\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><h5 class=\"modal-title\">Edit Group</h5><button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button></div><form id=\"editGroupForm\" hx-put=\"/api/groups/0\" hx-swap=\"none\" hx-on::after-request=\"location.reload()\"><div class=\"modal-body\"><div class=\"mb-3\"><label for=\"editGroupName\" class=\"form-label\">Name</label> <input type=\"text\" class=\"form-control\" id=\"editGroupName\" name=\"name\" required></div><div class=\"mb-3\"><label for=\"editGroupDescription\" class=\"form-label\">Description</label> <textarea class=\"form-control\" id=\"editGroupDescription\" name=\"description\" rows=\"3\"></textarea></div></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button> <button type=\"submit\" class=\"btn btn-primary\">Save</button></div></form></div></div></div><!-- Delete Group Modal --><div class=\"modal fade\" id=\"deleteGroupModal\" tabindex=\"-1\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><h5 class=\"modal-title\">Delete Group</h5><button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button></div><div class=\"modal-body\"><p>Are you sure you want to delete the group \"<span id=\"deleteGroupName\"></span>\"?</p><p class=\"text-danger\">This will also delete all racers in this group!</p></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button> <button type=\"button\" id=\"confirmDeleteGroup\" class=\"btn btn-danger\">Delete</button></div></div></div></div><!-- Edit Racer Modal --><div class=\"modal fade\" id=\"editRacerModal\" tabindex=\"-1\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><h5 class=\"modal-title\">Edit Racer</h5><button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button></div><form id=\"editRacerForm\" hx-put=\"/api/racers/0\" hx-swap=\"none\" hx-on::after-request=\"location.reload()\"><div class=\"modal-body\"><div class=\"row\"><div class=\"col-md-6 mb-3\"><label for=\"editFirstName\" class=\"form-label\">First Name</label> <input type=\"text\" class=\"form-control\" id=\"editFirstName\" name=\"first_name\" required></div><div class=\"col-md-6 mb-3\"><label for=\"editLastName\" class=\"form-label\">Last Name</label> <input type=\"text\" class=\"form-control\" id=\"editLastName\" name=\"last_name\" required></div></div><div class=\"row\"><div class=\"col-md-6 mb-3\"><label for=\"editCarNumber\" class=\"form-label\">Car Number</label> <input type=\"text\" class=\"form-control\" id=\"editCarNumber\" name=\"car_number\" required></div><div class=\"col-md-6 mb-3\"><label for=\"editCarWeight\" class=\"form-label\">Car Weight (oz)</label> <input type=\"number\" step=\"0.1\" class=\"form-control\" id=\"editCarWeight\" name=\"car_weight\" required></div></div><div class=\"mb-3\"><label for=\"editGroupID\" class=\"form-label\">Group</label> <select class=\"form-select\" id=\"editGroupID\" name=\"group_id\" required>" )
return nil
} )
templ_7745c5c3_Err = Layout ( "Admin" ) . Render ( templ . WithChildren ( ctx , templ_7745c5c3_Var2 ) , templ_7745c5c3_Buffer )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
} )
}
func getGroupNameForRacer ( groups [ ] models . Group , groupID int64 ) string {
for _ , group := range groups {
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 26 , "<option value=\"" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var22 string
templ_7745c5c3_Var22 , templ_7745c5c3_Err = templ . JoinStringErrs ( fmt . Sprint ( group . ID ) )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 249 , Col : 46 }
if group . ID == groupID {
return group . Name
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var22 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 27 , "\">" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var23 string
templ_7745c5c3_Var23 , templ_7745c5c3_Err = templ . JoinStringErrs ( group . Name )
if templ_7745c5c3_Err != nil {
return templ . Error { Err : templ_7745c5c3_Err , FileName : ` web/templates/admin.templ ` , Line : 249 , Col : 61 }
}
_ , templ_7745c5c3_Err = templ_7745c5c3_Buffer . WriteString ( templ . EscapeString ( templ_7745c5c3_Var23 ) )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 28 , "</option>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
templ_7745c5c3_Err = templruntime . WriteString ( templ_7745c5c3_Buffer , 29 , "</select></div></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button> <button type=\"submit\" class=\"btn btn-primary\">Save</button></div></form></div></div></div><!-- Delete Racer Modal --><div class=\"modal fade\" id=\"deleteRacerModal\" tabindex=\"-1\" aria-hidden=\"true\"><div class=\"modal-dialog\"><div class=\"modal-content\"><div class=\"modal-header\"><h5 class=\"modal-title\">Delete Racer</h5><button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button></div><div class=\"modal-body\"><p>Are you sure you want to delete the racer \"<span id=\"deleteRacerName\"></span>\"?</p></div><div class=\"modal-footer\"><button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button> <button type=\"button\" id=\"confirmDeleteRacer\" class=\"btn btn-danger\">Delete</button></div></div></div></div><script>\r\n\t\t\t// Handle edit group modal\r\n\t\t\tdocument.getElementById('editGroupModal').addEventListener('show.bs.modal', function (event) {\r\n\t\t\t\tconst button = event.relatedTarget;\r\n\t\t\t\tconst id = button.getAttribute('data-id');\r\n\t\t\t\tconst name = button.getAttribute('data-name');\r\n\t\t\t\tconst description = button.getAttribute('data-description');\r\n\t\t\t\t\r\n\t\t\t\tconst form = document.getElementById('editGroupForm');\r\n\t\t\t\tform.setAttribute('hx-put', `/api/groups/${id}`);\r\n\t\t\t\t\r\n\t\t\t\tdocument.getElementById('editGroupName').value = name;\r\n\t\t\t\tdocument.getElementById('editGroupDescription').value = description;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Handle delete group modal\r\n\t\t\tdocument.getElementById('deleteGroupModal').addEventListener('show.bs.modal', function (event) {\r\n\t\t\t\tconst button = event.relatedTarget;\r\n\t\t\t\tconst id = button.getAttribute('data-id');\r\n\t\t\t\tconst name = button.getAttribute('data-name');\r\n\t\t\t\t\r\n\t\t\t\tdocument.getElementById('deleteGroupName').textContent = name;\r\n\t\t\t\t\r\n\t\t\t\tdocument.getElementById('confirmDeleteGroup').onclick = function() {\r\n\t\t\t\t\tfetch(`/api/groups/${id}`, { method: 'DELETE' })\r\n\t\t\t\t\t\t.then(response => {\r\n\t\t\t\t\t\t\tif (response.ok) {\r\n\t\t\t\t\t\t\t\tlocation.reload();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\talert('Failed to delete group');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Handle edit racer modal\r\n\t\t\tdocument.getElementById('editRacerModal').addEventListener('show.bs.modal', function (event) {\r\n\t\t\t\tconst button = event.relatedTarget;\r\n\t\t\t\tconst id = button.getAttribute('data-id');\r\n\t\t\t\tconst firstName = button.getAttribute('data-firstname');\r\n\t\t\t\tconst lastName = button.getAttribute('data-lastname');\r\n\t\t\t\tconst carNumber = button.getAttribute('data-carnumber');\r\n\t\t\t\tconst carWeight = button.getAttribute('data-carweight');\r\n\t\t\t\tconst groupId = button.getAttribute('data-groupid');\r\n\t\t\t\t\r\n\t\t\t\tconst form = document.getElementById('editRacerForm');\r\n\t\t\t\tform.setAttribute('hx-put', `/api/racers/${id}`);\r\n\t\t\t\t\r\n\t\t\t\tdocument.getElementById('editFirstName').value = firstName;\r\n\t\t\t\tdocument.getElementById('editLastName').value = lastName;\r\n\t\t\t\tdocument.getElementById('editCarNumber').value = carNumber;\r\n\t\t\t\tdocument.getElementById('editCarWeight').value = carWeight;\r\n\t\t\t\tdocument.getElementById('editGroupID').value = groupId;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t// Handle delete racer modal\r\n\t\t\tdocument.getElementById('deleteRacerModal').addEventListener('show.bs.modal', function (event) {\r\n\t\t\t\tconst button = event.relatedTarget;\r\n\t\t\t\tconst id = button.getAttribute('data-id');\r\n\t\t\t\tconst name = button.getAttribute('data-name');\r\n\t\t\t\t\r\n\t\t\t\tdocument.getElementById('deleteRacerName').textContent = name;\r\n\t\t\t\t\r\n\t\t\t\tdocument.getElementById('confirmDeleteRacer').onclick = function() {\r\n\t\t\t\t\tfetch(`/api/racers/${id}`, { method: 'DELETE' })\r\n\t\t\t\t\t\t.then(response => {\r\n\t\t\t\t\t\t\tif (response.ok) {\r\n\t\t\t\t\t\t\t\tlocation.reload();\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\talert('Failed to delete racer');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t</script></body></html>" )
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
return nil
} )
return "Unknown Group"
}
var _ = templruntime . GeneratedTemplate