From dc77936fc482c5b253b7ef24dd502abffef4bde1 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Fri, 7 Mar 2025 21:17:36 -0900 Subject: [PATCH] test --- models/models.go | 1 + web/server.go | 144 ++++++++++++++ web/templates/final_results_page.templ | 80 ++++++++ web/templates/final_results_page_templ.go | 222 ++++++++++++++++++++-- web/templates/final_results_row.templ | 33 ++++ web/templates/final_results_row_templ.go | 155 +++++++++++++++ web/templates/race_manage.templ | 14 +- web/templates/race_manage_templ.go | 54 +++--- 8 files changed, 654 insertions(+), 49 deletions(-) create mode 100644 web/templates/final_results_row.templ create mode 100644 web/templates/final_results_row_templ.go diff --git a/models/models.go b/models/models.go index 60f5feb..4cd09df 100644 --- a/models/models.go +++ b/models/models.go @@ -95,6 +95,7 @@ const ( EventHeatChanged AdminEventType = iota EventGroupChanged EventHeatRerun + EventResultsReveal ) // Event represents a race event diff --git a/web/server.go b/web/server.go index 314abad..9872869 100644 --- a/web/server.go +++ b/web/server.go @@ -228,8 +228,14 @@ func (s *Server) routes() { // Add final results route s.router.Get("/results", s.handleFinalResults()) + // Add public final results route + s.router.Get("/results/public", s.handleFinalResultsPublic()) + // Main page s.router.Get("/", s.handleIndex()) + + // Add reveal next result route + s.router.Post("/api/results/reveal", s.handleRevealNextResult()) } // Start starts the web server with HTTP/2 support @@ -521,6 +527,17 @@ func (s *Server) broadcastAdminEvent(event models.AdminEvent) { } s.sendAdminEventToAllClients(fmt.Sprintf("event: results\ndata: %s\n\n", sb.String())) } + + case models.EventResultsReveal: + s.logger.Info("Broadcasting results reveal event") + + if data, ok := event.Event.(struct { + Results []models.FinalResult `json:"results"` + RevealCount int `json:"reveal_count"` + GroupName string `json:"group_name"` + }); ok { + s.broadcastResultsReveal(data.Results, data.RevealCount, data.GroupName) + } } } @@ -1899,3 +1916,130 @@ func (s *Server) handleFinalResults() http.HandlerFunc { } } } + +// handleFinalResultsPublic renders the public final results page +func (s *Server) handleFinalResultsPublic() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // Get the currently racing group + currentGroup, err := s.db.GetCurrentRacingGroup() + if err != nil { + s.logger.Error("Failed to get current racing group", "error", err) + http.Error(w, "Failed to get current racing group", http.StatusInternalServerError) + return + } + + // Get group ID from query parameter if provided + groupIDStr := r.URL.Query().Get("group_id") + if groupIDStr != "" { + groupID, err := strconv.ParseInt(groupIDStr, 10, 64) + if err == nil { + // Override current group if specified in URL + currentGroup.ID = groupID + // Get the group name + group, err := s.db.GetGroup(groupID) + if err == nil { + currentGroup.Name = group.Name + } + } + } + + // Get reveal count from query parameter + revealCount := 0 + revealCountStr := r.URL.Query().Get("reveal") + if revealCountStr != "" { + count, err := strconv.Atoi(revealCountStr) + if err == nil { + revealCount = count + } + } + + // Get final results for the group + results, err := s.db.GetFinalResults(currentGroup.ID) + if err != nil { + s.logger.Error("Failed to get final results", "error", err) + http.Error(w, "Failed to get final results", http.StatusInternalServerError) + return + } + + // Render template + component := templates.FinalResultsPublic(results, currentGroup.Name, revealCount) + if err := component.Render(r.Context(), w); err != nil { + s.logger.Error("Failed to render final results template", "error", err) + http.Error(w, "Failed to render page", http.StatusInternalServerError) + } + } +} + +// handleRevealNextResult reveals the next result +func (s *Server) handleRevealNextResult() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // Get the currently racing group + currentGroup, err := s.db.GetCurrentRacingGroup() + if err != nil { + s.logger.Error("Failed to get current racing group", "error", err) + http.Error(w, "Failed to get current racing group", http.StatusInternalServerError) + return + } + + // Parse request body + var request struct { + RevealCount int `json:"reveal_count"` + } + if err := json.NewDecoder(r.Body).Decode(&request); err != nil { + http.Error(w, "Invalid request body", http.StatusBadRequest) + return + } + + // Get final results for the group + results, err := s.db.GetFinalResults(currentGroup.ID) + if err != nil { + s.logger.Error("Failed to get final results", "error", err) + http.Error(w, "Failed to get final results", http.StatusInternalServerError) + return + } + + // Determine what to reveal + revealCount := request.RevealCount + if revealCount < 0 { + revealCount = 0 + } + if revealCount > len(results) { + revealCount = len(results) + } + + // If this is the 4th reveal, show all remaining results + if revealCount == 3 { + revealCount = len(results) + } + + // Broadcast the reveal event + s.broadcastResultsReveal(results, revealCount, currentGroup.Name) + + // Return success + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(map[string]string{"status": "success"}) + } +} + +// broadcastResultsReveal reveals the next result +func (s *Server) broadcastResultsReveal(results []models.FinalResult, revealCount int, groupName string) { + // For each revealed result, render the row + var sb strings.Builder + + if revealCount > 0 && revealCount <= len(results) { + // If this is a single result reveal (1, 2, or 3) + if revealCount <= 3 { + result := results[revealCount-1] + component := templates.FinalResultRow(result) + component.Render(context.Background(), &sb) + } else { + // If this is the final reveal (all remaining results) + for i := 3; i < len(results); i++ { + component := templates.FinalResultRow(results[i]) + component.Render(context.Background(), &sb) + } + } + } + + s.sendAdminEventToAllClients(fmt.Sprintf("event: results-reveal\ndata: %s\n\n", sb.String())) +} diff --git a/web/templates/final_results_page.templ b/web/templates/final_results_page.templ index eddd63c..c94d7c2 100644 --- a/web/templates/final_results_page.templ +++ b/web/templates/final_results_page.templ @@ -3,6 +3,86 @@ package templates import "track-gopher/models" import "fmt" +// Public version of the final results page - no navigation, no group selection +templ FinalResultsPublic(results []models.FinalResult, groupName string, revealCount int) { + @LayoutPublic("Final Results") { +
+
+

