[Checkins] SVN: z3c.table/trunk/ - Added sorting (``cssClassSortedOn`` and ``getCSSSortClass``) CSS options

Adam Groszer cvs-admin at zope.org
Thu Aug 9 09:16:18 UTC 2012


Log message for revision 127442:
  - Added sorting (``cssClassSortedOn`` and ``getCSSSortClass``) CSS options
  - Added cell highlight (``getCSSHighlightClass``) CSS option

Changed:
  U   z3c.table/trunk/CHANGES.txt
  U   z3c.table/trunk/TODO.txt
  U   z3c.table/trunk/src/z3c/table/README.txt
  U   z3c.table/trunk/src/z3c/table/batch.txt
  U   z3c.table/trunk/src/z3c/table/column.py
  U   z3c.table/trunk/src/z3c/table/column.txt
  U   z3c.table/trunk/src/z3c/table/header.py
  U   z3c.table/trunk/src/z3c/table/miscellaneous.txt
  U   z3c.table/trunk/src/z3c/table/sequence.txt
  U   z3c.table/trunk/src/z3c/table/sort.txt
  U   z3c.table/trunk/src/z3c/table/table.py
  U   z3c.table/trunk/src/z3c/table/testing.py

-=-
Modified: z3c.table/trunk/CHANGES.txt
===================================================================
--- z3c.table/trunk/CHANGES.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/CHANGES.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -5,9 +5,11 @@
 0.9.2 (unreleased)
 ------------------
 
-- Nothing changed yet.
+- Added sorting (``cssClassSortedOn`` and ``getCSSSortClass``) CSS options
 
+- Added cell highlight (``getCSSHighlightClass``) CSS option
 
+
 0.9.1 (2011-08-03)
 ------------------
 

Modified: z3c.table/trunk/TODO.txt
===================================================================
--- z3c.table/trunk/TODO.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/TODO.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -7,3 +7,8 @@
 
 - implement render methods for each batch status, e.g. renderFirstBatch,
   renderLastBatch.
+
+- push the current sorted status to the Column objects/class
+  it's just mad that we try to figure this at several places
+  (SortingColumnHeader, Table.getCSSSortClass)
+  possibly with different results ;-)
\ No newline at end of file

Modified: z3c.table/trunk/src/z3c/table/README.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/README.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/README.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -75,6 +75,7 @@
   >>> from z3c.table import table
   >>> request = TestRequest()
   >>> plainTable = table.Table(container, request)
+  >>> plainTable.cssClassSortedOn = None
 
 Now we can update and render the table. As you can see with an empty container
 we will not get anything that looks like a table. We just get an empty string:
@@ -260,6 +261,7 @@
 that we do not return the columns in the correct order:
 
   >>> class PrivateTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         firstColumn = TitleColumn(self.context, self.request, self)
@@ -315,6 +317,7 @@
   ...                   'th': 'th',
   ...                   'tr': 'tr',
   ...                   'td': 'td'}
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         firstColumn = TitleColumn(self.context, self.request, self)
@@ -378,6 +381,7 @@
   ...
   ...     cssClassEven = u'even'
   ...     cssClassOdd = u'odd'
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         firstColumn = TitleColumn(self.context, self.request, self)
@@ -448,6 +452,7 @@
   ...
   ...     cssClassEven = u'even'
   ...     cssClassOdd = u'odd'
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -565,7 +570,7 @@
   >>> container[u'third'] = Content('Third', 3)
 
   >>> class myTableClass(table.Table):
-  ...     pass
+  ...     cssClassSortedOn = None
 
   >>> myTable = myTableClass(container, request)
 
@@ -619,7 +624,8 @@
   ...
   </table>
 
-If the table is ascending but the request was descending, the link should allow to switch again to ascending:
+If the table is ascending but the request was descending,
+the link should allow to switch again to ascending:
 
   >>> descendingRequest = TestRequest(form={'table-sortOn': 'table-titleColumn-0',
   ...                                   'table-sortOrder':'descending'})
@@ -635,6 +641,3 @@
       title="Sort">Title</a></th>
   ...
   </table>
-
-
-

