itImplement HTML score page generation - scoreboard - Interactive scoreboard for CTF-like games Err z3bra.org 70
hgit clone git://git.z3bra.org/scoreboard.git URL:git://git.z3bra.org/scoreboard.git z3bra.org 70
1Log /scm/scoreboard/log.gph z3bra.org 70
1Files /scm/scoreboard/files.gph z3bra.org 70
1Refs /scm/scoreboard/refs.gph z3bra.org 70
i--- Err z3bra.org 70
1commit 528d94f22d463e41294bd92095b4953f52dc1fdd /scm/scoreboard/commit/528d94f22d463e41294bd92095b4953f52dc1fdd.gph z3bra.org 70
1parent e060760bef0f2e589d993fa17bbf11cc6762f3dc /scm/scoreboard/commit/e060760bef0f2e589d993fa17bbf11cc6762f3dc.gph z3bra.org 70
hAuthor: Willy Goiffon URL:mailto:dev@z3bra.org z3bra.org 70
iDate: Wed, 7 Dec 2022 12:45:04 +0100 Err z3bra.org 70
i Err z3bra.org 70
iImplement HTML score page generation Err z3bra.org 70
i Err z3bra.org 70
iDiffstat: Err z3bra.org 70
i M db.go | 4 ++-- Err z3bra.org 70
i A html.go | 97 ++++++++++++++++++++++++++++++ Err z3bra.org 70
i M main.go | 16 +++++++++++----- Err z3bra.org 70
i M player.go | 15 ++++++++++----- Err z3bra.org 70
i M playerbox.go | 1 + Err z3bra.org 70
i Err z3bra.org 70
i5 files changed, 121 insertions(+), 12 deletions(-) Err z3bra.org 70
i--- Err z3bra.org 70
1diff --git a/db.go b/db.go /scm/scoreboard/file/db.go.gph z3bra.org 70
it@@ -104,7 +104,7 @@ func db_id(db *sql.DB, nick string) bool { Err z3bra.org 70
i Err z3bra.org 70
i func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) { Err z3bra.org 70
i query := `SELECT Err z3bra.org 70
i- name,flag,score Err z3bra.org 70
i+ name,flag,score,ts Err z3bra.org 70
i FROM score Err z3bra.org 70
i ORDER BY Err z3bra.org 70
i score DESC, Err z3bra.org 70
it@@ -122,7 +122,7 @@ func db_ranked_players(db *sql.DB, offset, limit int) ([]Player, error) { Err z3bra.org 70
i players := make([]Player, 0) Err z3bra.org 70
i for rows.Next() { Err z3bra.org 70
i var p Player Err z3bra.org 70
i- err := rows.Scan(&p.name, &p.flag, &p.score) Err z3bra.org 70
i+ err := rows.Scan(&p.name, &p.flag, &p.score, &p.ts) Err z3bra.org 70
i if err != nil { Err z3bra.org 70
i return nil, err Err z3bra.org 70
i } Err z3bra.org 70
1diff --git a/html.go b/html.go /scm/scoreboard/file/html.go.gph z3bra.org 70
it@@ -0,0 +1,97 @@ Err z3bra.org 70
i+package main Err z3bra.org 70
i+ Err z3bra.org 70
i+import ( Err z3bra.org 70
i+ "os" Err z3bra.org 70
i+ "fmt" Err z3bra.org 70
i+ "html/template" Err z3bra.org 70
i+ "github.com/dustin/go-humanize" Err z3bra.org 70
i+) Err z3bra.org 70
i+ Err z3bra.org 70
i+type Boardline struct { Err z3bra.org 70
i+ Name string Err z3bra.org 70
i+ Rank string Err z3bra.org 70
i+ Flag string Err z3bra.org 70
i+ Score string Err z3bra.org 70
i+} Err z3bra.org 70
i+ Err z3bra.org 70
i+type Template struct { Err z3bra.org 70
i+ Players []Boardline Err z3bra.org 70
i+ Placeholders []Boardline Err z3bra.org 70
i+} Err z3bra.org 70
i+ Err z3bra.org 70
i+var html string = ` Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+ High scores Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+CYB3R HUNT
Err z3bra.org 70
i+HIGH SCORES
Err z3bra.org 70
i+ Err z3bra.org 70
i+
Err z3bra.org 70
i+ | RANK | NAME | FLAGS | SCORE |
Err z3bra.org 70
i+ Err z3bra.org 70
i+{{range .Players}} | {{.Rank}} | {{.Name}} | {{.Flag}} | {{.Score}} |
Err z3bra.org 70
i+{{end}} Err z3bra.org 70
i+{{range .Placeholders}} | {{.Rank}} | {{.Name}} | {{.Flag}} | {{.Score}} |
Err z3bra.org 70
i+{{end}} Err z3bra.org 70
i+ Err z3bra.org 70
i+
Err z3bra.org 70
i+
Err z3bra.org 70
i+ Err z3bra.org 70
i+ Err z3bra.org 70
i+` Err z3bra.org 70
i+ Err z3bra.org 70
i+func (a *Application) GenerateHTML() { Err z3bra.org 70
i+ players, err := db_ranked_players(a.db, 0, -1) Err z3bra.org 70
i+ if err != nil { Err z3bra.org 70
i+ panic(err) Err z3bra.org 70
i+ } Err z3bra.org 70
i+ Err z3bra.org 70
i+ data := Template{} Err z3bra.org 70
i+ for i:=0; i 1 || (len(args) == 1 && args[0] == "help") { Err z3bra.org 70
1diff --git a/player.go b/player.go /scm/scoreboard/file/player.go.gph z3bra.org 70
it@@ -49,8 +49,6 @@ func tokenize(name string) (string, string, error) { Err z3bra.org 70
i key := randbuf(12) Err z3bra.org 70
i salt := base32.StdEncoding.EncodeToString([]byte(name)) Err z3bra.org 70
i Err z3bra.org 70
i- //token := []byte(name) Err z3bra.org 70
i- //token = append(token, key...) Err z3bra.org 70
i token := key Err z3bra.org 70
i token = append(token, []byte(name)...) Err z3bra.org 70
i Err z3bra.org 70
it@@ -104,10 +102,10 @@ func (p *Player) ScoreRank() int { Err z3bra.org 70
i count(*) Err z3bra.org 70
i FROM score Err z3bra.org 70
i WHERE Err z3bra.org 70
i- score >= ? OR (score == ? AND ts <= ?) Err z3bra.org 70
i+ name != ? AND (score > ? OR (score == ? AND ts <= ?)) Err z3bra.org 70
i ;` Err z3bra.org 70
i Err z3bra.org 70
i- row := p.db.QueryRow(query, p.score, p.score, p.ts) Err z3bra.org 70
i+ row := p.db.QueryRow(query, p.name, p.score, p.score, p.ts) Err z3bra.org 70
i row.Scan(&count) Err z3bra.org 70
i return count Err z3bra.org 70
i } Err z3bra.org 70
it@@ -139,6 +137,10 @@ func (p *Player) FlagStr() string { Err z3bra.org 70
i return fmt.Sprintf("%s", str) Err z3bra.org 70
i } Err z3bra.org 70
i Err z3bra.org 70
i+func (p *Player) RankStr() string { Err z3bra.org 70
i+ return humanize.Ordinal(p.ScoreRank() + 1) Err z3bra.org 70
i+} Err z3bra.org 70
i+ Err z3bra.org 70
i func (p *Player) Exists() bool { Err z3bra.org 70
i forbidden := []string{"KKK"} Err z3bra.org 70
i for i := 0; i