Final Results

+

{ groupName }

+
+ +
+
+

Final Standings

+
+
+
+ + + + + + + + + + + + for i, result := range results { + if i < revealCount || revealCount == -1 { + + + + + + + + } + } + +
PlaceRacerCar #TimesFinal Time
{ fmt.Sprintf("%d", result.Place) }{ result.Racer.FirstName } { result.Racer.LastName }{ result.Racer.CarNumber } + + for i, time := range result.Times { + if i > 0 { + , + } + if time >= 9.999 { + DNF + } else { + { fmt.Sprintf("%.3f", time) } + } + } + + + if result.DNF { + DNF + } else { + { fmt.Sprintf("%.3f", result.AverageTime) } + } +
+
+
+ +
+
+ + + } +} + +// Admin version with group selection - kept for admin use templ FinalResultsPage(groups []models.Group, selectedGroupID int64, results []models.FinalResult, selectedGroupName string) { @Layout("Final Results") {
diff --git a/web/templates/final_results_page_templ.go b/web/templates/final_results_page_templ.go index c38bf48..4000f5f 100644 --- a/web/templates/final_results_page_templ.go +++ b/web/templates/final_results_page_templ.go @@ -11,7 +11,8 @@ import templruntime "github.com/a-h/templ/runtime" import "track-gopher/models" import "fmt" -func FinalResultsPage(groups []models.Group, selectedGroupID int64, results []models.FinalResult, selectedGroupName string) templ.Component { +// Public version of the final results page - no navigation, no group selection +func FinalResultsPublic(results []models.FinalResult, groupName string, revealCount int) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -44,53 +45,238 @@ func FinalResultsPage(groups []models.Group, selectedGroupID int64, results []mo }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

Final Results

Select Group
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, group := range groups { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -100,13 +286,13 @@ func FinalResultsPage(groups []models.Group, selectedGroupID int64, results []mo return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = Layout("Final Results").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Layout("Final Results").Render(templ.WithChildren(ctx, templ_7745c5c3_Var11), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/web/templates/final_results_row.templ b/web/templates/final_results_row.templ new file mode 100644 index 0000000..ff5840e --- /dev/null +++ b/web/templates/final_results_row.templ @@ -0,0 +1,33 @@ +package templates + +import "track-gopher/models" +import "fmt" + +templ FinalResultRow(result models.FinalResult) { + + { fmt.Sprintf("%d", result.Place) } + { result.Racer.FirstName } { result.Racer.LastName } + { result.Racer.CarNumber } + + + for i, time := range result.Times { + if i > 0 { + , + } + if time >= 9.999 { + DNF + } else { + { fmt.Sprintf("%.3f", time) } + } + } + + + + if result.DNF { + DNF + } else { + { fmt.Sprintf("%.3f", result.AverageTime) } + } + + +} \ No newline at end of file diff --git a/web/templates/final_results_row_templ.go b/web/templates/final_results_row_templ.go new file mode 100644 index 0000000..7dce095 --- /dev/null +++ b/web/templates/final_results_row_templ.go @@ -0,0 +1,155 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.833 +package templates + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import "track-gopher/models" +import "fmt" + +func FinalResultRow(result models.FinalResult) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + 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 + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var2 string + templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", result.Place)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/final_results_row.templ`, Line: 8, Col: 39} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var3 string + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(result.Racer.FirstName) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/final_results_row.templ`, Line: 9, Col: 30} + } + _, 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, 3, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var4 string + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(result.Racer.LastName) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/final_results_row.templ`, Line: 9, Col: 56} + } + _, 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, 4, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var5 string + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(result.Racer.CarNumber) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/final_results_row.templ`, Line: 10, Col: 30} + } + _, 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, 5, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for i, time := range result.Times { + if i > 0 { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, ", ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, " ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if time >= 9.999 { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "DNF") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else { + var templ_7745c5c3_Var6 string + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", time)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/final_results_row.templ`, Line: 20, Col: 33} + } + _, 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, 9, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if result.DNF { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "DNF") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var7 string + templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", result.AverageTime)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/final_results_row.templ`, Line: 29, Col: 53} + } + _, 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, 12, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/web/templates/race_manage.templ b/web/templates/race_manage.templ index 816f40d..8c41947 100644 --- a/web/templates/race_manage.templ +++ b/web/templates/race_manage.templ @@ -14,9 +14,15 @@ templ RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []

Race Management

- - View Final Results - +
+ +
@@ -217,4 +223,4 @@ templ nextHeatRacer(laneData models.LaneData) { { laneData.Name } { laneData.CarNum } -} \ No newline at end of file +} \ No newline at end of file diff --git a/web/templates/race_manage_templ.go b/web/templates/race_manage_templ.go index 59c9523..99d4d1c 100644 --- a/web/templates/race_manage_templ.go +++ b/web/templates/race_manage_templ.go @@ -48,7 +48,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

