code.gitea.io/gitea@v1.19.3/modules/util/paginate.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package util 5 6 import "reflect" 7 8 // PaginateSlice cut a slice as per pagination options 9 // if page = 0 it do not paginate 10 func PaginateSlice(list interface{}, page, pageSize int) interface{} { 11 if page <= 0 || pageSize <= 0 { 12 return list 13 } 14 if reflect.TypeOf(list).Kind() != reflect.Slice { 15 return list 16 } 17 18 listValue := reflect.ValueOf(list) 19 20 page-- 21 22 if page*pageSize >= listValue.Len() { 23 return listValue.Slice(listValue.Len(), listValue.Len()).Interface() 24 } 25 26 listValue = listValue.Slice(page*pageSize, listValue.Len()) 27 28 if listValue.Len() > pageSize { 29 return listValue.Slice(0, pageSize).Interface() 30 } 31 32 return listValue.Interface() 33 }