Modified: z3c.table/trunk/src/z3c/table/batch.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/batch.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/batch.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -22,6 +22,7 @@
   >>> root['container-1'] = container
   >>> request = TestRequest()
   >>> batchingTable = SimpleTable(container, request)
+  >>> batchingTable.cssClassSortedOn = None
 
 We also need to give the table a location and a name like we normally setup
 in traversing:
@@ -382,7 +383,8 @@
   ...                                     'table-batchSize': '5',
   ...                                     'table-sortOn': 'table-number-1'})
   >>> requestBatchingTable = SimpleTable(container, batchingRequest)
-
+  >>> requestBatchingTable.cssClassSortedOn = None
+  
 We also need to give the table a location and a name like we normally set up
 in traversing:
 
@@ -483,6 +485,7 @@
   ...                                     'table-sortOn': 'table-number-1'})
   >>> requestBatchingTable = SimpleTable(container, batchingRequest)
   >>> requestBatchingTable.startBatchingAt = 5
+  >>> requestBatchingTable.cssClassSortedOn = None
 
 We also need to give the table a location and a name like we normally setup
 in traversing:
@@ -647,4 +650,3 @@
   <a href="...html?table-batchSize=5&table-batchStart=100&table-sortOn=table-number-1" class="current">21</a>
   xxx
   <a href="...html?table-batchSize=5&table-batchStart=1015&table-sortOn=table-number-1" class="last">204</a>
-

Modified: z3c.table/trunk/src/z3c/table/column.py
===================================================================
--- z3c.table/trunk/src/z3c/table/column.py	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/column.py	2012-08-09 09:16:10 UTC (rev 127442)
@@ -31,7 +31,7 @@
 
 
 def addColumn(self, class_, name, cellRenderer=None, headCellRenderer=None,
-    colspan= None, weight=None, header=None, cssClasses=None, **kws):
+    colspan=None, weight=None, header=None, cssClasses=None, **kws):
     if not interfaces.IColumn.implementedBy(class_):
         raise ValueError('class_ %s must implement IColumn.' % class_)
     column = class_(self.context, self.request, self)

Modified: z3c.table/trunk/src/z3c/table/column.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/column.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/column.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -56,6 +56,7 @@
 
   >>> from z3c.table import table
   >>> class NameTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -111,6 +112,7 @@
 Let's define a table using the RadioColumn:
 
   >>> class RadioTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -202,6 +204,7 @@
 Let's define a table using the RadioColumn:
 
   >>> class CheckBoxTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -377,6 +380,7 @@
 Let's define a table using the CreatedColumn:
 
   >>> class CreatedColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -423,6 +427,7 @@
 Let's define a table using the CreatedColumn:
 
   >>> class ModifiedColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -477,6 +482,7 @@
   ...     defaultValue = u'missing'
 
   >>> class GetAttrColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     attrName = 'title'
   ...     defaultValue = u'missing'
@@ -526,6 +532,7 @@
   ...     defaultValue = u'missing'
 
   >>> class GetAttrColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     attrName = 'title'
   ...     defaultValue = u'missing'