Race Management

View Final Results

Race Control

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -60,7 +60,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.FormatInt(group.ID, 10)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 34, Col: 87} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 40, Col: 87} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -83,7 +83,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(group.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 35, Col: 56} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 41, Col: 56} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -101,7 +101,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(heatData.Group.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 42, Col: 125} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 48, Col: 125} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -114,7 +114,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m var templ_7745c5c3_Var6 string templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(heatData.HeatNumber)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 42, Col: 171} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 48, Col: 171} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -127,7 +127,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m var templ_7745c5c3_Var7 string templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(heatData.TotalHeats)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 42, Col: 212} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 48, Col: 212} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) if templ_7745c5c3_Err != nil { @@ -242,7 +242,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(result.HeatNumber)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 116, Col: 69} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 122, Col: 69} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { @@ -255,7 +255,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", result.Lane1Time)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 117, Col: 75} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 123, Col: 75} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -268,7 +268,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var13 string templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(result.Lane1Position)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 117, Col: 115} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 123, Col: 115} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { @@ -281,7 +281,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var14 string templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", result.Lane2Time)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 118, Col: 75} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 124, Col: 75} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { @@ -294,7 +294,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var15 string templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(result.Lane2Position)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 118, Col: 115} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 124, Col: 115} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { @@ -307,7 +307,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var16 string templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", result.Lane3Time)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 119, Col: 75} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 125, Col: 75} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { @@ -320,7 +320,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var17 string templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(result.Lane3Position)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 119, Col: 115} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 125, Col: 115} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) if templ_7745c5c3_Err != nil { @@ -333,7 +333,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var18 string templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", result.Lane4Time)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 120, Col: 75} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 126, Col: 75} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { @@ -346,7 +346,7 @@ func ResultsDisplay(results []models.HeatResult) templ.Component { var templ_7745c5c3_Var19 string templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(result.Lane4Position)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 120, Col: 115} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 126, Col: 115} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19)) if templ_7745c5c3_Err != nil { @@ -394,7 +394,7 @@ func CurrentHeatDisplay(heatData *models.HeatData) templ.Component { var templ_7745c5c3_Var21 string templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(heatData.HeatNumber)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 134, Col: 78} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 140, Col: 78} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21)) if templ_7745c5c3_Err != nil { @@ -465,7 +465,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var23 string templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(laneData.Lane)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 160, Col: 67} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 166, Col: 67} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23)) if templ_7745c5c3_Err != nil { @@ -478,7 +478,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var24 string templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 163, Col: 54} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 169, Col: 54} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24)) if templ_7745c5c3_Err != nil { @@ -491,7 +491,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var25 string templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.CarNum) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 164, Col: 61} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 170, Col: 61} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25)) if templ_7745c5c3_Err != nil { @@ -504,7 +504,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var26 string templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("lane-%d-time", laneData.Lane)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 167, Col: 144} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 173, Col: 144} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26)) if templ_7745c5c3_Err != nil { @@ -517,7 +517,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var27 string templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.3f", laneData.Time)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 167, Col: 182} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 173, Col: 182} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27)) if templ_7745c5c3_Err != nil { @@ -530,7 +530,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var28 string templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("lane-%d-position", laneData.Lane)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 170, Col: 152} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 176, Col: 152} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28)) if templ_7745c5c3_Err != nil { @@ -543,7 +543,7 @@ func raceLaneInfo(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var29 string templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(laneData.Place)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 170, Col: 184} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 176, Col: 184} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29)) if templ_7745c5c3_Err != nil { @@ -586,7 +586,7 @@ func NextHeatDisplay(nextHeat *models.HeatData) templ.Component { var templ_7745c5c3_Var31 string templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(nextHeat.HeatNumber)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 182, Col: 79} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 188, Col: 79} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31)) if templ_7745c5c3_Err != nil { @@ -658,7 +658,7 @@ func nextHeatRacer(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var33 string templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(strconv.Itoa(laneData.Lane)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 216, Col: 41} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 222, Col: 41} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33)) if templ_7745c5c3_Err != nil { @@ -671,7 +671,7 @@ func nextHeatRacer(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var34 string templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 217, Col: 27} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 223, Col: 27} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34)) if templ_7745c5c3_Err != nil { @@ -684,7 +684,7 @@ func nextHeatRacer(laneData models.LaneData) templ.Component { var templ_7745c5c3_Var35 string templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.CarNum) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 218, Col: 29} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_manage.templ`, Line: 224, Col: 29} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35)) if templ_7745c5c3_Err != nil {