mirror of
				https://github.com/teamhanko/hanko.git
				synced 2025-10-31 08:35:47 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1007 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1007 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package pagination
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"net/url"
 | |
| 	"strings"
 | |
| )
 | |
| 
 | |
| func CreateHeader(u *url.URL, total int, page int, itemsPerPage int) string {
 | |
| 	var lastPage int
 | |
| 
 | |
| 	if total%itemsPerPage == 0 {
 | |
| 		lastPage = total / itemsPerPage
 | |
| 	} else {
 | |
| 		lastPage = total/itemsPerPage + 1
 | |
| 	}
 | |
| 
 | |
| 	if lastPage == 0 {
 | |
| 		lastPage = 1
 | |
| 	}
 | |
| 
 | |
| 	var links []string
 | |
| 	if page != 1 || page == lastPage {
 | |
| 		links = append(links, formatter(u, "first", itemsPerPage, 1))
 | |
| 	}
 | |
| 
 | |
| 	if page != lastPage {
 | |
| 		links = append(links, formatter(u, "last", itemsPerPage, lastPage))
 | |
| 	}
 | |
| 
 | |
| 	if page < lastPage {
 | |
| 		links = append(links, formatter(u, "next", itemsPerPage, page+1))
 | |
| 	}
 | |
| 
 | |
| 	if page > 1 {
 | |
| 		links = append(links, formatter(u, "prev", itemsPerPage, page-1))
 | |
| 	}
 | |
| 
 | |
| 	return strings.Join(links, ",")
 | |
| }
 | |
| 
 | |
| func formatter(u *url.URL, rel string, perPage int, page int) string {
 | |
| 	q := u.Query()
 | |
| 	q.Set("page", fmt.Sprintf("%d", page))
 | |
| 	q.Set("per_page", fmt.Sprintf("%d", perPage))
 | |
| 	u.RawQuery = q.Encode()
 | |
| 	return fmt.Sprintf("<%s>; rel=\"%s\"", u.String(), rel)
 | |
| }
 | 
