tFix newplayer box menu and HTML generation - scoreboard - Interactive scoreboard for CTF-like games
 (HTM) git clone git://git.z3bra.org/scoreboard.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit cc20e9fc44c4a724943a4eb8d8a1edb741ecbb39
 (DIR) parent e8f323a0f07c97f14b90618e21bccbff82ff176e
 (HTM) Author: Willy Goiffon <contact@z3bra.org>
       Date:   Wed, 25 Sep 2024 23:43:04 +0200
       
       Fix newplayer box menu and HTML generation
       
       Diffstat:
         M db.go                               |      11 +++++++++++
         M html.go                             |      43 ++++++++++++++++++++-----------
         M main.go                             |      25 +++++++++++++------------
         M playerbox.go                        |       4 ++--
         M ui.go                               |       2 +-
       
       5 files changed, 55 insertions(+), 30 deletions(-)
       ---
 (DIR) diff --git a/db.go b/db.go
       t@@ -63,6 +63,17 @@ func db_init(file string) (*sql.DB, error) {
                return db, nil
        }
        
       +func db_count_players(db *sql.DB) (int, error) {
       +        var count int
       +
       +        query := `SELECT count(*) FROM user;`
       +
       +        row := db.QueryRow(query)
       +        err := row.Scan(&count)
       +
       +        return count, err
       +}
       +
        func db_get_flags(db *sql.DB) ([]Flag, error) {
                query := `SELECT rowid,value,badge,score FROM flag ORDER BY score;`
        
 (DIR) diff --git a/html.go b/html.go
       t@@ -26,16 +26,33 @@ var html string = `
                <meta charset="utf-8">
                <meta name="author" content="z3bra">
                <meta name="viewport" content="width=device-width">
       -        <link rel="stylesheet" type="text/css" href="/arcade.css">
       -        <link rel="stylesheet" type="text/css" href="/glitch.css">
       -        <link rel="stylesheet" type="text/css" href="/board.css">
       +        <link rel="stylesheet" type="text/css" href="/5rooms.css">
                <link rel="icon" type="image/ico" href="/favicon.ico" />
                <title>High scores</title>
       +        <style>
       +        table {
       +                max-width: 100%;
       +                margin: auto;
       +                border-collapse: collapse;
       +                overflow: scroll;
       +                text-align:center;
       +                font-family: monospace;
       +        }
       +        th { padding: 1ch 1ch; }
       +        td { padding: 0ch 1ch; }
       +        tr.unset { color: #888; }
       +        tr > td:last-of-type { text-align:right; }
       +        p.copyright {
       +                width: 100%;
       +                text-align: center;
       +                position: absolute;
       +                bottom: 2ch;
       +        }
       +        </style>
        </head>
        <body class=flex>
       -<h1 class="title glitch" data-text="CYB3R HUNT"><a href="/">CYB3R HUNT</a></h1>
       -<h2>HIGH SCORES</h2>
       -<div class="board">
       +<h1>HIGH SCORES</h1>
       +<main class="room vert">
        <table>
                <thead><tr><th>RANK</th><th>NAME</th><th>FLAGS</th><th>SCORE</th></tr></thead>
                <tbody>
       t@@ -45,21 +62,17 @@ var html string = `
        {{end}}
                </tbody>
        </table>
       -</div>
       -<div style="flex-grow:2"></div>
       -<p class='copyright'>Copyright (C) <a href="https://z3bra.org">Z3BRA</a>, 2022-2106</p>
       +</main>
       +<p class='copyright'>Copyright (C) <a href="https://z3bra.org">WGS</a>, 2024</p>
        </body>
        </html>
        `
        
        func (a *Application) GenerateHTML() {
       -        players := make([]Player, 0)
       -        /*
                players, err := db_ranked_players(a.db, 0, -1)
                if err != nil {
                        panic(err)
                }
       -        */
        
                data := Template{}
                for i:=0; i<len(players); i++ {
       t@@ -68,7 +81,7 @@ func (a *Application) GenerateHTML() {
                                Name: players[i].name,
                                Rank: players[i].RankStr(),
                                Flag: players[i].FlagStr(),
       -                        Score: fmt.Sprintf("%d", players[i].score),
       +                        Score: fmt.Sprintf("%5d", players[i].score),
                        })
                }
        
       t@@ -78,8 +91,8 @@ func (a *Application) GenerateHTML() {
                                data.Placeholders = append(data.Placeholders, Boardline{
                                        Name: "AAA",
                                        Rank: humanize.Ordinal(i+1),
       -                                Flag: ".......",
       -                                Score: "00000",
       +                                Flag: ".....",
       +                                Score: "0",
                                })
                        }
                }
 (DIR) diff --git a/main.go b/main.go
       t@@ -187,21 +187,22 @@ func main() {
                                scoreboard.GenerateHTML()
                                os.Exit(0)
                        }
       -                switch scoreboard.flag = flagid(args[0]) + 1; scoreboard.flag {
       -                case 0:
       -                        fmt.Println("Incorrect flag")
       -                        return
       -                case 1:
       -                        scoreboard.player.flag = scoreboard.flag
       -                        scoreboard.player.score = 100
       +                if args[0] == "register" {
       +                        scoreboard.player.flag = 0
       +                        scoreboard.player.score = 0
                                scoreboard.player.ts = time.Now().Unix()
        
       -                        rank := scoreboard.player.ScoreRank() + 1
       -
       -                        scoreboard.NewPlayer(rank)
       +                        rank, _ := db_count_players(scoreboard.db)
       +                        scoreboard.NewPlayer(rank + 1)
                                scoreboard.pages.SwitchToPage("board")
       -                default:
       -                        scoreboard.pages.SwitchToPage("token")
       +                } else {
       +                        switch scoreboard.flag = flagid(args[0]) + 1; scoreboard.flag {
       +                        case 0:
       +                                fmt.Println("Incorrect flag")
       +                                return
       +                        default:
       +                                scoreboard.pages.SwitchToPage("token")
       +                        }
                        }
                } else {
                        scoreboard.pages.SwitchToPage("board")
 (DIR) diff --git a/playerbox.go b/playerbox.go
       t@@ -122,10 +122,10 @@ func PlayerBoxGrid(p *Player, rank int) *tview.Grid {
                box := PlayerBoxName(p)
        
                playerbox.box = box
       -        playerbox.score = gridcell(fmt.Sprintf("%4d ", p.score))
       +        playerbox.score = gridcell(fmt.Sprintf("%5d ", p.score))
        
                grid := tview.NewGrid().
       -                SetColumns(4,3,8,6).
       +                SetColumns(4,4,6,7).
                        SetGap(0, 2).
                        SetRows(1).
                        AddItem(gridcell(rankstr), 0, 0, 1, 1, 0, 0, false).
 (DIR) diff --git a/ui.go b/ui.go
       t@@ -50,7 +50,7 @@ func RankTable(offset, limit, rank int, fill bool) *tview.Table {
                for i := 0; i < len(players); i++ {
                        p := players[i]
                        rankstr := fmt.Sprintf("%4s", humanize.Ordinal(rank + i + 1))
       -                scorestr := fmt.Sprintf("%4d", p.score)
       +                scorestr := fmt.Sprintf("%5d", p.score)
                        t.SetCell(i, 0, newcell(rankstr))
                        t.SetCell(i, 1, newcell(p.name))
                        t.SetCell(i, 2, newcell(p.FlagStr()))