[Checkins] SVN: z3c.table/trunk/ Added ``EMailColumn`` which can be used to display mailto links.

Michael Howitz mh at gocept.com
Mon Aug 9 12:31:07 EDT 2010


Log message for revision 115576:
  Added ``EMailColumn`` which can be used to display mailto links.
  

Changed:
  U   z3c.table/trunk/CHANGES.txt
  U   z3c.table/trunk/src/z3c/table/column.py
  U   z3c.table/trunk/src/z3c/table/column.txt

-=-
Modified: z3c.table/trunk/CHANGES.txt
===================================================================
--- z3c.table/trunk/CHANGES.txt	2010-08-09 15:46:57 UTC (rev 115575)
+++ z3c.table/trunk/CHANGES.txt	2010-08-09 16:31:07 UTC (rev 115576)
@@ -5,6 +5,8 @@
 0.8.2 (unreleased)
 ------------------
 
+- Added ``EMailColumn`` which can be used to display mailto links.
+
 - Fixed the default BatchProvider not to lose table sorting query arguments
   from the generated links; now batching and sorting play with each other
   nicely.

Modified: z3c.table/trunk/src/z3c/table/column.py
===================================================================
--- z3c.table/trunk/src/z3c/table/column.py	2010-08-09 15:46:57 UTC (rev 115575)
+++ z3c.table/trunk/src/z3c/table/column.py	2010-08-09 16:31:07 UTC (rev 115576)
@@ -351,6 +351,28 @@
             self.getLinkContent(item))
 
 
+class EMailColumn(LinkColumn, GetAttrColumn):
+    "Column to display mailto links."
+
+    header = _(u'E-Mail')
+    attrName = None # attribute name which contains the mail address
+    defaultValue = u'' # value which is rendered when no value is found
+    linkContent = None
+
+    def getLinkURL(self, item):
+        return 'mailto:%s' % self.getValue(item)
+
+    def getLinkContent(self, item):
+        if self.linkContent:
+            return zope.i18n.translate(self.linkContent, context=self.request)
+        return self.getValue(item)
+
+    def renderCell(self, item):
+        value = self.getValue(item)
+        if value is self.defaultValue or value is None:
+            return self.defaultValue
+        return super(EMailColumn, self).renderCell(item)
+
 class SelectedItemColumn(LinkColumn):
     """Link which can set an item."""
 

Modified: z3c.table/trunk/src/z3c/table/column.txt
===================================================================
--- z3c.table/trunk/src/z3c/table/column.txt	2010-08-09 15:46:57 UTC (rev 115575)
+++ z3c.table/trunk/src/z3c/table/column.txt	2010-08-09 16:31:07 UTC (rev 115576)
@@ -21,17 +21,18 @@
 
   >>> class Content(object):
   ...     """Sample content."""
-  ...     def __init__(self, title, number):
+  ...     def __init__(self, title, number, email):
   ...         self.title = title
   ...         self.number = number
+  ...         self.email = email
 
 Now setup some items:
 
-  >>> container[u'zero'] = Content('Zero', 0)
-  >>> container[u'first'] = Content('First', 1)
-  >>> container[u'second'] = Content('Second', 2)
-  >>> container[u'third'] = Content('Third', 3)
-  >>> container[u'fourth'] = Content('Fourth', 4)
+  >>> container[u'zero'] = Content('Zero', 0, 'zero at example.com')
+  >>> container[u'first'] = Content('First', 1, 'first at example.com')
+  >>> container[u'second'] = Content('Second', 2, 'second at example.com')
+  >>> container[u'third'] = Content('Third', 3, 'third at example.com')
+  >>> container[u'fourth'] = Content('Fourth', 4, None)
 
 Let's also create a simple number sortable column:
 
@@ -717,6 +718,105 @@
   </table>
 
 
+EMailColumn
+-----------
+
+The ``EMailColumn`` column is ``GetAttrColumn`` which is used to
+display a mailto link. By default in the link content the e-mail
+address is displayed, too.
+
+
+  >>> class EMailColumn(column.EMailColumn):
+  ...
+  ...     attrName = 'email'
+  ...     defaultValue = u'missing'
+
+  >>> class EMailColumnTable(table.Table):
+  ...
+  ...     def setUpColumns(self):
+  ...         return [
+  ...             column.addColumn(self, EMailColumn, u'email'),
+  ...             ]
+
+When a cell does not contain an e-mail address, the ``defaultValue``
+is rendered:
+
+  >>> request = TestRequest()
+  >>> eMailColumnTable = EMailColumnTable(container, request)
+  >>> eMailColumnTable.update()
+  >>> print eMailColumnTable.render()
+  <table>
+    <thead>
+      <tr>
+        <th>E-Mail</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a href="mailto:first at example.com">first at example.com</a></td>
+      </tr>
+      <tr>
+        <td><a href="mailto:second at example.com">second at example.com</a></td>
+      </tr>
+      <tr>
+        <td><a href="mailto:third at example.com">third at example.com</a></td>
+      </tr>
+      <tr>
+        <td><a href="mailto:zero at example.com">zero at example.com</a></td>
+      </tr>
+      <tr>
+        <td>missing</td>
+      </tr>
+    </tbody>
+  </table>
+
+The link content can be overwriten by setting the ``linkContent`` attribute:
+
+  >>> class StaticEMailColumn(column.EMailColumn):
+  ...
+  ...     attrName = 'email'
+  ...     defaultValue = u'missing'
+  ...     linkContent = 'Mail me'
+
+  >>> class StaticEMailColumnTable(table.Table):
+  ...
+  ...     def setUpColumns(self):
+  ...         return [
+  ...             column.addColumn(self, StaticEMailColumn, u'mail'),
+  ...             ]
+
+Render and update the table:
+
+  >>> request = TestRequest()
+  >>> staticEMailColumnTable = StaticEMailColumnTable(container, request)
+  >>> staticEMailColumnTable.update()
+  >>> print staticEMailColumnTable.render()
+  <table>
+    <thead>
+      <tr>
+        <th>E-Mail</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr>
+        <td><a href="mailto:first at example.com">Mail me</a></td>
+      </tr>
+      <tr>
+        <td><a href="mailto:second at example.com">Mail me</a></td>
+      </tr>
+      <tr>
+        <td><a href="mailto:third at example.com">Mail me</a></td>
+      </tr>
+      <tr>
+        <td><a href="mailto:zero at example.com">Mail me</a></td>
+      </tr>
+      <tr>
+        <td>missing</td>
+      </tr>
+    </tbody>
+  </table>
+
+
 LinkColumn
 ----------
 



More information about the checkins mailing list