[Checkins] SVN: z3c.table/trunk/ Fixed the default BatchProvider not to lose table sorting query arguments
Marius Gedminas
marius at pov.lt
Mon Aug 9 11:46:57 EDT 2010
Log message for revision 115575:
Fixed the default BatchProvider not to lose table sorting query arguments
from the generated links; now batching and sorting play with each other
nicely.
Changed:
U z3c.table/trunk/CHANGES.txt
U z3c.table/trunk/src/z3c/table/batch.py
U z3c.table/trunk/src/z3c/table/batch.txt
-=-
Modified: z3c.table/trunk/CHANGES.txt
===================================================================
--- z3c.table/trunk/CHANGES.txt 2010-08-09 15:06:30 UTC (rev 115574)
+++ z3c.table/trunk/CHANGES.txt 2010-08-09 15:46:57 UTC (rev 115575)
@@ -5,6 +5,10 @@
0.8.2 (unreleased)
------------------
+- Fixed the default BatchProvider not to lose table sorting query arguments
+ from the generated links; now batching and sorting play with each other
+ nicely.
+
- Split single doctest file (README.txt) into different files
Modified: z3c.table/trunk/src/z3c/table/batch.py
===================================================================
--- z3c.table/trunk/src/z3c/table/batch.py 2010-08-09 15:06:30 UTC (rev 115574)
+++ z3c.table/trunk/src/z3c/table/batch.py 2010-08-09 15:46:57 UTC (rev 115575)
@@ -16,6 +16,8 @@
"""
__docformat__ = "reStructuredText"
+from urllib import urlencode
+
import zope.interface
import zope.i18nmessageid
from zope.traversing.browser import absoluteURL
@@ -70,6 +72,8 @@
nextBatchSize = 3
batchSpacer = u'...'
+ _request_args = ['%(prefix)s-sortOn', '%(prefix)s-sortOrder']
+
def __init__(self, context, request, table):
self.__parent__ = context
self.context = context
@@ -78,16 +82,30 @@
self.batch = table.rows
self.batches = table.rows.batches
+ def getQueryStringArgs(self):
+ """Collect additional terms from the request to include in links.
+
+ API borrowed from z3c.table.header.ColumnHeader.
+ """
+ args = {}
+ for key in self._request_args:
+ key = key % dict(prefix=self.table.prefix)
+ value = self.request.get(key, None)
+ if value:
+ args.update({key: value})
+ return args
+
def renderBatchLink(self, batch, cssClass=None):
- query = '%s=%s&%s=%s' % (self.table.prefix +'-batchStart', batch.start,
- self.table.prefix +'-batchSize', batch.size)
+ args = self.getQueryStringArgs()
+ args[self.table.prefix +'-batchStart'] = batch.start
+ args[self.table.prefix +'-batchSize'] = batch.size
+ query = urlencode(sorted(args.items()))
tableURL = absoluteURL(self.table, self.request)
- idx = batch.index +1
+ idx = batch.index + 1
css = ' class="%s"' % cssClass
cssClass = cssClass and css or u''
return '<a href="%s?%s"%s>%s</a>' % (tableURL, query, cssClass, idx)
-
def update(self):
# 3 is is the placeholder for the first, current and last item.
total = self.prevBatchSize + self.nextBatchSize + 3
Modified: z3c.table/trunk/src/z3c/table/batch.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/batch.txt 2010-08-09 15:06:30 UTC (rev 115574)
+++ z3c.table/trunk/src/z3c/table/batch.txt 2010-08-09 15:46:57 UTC (rev 115575)
@@ -462,10 +462,10 @@
>>> requestBatchingTable.update()
>>> print requestBatchingTable.renderBatch()
- <a href="...html?table-batchStart=0&table-batchSize=5" class="first">1</a>
- <a href="...html?table-batchStart=5&table-batchSize=5">2</a>
- <a href="...html?table-batchStart=11&table-batchSize=5" class="current">3</a>
- <a href="...html?table-batchStart=15&table-batchSize=5" class="last">4</a>
+ <a href="...html?table-batchSize=5&table-batchStart=0&..." class="first">1</a>
+ <a href="...html?table-batchSize=5&table-batchStart=5&...">2</a>
+ <a href="...html?table-batchSize=5&table-batchStart=11&..." class="current">3</a>
+ <a href="...html?table-batchSize=5&table-batchStart=15&..." class="last">4</a>
Now let's add more items so that we can test the skipped links in large
batches:
@@ -527,17 +527,17 @@
batch provider and are not a part of the doctest:
>>> print requestBatchingTable.renderBatch()
- <a href="...html?table-batchStart=0&table-batchSize=5" class="first">1</a>
+ <a href="...html?table-batchSize=5&table-batchStart=0&table-sortOn=table-number-1" class="first">1</a>
...
- <a href="...html?table-batchStart=85&table-batchSize=5">18</a>
- <a href="...html?table-batchStart=90&table-batchSize=5">19</a>
- <a href="...html?table-batchStart=95&table-batchSize=5">20</a>
- <a href="...html?table-batchStart=100&table-batchSize=5" class="current">21</a>
- <a href="...html?table-batchStart=105&table-batchSize=5">22</a>
- <a href="...html?table-batchStart=110&table-batchSize=5">23</a>
- <a href="...html?table-batchStart=115&table-batchSize=5">24</a>
+ <a href="...html?table-batchSize=5&table-batchStart=85&table-sortOn=table-number-1">18</a>
+ <a href="...html?table-batchSize=5&table-batchStart=90&table-sortOn=table-number-1">19</a>
+ <a href="...html?table-batchSize=5&table-batchStart=95&table-sortOn=table-number-1">20</a>
+ <a href="...html?table-batchSize=5&table-batchStart=100&table-sortOn=table-number-1" class="current">21</a>
+ <a href="...html?table-batchSize=5&table-batchStart=105&table-sortOn=table-number-1">22</a>
+ <a href="...html?table-batchSize=5&table-batchStart=110&table-sortOn=table-number-1">23</a>
+ <a href="...html?table-batchSize=5&table-batchStart=115&table-sortOn=table-number-1">24</a>
...
- <a href="...html?table-batchStart=1015&table-batchSize=5" class="last">204</a>
+ <a href="...html?table-batchSize=5&table-batchStart=1015&table-sortOn=table-number-1" class="last">204</a>
You can change the spacer in the batch provider if you set the ``batchSpacer``
value:
@@ -567,17 +567,17 @@
>>> requestBatchingTable.batchProvider
<XBatchProvider object at ...>
>>> print requestBatchingTable.renderBatch()
- <a href="...html?table-batchStart=0&table-batchSize=5" class="first">1</a>
+ <a href="...html?table-batchSize=5&table-batchStart=0&table-sortOn=table-number-1" class="first">1</a>
xxx
- <a href="...html?table-batchStart=85&table-batchSize=5">18</a>
- <a href="...html?table-batchStart=90&table-batchSize=5">19</a>
- <a href="...html?table-batchStart=95&table-batchSize=5">20</a>
- <a href="...html?table-batchStart=100&table-batchSize=5" class="current">21</a>
- <a href="...html?table-batchStart=105&table-batchSize=5">22</a>
- <a href="...html?table-batchStart=110&table-batchSize=5">23</a>
- <a href="...html?table-batchStart=115&table-batchSize=5">24</a>
+ <a href="...html?table-batchSize=5&table-batchStart=85&table-sortOn=table-number-1">18</a>
+ <a href="...html?table-batchSize=5&table-batchStart=90&table-sortOn=table-number-1">19</a>
+ <a href="...html?table-batchSize=5&table-batchStart=95&table-sortOn=table-number-1">20</a>
+ <a href="...html?table-batchSize=5&table-batchStart=100&table-sortOn=table-number-1" class="current">21</a>
+ <a href="...html?table-batchSize=5&table-batchStart=105&table-sortOn=table-number-1">22</a>
+ <a href="...html?table-batchSize=5&table-batchStart=110&table-sortOn=table-number-1">23</a>
+ <a href="...html?table-batchSize=5&table-batchStart=115&table-sortOn=table-number-1">24</a>
xxx
- <a href="...html?table-batchStart=1015&table-batchSize=5" class="last">204</a>
+ <a href="...html?table-batchSize=5&table-batchStart=1015&table-sortOn=table-number-1" class="last">204</a>
Now test the extremities, need to define a new batchingRequest:
@@ -591,14 +591,14 @@
>>> leftRequestBatchingTable.__name__ = u'leftRequestBatchingTable.html'
>>> leftRequestBatchingTable.update()
>>> print leftRequestBatchingTable.renderBatch()
- <a href="http://...html?table-batchStart=0&table-batchSize=5" class="first">1</a>
- <a href="http://...html?table-batchStart=5&table-batchSize=5">2</a>
- <a href="http://...html?table-batchStart=10&table-batchSize=5" class="current">3</a>
- <a href="http://...html?table-batchStart=15&table-batchSize=5">4</a>
- <a href="http://...html?table-batchStart=20&table-batchSize=5">5</a>
- <a href="http://...html?table-batchStart=25&table-batchSize=5">6</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=0&table-sortOn=table-number-1" class="first">1</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=5&table-sortOn=table-number-1">2</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=10&table-sortOn=table-number-1" class="current">3</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=15&table-sortOn=table-number-1">4</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=20&table-sortOn=table-number-1">5</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=25&table-sortOn=table-number-1">6</a>
xxx
- <a href="http://...html?table-batchStart=1015&table-batchSize=5" class="last">204</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=1015&table-sortOn=table-number-1" class="last">204</a>
Go on with the right extremity:
@@ -610,14 +610,14 @@
>>> rightRequestBatchingTable.__name__ = u'rightRequestBatchingTable.html'
>>> rightRequestBatchingTable.update()
>>> print rightRequestBatchingTable.renderBatch()
- <a href="http://...html?table-batchStart=0&table-batchSize=5" class="first">1</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=0&table-sortOn=table-number-1" class="first">1</a>
xxx
- <a href="http://...html?table-batchStart=990&table-batchSize=5">199</a>
- <a href="http://...html?table-batchStart=995&table-batchSize=5">200</a>
- <a href="http://...html?table-batchStart=1000&table-batchSize=5">201</a>
- <a href="http://...html?table-batchStart=1005&table-batchSize=5" class="current">202</a>
- <a href="http://...html?table-batchStart=1010&table-batchSize=5">203</a>
- <a href="http://...html?table-batchStart=1015&table-batchSize=5" class="last">204</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=990&table-sortOn=table-number-1">199</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=995&table-sortOn=table-number-1">200</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=1000&table-sortOn=table-number-1">201</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=1005&table-sortOn=table-number-1" class="current">202</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=1010&table-sortOn=table-number-1">203</a>
+ <a href="http://...html?table-batchSize=5&table-batchStart=1015&table-sortOn=table-number-1" class="last">204</a>
None previous and next batch size. Probably it doesn't make sense but let's
@@ -642,8 +642,9 @@
>>> requestBatchingTable.update()
>>> print requestBatchingTable.renderBatch()
- <a href="...html?table-batchStart=0&table-batchSize=5" class="first">1</a>
+ <a href="...html?table-batchSize=5&table-batchStart=0&table-sortOn=table-number-1" class="first">1</a>
xxx
- <a href="...html?table-batchStart=100&table-batchSize=5" class="current">21</a>
+ <a href="...html?table-batchSize=5&table-batchStart=100&table-sortOn=table-number-1" class="current">21</a>
xxx
- <a href="...html?table-batchStart=1015&table-batchSize=5" class="last">204</a>
+ <a href="...html?table-batchSize=5&table-batchStart=1015&table-sortOn=table-number-1" class="last">204</a>
+
More information about the checkins
mailing list