diff --git a/static/css/referee_display.css b/static/css/referee_panel.css similarity index 100% rename from static/css/referee_display.css rename to static/css/referee_panel.css diff --git a/static/js/referee_display.js b/static/js/referee_panel.js similarity index 98% rename from static/js/referee_display.js rename to static/js/referee_panel.js index 9ed0ecb..dc94ee7 100644 --- a/static/js/referee_display.js +++ b/static/js/referee_panel.js @@ -109,7 +109,7 @@ $(function() { $("[data-toggle=tooltip]").tooltip({"placement": "top"}); // Set up the websocket back to the server. - websocket = new CheesyWebsocket("/displays/referee/websocket", { + websocket = new CheesyWebsocket("/panels/referee/websocket", { matchLoad: function(event) { handleMatchLoad(event.data) } }); diff --git a/static/js/scoring_display.js b/static/js/scoring_panel.js similarity index 96% rename from static/js/scoring_display.js rename to static/js/scoring_panel.js index 8f92340..973a575 100644 --- a/static/js/scoring_display.js +++ b/static/js/scoring_panel.js @@ -65,7 +65,7 @@ $(function() { alliance = window.location.href.split("/").slice(-1)[0]; // Set up the websocket back to the server. - websocket = new CheesyWebsocket("/displays/scoring/" + alliance + "/websocket", { + websocket = new CheesyWebsocket("/panels/scoring/" + alliance + "/websocket", { matchTime: function(event) { handleMatchTime(event.data); }, realtimeScore: function(event) { handleRealtimeScore(event.data); } }); diff --git a/templates/base.html b/templates/base.html index e199f9c..c03db43 100644 --- a/templates/base.html +++ b/templates/base.html @@ -55,6 +55,14 @@
  • Alliance Selection
  • + diff --git a/templates/referee_display.html b/templates/referee_panel.html similarity index 96% rename from templates/referee_display.html rename to templates/referee_panel.html index 1489b29..77225ec 100644 --- a/templates/referee_display.html +++ b/templates/referee_panel.html @@ -7,7 +7,7 @@ - Referee Display - {{.EventSettings.Name}} - Cheesy Arena + Referee Panel - {{.EventSettings.Name}} - Cheesy Arena @@ -17,7 +17,7 @@ - + {{if .EntryEnabled}} @@ -97,7 +97,7 @@ - + {{define "foul"}} diff --git a/templates/scoring_display.html b/templates/scoring_panel.html similarity index 98% rename from templates/scoring_display.html rename to templates/scoring_panel.html index 6b4d9ca..8c36cf4 100644 --- a/templates/scoring_display.html +++ b/templates/scoring_panel.html @@ -80,5 +80,5 @@ var alliance = "{{.Alliance}}"; - + {{end}} diff --git a/web/alliance_selection_test.go b/web/alliance_selection_test.go index d4370da..64ff781 100644 --- a/web/alliance_selection_test.go +++ b/web/alliance_selection_test.go @@ -10,7 +10,7 @@ import ( "testing" ) -func TestSetupAllianceSelection(t *testing.T) { +func TestAllianceSelection(t *testing.T) { web := setupTestWeb(t) cachedAlliances = [][]model.AllianceTeam{} @@ -92,7 +92,7 @@ func TestSetupAllianceSelection(t *testing.T) { assert.False(t, team.YellowCard) } -func TestSetupAllianceSelectionErrors(t *testing.T) { +func TestAllianceSelectionErrors(t *testing.T) { web := setupTestWeb(t) cachedAlliances = [][]model.AllianceTeam{} @@ -156,7 +156,7 @@ func TestSetupAllianceSelectionErrors(t *testing.T) { assert.Contains(t, recorder.Body.String(), "already been finalized") } -func TestSetupAllianceSelectionAutofocus(t *testing.T) { +func TestAllianceSelectionAutofocus(t *testing.T) { web := setupTestWeb(t) cachedAlliances = [][]model.AllianceTeam{} @@ -248,7 +248,7 @@ func TestSetupAllianceSelectionAutofocus(t *testing.T) { assert.Equal(t, -1, j) } -func TestSetupAllianceSelectionPublish(t *testing.T) { +func TestAllianceSelectionPublish(t *testing.T) { web := setupTestWeb(t) web.arena.TbaClient.BaseUrl = "fakeurl" diff --git a/web/referee_display.go b/web/referee_panel.go similarity index 95% rename from web/referee_display.go rename to web/referee_panel.go index 632d81e..6cd8eb4 100644 --- a/web/referee_display.go +++ b/web/referee_panel.go @@ -19,12 +19,12 @@ import ( ) // Renders the referee interface for assigning fouls. -func (web *Web) refereeDisplayHandler(w http.ResponseWriter, r *http.Request) { +func (web *Web) refereePanelHandler(w http.ResponseWriter, r *http.Request) { if !web.userIsAdmin(w, r) { return } - template, err := web.parseFiles("templates/referee_display.html") + template, err := web.parseFiles("templates/referee_panel.html") if err != nil { handleWebErr(w, err) return @@ -76,7 +76,7 @@ func (web *Web) refereeDisplayHandler(w http.ResponseWriter, r *http.Request) { web.arena.RedRealtimeScore.CurrentScore.Fouls, web.arena.BlueRealtimeScore.CurrentScore.Fouls, web.arena.RedRealtimeScore.Cards, web.arena.BlueRealtimeScore.Cards, game.Rules, !(web.arena.RedRealtimeScore.FoulsCommitted && web.arena.BlueRealtimeScore.FoulsCommitted)} - err = template.ExecuteTemplate(w, "referee_display.html", data) + err = template.ExecuteTemplate(w, "referee_panel.html", data) if err != nil { handleWebErr(w, err) return @@ -84,7 +84,7 @@ func (web *Web) refereeDisplayHandler(w http.ResponseWriter, r *http.Request) { } // The websocket endpoint for the refereee interface client to send control commands and receive status updates. -func (web *Web) refereeDisplayWebsocketHandler(w http.ResponseWriter, r *http.Request) { +func (web *Web) refereePanelWebsocketHandler(w http.ResponseWriter, r *http.Request) { // TODO(patrick): Enable authentication once Safari (for iPad) supports it over Websocket. ws, err := websocket.NewWebsocket(w, r) diff --git a/web/referee_display_test.go b/web/referee_panel_test.go similarity index 92% rename from web/referee_display_test.go rename to web/referee_panel_test.go index d68f977..0a03fd4 100644 --- a/web/referee_display_test.go +++ b/web/referee_panel_test.go @@ -12,20 +12,20 @@ import ( "time" ) -func TestRefereeDisplay(t *testing.T) { +func TestRefereePanel(t *testing.T) { web := setupTestWeb(t) - recorder := web.getHttpResponse("/displays/referee") + recorder := web.getHttpResponse("/panels/referee") assert.Equal(t, 200, recorder.Code) - assert.Contains(t, recorder.Body.String(), "Referee Display - Untitled Event - Cheesy Arena") + assert.Contains(t, recorder.Body.String(), "Referee Panel - Untitled Event - Cheesy Arena") } -func TestRefereeDisplayWebsocket(t *testing.T) { +func TestRefereePanelWebsocket(t *testing.T) { web := setupTestWeb(t) server, wsUrl := web.startTestServer() defer server.Close() - conn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/displays/referee/websocket", nil) + conn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/panels/referee/websocket", nil) assert.Nil(t, err) defer conn.Close() ws := websocket.NewTestWebsocket(conn) diff --git a/web/scoring_display.go b/web/scoring_panel.go similarity index 93% rename from web/scoring_display.go rename to web/scoring_panel.go index 42c1c4e..95a52aa 100644 --- a/web/scoring_display.go +++ b/web/scoring_panel.go @@ -17,7 +17,7 @@ import ( ) // Renders the scoring interface which enables input of scores in real-time. -func (web *Web) scoringDisplayHandler(w http.ResponseWriter, r *http.Request) { +func (web *Web) scoringPanelHandler(w http.ResponseWriter, r *http.Request) { if !web.userIsAdmin(w, r) { return } @@ -29,7 +29,7 @@ func (web *Web) scoringDisplayHandler(w http.ResponseWriter, r *http.Request) { return } - template, err := web.parseFiles("templates/scoring_display.html", "templates/base.html") + template, err := web.parseFiles("templates/scoring_panel.html", "templates/base.html") if err != nil { handleWebErr(w, err) return @@ -46,7 +46,7 @@ func (web *Web) scoringDisplayHandler(w http.ResponseWriter, r *http.Request) { } // The websocket endpoint for the scoring interface client to send control commands and receive status updates. -func (web *Web) scoringDisplayWebsocketHandler(w http.ResponseWriter, r *http.Request) { +func (web *Web) scoringPanelWebsocketHandler(w http.ResponseWriter, r *http.Request) { if !web.userIsAdmin(w, r) { return } diff --git a/web/scoring_display_test.go b/web/scoring_panel_test.go similarity index 87% rename from web/scoring_display_test.go rename to web/scoring_panel_test.go index 995c9fb..9d969ae 100644 --- a/web/scoring_display_test.go +++ b/web/scoring_panel_test.go @@ -12,31 +12,31 @@ import ( "time" ) -func TestScoringDisplay(t *testing.T) { +func TestScoringPanel(t *testing.T) { web := setupTestWeb(t) - recorder := web.getHttpResponse("/displays/scoring/invalidalliance") + recorder := web.getHttpResponse("/panels/scoring/invalidalliance") assert.Equal(t, 500, recorder.Code) assert.Contains(t, recorder.Body.String(), "Invalid alliance") - recorder = web.getHttpResponse("/displays/scoring/red") + recorder = web.getHttpResponse("/panels/scoring/red") assert.Equal(t, 200, recorder.Code) - recorder = web.getHttpResponse("/displays/scoring/blue") + recorder = web.getHttpResponse("/panels/scoring/blue") assert.Equal(t, 200, recorder.Code) assert.Contains(t, recorder.Body.String(), "Scoring - Untitled Event - Cheesy Arena") } -func TestScoringDisplayWebsocket(t *testing.T) { +func TestScoringPanelWebsocket(t *testing.T) { web := setupTestWeb(t) server, wsUrl := web.startTestServer() defer server.Close() - _, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/displays/scoring/blorpy/websocket", nil) + _, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/panels/scoring/blorpy/websocket", nil) assert.NotNil(t, err) - redConn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/displays/scoring/red/websocket", nil) + redConn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/panels/scoring/red/websocket", nil) assert.Nil(t, err) defer redConn.Close() redWs := websocket.NewTestWebsocket(redConn) - blueConn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/displays/scoring/blue/websocket", nil) + blueConn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/panels/scoring/blue/websocket", nil) assert.Nil(t, err) defer blueConn.Close() blueWs := websocket.NewTestWebsocket(blueConn) diff --git a/web/web.go b/web/web.go index 32a2534..4d1e70e 100644 --- a/web/web.go +++ b/web/web.go @@ -125,42 +125,27 @@ func (web *Web) checkReaderPassword(user, password string) bool { // Sets up the mapping between URLs and handlers. func (web *Web) newHandler() http.Handler { router := mux.NewRouter() + router.HandleFunc("/", web.indexHandler).Methods("GET") router.HandleFunc("/alliance_selection", web.allianceSelectionGetHandler).Methods("GET") router.HandleFunc("/alliance_selection", web.allianceSelectionPostHandler).Methods("POST") - router.HandleFunc("/alliance_selection/start", web.allianceSelectionStartHandler).Methods("POST") - router.HandleFunc("/alliance_selection/reset", web.allianceSelectionResetHandler).Methods("POST") router.HandleFunc("/alliance_selection/finalize", web.allianceSelectionFinalizeHandler).Methods("POST") router.HandleFunc("/alliance_selection/publish", web.allianceSelectionPublishHandler).Methods("POST") - router.HandleFunc("/setup/settings", web.settingsGetHandler).Methods("GET") - router.HandleFunc("/setup/settings", web.settingsPostHandler).Methods("POST") - router.HandleFunc("/setup/db/save", web.saveDbHandler).Methods("GET") - router.HandleFunc("/setup/db/restore", web.restoreDbHandler).Methods("POST") - router.HandleFunc("/setup/db/clear", web.clearDbHandler).Methods("POST") - router.HandleFunc("/setup/teams", web.teamsGetHandler).Methods("GET") - router.HandleFunc("/setup/teams", web.teamsPostHandler).Methods("POST") - router.HandleFunc("/setup/teams/clear", web.teamsClearHandler).Methods("POST") - router.HandleFunc("/setup/teams/{id}/edit", web.teamEditGetHandler).Methods("GET") - router.HandleFunc("/setup/teams/{id}/edit", web.teamEditPostHandler).Methods("POST") - router.HandleFunc("/setup/teams/{id}/delete", web.teamDeletePostHandler).Methods("POST") - router.HandleFunc("/setup/teams/publish", web.teamsPublishHandler).Methods("POST") - router.HandleFunc("/setup/teams/generate_wpa_keys", web.teamsGenerateWpaKeysHandler).Methods("GET") - router.HandleFunc("/setup/schedule", web.scheduleGetHandler).Methods("GET") - router.HandleFunc("/setup/schedule/generate", web.scheduleGeneratePostHandler).Methods("POST") - router.HandleFunc("/setup/schedule/republish", web.scheduleRepublishPostHandler).Methods("POST") - router.HandleFunc("/setup/schedule/save", web.scheduleSavePostHandler).Methods("POST") - router.HandleFunc("/setup/displays", web.displaysGetHandler).Methods("GET") - router.HandleFunc("/setup/displays", web.displaysPostHandler).Methods("POST") - router.HandleFunc("/setup/displays/reload", web.displaysReloadHandler).Methods("GET") - router.HandleFunc("/setup/led_plc", web.ledPlcGetHandler).Methods("GET") - router.HandleFunc("/setup/led_plc/websocket", web.ledPlcWebsocketHandler).Methods("GET") - router.HandleFunc("/setup/lower_thirds", web.lowerThirdsGetHandler).Methods("GET") - router.HandleFunc("/setup/lower_thirds/websocket", web.lowerThirdsWebsocketHandler).Methods("GET") - router.HandleFunc("/setup/sponsor_slides", web.sponsorSlidesGetHandler).Methods("GET") - router.HandleFunc("/setup/sponsor_slides", web.sponsorSlidesPostHandler).Methods("POST") + router.HandleFunc("/alliance_selection/reset", web.allianceSelectionResetHandler).Methods("POST") + router.HandleFunc("/alliance_selection/start", web.allianceSelectionStartHandler).Methods("POST") + router.HandleFunc("/api/alliances", web.alliancesApiHandler).Methods("GET") router.HandleFunc("/api/matches/{type}", web.matchesApiHandler).Methods("GET") router.HandleFunc("/api/rankings", web.rankingsApiHandler).Methods("GET") router.HandleFunc("/api/sponsor_slides", web.sponsorSlidesApiHandler).Methods("GET") - router.HandleFunc("/api/alliances", web.alliancesApiHandler).Methods("GET") + router.HandleFunc("/displays/alliance_station", web.allianceStationDisplayHandler).Methods("GET") + router.HandleFunc("/displays/alliance_station/websocket", web.allianceStationDisplayWebsocketHandler).Methods("GET") + router.HandleFunc("/displays/announcer", web.announcerDisplayHandler).Methods("GET") + router.HandleFunc("/displays/announcer/websocket", web.announcerDisplayWebsocketHandler).Methods("GET") + router.HandleFunc("/displays/audience", web.audienceDisplayHandler).Methods("GET") + router.HandleFunc("/displays/audience/websocket", web.audienceDisplayWebsocketHandler).Methods("GET") + router.HandleFunc("/displays/fta", web.ftaDisplayHandler).Methods("GET") + router.HandleFunc("/displays/fta/websocket", web.ftaDisplayWebsocketHandler).Methods("GET") + router.HandleFunc("/displays/pit", web.pitDisplayHandler).Methods("GET") + router.HandleFunc("/displays/pit/websocket", web.pitDisplayWebsocketHandler).Methods("GET") router.HandleFunc("/match_play", web.matchPlayHandler).Methods("GET") router.HandleFunc("/match_play/{matchId}/load", web.matchPlayLoadHandler).Methods("GET") router.HandleFunc("/match_play/{matchId}/show_result", web.matchPlayShowResultHandler).Methods("GET") @@ -168,6 +153,10 @@ func (web *Web) newHandler() http.Handler { router.HandleFunc("/match_review", web.matchReviewHandler).Methods("GET") router.HandleFunc("/match_review/{matchId}/edit", web.matchReviewEditGetHandler).Methods("GET") router.HandleFunc("/match_review/{matchId}/edit", web.matchReviewEditPostHandler).Methods("POST") + router.HandleFunc("/panels/scoring/{alliance}", web.scoringPanelHandler).Methods("GET") + router.HandleFunc("/panels/scoring/{alliance}/websocket", web.scoringPanelWebsocketHandler).Methods("GET") + router.HandleFunc("/panels/referee", web.refereePanelHandler).Methods("GET") + router.HandleFunc("/panels/referee/websocket", web.refereePanelWebsocketHandler).Methods("GET") router.HandleFunc("/reports/csv/rankings", web.rankingsCsvReportHandler).Methods("GET") router.HandleFunc("/reports/pdf/rankings", web.rankingsPdfReportHandler).Methods("GET") router.HandleFunc("/reports/csv/schedule/{type}", web.scheduleCsvReportHandler).Methods("GET") @@ -175,21 +164,32 @@ func (web *Web) newHandler() http.Handler { router.HandleFunc("/reports/csv/teams", web.teamsCsvReportHandler).Methods("GET") router.HandleFunc("/reports/pdf/teams", web.teamsPdfReportHandler).Methods("GET") router.HandleFunc("/reports/csv/wpa_keys", web.wpaKeysCsvReportHandler).Methods("GET") - router.HandleFunc("/displays/audience", web.audienceDisplayHandler).Methods("GET") - router.HandleFunc("/displays/audience/websocket", web.audienceDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/displays/pit", web.pitDisplayHandler).Methods("GET") - router.HandleFunc("/displays/pit/websocket", web.pitDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/displays/announcer", web.announcerDisplayHandler).Methods("GET") - router.HandleFunc("/displays/announcer/websocket", web.announcerDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/displays/scoring/{alliance}", web.scoringDisplayHandler).Methods("GET") - router.HandleFunc("/displays/scoring/{alliance}/websocket", web.scoringDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/displays/referee", web.refereeDisplayHandler).Methods("GET") - router.HandleFunc("/displays/referee/websocket", web.refereeDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/displays/alliance_station", web.allianceStationDisplayHandler).Methods("GET") - router.HandleFunc("/displays/alliance_station/websocket", web.allianceStationDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/displays/fta", web.ftaDisplayHandler).Methods("GET") - router.HandleFunc("/displays/fta/websocket", web.ftaDisplayWebsocketHandler).Methods("GET") - router.HandleFunc("/", web.indexHandler).Methods("GET") + router.HandleFunc("/setup/db/clear", web.clearDbHandler).Methods("POST") + router.HandleFunc("/setup/db/restore", web.restoreDbHandler).Methods("POST") + router.HandleFunc("/setup/db/save", web.saveDbHandler).Methods("GET") + router.HandleFunc("/setup/displays", web.displaysGetHandler).Methods("GET") + router.HandleFunc("/setup/displays", web.displaysPostHandler).Methods("POST") + router.HandleFunc("/setup/displays/reload", web.displaysReloadHandler).Methods("GET") + router.HandleFunc("/setup/led_plc", web.ledPlcGetHandler).Methods("GET") + router.HandleFunc("/setup/led_plc/websocket", web.ledPlcWebsocketHandler).Methods("GET") + router.HandleFunc("/setup/lower_thirds", web.lowerThirdsGetHandler).Methods("GET") + router.HandleFunc("/setup/lower_thirds/websocket", web.lowerThirdsWebsocketHandler).Methods("GET") + router.HandleFunc("/setup/schedule", web.scheduleGetHandler).Methods("GET") + router.HandleFunc("/setup/schedule/generate", web.scheduleGeneratePostHandler).Methods("POST") + router.HandleFunc("/setup/schedule/republish", web.scheduleRepublishPostHandler).Methods("POST") + router.HandleFunc("/setup/schedule/save", web.scheduleSavePostHandler).Methods("POST") + router.HandleFunc("/setup/settings", web.settingsGetHandler).Methods("GET") + router.HandleFunc("/setup/settings", web.settingsPostHandler).Methods("POST") + router.HandleFunc("/setup/sponsor_slides", web.sponsorSlidesGetHandler).Methods("GET") + router.HandleFunc("/setup/sponsor_slides", web.sponsorSlidesPostHandler).Methods("POST") + router.HandleFunc("/setup/teams", web.teamsGetHandler).Methods("GET") + router.HandleFunc("/setup/teams", web.teamsPostHandler).Methods("POST") + router.HandleFunc("/setup/teams/{id}/delete", web.teamDeletePostHandler).Methods("POST") + router.HandleFunc("/setup/teams/{id}/edit", web.teamEditGetHandler).Methods("GET") + router.HandleFunc("/setup/teams/{id}/edit", web.teamEditPostHandler).Methods("POST") + router.HandleFunc("/setup/teams/clear", web.teamsClearHandler).Methods("POST") + router.HandleFunc("/setup/teams/generate_wpa_keys", web.teamsGenerateWpaKeysHandler).Methods("GET") + router.HandleFunc("/setup/teams/publish", web.teamsPublishHandler).Methods("POST") return router }