[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