[Checkins] SVN: Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/ Pagination added.
Charlie Clark
charlie at begeistert.org
Mon Aug 10 11:09:13 EDT 2009
Log message for revision 102629:
Pagination added.
Changed:
U Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/new_folder.py
A Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/templates/pagingation_widgets.pt
U Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/tests/test_new_folder.py
-=-
Modified: Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/new_folder.py
===================================================================
--- Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/new_folder.py 2009-08-10 14:48:55 UTC (rev 102628)
+++ Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/new_folder.py 2009-08-10 15:09:13 UTC (rev 102629)
@@ -178,7 +178,37 @@
title = _(u'Next ${count} items', mapping={'count': length})
return {'title': title, 'url': url}
+ def page_range(self):
+ """Create a range of up to ten pages around the current page"""
+ url = self._getViewURL()
+ batch_query = '%s?b_start:int=%s'
+ pages = [(idx + 1, b_start) for idx, b_start in enumerate(
+ range(0,
+ self._getBatchObj().sequence_length,
+ self._BATCH_SIZE)
+ )
+ ]
+ range_start = max(self.current_page() - 5, 0)
+ range_stop = min(max(self.current_page() + 5, 10), len(pages))
+ page_range = []
+ for page, b_start in pages[range_start:range_stop]:
+ page_range.append({'number':page,
+ 'url':batch_query % (url, b_start)})
+ return page_range
+
@memoize
+ def page_count(self):
+ """Count total number of pages in the batch"""
+ batch_obj = self._getBatchObj()
+ count = (batch_obj.sequence_length - 1) / self._BATCH_SIZE + 1
+ return count or 1
+
+ @memoize
+ def current_page(self):
+ """Get the number of the current page in the batch"""
+ return self._getBatchStart() / (self._BATCH_SIZE + 1)
+
+ @memoize
def summary_length(self):
length = self._getBatchObj().sequence_length
return length and thousands_commas(length) or ''
Added: Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/templates/pagingation_widgets.pt
===================================================================
--- Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/templates/pagingation_widgets.pt (rev 0)
+++ Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/templates/pagingation_widgets.pt 2009-08-10 15:09:13 UTC (rev 102629)
@@ -0,0 +1,18 @@
+<metal:macro metal:define-macro="pagination"
+ tal:define="current_page view/current_page_number">
+ <a href=""
+ tal:condition="python: current_page != 1"
+ tal:attributes="href view/navigation_previous/url"><<</a>
+ <tal:repeat repeat="page view/getPages">
+ <a tal:condition="python: not page['number'] == current_page"
+ tal:attributes="href page/url"
+ tal:content="page/number">Page number</a>
+ <span tal:condition="python: page['number'] == current_page"
+ tal:content="page/number">Page number</span>
+ <tal:condition condition="not: repeat/page/end">|</tal:condition>
+ </tal:repeat>
+
+ <a href=""
+ tal:condition="python: current_page != view/page_count()"
+ tal:attributes="href view/navigation_next/url">>></a>
+</metal>
\ No newline at end of file
Modified: Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/tests/test_new_folder.py
===================================================================
--- Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/tests/test_new_folder.py 2009-08-10 14:48:55 UTC (rev 102628)
+++ Products.CMFDefault/branches/charlie_formlib_for_folders/Products/CMFDefault/browser/tests/test_new_folder.py 2009-08-10 15:09:13 UTC (rev 102629)
@@ -141,6 +141,27 @@
self.assertEquals(view.navigation_previous()['title'],
"Previous ${count} items")
self.failIf(view.navigation_next())
+
+ def test_page_count(self):
+ """Check batch page count"""
+ self._make_batch()
+ request = TestRequest(ACTUAL_URL='http://foo.com/bar')
+ view = ContentsView(self.folder, request)
+ self.assertEquals(view.page_count(), 2)
+
+ def test_page_range(self):
+ """Check page range by starting on page fifteen.
+ The page range should then be 10 to 19"""
+ batch_size = ContentsView._BATCH_SIZE
+ for i in range(batch_size * 20):
+ content_id = "Dummy%s" % i
+ self._make_one(content_id)
+ request = TestRequest(ACTUAL_URL='http://foo.com/bar')
+ request.form = {'b_start':batch_size * 15}
+ view = ContentsView(self.folder, request)
+ self.assertEquals(view.page_range()[0]['number'], 10)
+ self.assertEquals(view.page_range()[-1]['number'], 19)
+
def test_suite():
suite = unittest.TestSuite()
More information about the Checkins
mailing list