diff --git a/main.go b/main.go index 37dea84..46d4e87 100644 --- a/main.go +++ b/main.go @@ -1427,13 +1427,31 @@ func getNetworkCounts(networks []db.Network) map[uint]uint64 { func viewNetworks(c *gin.Context) { var networks []db.Network + var total int64 var err error + + // Pagination parameters + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + if page < 1 { + page = 1 + } + pageSize := 100 + offset := (page - 1) * pageSize + run := c.Param("run") run = strings.TrimPrefix(run, "/") + + // Get total count and paginated results if run == "" { - err = db.GetDB().Order("id desc").Find(&networks).Error + err = db.GetDB().Model(&db.Network{}).Count(&total).Error + if err == nil { + err = db.GetDB().Order("id desc").Offset(offset).Limit(pageSize).Find(&networks).Error + } } else { - err = db.GetDB().Order("id desc").Where("training_run_id = ?", run).Find(&networks).Error + err = db.GetDB().Model(&db.Network{}).Where("training_run_id = ?", run).Count(&total).Error + if err == nil { + err = db.GetDB().Order("id desc").Where("training_run_id = ?", run).Offset(offset).Limit(pageSize).Find(&networks).Error + } } if err != nil { log.Println(err) @@ -1459,9 +1477,6 @@ func viewNetworks(c *gin.Context) { counts := getNetworkCounts(networks) json := []gin.H{} - if c.DefaultQuery("show_all", "1") == "0" { - networks = networks[0:99] - } for _, network := range networks { json = append(json, gin.H{ "id": network.ID, @@ -1478,8 +1493,21 @@ func viewNetworks(c *gin.Context) { }) } + // Calculate pagination info + totalPages := int((total + int64(pageSize) - 1) / int64(pageSize)) + hasPrev := page > 1 + hasNext := page < totalPages + c.HTML(http.StatusOK, "networks", gin.H{ - "networks": json, + "networks": json, + "page": page, + "totalPages": totalPages, + "total": total, + "hasPrev": hasPrev, + "hasNext": hasNext, + "prevPage": page - 1, + "nextPage": page + 1, + "run": run, }) } @@ -1578,16 +1606,31 @@ func viewStats(c *gin.Context) { func viewMatches(c *gin.Context) { var matches []db.Match + var total int64 var err error + + // Pagination parameters + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + if page < 1 { + page = 1 + } + pageSize := 100 + offset := (page - 1) * pageSize + run := c.Param("run") run = strings.TrimPrefix(run, "/") + + // Get total count and paginated results for matches if run == "" { - err = db.GetDB().Order("id desc").Find(&matches).Error + err = db.GetDB().Model(&db.Match{}).Count(&total).Error + if err == nil { + err = db.GetDB().Order("id desc").Offset(offset).Limit(pageSize).Find(&matches).Error + } } else { - err = db.GetDB().Order("id desc").Where("training_run_id = ?", run).Find(&matches).Error - } - if c.DefaultQuery("show_all", "1") == "0" { - matches = matches[0:99] + err = db.GetDB().Model(&db.Match{}).Where("training_run_id = ?", run).Count(&total).Error + if err == nil { + err = db.GetDB().Order("id desc").Where("training_run_id = ?", run).Offset(offset).Limit(pageSize).Find(&matches).Error + } } if err != nil { log.Println(err) @@ -1656,8 +1699,21 @@ func viewMatches(c *gin.Context) { }) } + // Calculate pagination info + totalPages := int((total + int64(pageSize) - 1) / int64(pageSize)) + hasPrev := page > 1 + hasNext := page < totalPages + c.HTML(http.StatusOK, "matches", gin.H{ - "matches": json, + "matches": json, + "page": page, + "totalPages": totalPages, + "total": total, + "hasPrev": hasPrev, + "hasNext": hasNext, + "prevPage": page - 1, + "nextPage": page + 1, + "run": run, }) } diff --git a/templates/matches.tmpl b/templates/matches.tmpl index 15d5cc5..9d0f35a 100755 --- a/templates/matches.tmpl +++ b/templates/matches.tmpl @@ -33,7 +33,51 @@ {{end}} - show all matches (warning: large page) + + + + +
+ Showing {{len .matches}} matches per page out of {{.total}} matches. +
{{end}} diff --git a/templates/networks.tmpl b/templates/networks.tmpl index 4924aa3..855ff7d 100755 --- a/templates/networks.tmpl +++ b/templates/networks.tmpl @@ -31,9 +31,53 @@ {{end}} - show all networks (warning: large page) + + + + +
+ Showing {{len .networks}} networks per page out of {{.total}} networks. +
{{end}} {{define "scripts"}} -{{end}} +{{end}} \ No newline at end of file