DustyP 9 months ago
parent 3215b945dc
commit 15a0234047

@ -425,7 +425,7 @@ func (s *Server) broadcastRaceEvent(event derby.Event) {
switch event.Type {
case derby.EventRaceStart:
s.logger.Info("Broadcasting race start event")
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='badge bg-success'>Race Running</div>\n\n")
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-50 badge bg-success'>Race Running</div>\n\n")
heatGroup, _ := s.db.GetCurrentRacingGroup()
heatResult.GroupID = heatGroup.ID
heatResult.HeatNumber, _ = s.db.GetCurrentHeatNumber(heatGroup.ID)
@ -455,7 +455,7 @@ func (s *Server) broadcastRaceEvent(event derby.Event) {
case derby.EventRaceComplete:
s.logger.Info("Broadcasting race complete event")
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='badge bg-info'>Race Complete</div>\n\n")
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-50 badge bg-info'>Race Complete</div>\n\n")
s.db.SaveHeatResult(heatResult)
}
}
@ -1689,6 +1689,8 @@ func (s *Server) handleNextHeat() http.HandlerFunc {
Event: *heatData,
})
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-50 badge bg-info'>Idle</div>\n\n")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(map[string]string{"status": "success"})
}
@ -1734,6 +1736,8 @@ func (s *Server) handlePreviousHeat() http.HandlerFunc {
Event: *heatData,
})
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-50 badge bg-info'>Idle</div>\n\n")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(map[string]string{"status": "success"})
}
@ -1773,6 +1777,8 @@ func (s *Server) handleRerunHeat() http.HandlerFunc {
Event: *heatData,
})
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-50 badge bg-info'>Idle</div>\n\n")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(map[string]string{"status": "success"})
}
@ -1813,6 +1819,8 @@ func (s *Server) handleSetRacingGroup() http.HandlerFunc {
Event: heatResults,
})
s.sendRaceEventToAllClients("event: race-status\ndata: <div id='status-indicator' class='w-25 h-50 badge bg-info'>Idle</div>\n\n")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(map[string]string{"status": "success"})
}

@ -42,14 +42,14 @@ templ RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []
<div class="mb-3">
<h5>Timer Control</h5>
<div class="d-flex align-items-center mb-2">
<span id="status-indicator" class="badge mb-3 bg-secondary">Ready</span>
<div class="d-flex align-items-center mb-2" hx-ext="sse" sse-connect="/api/events" sse-swap="race-status">
<div id="status-indicator" class="w-25 h-50 badge bg-secondary">Ready</div>
</div>
<div class="btn-group" role="group">
<button class="btn btn-warning" onclick="resetTimer()">
<button class="btn btn-warning" hx-post="/api/reset" hx-swap="none">
<i class="bi bi-arrow-repeat"></i> Reset Timer
</button>
<button class="btn btn-danger" onclick="forceEndHeat()">
<button class="btn btn-danger" hx-post="/api/force-end" hx-swap="none">
<i class="bi bi-flag-fill"></i> Force End
</button>
<button class="btn btn-info" hx-post="/api/race/rerun-heat" hx-swap="none">

@ -140,7 +140,7 @@ func RaceManage(heatData *models.HeatData, nextHeat *models.HeatData, groups []m
return templ_7745c5c3_Err
}
}
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, ">Next Heat <i class=\"bi bi-arrow-right\"></i></button></div></div><div class=\"mb-3\"><h5>Timer Control</h5><div class=\"d-flex align-items-center mb-2\"><span id=\"status-indicator\" class=\"badge mb-3 bg-secondary\">Ready</span></div><div class=\"btn-group\" role=\"group\"><button class=\"btn btn-warning\" onclick=\"resetTimer()\"><i class=\"bi bi-arrow-repeat\"></i> Reset Timer</button> <button class=\"btn btn-danger\" onclick=\"forceEndHeat()\"><i class=\"bi bi-flag-fill\"></i> Force End</button> <button class=\"btn btn-info\" hx-post=\"/api/race/rerun-heat\" hx-swap=\"none\"><i class=\"bi bi-arrow-counterclockwise\"></i> Re-Run Heat</button></div></div><div id=\"gate-status\" class=\"alert alert-secondary\"><strong>Gate Status:</strong> <span id=\"gate-status-text\">Unknown</span></div></div></div></div><div class=\"col-md-6\" hx-ext=\"sse\" sse-connect=\"/api/admin/events\" sse-swap=\"results\">")
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, ">Next Heat <i class=\"bi bi-arrow-right\"></i></button></div></div><div class=\"mb-3\"><h5>Timer Control</h5><div class=\"d-flex align-items-center mb-2\" hx-ext=\"sse\" sse-connect=\"/api/events\" sse-swap=\"race-status\"><div id=\"status-indicator\" class=\"w-25 h-50 badge bg-secondary\">Ready</div></div><div class=\"btn-group\" role=\"group\"><button class=\"btn btn-warning\" hx-post=\"/api/reset\" hx-swap=\"none\"><i class=\"bi bi-arrow-repeat\"></i> Reset Timer</button> <button class=\"btn btn-danger\" hx-post=\"/api/force-end\" hx-swap=\"none\"><i class=\"bi bi-flag-fill\"></i> Force End</button> <button class=\"btn btn-info\" hx-post=\"/api/race/rerun-heat\" hx-swap=\"none\"><i class=\"bi bi-arrow-counterclockwise\"></i> Re-Run Heat</button></div></div><div id=\"gate-status\" class=\"alert alert-secondary\"><strong>Gate Status:</strong> <span id=\"gate-status-text\">Unknown</span></div></div></div></div><div class=\"col-md-6\" hx-ext=\"sse\" sse-connect=\"/api/admin/events\" sse-swap=\"results\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}