@@ -627,6 +634,7 @@
   ...         return dc.created
 
   >>> class GetAttrFormatterColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -679,6 +687,7 @@
   ...         return dc.created
 
   >>> class LongFormatterColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -732,6 +741,7 @@
   ...     defaultValue = u'missing'
 
   >>> class EMailColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -779,6 +789,7 @@
   ...     linkContent = 'Mail me'
 
   >>> class StaticEMailColumnTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -829,6 +840,7 @@
   ...     linkCSS = 'myClass'
 
   >>> class MyLinkTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -886,6 +898,7 @@
 ``contents.html`` link for each item:
 
   >>> class ContentsLinkTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -938,6 +951,7 @@
 This one will generate a ``index.html`` link for each item:
 
   >>> class IndexLinkTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [
@@ -990,6 +1004,7 @@
 And this one will generate a ``edit.html`` link for each item:
 
   >>> class EditLinkTable(table.Table):
+  ...     cssClassSortedOn = None
   ...
   ...     def setUpColumns(self):
   ...         return [

Modified: z3c.table/trunk/src/z3c/table/header.py
===================================================================
--- z3c.table/trunk/src/z3c/table/header.py	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/header.py	2012-08-09 09:16:10 UTC (rev 127442)
@@ -99,4 +99,3 @@
             queryString,
             zope.i18n.translate(_('Sort'), context=self.request),
             zope.i18n.translate(self.column.header, context=self.request))
-

Modified: z3c.table/trunk/src/z3c/table/miscellaneous.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/miscellaneous.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/miscellaneous.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -27,6 +27,7 @@
 Try to render an empty table adapting an empty mapping:
 
   >>> simpleTable = table.Table({}, request)
+  >>> simpleTable.cssClassSortedOn = None
   >>> simpleTable.render()
   u''
 
@@ -85,7 +86,7 @@
   >>> simpleColumn.counter
   99
 
-The NoneCell class provides some methods which never get called. But these 
+The NoneCell class provides some methods which never get called. But these
 are defined in the interface. Let's test the default values
 and make coverage report happy.
 

Modified: z3c.table/trunk/src/z3c/table/sequence.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/sequence.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/sequence.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -52,6 +52,7 @@
   >>> sequenceRequest = TestRequest(form={'table-batchStart': '0',
   ...                                     'table-sortOn': 'table-number-1'})
   >>> sequenceTable = SequenceTable(dataSequence, sequenceRequest)
+  >>> sequenceTable.cssClassSortedOn = None
 
 We also need to give the table a location and a name like we normally setup
 in traversing:
@@ -250,4 +251,3 @@
       </tr>
     </tbody>
   </table>
-

Modified: z3c.table/trunk/src/z3c/table/sort.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/sort.txt	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/sort.txt	2012-08-09 09:16:10 UTC (rev 127442)
@@ -38,8 +38,8 @@
 
 Create a container:
 
-  >>> from z3c.table.testing import Container
-  >>> container = Container()
+  >>> from z3c.table.testing import OrderedContainer
+  >>> container = OrderedContainer()
 
 We also need some container items that we can use for sorting:
 
@@ -60,20 +60,57 @@
   <table>
     <thead>
       <tr>
-        <th>Title</th>
+        <th class="sorted-on ascending">Title</th>
         <th>Number</th>
       </tr>
     </thead>
     <tbody>
       <tr>
-        <td>Title: First</td>
+        <td class="sorted-on ascending">Title: First</td>
         <td>number: 1</td>
       </tr>
       <tr>
-        <td>Title: Fourth</td>
+        <td class="sorted-on ascending">Title: Fourth</td>
         <td>number: 4</td>
       </tr>
       <tr>
+        <td class="sorted-on ascending">Title: Second</td>
+        <td>number: 2</td>
+      </tr>
+      <tr>
+        <td class="sorted-on ascending">Title: Third</td>
+        <td>number: 3</td>
+      </tr>
+      <tr>
+        <td class="sorted-on ascending">Title: Zero</td>
+        <td>number: 0</td>
+      </tr>
+    </tbody>
+  </table>
+
+Ooops, well, by default the table is sorted on the first column, ascending.
+
+  >>> sortingTable.sortOn
+  0
+
+Now switch off sorting, now we get the original order:
+
+  >>> sortingTable.sortOn = None
+  >>> sortingTable.update()
+  >>> print sortingTable.render()
+  <table>
+    <thead>
+      <tr>
+        <th>Title</th>
+        <th>Number</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td>Title: First</td>
+        <td>number: 1</td>
+      </tr>
+      <tr>
         <td>Title: Second</td>
         <td>number: 2</td>
       </tr>
@@ -82,12 +119,17 @@
         <td>number: 3</td>
       </tr>
       <tr>
+        <td>Title: Fourth</td>
+        <td>number: 4</td>
+      </tr>
+      <tr>
         <td>Title: Zero</td>
         <td>number: 0</td>
       </tr>
     </tbody>
   </table>
 
+
 As you can see this table doesn't provide any explicit order. Let's find out
 the index of our column that we like to sort on:
 
@@ -107,29 +149,29 @@
     <thead>
       <tr>
         <th>Title</th>
-        <th>Number</th>
+        <th class="sorted-on ascending">Number</th>
       </tr>
     </thead>
     <tbody>
       <tr>
         <td>Title: Zero</td>
-        <td>number: 0</td>
+        <td class="sorted-on ascending">number: 0</td>
       </tr>
       <tr>
         <td>Title: First</td>
-        <td>number: 1</td>
+        <td class="sorted-on ascending">number: 1</td>
       </tr>
       <tr>
         <td>Title: Second</td>
-        <td>number: 2</td>
+        <td class="sorted-on ascending">number: 2</td>
       </tr>
       <tr>
         <td>Title: Third</td>
-        <td>number: 3</td>
+        <td class="sorted-on ascending">number: 3</td>
       </tr>
       <tr>
         <td>Title: Fourth</td>
-        <td>number: 4</td>
+        <td class="sorted-on ascending">number: 4</td>
       </tr>
     </tbody>
   </table>
@@ -143,29 +185,29 @@
     <thead>
       <tr>
         <th>Title</th>
-        <th>Number</th>
+        <th class="sorted-on reverse">Number</th>
       </tr>
     </thead>
     <tbody>
       <tr>
         <td>Title: Fourth</td>
-        <td>number: 4</td>
+        <td class="sorted-on reverse">number: 4</td>
       </tr>
       <tr>
         <td>Title: Third</td>
-        <td>number: 3</td>
+        <td class="sorted-on reverse">number: 3</td>
       </tr>
       <tr>
         <td>Title: Second</td>
-        <td>number: 2</td>
+        <td class="sorted-on reverse">number: 2</td>
       </tr>
       <tr>
         <td>Title: First</td>
-        <td>number: 1</td>
+        <td class="sorted-on reverse">number: 1</td>
       </tr>
       <tr>
         <td>Title: Zero</td>
-        <td>number: 0</td>
+        <td class="sorted-on reverse">number: 0</td>
       </tr>
     </tbody>
   </table>
@@ -186,29 +228,154 @@
     <thead>
       <tr>
         <th>Title</th>
-        <th>Number</th>
+        <th class="sorted-on descending">Number</th>
       </tr>
     </thead>
     <tbody>
       <tr>
         <td>Title: Fourth</td>
-        <td>number: 4</td>
+        <td class="sorted-on descending">number: 4</td>
       </tr>
       <tr>
         <td>Title: Third</td>
-        <td>number: 3</td>
+        <td class="sorted-on descending">number: 3</td>
       </tr>
       <tr>
         <td>Title: Second</td>
-        <td>number: 2</td>
+        <td class="sorted-on descending">number: 2</td>
       </tr>
       <tr>
         <td>Title: First</td>
+        <td class="sorted-on descending">number: 1</td>
+      </tr>
+      <tr>
+        <td>Title: Zero</td>
+        <td class="sorted-on descending">number: 0</td>
+      </tr>
+    </tbody>
+  </table>
+
+There's a header renderer, which provides a handy link rendering for sorting:
+
+  >>> import zope.component
+  >>> from z3c.table import interfaces
+  >>> from z3c.table.header import SortingColumnHeader
+  >>> zope.component.provideAdapter(SortingColumnHeader,
+  ...     (None, None, interfaces.ITable, interfaces.IColumn),
+  ...     provides=interfaces.IColumnHeader)
+
+Let's see now various sortings:
+
+  >>> request = TestRequest()
+  >>> sortingTable = SortingTable(container, request)
+  >>> sortingTable.update()
+  >>> sortingTable.sortOn
+  0
+  >>> sortingTable.sortOrder
+  u'ascending'
+  >>> print sortingTable.render()
+  <table>
+    <thead>
+      <tr>
+        <th class="sorted-on ascending"><a href="?table-sortOrder=descending&table-sortOn=table-title-0" title="Sort">Title</a></th>
+        <th><a href="?table-sortOrder=ascending&table-sortOn=table-number-1" title="Sort">Number</a></th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td class="sorted-on ascending">Title: First</td>
         <td>number: 1</td>
       </tr>
       <tr>
+        <td class="sorted-on ascending">Title: Fourth</td>
+        <td>number: 4</td>
+      </tr>
+      <tr>
+        <td class="sorted-on ascending">Title: Second</td>
+        <td>number: 2</td>
+      </tr>
+      <tr>
+        <td class="sorted-on ascending">Title: Third</td>
+        <td>number: 3</td>
+      </tr>
+      <tr>
+        <td class="sorted-on ascending">Title: Zero</td>
+        <td>number: 0</td>
+      </tr>
+    </tbody>
+  </table>
+
+Let's see the `number` column:
+
+  >>> sortingTable.sortOn = u'table-number-1'
+
+  >>> sortingTable.update()
+  >>> print sortingTable.render()
+  <table>
+    <thead>
+      <tr>
+        <th><a href="?table-sortOrder=ascending&table-sortOn=table-title-0" title="Sort">Title</a></th>
+        <th class="sorted-on ascending"><a href="?table-sortOrder=descending&table-sortOn=table-number-1" title="Sort">Number</a></th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
         <td>Title: Zero</td>
+        <td class="sorted-on ascending">number: 0</td>
+      </tr>
+      <tr>
+        <td>Title: First</td>
+        <td class="sorted-on ascending">number: 1</td>
+      </tr>
+      <tr>
+        <td>Title: Second</td>
+        <td class="sorted-on ascending">number: 2</td>
+      </tr>
+      <tr>
+        <td>Title: Third</td>
+        <td class="sorted-on ascending">number: 3</td>
+      </tr>
+      <tr>
+        <td>Title: Fourth</td>
+        <td class="sorted-on ascending">number: 4</td>
+      </tr>
+    </tbody>
+  </table>
+
+Let's see the `title` column but descending:
+
+  >>> sortingTable.sortOn = u'table-title-0'
+  >>> sortingTable.sortOrder = 'descending'
+
+  >>> sortingTable.update()
+  >>> print sortingTable.render()
+  <table>
+    <thead>
+      <tr>
+        <th class="sorted-on descending"><a href="?table-sortOrder=ascending&table-sortOn=table-title-0" title="Sort">Title</a></th>
+        <th><a href="?table-sortOrder=descending&table-sortOn=table-number-1" title="Sort">Number</a></th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td class="sorted-on descending">Title: Zero</td>
         <td>number: 0</td>
       </tr>
+      <tr>
+        <td class="sorted-on descending">Title: Third</td>
+        <td>number: 3</td>
+      </tr>
+      <tr>
+        <td class="sorted-on descending">Title: Second</td>
+        <td>number: 2</td>
+      </tr>
+      <tr>
+        <td class="sorted-on descending">Title: Fourth</td>
+        <td>number: 4</td>
+      </tr>
+      <tr>
+        <td class="sorted-on descending">Title: First</td>
+        <td>number: 1</td>
+      </tr>
     </tbody>
   </table>

Modified: z3c.table/trunk/src/z3c/table/table.py
===================================================================
--- z3c.table/trunk/src/z3c/table/table.py	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/table.py	2012-08-09 09:16:10 UTC (rev 127442)
@@ -68,6 +68,8 @@
     cssClassEven = u''
     cssClassOdd = u''
     cssClassSelected = u''
+    # css to show sorting, set to None to turn off
+    cssClassSortedOn = 'sorted-on'
 
     # sort attributes
     sortOn = 0
@@ -99,7 +101,37 @@
         # order columns
         self.orderColumns()
 
+    @property
+    def values(self):
+        adapter = zope.component.getMultiAdapter(
+            (self.context, self.request, self), interfaces.IValues)
+        return adapter.values
+
+# CSS helpers
+
+    def getCSSHighlightClass(self, column, item, cssClass):
+        """Provide a highlight option for any cell"""
+        return cssClass
+
+    def getCSSSortClass(self, column, cssClass):
+        """Add CSS class based on current sorting"""
+        if self.cssClassSortedOn and self.sortOn is not None:
+            try:
+                currentSortID = int(self.sortOn)
+            except ValueError:
+                currentSortID = self.sortOn.rsplit('-', 1)[-1]
+            sortID = column.id.rsplit('-', 1)[-1]
+
+            if int(sortID) == int(currentSortID):
+                klass = self.cssClassSortedOn + ' ' + self.sortOrder
+                if cssClass:
+                    cssClass += ' ' + klass
+                else:
+                    cssClass = klass
+        return cssClass
+
     def getCSSClass(self, element, cssClass=None):
+        """Add CSS class based on HTML tag, make a `class=` attribute"""
         klass = self.cssClasses.get(element)
         if klass and cssClass:
             klass = '%s %s' % (cssClass, klass)
@@ -107,12 +139,6 @@
             klass = cssClass
         return klass and ' class=%s' % quoteattr(klass) or ''
 
-    @property
-    def values(self):
-        adapter = zope.component.getMultiAdapter(
-            (self.context, self.request, self), interfaces.IValues)
-        return adapter.values
-
 # setup
 
     def setUpColumns(self):
@@ -147,11 +173,11 @@
                 colspan = colspanCounter = col.getColspan(item)
                 # adjust colspan because we define 0, 2, 3, etc.
                 if colspanCounter > 0:
-                    colspanCounter -=1
+                    colspanCounter -= 1
 
             if colspan == 0 and colspanCounter > 0:
                 # override col if colspan is 0 and colspan coutner not 0
-                colspanCounter -=1
+                colspanCounter -= 1
                 colspan = 0
                 # now we are ready to setup dummy colspan cells
                 col = column.NoneCell(self.context, self.request, self)
@@ -171,11 +197,11 @@
 
     def getSortOn(self):
         """Returns sort on column id."""
-        return self.request.get(self.prefix +'-sortOn', self.sortOn)
+        return self.request.get(self.prefix + '-sortOn', self.sortOn)
 
     def getSortOrder(self):
         """Returns sort order criteria."""
-        return self.request.get(self.prefix +'-sortOrder',
+        return self.request.get(self.prefix + '-sortOrder',
             self.sortOrder)
 
     def sortRows(self):
@@ -190,11 +216,11 @@
 # batch
 
     def getBatchSize(self):
-        return int(self.request.get(self.prefix +'-batchSize',
+        return int(self.request.get(self.prefix + '-batchSize',
             self.batchSize))
 
     def getBatchStart(self):
-        return int(self.request.get(self.prefix +'-batchStart',
+        return int(self.request.get(self.prefix + '-batchStart',
             self.batchStart))
 
     def batchRows(self):
@@ -242,6 +268,7 @@
 
     def renderHeadCell(self, column):
         cssClass = column.cssClasses.get('th')
+        cssClass = self.getCSSSortClass(column, cssClass)
         cssClass = self.getCSSClass('th', cssClass)
         return u'\n      <th%s>%s</th>' % (cssClass, column.renderHeadCell())
 
@@ -275,6 +302,8 @@
         if interfaces.INoneCell.providedBy(column):
             return u''
         cssClass = column.cssClasses.get('td')
+        cssClass = self.getCSSHighlightClass(column, item, cssClass)
+        cssClass = self.getCSSSortClass(column, cssClass)
         cssClass = self.getCSSClass('td', cssClass)
         colspanStr = colspan and ' colspan="%s"' % colspan or ''
         return u'\n      <td%s%s>%s</td>' % (cssClass, colspanStr,

Modified: z3c.table/trunk/src/z3c/table/testing.py
===================================================================
--- z3c.table/trunk/src/z3c/table/testing.py	2012-08-09 08:33:26 UTC (rev 127441)
+++ z3c.table/trunk/src/z3c/table/testing.py	2012-08-09 09:16:10 UTC (rev 127442)
@@ -19,7 +19,7 @@
 import datetime
 import zope.interface
 import zope.component
-from zope.container import btree
+from zope.container import btree, ordered
 from zope.dublincore.interfaces import IZopeDublinCore
 from zope.security import checker
 from zope.app.testing import setup
@@ -54,6 +54,11 @@
     __name__ = u'container'
 
 
+class OrderedContainer(ordered.OrderedContainer):
+    """Sample container."""
+    __name__ = u'container'
+
+
 class Content(object):
     """Sample content."""
 



More information about the checkins mailing list