package main
import (
"html/template"
"log"
"math"
"net/url"
"strconv"
)
var funcMap = template.FuncMap{
"min": math.Min,
"genRoute": func(name string, params ...string) string {
url, err := router.Get(name).URL(params...)
if err == nil {
return url.String()
}
return "error"
},
"genNav": func(nav Navigation, currentUrl *url.URL, pagesSelectable int) template.HTML {
maxPages := math.Ceil(float64(nav.TotalItem) / float64(nav.MaxItemPerPage))
route := router.Get(nav.Route)
var ret = ""
if nav.CurrentPage-1 > 0 {
url, _ := route.URL("page", "1")
ret = ret + "
«"
}
startValue := 1
if nav.CurrentPage > pagesSelectable {
startValue = (int(math.Min((float64(nav.CurrentPage)+math.Floor(float64(pagesSelectable)/2)), maxPages)) - pagesSelectable + 1)
}
endValue := (startValue + pagesSelectable - 1)
if endValue > int(maxPages) {
endValue = int(maxPages)
}
log.Println(nav.TotalItem)
for i := startValue; i <= endValue; i++ {
pageNum := strconv.Itoa(i)
url, _ := route.URL("page", pageNum)
ret = ret + "" + strconv.Itoa(i) + ""
}
if nav.CurrentPage < int(maxPages) {
url, _ := route.URL("page", strconv.Itoa(nav.CurrentPage+1))
ret = ret + "»"
}
return template.HTML(ret)
},
}