0001"""Pagination Link Generators"""
0002from webhelpers.htmlgen import html
0003
0004def pagelist(page):
0005 """PHPbb style Pagination Links
0006
0007 This returns HTML source to be included into a page. The html is generated
0008 with htmlgen
0009 """
0010 paginator = page.paginator
0011
0012 first_page = paginator[0]
0013 first_window = first_page.window(padding=3)
0014
0015 page_window = page.window(padding=1)
0016
0017 last_page = paginator[-1]
0018 last_window = last_page.window(padding=3)
0019
0020 first_past_page = first_window.last >= page_window.first
0021 page_past_last = page_window.last >= last_window.first
0022
0023 def combine_pages(page_list):
0024 seen = {}
0025 result = []
0026 for page in page_list:
0027 if page in seen: continue
0028 seen[page] = 1
0029 result.append(page)
0030 return result
0031
0032 if first_past_page:
0033 if page_past_last:
0034 display = first_window.pages
0035 else:
0036 first_window.last = page_window.last
0037 display = (first_window.pages + [None] + last_window.pages)
0038 else:
0039 if page_past_last:
0040 page_window.last = last_window.last
0041 display = (first_window.pages + [None] + page_window.pages)
0042 else:
0043 display = (first_window.pages + [None] + page_window.pages + [None]
0044 + last_window.pages)
0045
0046 pager_c = []
0047 for i in display:
0048 if i is None:
0049 pager_c.append(html.span(c='...'))
0050 elif i == page:
0051 pager_c.append(html.span(c=[i]))
0052 else:
0053 pager_c.append(html.a(href=i, c=[i]))
0054
0055 pager = html.div(class_='pager', c=pager_c)
0056
0057 return pager