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),
                        })
                }