@ -20,9 +20,8 @@ templ RacePublic(heatData *models.HeatData, nextHeat *models.HeatData, onDeckHea
<div id="current-heat" class="mb-4">
<div class="row">
<div class="col-12">
<div class="timer-display text-center mb-4">
<div id="timer" class="display-1 fw-bold">0.000</div>
<div id="status-indicator" class="badge bg-secondary">Ready</div>
<div class="timer-display text-center mb-4" hx-ext="sse" sse-connect="/api/events" sse-swap="race-status">
<div id="status-indicator" class="w-25 h-50 badge bg-secondary">Ready</div>
</div>
<div class="lanes-container">

@ -87,7 +87,7 @@ func RacePublic(heatData *models.HeatData, nextHeat *models.HeatData, onDeckHeat
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</h2></div><div class=\"card-body\"><div id=\"current-heat\" class=\"mb-4\"><div class=\"row\"><div class=\"col-12\"><div class=\"timer-display text-center mb-4\"><div id=\"timer\" class=\"display-1 fw-bold\">0.000</div><div id=\"status-indicator\" class=\"badge bg-secondary\">Ready</div></div><div class=\"lanes-container\">")
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</h2></div><div class=\"card-body\"><div id=\"current-heat\" class=\"mb-4\"><div class=\"row\"><div class=\"col-12\"><div class=\"timer-display text-center mb-4\" hx-ext=\"sse\" sse-connect=\"/api/events\" sse-swap=\"race-status\"><div id=\"status-indicator\" class=\"w-25 h-50 badge bg-secondary\">Ready</div></div><div class=\"lanes-container\">")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@ -226,7 +226,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var8 string
templ_7745c5c3_Var8, 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_public.templ`, Line: 97, Col: 67}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 96, Col: 67}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
if templ_7745c5c3_Err != nil {
@ -239,7 +239,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var9 string
templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.Name)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 100, Col: 54}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 99, Col: 54}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
if templ_7745c5c3_Err != nil {
@ -252,7 +252,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var10 string
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.CarNum)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 102, Col: 61}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 101, Col: 61}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
if templ_7745c5c3_Err != nil {
@ -265,7 +265,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var11 string
templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%.1f oz", laneData.CarWeight))
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 103, Col: 89}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 102, Col: 89}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
if templ_7745c5c3_Err != nil {
@ -278,7 +278,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var12 string
templ_7745c5c3_Var12, 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_public.templ`, Line: 110, Col: 146}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 109, Col: 146}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
if templ_7745c5c3_Err != nil {
@ -291,7 +291,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var13 string
templ_7745c5c3_Var13, 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_public.templ`, Line: 111, Col: 72}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 110, Col: 72}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
if templ_7745c5c3_Err != nil {
@ -304,7 +304,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var14 string
templ_7745c5c3_Var14, 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_public.templ`, Line: 118, Col: 150}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 117, Col: 150}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
if templ_7745c5c3_Err != nil {
@ -317,7 +317,7 @@ func raceLaneCard(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var15 string
templ_7745c5c3_Var15, 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_public.templ`, Line: 119, Col: 66}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 118, Col: 66}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
if templ_7745c5c3_Err != nil {
@ -360,7 +360,7 @@ func raceNextHeatPreview(heatData *models.HeatData) templ.Component {
var templ_7745c5c3_Var17 string
templ_7745c5c3_Var17, 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_public.templ`, Line: 132, Col: 61}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 131, Col: 61}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
if templ_7745c5c3_Err != nil {
@ -431,7 +431,7 @@ func raceNextHeatRow(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var19 string
templ_7745c5c3_Var19, 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_public.templ`, Line: 163, Col: 41}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 162, Col: 41}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
if templ_7745c5c3_Err != nil {
@ -444,7 +444,7 @@ func raceNextHeatRow(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var20 string
templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.Name)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 164, Col: 27}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 163, Col: 27}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
if templ_7745c5c3_Err != nil {
@ -457,7 +457,7 @@ func raceNextHeatRow(laneData models.LaneData) templ.Component {
var templ_7745c5c3_Var21 string
templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(laneData.CarNum)
if templ_7745c5c3_Err != nil {
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 165, Col: 29}
return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/race_public.templ`, Line: 164, Col: 29}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
if templ_7745c5c3_Err != nil {

Loading…
Cancel
Save