package main import( "math" "html/template" "net/url" "strconv" "log" ) 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) }, }