diff --git a/static/js/setup_field.js b/static/js/setup_led_plc.js
similarity index 95%
rename from static/js/setup_field.js
rename to static/js/setup_led_plc.js
index 2079622..2d20279 100644
--- a/static/js/setup_field.js
+++ b/static/js/setup_led_plc.js
@@ -37,7 +37,7 @@ var handlePlcIoChange = function(data) {
$(function() {
// Set up the websocket back to the server.
- websocket = new CheesyWebsocket("/setup/field/websocket", {
+ websocket = new CheesyWebsocket("/setup/led_plc/websocket", {
ledMode: function(event) {handleLedMode(event.data); },
plcIoChange: function(event) { handlePlcIoChange(event.data); }
});
diff --git a/templates/base.html b/templates/base.html
index a37f47c..ae8889f 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -38,12 +38,13 @@
Setup
diff --git a/templates/setup_displays.html b/templates/setup_displays.html
new file mode 100644
index 0000000..5582de2
--- /dev/null
+++ b/templates/setup_displays.html
@@ -0,0 +1,41 @@
+{{/*
+ Copyright 2018 Team 254. All Rights Reserved.
+ Author: pat@patfairbank.com (Patrick Fairbank)
+
+ UI for configuring the field displays.
+*/}}
+{{define "title"}}Display Configuration{{end}}
+{{define "body"}}
+
+
+
+
+ {{range $displayId, $station := .AllianceStationDisplays}}
+
+ {{end}}
+
+
+
+
+
+{{end}}
+{{define "script"}}
+{{end}}
diff --git a/templates/setup_field.html b/templates/setup_field.html
deleted file mode 100644
index a0f8179..0000000
--- a/templates/setup_field.html
+++ /dev/null
@@ -1,113 +0,0 @@
-{{/*
- Copyright 2014 Team 254. All Rights Reserved.
- Author: pat@patfairbank.com (Patrick Fairbank)
-
- UI for controlling ephemeral aspects of the playing field.
-*/}}
-{{define "title"}}Field Configuration{{end}}
-{{define "body"}}
-
-
-
-
- {{range $displayId, $station := .AllianceStationDisplays}}
-
- {{end}}
-
-
-
-
-
-
-
-
-
-
-
- | Inputs |
-
- {{range $i, $name := .InputNames}}
-
- | {{$name}} |
- |
-
- {{end}}
-
-
-
-
-
- | Registers |
-
- {{range $i, $name := .RegisterNames}}
-
- | {{$name}} |
- |
-
- {{end}}
-
-
-
-
-
- | Coils |
-
- {{range $i, $name := .CoilNames}}
-
- | {{$name}} |
- |
-
- {{end}}
-
-
-
-
-
-
-
-{{end}}
-{{define "script"}}
-
-{{end}}
diff --git a/templates/setup_led_plc.html b/templates/setup_led_plc.html
new file mode 100644
index 0000000..541a157
--- /dev/null
+++ b/templates/setup_led_plc.html
@@ -0,0 +1,84 @@
+{{/*
+ Copyright 2018 Team 254. All Rights Reserved.
+ Author: pat@patfairbank.com (Patrick Fairbank)
+
+ UI for testing the LEDs and PLC connected to the field.
+*/}}
+{{define "title"}}LED and PLC Testing{{end}}
+{{define "body"}}
+
+
+
+
+
+
+
+
+ | Inputs |
+
+ {{range $i, $name := .InputNames}}
+
+ | {{$name}} |
+ |
+
+ {{end}}
+
+
+
+
+
+ | Registers |
+
+ {{range $i, $name := .RegisterNames}}
+
+ | {{$name}} |
+ |
+
+ {{end}}
+
+
+
+
+
+ | Coils |
+
+ {{range $i, $name := .CoilNames}}
+
+ | {{$name}} |
+ |
+
+ {{end}}
+
+
+
+
+
+
+
+
+ {{range $i, $name := .LedModeNames}}
+
+
+
+ {{end}}
+
+
+
+
+
+ {{range $i, $name := .VaultLedModeNames}}
+
+
+
+ {{end}}
+
+
+
+{{end}}
+{{define "script"}}
+
+{{end}}
diff --git a/web/pit_display_test.go b/web/pit_display_test.go
index e76946d..2ea056b 100644
--- a/web/pit_display_test.go
+++ b/web/pit_display_test.go
@@ -29,7 +29,7 @@ func TestPitDisplayWebsocket(t *testing.T) {
ws := websocket.NewTestWebsocket(conn)
// Check forced reloading as that is the only purpose the pit websocket serves.
- recorder := web.getHttpResponse("/setup/field/reload_displays")
+ recorder := web.getHttpResponse("/setup/displays/reload")
assert.Equal(t, 303, recorder.Code)
readWebsocketType(t, ws, "reload")
}
diff --git a/web/setup_displays.go b/web/setup_displays.go
new file mode 100644
index 0000000..c9a04b0
--- /dev/null
+++ b/web/setup_displays.go
@@ -0,0 +1,56 @@
+// Copyright 2018 Team 254. All Rights Reserved.
+// Author: pat@patfairbank.com (Patrick Fairbank)
+//
+// Web routes for configuring the field displays.
+
+package web
+
+import (
+ "github.com/Team254/cheesy-arena/model"
+ "net/http"
+)
+
+// Shows the displays configuration page.
+func (web *Web) displaysGetHandler(w http.ResponseWriter, r *http.Request) {
+ if !web.userIsAdmin(w, r) {
+ return
+ }
+
+ template, err := web.parseFiles("templates/setup_displays.html", "templates/base.html")
+ if err != nil {
+ handleWebErr(w, err)
+ return
+ }
+ data := struct {
+ *model.EventSettings
+ AllianceStationDisplays map[string]string
+ }{web.arena.EventSettings, web.arena.AllianceStationDisplays}
+ err = template.ExecuteTemplate(w, "base", data)
+ if err != nil {
+ handleWebErr(w, err)
+ return
+ }
+}
+
+// Updates the display-station mapping for a single display.
+func (web *Web) displaysPostHandler(w http.ResponseWriter, r *http.Request) {
+ if !web.userIsAdmin(w, r) {
+ return
+ }
+
+ displayId := r.PostFormValue("displayId")
+ allianceStation := r.PostFormValue("allianceStation")
+ web.arena.AllianceStationDisplays[displayId] = allianceStation
+ web.arena.MatchLoadNotifier.Notify()
+ http.Redirect(w, r, "/setup/displays", 303)
+}
+
+// Force-reloads all the websocket-connected displays.
+func (web *Web) displaysReloadHandler(w http.ResponseWriter, r *http.Request) {
+ if !web.userIsAdmin(w, r) {
+ return
+ }
+
+ web.arena.ReloadDisplaysNotifier.Notify()
+ http.Redirect(w, r, "/setup/displays", 303)
+}
diff --git a/web/setup_displays_test.go b/web/setup_displays_test.go
new file mode 100644
index 0000000..e4b8fc5
--- /dev/null
+++ b/web/setup_displays_test.go
@@ -0,0 +1,25 @@
+// Copyright 2018 Team 254. All Rights Reserved.
+// Author: pat@patfairbank.com (Patrick Fairbank)
+
+package web
+
+import (
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+
+func TestSetupDisplays(t *testing.T) {
+ web := setupTestWeb(t)
+
+ web.arena.AllianceStationDisplays["12345"] = ""
+ recorder := web.getHttpResponse("/setup/displays")
+ assert.Equal(t, 200, recorder.Code)
+ assert.Contains(t, recorder.Body.String(), "12345")
+ assert.NotContains(t, recorder.Body.String(), "selected")
+
+ recorder = web.postHttpResponse("/setup/displays", "displayId=12345&allianceStation=B1")
+ assert.Equal(t, 303, recorder.Code)
+ recorder = web.getHttpResponse("/setup/displays")
+ assert.Contains(t, recorder.Body.String(), "12345")
+ assert.Contains(t, recorder.Body.String(), "selected")
+}
diff --git a/web/setup_field.go b/web/setup_led_plc.go
similarity index 57%
rename from web/setup_field.go
rename to web/setup_led_plc.go
index ff7a079..0705e68 100644
--- a/web/setup_field.go
+++ b/web/setup_led_plc.go
@@ -1,7 +1,7 @@
-// Copyright 2014 Team 254. All Rights Reserved.
+// Copyright 2018 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
//
-// Web routes for configuring the field components.
+// Web routes for testing the field LEDs and PLC.
package web
@@ -18,13 +18,13 @@ import (
"net/http"
)
-// Shows the field configuration page.
-func (web *Web) fieldGetHandler(w http.ResponseWriter, r *http.Request) {
+// Shows the LED/PLC test page.
+func (web *Web) ledPlcGetHandler(w http.ResponseWriter, r *http.Request) {
if !web.userIsAdmin(w, r) {
return
}
- template, err := web.parseFiles("templates/setup_field.html", "templates/base.html")
+ template, err := web.parseFiles("templates/setup_led_plc.html", "templates/base.html")
if err != nil {
handleWebErr(w, err)
return
@@ -32,14 +32,13 @@ func (web *Web) fieldGetHandler(w http.ResponseWriter, r *http.Request) {
plc := web.arena.Plc
data := struct {
*model.EventSettings
- AllianceStationDisplays map[string]string
- InputNames []string
- RegisterNames []string
- CoilNames []string
- LedModeNames map[led.Mode]string
- VaultLedModeNames map[vaultled.Mode]string
- }{web.arena.EventSettings, web.arena.AllianceStationDisplays, plc.GetInputNames(), plc.GetRegisterNames(),
- plc.GetCoilNames(), led.ModeNames, vaultled.ModeNames}
+ InputNames []string
+ RegisterNames []string
+ CoilNames []string
+ LedModeNames map[led.Mode]string
+ VaultLedModeNames map[vaultled.Mode]string
+ }{web.arena.EventSettings, plc.GetInputNames(), plc.GetRegisterNames(), plc.GetCoilNames(), led.ModeNames,
+ vaultled.ModeNames}
err = template.ExecuteTemplate(w, "base", data)
if err != nil {
handleWebErr(w, err)
@@ -47,31 +46,8 @@ func (web *Web) fieldGetHandler(w http.ResponseWriter, r *http.Request) {
}
}
-// Updates the display-station mapping for a single display.
-func (web *Web) fieldPostHandler(w http.ResponseWriter, r *http.Request) {
- if !web.userIsAdmin(w, r) {
- return
- }
-
- displayId := r.PostFormValue("displayId")
- allianceStation := r.PostFormValue("allianceStation")
- web.arena.AllianceStationDisplays[displayId] = allianceStation
- web.arena.MatchLoadNotifier.Notify()
- http.Redirect(w, r, "/setup/field", 303)
-}
-
-// Force-reloads all the websocket-connected displays.
-func (web *Web) fieldReloadDisplaysHandler(w http.ResponseWriter, r *http.Request) {
- if !web.userIsAdmin(w, r) {
- return
- }
-
- web.arena.ReloadDisplaysNotifier.Notify()
- http.Redirect(w, r, "/setup/field", 303)
-}
-
-// The websocket endpoint for sending realtime updates to the field setup page.
-func (web *Web) fieldWebsocketHandler(w http.ResponseWriter, r *http.Request) {
+// The websocket endpoint for sending realtime updates to the LED/PLC test page.
+func (web *Web) ledPlcWebsocketHandler(w http.ResponseWriter, r *http.Request) {
if !web.userIsAdmin(w, r) {
return
}
diff --git a/web/setup_field_test.go b/web/setup_led_plc_test.go
similarity index 67%
rename from web/setup_field_test.go
rename to web/setup_led_plc_test.go
index b933877..a429b86 100644
--- a/web/setup_field_test.go
+++ b/web/setup_led_plc_test.go
@@ -1,4 +1,4 @@
-// Copyright 2014 Team 254. All Rights Reserved.
+// Copyright 2018 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
package web
@@ -15,28 +15,12 @@ import (
"github.com/mitchellh/mapstructure"
)
-func TestSetupField(t *testing.T) {
- web := setupTestWeb(t)
-
- web.arena.AllianceStationDisplays["12345"] = ""
- recorder := web.getHttpResponse("/setup/field")
- assert.Equal(t, 200, recorder.Code)
- assert.Contains(t, recorder.Body.String(), "12345")
- assert.NotContains(t, recorder.Body.String(), "selected")
-
- recorder = web.postHttpResponse("/setup/field", "displayId=12345&allianceStation=B1")
- assert.Equal(t, 303, recorder.Code)
- recorder = web.getHttpResponse("/setup/field")
- assert.Contains(t, recorder.Body.String(), "12345")
- assert.Contains(t, recorder.Body.String(), "selected")
-}
-
-func TestSetupFieldWebsocket(t *testing.T) {
+func TestSetupLedPlcWebsocket(t *testing.T) {
web := setupTestWeb(t)
server, wsUrl := web.startTestServer()
defer server.Close()
- conn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/setup/field/websocket", nil)
+ conn, _, err := gorillawebsocket.DefaultDialer.Dial(wsUrl+"/setup/led_plc/websocket", nil)
assert.Nil(t, err)
defer conn.Close()
ws := websocket.NewTestWebsocket(conn)
diff --git a/web/web.go b/web/web.go
index 6a62521..c729f6b 100644
--- a/web/web.go
+++ b/web/web.go
@@ -148,10 +148,11 @@ func (web *Web) newHandler() http.Handler {
router.HandleFunc("/setup/alliance_selection/reset", web.allianceSelectionResetHandler).Methods("POST")
router.HandleFunc("/setup/alliance_selection/finalize", web.allianceSelectionFinalizeHandler).Methods("POST")
router.HandleFunc("/setup/alliance_selection/publish", web.allianceSelectionPublishHandler).Methods("POST")
- router.HandleFunc("/setup/field", web.fieldGetHandler).Methods("GET")
- router.HandleFunc("/setup/field", web.fieldPostHandler).Methods("POST")
- router.HandleFunc("/setup/field/reload_displays", web.fieldReloadDisplaysHandler).Methods("GET")
- router.HandleFunc("/setup/field/websocket", web.fieldWebsocketHandler).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/sponsor_slides", web.sponsorSlidesGetHandler).Methods("GET")