Skip to content

Instantly share code, notes, and snippets.

@akiraak
Created June 10, 2017 04:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akiraak/30414e5be306271e59ba570ebbb2bd17 to your computer and use it in GitHub Desktop.
Save akiraak/30414e5be306271e59ba570ebbb2bd17 to your computer and use it in GitHub Desktop.
type PageItem struct {
Page int
Str string
}
type Page struct {
Items []PageItem
MaxPage int
}
func CreatePage(currentPage, maxPage int) Page {
page := Page{}
page.MaxPage = maxPage
printMaxPage := 5
// Cals printing page
startPage := currentPage - (printMaxPage / 2)
if startPage < 1 {
startPage = 1
}
endPage := startPage + (printMaxPage - 1)
if endPage > maxPage {
endPage = maxPage
}
// Previos
if currentPage <= 1 {
page.Items = append(page.Items, PageItem{0, "<<"})
} else {
page.Items = append(page.Items, PageItem{currentPage - 1, "<<"})
}
if startPage >= 2 {
page.Items = append(page.Items, PageItem{1, "1"})
page.Items = append(page.Items, PageItem{0, "..."})
}
// Page
for i := startPage; i <= endPage; i++ {
if i == currentPage {
page.Items = append(page.Items, PageItem{0, strconv.Itoa(i)})
} else {
page.Items = append(page.Items, PageItem{i, strconv.Itoa(i)})
}
}
// Next
if endPage <= (maxPage - 1) {
page.Items = append(page.Items, PageItem{0, "..."})
page.Items = append(page.Items, PageItem{maxPage, strconv.Itoa(maxPage)})
}
if currentPage >= maxPage {
page.Items = append(page.Items, PageItem{0, ">>"})
} else {
page.Items = append(page.Items, PageItem{currentPage + 1, ">>"})
}
return page
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment