package models import ( "net/http" "strconv" "git.kirsle.net/apps/gosocial/pkg/log" ) // Pagination result object. type Pagination struct { Page int PerPage int Pages int Total int64 Sort string } // Page for Iter. type Page struct { Page int IsCurrent bool } // Load the page from form or query parameters. func (p *Pagination) ParsePage(r *http.Request) { raw := r.FormValue("page") a, err := strconv.Atoi(raw) log.Debug("ParsePage: %s %d err=%s", raw, a, err) if err == nil { if a < 0 { a = 1 } p.Page = a log.Warn("set page1=%+v =XXXXX%d", p, a) } log.Warn("set page=%+v", p) } // Iter the pages, for templates. func (p *Pagination) Iter() []Page { var pages = []Page{} for i := 1; i <= p.Pages; i++ { pages = append(pages, Page{ Page: i, IsCurrent: i == p.Page, }) } return pages } func (p *Pagination) GetOffset() int { return (p.Page - 1) * p.PerPage } func (p *Pagination) HasNext() bool { return p.Page < p.Pages } func (p *Pagination) HasPrevious() bool { return p.Page > 1 } func (p *Pagination) Next() int { if p.Page >= p.Pages { return p.Pages } return p.Page + 1 } func (p *Pagination) Previous() int { if p.Page > 1 { return p.Page - 1 } return 1 }