60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
from Tags import P, Span, A, Strong
|
|
|
|
class Page_navigation( P ):
|
|
def __init__( self, page_path, displayed_item_count, total_item_count, start, items_per_page, return_text = None ):
|
|
if start is None or items_per_page is None:
|
|
P.__init__( self )
|
|
return
|
|
|
|
if displayed_item_count == 1 and displayed_item_count < total_item_count:
|
|
if not return_text:
|
|
P.__init__( self )
|
|
return
|
|
|
|
P.__init__(
|
|
self,
|
|
Span(
|
|
A(
|
|
return_text,
|
|
href = "%s" % page_path,
|
|
),
|
|
),
|
|
)
|
|
return
|
|
|
|
if start == 0 and items_per_page >= total_item_count:
|
|
P.__init__( self )
|
|
return
|
|
|
|
P.__init__(
|
|
self,
|
|
( start > 0 ) and Span(
|
|
A(
|
|
u"previous",
|
|
href = self.href( page_path, max( start - items_per_page, 0 ), items_per_page ),
|
|
),
|
|
u" | ",
|
|
) or None,
|
|
[ Span(
|
|
( start == page_start ) and Strong( unicode( page_number + 1 ) ) or A(
|
|
Strong( unicode( page_number + 1 ) ),
|
|
href = self.href( page_path, page_start, items_per_page ),
|
|
),
|
|
) for ( page_number, page_start ) in enumerate( range( 0, total_item_count, items_per_page ) ) ],
|
|
( start + items_per_page < total_item_count ) and Span(
|
|
u" | ",
|
|
A(
|
|
u"next",
|
|
href = self.href( page_path, min( start + items_per_page, total_item_count - 1 ), items_per_page ),
|
|
),
|
|
) or None,
|
|
)
|
|
|
|
@staticmethod
|
|
def href( page_path, start, count ):
|
|
# if start is zero, leave off start and count parameters and just use the defaults
|
|
if start == 0:
|
|
return page_path
|
|
|
|
return u"%s?start=%d&count=%d" % ( page_path, start, count )
|