# [1] 2 3 4 5
# 1 [2] 3 4 5
# 1 2 [3] 4 5
# 2 3 [4] 5 6
# 2 3 4 [5] 6
# 2 3 4 5 [6]
# TODO: Change this so it can work for different pagination counts and not the magic #5
def paginate(result_count, start, items_per_page=10):
# If there are less results than items per page, pagination is useless
if result_count <= items_per_page:
print "nope"
print '-----------------------------------'
return
# Items in pagingation (odd # so the "active" control can be in the middle)
items_in_pagination = 5
# Total amount of pages
page_count = get_total_page_count(result_count, items_per_page)
# Page we're currently on
current_page = (start / items_per_page) + 1
# More items than pages
if items_in_pagination > page_count:
pagination_start = 1
pagination_end = page_count + 1;
# Start page e.g. 1 [2] 3 4 5
elif current_page < 3:
pagination_start = 1
pagination_end = items_in_pagination + 1
# End page e.g. 1 2 3 [4] 5
elif current_page + 2 > page_count :
pagination_start = page_count - 4
pagination_end = page_count + 1
# Everything else, e.g. 1 2 [3] 4 5
else:
pagination_start = current_page - 2
pagination_end = current_page + 3
# Main loop
for page in range(pagination_start, pagination_end):
start_count = (page - 1) * items_per_page
if page == current_page:
print "active:", page, "start={}".format(start_count)
else:
print page, "start={}".format(start_count)
print '-----------------------------------'
# Calculate the total possible amount of pages based on the result count
def get_total_page_count(result_count, items_per_page=10):
count = result_count / items_per_page
overflow = result_count % items_per_page
if(overflow > 0):
count += 1
return count
paginate(493, 0)
paginate(493, 10)
paginate(493, 20)
paginate(493, 30)
paginate(493, 460)
paginate(493, 470)
paginate(493, 480)
paginate(493, 490)
paginate(9, 0)
paginate(11, 0)
paginate(11, 10)
paginate(10, 10)