tAdd function to insert badge list in HTML - scoreboard - Interactive scoreboard for CTF-like games
(HTM) git clone git://git.z3bra.org/scoreboard.git
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit 05db44d4935f2aaf86977e40dca6b5855d592c7e
(DIR) parent b4e128c73fa57ae574761f732be6d380650bbed3
(HTM) Author: Willy Goiffon <contact@z3bra.org>
Date: Sat, 28 Sep 2024 00:42:44 +0200
Add function to insert badge list in HTML
Diffstat:
M html.go | 41 ++++++++++++++++++++++++++++---
1 file changed, 38 insertions(+), 3 deletions(-)
---
(DIR) diff --git a/html.go b/html.go
t@@ -3,6 +3,7 @@ package main
import (
"os"
"fmt"
+ "strings"
"html/template"
"github.com/dustin/go-humanize"
)
t@@ -11,6 +12,7 @@ type Boardline struct {
Name string
Rank string
Flag string
+ Badge string
Score string
}
t@@ -24,7 +26,7 @@ var html string = `
<html>
<head>
<meta charset="utf-8">
- <meta name="author" content="z3bra">
+ <meta name="author" content="wgs">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" type="text/css" href="/5rooms.css">
<link rel="icon" type="image/ico" href="/favicon.ico" />
t@@ -56,18 +58,49 @@ var html string = `
<table>
<thead><tr><th>RANK</th><th>NAME</th><th>FLAGS</th><th>SCORE</th></tr></thead>
<tbody>
-{{range .Players}} <tr><td>{{.Rank}}<td>{{.Name}}</td><td>{{.Flag}}</td><td>{{.Score}}</td></tr>
+{{range .Players}} <tr><td>{{.Rank}}<td>{{.Name}}</td><td><abbr title="{{.Badge}}">{{.Flag}}</abbr></td><td>{{.Score}}</td></tr>
{{end}}
{{range .Placeholders}} <tr class='unset'><td>{{.Rank}}<td>{{.Name}}</td><td>{{.Flag}}</td><td>{{.Score}}</td></tr>
{{end}}
</tbody>
</table>
</main>
-<p class='copyright'>Copyright (C) <a href="https://z3bra.org">WGS</a>, 2024</p>
+<p class='copyright'>Copyright (C) <a href="https://z3bra.org">wgs</a>, 2024-2025</p>
</body>
</html>
`
+func (p *Player) BadgeHTML() string {
+ var badges strings.Builder
+
+ query := `SELECT
+ flag.badge
+ FROM flag
+ INNER JOIN score ON score.flag = flag.value
+ WHERE score.name = ?;`
+
+ rows, err := p.db.Query(query, p.name)
+ if err != nil {
+ return ""
+ }
+
+ var n int = 0
+ for rows.Next() {
+ var b string
+ err := rows.Scan(&b)
+ if err != nil {
+ return ""
+ }
+ badges.WriteString(b)
+ n = n + 1
+ if n % 8 == 0 {
+ badges.WriteString("\n")
+ }
+ }
+
+ return badges.String()
+}
+
func (a *Application) GenerateHTML() {
players, err := db_ranked_players(a.db, 0, -1)
if err != nil {
t@@ -77,10 +110,12 @@ func (a *Application) GenerateHTML() {
data := Template{}
for i:=0; i<len(players); i++ {
players[i].db = a.db
+ players[i].Fetch()
data.Players = append(data.Players, Boardline{
Name: players[i].name,
Rank: players[i].RankStr(),
Flag: players[i].FlagStr(),
+ Badge: players[i].BadgeHTML(),
Score: fmt.Sprintf("%5d", players[i].score),
})
}