[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