Added nicknames to pit display.

This commit is contained in:
Patrick Fairbank
2014-07-13 01:07:21 -07:00
parent 930346d819
commit 29038dfed2
5 changed files with 66 additions and 34 deletions

28
api.go
View File

@@ -10,6 +10,11 @@ import (
"net/http"
)
type RankingWithNickname struct {
Ranking
Nickname string
}
// Generates a JSON dump of the qualification rankings.
func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
rankings, err := db.GetAllRankings()
@@ -17,9 +22,26 @@ func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
handleWebErr(w, err)
return
}
var rankingsWithNicknames []RankingWithNickname
if rankings == nil {
// Go marshals an empty slice to null, so explicitly create it so that it appears as an empty JSON array.
rankings = make([]Ranking, 0)
rankingsWithNicknames = make([]RankingWithNickname, 0)
} else {
rankingsWithNicknames = make([]RankingWithNickname, len(rankings))
}
// Get team info so that nicknames can be displayed.
teams, err := db.GetAllTeams()
if err != nil {
handleWebErr(w, err)
return
}
teamNicknames := make(map[int]string)
for _, team := range teams {
teamNicknames[team.Id] = team.Nickname
}
for i, ranking := range rankings {
rankingsWithNicknames[i] = RankingWithNickname{ranking, teamNicknames[ranking.TeamId]}
}
// Get the last match scored so we can report that on the display.
@@ -36,9 +58,9 @@ func RankingsApiHandler(w http.ResponseWriter, r *http.Request) {
}
data := struct {
Rankings []Ranking
Rankings []RankingWithNickname
HighestPlayedMatch string
}{rankings, highestPlayedMatch}
}{rankingsWithNicknames, highestPlayedMatch}
jsonData, err := json.MarshalIndent(data, "", " ")
if err != nil {
handleWebErr(w, err)

View File

@@ -19,7 +19,8 @@ func TestRankingsApi(t *testing.T) {
assert.Equal(t, 200, recorder.Code)
assert.Equal(t, "application/json", recorder.HeaderMap["Content-Type"][0])
rankingsData := struct {
Rankings []Ranking
Rankings []RankingWithNickname
TeamNicknames map[string]string
HighestPlayedMatch string
}{}
err := json.Unmarshal([]byte(recorder.Body.String()), &rankingsData)
@@ -27,12 +28,14 @@ func TestRankingsApi(t *testing.T) {
assert.Equal(t, 0, len(rankingsData.Rankings))
assert.Equal(t, "", rankingsData.HighestPlayedMatch)
ranking1 := Ranking{1114, 2, 18, 1100, 625, 90, 554, 0.254, 9, 1, 0, 0, 10}
ranking2 := Ranking{254, 1, 20, 1100, 625, 90, 554, 0.254, 10, 0, 0, 0, 10}
db.CreateRanking(&ranking1)
db.CreateRanking(&ranking2)
ranking1 := RankingWithNickname{Ranking{1114, 2, 18, 1100, 625, 90, 554, 0.254, 9, 1, 0, 0, 10}, "Simbots"}
ranking2 := RankingWithNickname{Ranking{254, 1, 20, 1100, 625, 90, 554, 0.254, 10, 0, 0, 0, 10}, "ChezyPof"}
db.CreateRanking(&ranking1.Ranking)
db.CreateRanking(&ranking2.Ranking)
db.CreateMatch(&Match{Type: "qualification", DisplayName: "29", Status: "complete"})
db.CreateMatch(&Match{Type: "qualification", DisplayName: "30"})
db.CreateTeam(&Team{Id: 254, Nickname: "ChezyPof"})
db.CreateTeam(&Team{Id: 1114, Nickname: "Simbots"})
recorder = getHttpResponse("/api/rankings")
assert.Equal(t, 200, recorder.Code)

View File

@@ -57,16 +57,23 @@ body {
border-top: 1px solid #000;
}
.rankings-table {
table-layout: fixed;
text-align: center;
font-size: 17px;
color: #000;
border-bottom: 3px solid #666;
margin: 0;
}
.team-field {
width: 7%;
}
.team-nickname {
width: 30%;
overflow: hidden;
white-space: nowrap;
text-align: left;
}
.rankings-table > tbody > tr > td {
padding-left: 0;
padding-right: 0;
}
.align-left {
text-align: left;
}

View File

@@ -56,7 +56,7 @@
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Display</a>
<ul class="dropdown-menu">
<li class="disabled"><a href="#">Audience</a></li>
<li><a href="/displays/pit">Pit</a></li>
<li><a target="_blank" href="/displays/pit">Pit</a></li>
<li class="disabled"><a href="#">Announcer</a></li>
<li class="disabled"><a href="#">Referee</a></li>
<li class="disabled"><a href="#">Scoring</a></li>

View File

@@ -21,17 +21,17 @@
<div id="standings">
<table id="header">
<tr>
<td style="width: 7%;">Rank</td>
<td style="width: 7%;">Team</td>
<td style="width: 30%;" class="align-left">Name</td>
<td style="width: 7%;">W-L-T</td>
<td style="width: 7%;">QS</td>
<td style="width: 7%;">Assist</td>
<td style="width: 7%;">Auto</td>
<td style="width: 7%;">T&C</td>
<td style="width: 7%;">G&F</td>
<td style="width: 7%;">DQ</td>
<td style="width: 7%;">Played</td>
<td class="team-field">Rank</td>
<td class="team-field">Team</td>
<td style="team-nickname">Name</td>
<td class="team-field">W-L-T</td>
<td class="team-field">QS</td>
<td class="team-field">Assist</td>
<td class="team-field">Auto</td>
<td class="team-field">T&C</td>
<td class="team-field">G&F</td>
<td class="team-field">DQ</td>
<td class="team-field">Played</td>
</tr>
</table>
<div id="container">
@@ -49,17 +49,17 @@
<tbody>
{{"{{#each Rankings}}"}}
<tr>
<td style="width: 7%;">{{"{{../Iteration}}"}} {{"{{this.Rank}}"}}</td>
<td style="width: 7%;">{{"{{this.TeamId}}"}}</td>
<td style="width: 30%;" class="align-left">Teh Chezy Pofs</td>
<td style="width: 7%;">{{"{{this.Wins}}"}}-{{"{{this.Losses}}"}}-{{"{{this.Ties}}"}}</td>
<td style="width: 7%;">{{"{{this.QualificationScore}}"}}</td>
<td style="width: 7%;">{{"{{this.AssistPoints}}"}}</td>
<td style="width: 7%;">{{"{{this.AutoPoints}}"}}</td>
<td style="width: 7%;">{{"{{this.TrussCatchPoints}}"}}</td>
<td style="width: 7%;">{{"{{this.GoalFoulPoints}}"}}</td>
<td style="width: 7%;">{{"{{this.Disqualifications}}"}}</td>
<td style="width: 7%;">{{"{{this.Played}}"}}</td>
<td class="team-field">{{"{{../Iteration}}"}} {{"{{this.Rank}}"}}</td>
<td class="team-field">{{"{{this.TeamId}}"}}</td>
<td class="team-nickname">{{"{{this.Nickname}}"}}</td>
<td class="team-field">{{"{{this.Wins}}"}}-{{"{{this.Losses}}"}}-{{"{{this.Ties}}"}}</td>
<td class="team-field">{{"{{this.QualificationScore}}"}}</td>
<td class="team-field">{{"{{this.AssistPoints}}"}}</td>
<td class="team-field">{{"{{this.AutoPoints}}"}}</td>
<td class="team-field">{{"{{this.TrussCatchPoints}}"}}</td>
<td class="team-field">{{"{{this.GoalFoulPoints}}"}}</td>
<td class="team-field">{{"{{this.Disqualifications}}"}}</td>
<td class="team-field">{{"{{this.Played}}"}}</td>
</tr>
{{"{{/each}}"}}
</tbody>