##// END OF EJS Templates
Convert \r\n and \r to \n in the post text used in sync
Convert \r\n and \r to \n in the post text used in sync

File last commit:

r1419:b30b6ad2 default
r1504:ce9e0d38 decentral
Show More
paginator.py
90 lines | 2.5 KiB | text/x-python | PythonLexer
neko259
Code cleanup part 2
r722 __author__ = 'neko259'
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596
neko259
Code cleanup part 2
r722 from django.core.paginator import Paginator
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596
neko259
Divided paginator with page range
r1199 PAGINATOR_LOOKAROUND_SIZE = 2
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596
def get_paginator(*args, **kwargs):
return DividedPaginator(*args, **kwargs)
class DividedPaginator(Paginator):
lookaround_size = PAGINATOR_LOOKAROUND_SIZE
neko259
Added tag gallery
r1419
def __init__(self, object_list, per_page, orphans=0,
allow_empty_first_page=True, current_page=1):
super().__init__(object_list, per_page, orphans, allow_empty_first_page)
self.link = None
self.params = None
self.current_page = current_page
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596
neko259
Pretty divided paginator with ellipsis
r1200 def _left_range(self):
neko259
Divided paginator with page range
r1199 return self.page_range[:self.lookaround_size]
neko259
Pretty divided paginator with ellipsis
r1200 def _right_range(self):
neko259
Divided paginator with page range
r1199 pages = self.num_pages-self.lookaround_size
if pages <= 0:
return []
else:
return self.page_range[pages:]
neko259
Pretty divided paginator with ellipsis
r1200 def _center_range(self):
neko259
Updated paginator for long page lists. Removed old get_threads method in the post manager
r596 index = self.page_range.index(self.current_page)
neko259
Divided paginator with page range
r1199 start = max(self.lookaround_size, index - self.lookaround_size)
end = min(self.num_pages - self.lookaround_size, index + self.lookaround_size + 1)
return self.page_range[start:end]
neko259
Pretty divided paginator with ellipsis
r1200 def get_divided_range(self):
neko259
Divided paginator with page range
r1199 dr = list()
neko259
Pretty divided paginator with ellipsis
r1200 dr += self._left_range()
dr += self._center_range()
dr += self._right_range()
neko259
Divided paginator with page range
r1199
# Remove duplicates
dr = list(set(dr))
dr.sort()
return dr
neko259
Pretty divided paginator with ellipsis
r1200 def get_dividers(self):
dividers = []
prev_page = 1
for page in self.get_divided_range():
if page - prev_page > 1:
dividers.append(page)
neko259
Divided paginator with page range
r1199
neko259
Pretty divided paginator with ellipsis
r1200 # There can be no more than 2 dividers, so don't bother going
# further
if len(dividers) > 2:
break
prev_page = page
neko259
Divided paginator with page range
r1199
neko259
Pretty divided paginator with ellipsis
r1200 return dividers
neko259
Added ability to get page urls of paginators
r1377
def set_url(self, link, params):
self.link = link
self.params = params
def get_page_url(self, page):
self.params['page'] = page
url_params = '?' + '&'.join(['{}={}'.format(key, self.params[key])
neko259
Added tag gallery
r1419 for key in self.params.keys()])
neko259
Added ability to get page urls of paginators
r1377 return self.link + url_params
neko259
Added method to check if the paginator supports new-style page links
r1379 def supports_urls(self):
return self.link is not None and self.params is not None
neko259
Added tag gallery
r1419
def get_next_page_url(self):
current = self.page(self.current_page)
if current.has_next():
return self.get_page_url(current.next_page_number())
def get_prev_page_url(self):
current = self.page(self.current_page)
if current.has_previous():
return self.get_page_url(current.previous_page_number())