Add paging for revisions action

This commit is contained in:
2025-09-27 19:54:45 +09:00
parent b79186a141
commit d0e2d7e325
4 changed files with 32 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ import (
"html/template"
"net/http"
"net/url"
"strconv"
"github.com/akikareha/himewiki/internal/config"
"github.com/akikareha/himewiki/internal/data"
@@ -12,7 +13,13 @@ import (
)
func Revisions(cfg *config.Config, w http.ResponseWriter, r *http.Request, params *Params) {
revs, err := data.LoadRevisions(params.DbName)
pageStr := r.URL.Query().Get("p")
page, err := strconv.Atoi(pageStr)
if err != nil {
page = 1
}
revs, err := data.LoadRevisions(params.DbName, page, perPage)
if err != nil {
http.Error(w, "Failed to load revisions", http.StatusInternalServerError)
return
@@ -24,11 +31,13 @@ tmpl.Execute(w, struct {
Name string
Title string
Revisions []data.Revision
NextPage int
}{
SiteName: cfg.Site.Name,
Name: params.Name,
Title: params.DbName,
Revisions: revs,
NextPage: page + 1,
})
}

View File

@@ -298,12 +298,22 @@ type Revision struct {
CreatedAt time.Time
}
func LoadRevisions(name string) ([]Revision, error) {
func LoadRevisions(name string, page int, perPage int) ([]Revision, error) {
if page < 1 {
return nil, errors.New("invalid page")
}
if perPage < 1 {
return nil, errors.New("invalid perPage")
}
offset := (page - 1) * perPage
rows, err := db.Query(context.Background(),
`SELECT id, name, content, created_at
FROM revisions
WHERE name=$1
ORDER BY created_at DESC`, name)
ORDER BY created_at DESC
LIMIT $2 OFFSET $3
`, name, perPage + 1, offset)
if err != nil {
return nil, err
}
@@ -321,9 +331,12 @@ func LoadRevisions(name string) ([]Revision, error) {
for i := 0; i < len(revs) - 1; i++ {
revs[i].Diff = diff(revs[i + 1].Content, revs[i].Content)
}
if len(revs) > 0 {
if len(revs) > 0 && len(revs) < perPage + 1 {
revs[len(revs) - 1].Diff = diff("", revs[len(revs) - 1].Content)
}
if len(revs) > perPage {
revs = revs[:perPage]
}
return revs, nil
}

View File

@@ -22,6 +22,7 @@
<div><code>
{{.Diff | fmtdiff}}
</code></div>
<hr />
{{else}}
<p>No pages yet.</p>
{{end}}

View File

@@ -35,6 +35,11 @@ No revisions found.
{{end}}
</ul>
<div class="menu">
<br />
<a href="/{{.Name | pathescape}}?a=revs&p={{.NextPage}}">Next</a>
</div>
<div class="menu">
<br />
<a href="/"><img src="/logo.png?a=static" alt="{{.SiteName}}" /></a>