[CMF-checkins] CVS: CMF/CMFDefault/skins/zpt_generic - actions_box.pt:1.3 folder_contents.pt:1.5 index_html.pt:1.7 logged_in.pt:1.5 login_form.pt:1.4 main_template.pt:1.7 personalize_form.pt:1.5 registered.pt:1.3 review.pt:1.4 talkback_tree.pt:1.3
Tres Seaver
tseaver@zope.com
Sun, 14 Jul 2002 18:45:08 -0400
Update of /cvs-repository/CMF/CMFDefault/skins/zpt_generic
In directory cvs.zope.org:/tmp/cvs-serv32496/CMFDefault/skins/zpt_generic
Modified Files:
actions_box.pt folder_contents.pt index_html.pt logged_in.pt
login_form.pt main_template.pt personalize_form.pt
registered.pt review.pt talkback_tree.pt
Log Message:
- Merge portal_url fix, cleanups from 1.3 branch.
=== CMF/CMFDefault/skins/zpt_generic/actions_box.pt 1.2 => 1.3 ===
<div metal:define-macro="actions">
<div tal:define="isAnon python:here.portal_membership.isAnonymousUser();
- AuthClass python:isAnon and 'GuestActions' or 'MemberActions';
- uname python: isAnon and 'Guest' or here.portal_membership.getAuthenticatedMember().getUserName();
- actions python:here.portal_actions.listFilteredActionsFor(here);
- user_actions python:actions['user'];
- folder_actions python:actions['folder'];
- object_actions python:(actions['object'] + actions['workflow']);
- global_actions python:actions['global']">
+ AuthClass python:isAnon and 'GuestActions' or 'MemberActions';
+ member here/portal_membership/getAuthenticatedMember;
+ uname python: isAnon and 'Guest' or member.getUserName();
+ a_tool here/portal_actions;
+ wf_tool here/portal_workflow;
+ actions python:a_tool.listFilteredActionsFor(here);
+ user_actions actions/user;
+ folder_actions actions/folder;
+ object_actions python:( actions['object']
+ + actions['workflow'] );
+ global_actions python:actions/global;
+ ">
<table class="ActionBox" width="100%">
<tbody tal:condition="object_actions">
<tr class=""
@@ -18,15 +23,21 @@
objID python:here.getId()">
<img src=""
tal:condition="icon" align="left" alt="Type"
- tal:attributes="src python:'%s/%s' % (here.portal_url(), icon); alt typ" />
- <span tal:replace="structure python: here.truncID(objID, size=15)">ObjectID</span>
+ tal:attributes="src string:${here/portal_url}/${icon};
+ alt typ" />
+ <span tal:replace="structure python: here.truncID(objID, size=15)"
+ >ObjectID</span>
</td>
</tr>
- <tr class=""
- tal:attributes="class AuthClass">
- <td tal:define="review_state python:here.portal_workflow.getInfoFor(here, 'review_state', '')">
- <span tal:condition="review_state">Status: <span tal:replace="review_state">Private</span><br></span>
- <span tal:repeat="action object_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span>
+ <tr class="" tal:attributes="class AuthClass">
+ <td tal:define="review_state python:wf_tool.getInfoFor( here
+ , 'review_state', '')">
+ <span tal:condition="review_state"
+ >Status: <span tal:replace="review_state">Private</span><br></span>
+ <span tal:repeat="action object_actions"
+ ><a href=""
+ tal:attributes="href action/url"
+ tal:content="action/name">Action</a><br></span>
</td>
</tr>
</tbody>
@@ -34,15 +45,18 @@
tal:attributes="class AuthClass"
tal:condition="folder_actions">
<td>
- <span tal:repeat="action folder_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span>
+ <span tal:repeat="action folder_actions"
+ ><a href="" tal:attributes="href action/url"
+ tal:content="action/name">Action</a><br></span>
</td>
</tr>
<tr class=""
tal:attributes="class AuthClass"
tal:condition="global_actions">
<td>
- <span tal:repeat="action global_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span>
-
+ <span tal:repeat="action global_actions"
+ ><a href="" tal:attributes="href action/url"
+ tal:content="action/name">Action</a><br></span>
</td>
</tr>
</table>
=== CMF/CMFDefault/skins/zpt_generic/folder_contents.pt 1.4 => 1.5 ===
-<span tal:define="dummy here/filterCookie; desktop python: request.set('isDesktop', 1)"></span>
-
+<span tal:define="dummy here/filterCookie;
+ desktop python: request.set('isDesktop', 1)"></span>
<html xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
- metal:use-macro="here/main_template/macros/master">
+ metal:use-macro="here/main_template/macros/master"
+>
<body>
-<div metal:fill-slot="main">
- <div tal:condition="python: not(here.portal_membership.checkPermission('List folder contents', here))">
- <span tal:define="redirect python: request.RESPONSE.redirect(here.absolute_url())"></span>
- </div>
+<div metal:fill-slot="main"
+ tal:define="m_tool here/portal_membership;
+ checkPerm nocall: m_tool/checkPermission;
+ list_here python:checkPerm('List folder contents', here);
+ list_parent python:checkPerm( 'List folder contents', here
+ , 'aq_parent' );
+ "
+>
+<div tal:condition="not: list_here"
+ tal:define="response request/RESPONSE;
+ url here/absolute_url;
+ "
+ >
+ <span tal:define="redirect python: response.redirect( url )"></span>
+</div>
<!-- This is the desktop area -->
<div class="Desktop">
@@ -20,136 +32,176 @@
<tr>
<td valign="top">
<table class="ContentsList">
- <tbody tal:condition="python: here.portal_membership.checkPermission('List folder contents', here, 'aq_parent')">
- <tr valign="top"
- tal:define="upNav python: hasattr(here.aq_parent, 'portal_url');
- upID python: here.aq_parent.getId()">
+ <!-- Navigate to parent -->
+ <tbody tal:condition="list_parent">
+ <tr valign="top"
+ tal:define="upNav python: hasattr(here.aq_parent, 'portal_url');
+ upID python: here.aq_parent.getId()">
<td colspan="3" align="left">
- <span tal:condition="upNav|nothing"><a href="../folder_contents"><img src="" alt="[Link]" border="0"
- tal:attributes="src python: here.portal_url() + '/UpFolder_icon.gif'"></a>
- </span>
- <span tal:condition="upNav">Up to <a href="../folder_contents" tal:content="upID">Up ID</a></span>
- <span tal:condition="python: not(upNav)"><span class="mild">Root</span></span>
- </td>
- </tr>
- </tbody>
- <tr><td colspan="1" align="left" width="49%">
- <table>
- <tbody tal:define="global b_start string:0;b_start request/b_start | b_start;
- filterString python: request.get('folderfilter', '');
- filter python: here.decodeFolderFilter(filterString);
- items python: here.listFolderContents(contentFilter=filter);
- Batch python:modules['ZTUtils'].Batch;
- global batch python:Batch(items, 8, int(b_start), orphan=0);
- global batch1 batch/next">
- <tr align="top"
- tal:repeat="items batch">
- <td align="left" width="5" nowrap
- tal:define="folderish items/isPrincipiaFolderish;
- portalish items/isPortalContent|nothing;
- global methodID python: folderish and 'folder_contents' or (portalish and 'view' or '');
- global icon items/getIcon|items/icon|nothing">
- <input type="checkbox" name="ids:list" value="" id=""
- tal:attributes="value items/getId; id python: 'cb_' + items.getId()" />
+ <span tal:condition="upNav | nothing">
+ <a href="../folder_contents"
+ ><img src="" alt="[Link]" border="0"
+ tal:attributes="src string:${here/portal_url}/UpFolder_icon.gif"
+ ></a>
+ </span>
+ <span tal:condition="upNav">
+ Up to <a href="../folder_contents"
+ tal:content="upID">Up ID</a>
+ </span>
+ <span tal:condition="python: not(upNav)">
+ <span class="mild">Root</span>
+ </span>
</td>
- <td>
- <span tal:condition="icon">
- <a href=""
- tal:attributes="href python: items.getId() + '/' + methodID">
- <img src="" alt="" border="0"
- tal:attributes="src python: here.portal_url() + '/' + icon;
- alt items/Type|nothing"></a>
- </span>
+ </tr>
+ </tbody>
+ <!-- This row holds the "two column list" -->
+ <tr tal:define="global b_start string:0;
+ b_start request/b_start | b_start;
+ filterString python: request.get('folderfilter', '');
+ filter python: here.decodeFolderFilter(filterString);
+ items python: here.listFolderContents(
+ contentFilter=filter);
+ Batch nocall: modules/ZTUtils/Batch;
+ global batch1 python:Batch( items, 20, int(b_start)
+ , orphan=0);
+ global batch2 batch1/next;
+ "
+ >
+ <!-- First column, first half batch in 'batch1'. -->
+ <td colspan="1" align="left" width="49%">
+ <table>
+ <tr align="top" tal:repeat="item batch1">
+ <td align="left" width="5" nowrap
+ tal:define="folderish item/isPrincipiaFolderish;
+ portalish item/isPortalContent | nothing;
+ global methodID python:( folderish
+ and 'folder_contents'
+ or (portalish and 'view' or '')
+ );
+ global icon item/getIcon | item/icon | nothing
+ ">
+ <input type="checkbox" name="ids:list" value="" id=""
+ tal:attributes="value item/getId;
+ id python: 'cb_' + item.getId()" />
+ </td>
+ <td>
+ <span tal:condition="icon">
+ <a href=""
+ tal:attributes="href string:${item/getId}/${methodID};
+ "
+ ><img src="" alt="" border="0"
+ tal:attributes="src string:${here/portal_url}/${icon};
+ alt item/Type|nothing;
+ "></a>
+ </span>
+ </td>
+ <td>
+ <a href=""
+ tal:attributes="href string:${item/getId}/${methodID};
+ "
+ ><span tal:replace="item/getId">ID</span>
+ <span tal:condition="item/Title"
+ tal:replace="string:(${item/Title})">(Title)</span></a>
+ </td>
+ </tr>
+ </table>
+ </td>
+ <!-- Spacer column. -->
+ <td width="2%"> </td>
+ <!-- Second column, second half batch in 'batch2'. -->
+ <td colspan="1" width="49%">
+ <table>
+ <tr align="top" tal:repeat="item batch2">
+ <td align="left" width="5" nowrap
+ tal:define="folderish item/isPrincipiaFolderish;
+ portalish item/isPortalContent | nothing;
+ global methodID python:( folderish
+ and 'folder_contents'
+ or (portalish and 'view' or '')
+ );
+ global icon item/getIcon | item/icon | nothing
+ ">
+ <input type="checkbox" name="ids:list" value="" id=""
+ tal:attributes="value item/getId;
+ id python: 'cb_' + item.getId()" />
+ </td>
+ <td>
+ <span tal:condition="icon">
+ <a href=""
+ tal:attributes="href string:${item/getId}/${methodID};
+ "
+ ><img src="" alt="" border="0"
+ tal:attributes="src string:${here/portal_url}/${icon};
+ alt item/Type|nothing;
+ "></a>
+ </span>
+ </td>
+ <td>
+ <a href=""
+ tal:attributes="href string:${item/getId}/${methodID};
+ "
+ ><span tal:replace="item/getId">ID</span>
+ <span tal:condition="item/Title"
+ tal:replace="string:(${item/Title})">(Title)</span></a>
+ </td>
+ </tr>
+ </table>
</td>
- <td>
- <a href=""
- tal:attributes="href python: items.getId() + '/' + methodID"><span tal:replace="items/getId">ID</span>
- <span tal:condition="items/Title"
- tal:replace="python: '(' + items.Title() + ')'">(Title)</span></a>
- </td>
+
</tr>
- </tbody>
- </table>
- </td>
- <td width="2%"> </td>
- <td colspan="1" width="49%">
- <table>
- <tr align="top"
- tal:repeat="items batch1">
- <td align="left" width="5" nowrap
- tal:define="folderish items/isPrincipiaFolderish;
- portalish items/isPortalContent|nothing;
- global methodID python: folderish and 'folder_contents' or (portalish and 'view' or '');
- global icon items/getIcon|items/icon|nothing">
- <input type="checkbox" name="ids:list" value="" id=""
- tal:attributes="value items/getId; id python: 'cb_' + items.getId()" />
- </td>
- <td>
- <span tal:condition="icon">
- <a href=""
- tal:attributes="href python: items.getId() + '/' + methodID">
- <img src="" alt="" border="0"
- tal:attributes="src python: here.portal_url() + '/' + icon;
- alt items/Type|nothing"></a>
- </span>
+
+ <tr>
+ <td align="left">
+ <span tal:define="p batch1/previous" tal:condition="p">
+ <a href=""
+ tal:attributes="
+ href string:folder_contents?b_start=${p/previous/first}"
+ >Previous Items</a>
+ </span>
+ </td>
+ <td> </td>
+ <td align="right">
+ <span tal:define="n batch2/next | nothing" tal:condition="n">
+ <a href=""
+ tal:attributes="
+ href string:folder_contents?b_start=${batch2/end}"
+ >Next Items</a>
+ </span>
</td>
- <td>
- <a href=""
- tal:attributes="href python: items.getId() + '/' + methodID"><span tal:replace="items/getId">ID</span>
- <span tal:condition="items/Title"
- tal:replace="python: '(' + items.Title() + ')'">(Title)</span></a>
- </td>
</tr>
- </table>
-
- </tr>
+ <!-- end contentList -->
+ </table>
-
-
- <tr>
- <td align="left">
- <span tal:define="p batch/previous" tal:condition="p">
- <a href=""
- tal:attributes="href string:folder_contents?b_start=${p/previous/first}">Previous Items</a>
- </span>
- </td>
-<td> </td>
- <td align="left">
- <span tal:define="n batch1/next|nothing" tal:condition="n">
- <a href=""
- tal:attributes="href string:folder_contents?b_start=${batch1/end}">Next Items</a>
- </span>
- </td>
- </tr>
-<!-- end contentList -->
-</table>
-
-<table border="0" cellspacing="0" cellpadding=2>
-<tr>
- <td align="left" valign="top" width="16"></td>
- <td align="left" valign="top">
- <span tal:condition="python: here.portal_membership.checkPermission('Add portal content', here)">
- <input type="submit" name="folder_factories:method" value="New...">
- </span>
- <span tal:condition="python: here.portal_membership.checkPermission('View management screens', here)">
- <input type="submit" name="folder_rename_form:method" value="Rename">
- <input type="submit" name="folder_cut:method" value="Cut">
- <input type="submit" name="folder_copy:method" value="Copy">
- <span tal:condition="here/cb_dataValid">
- <input type="submit" name="folder_paste:method" value="Paste">
- </span>
- </span>
- <span tal:condition="python: here.portal_membership.checkPermission('Delete objects', here)">
- <input type="submit" name="folder_delete:method" value="Delete">
- </span>
- </td>
-</tr>
-</table>
-</table>
+ <table border="0" cellspacing="0" cellpadding=2>
+ <tr>
+ <td align="left" valign="top" width="16"></td>
+ <td align="left" valign="top">
+ <span tal:condition="python: checkPerm('Add portal content', here)">
+ <input type="submit" name="folder_factories:method" value="New...">
+ </span>
+ <span tal:condition="python: checkPerm('View management screens', here)">
+ <input type="submit" name="folder_rename_form:method" value="Rename">
+ <input type="submit" name="folder_cut:method" value="Cut">
+ <input type="submit" name="folder_copy:method" value="Copy">
+ <span tal:condition="here/cb_dataValid">
+ <input type="submit" name="folder_paste:method" value="Paste">
+ </span>
+ </span>
+ <span tal:condition="python: checkPerm('Delete objects', here)">
+ <input type="submit" name="folder_delete:method" value="Delete">
+ </span>
+ </td>
+ </tr>
+ </table>
+
+ </td>
+ </tr>
+ </table>
</form>
-<span tal:replace="structure here/folder_filter_form">Filter Form Here</span>
+
+<div tal:replace="structure here/folder_filter_form">Filter Form Here</div>
+
</div>
</div>
</body>
</html>
-
=== CMF/CMFDefault/skins/zpt_generic/index_html.pt 1.6 => 1.7 ===
-<html metal:use-macro="here/main_template/macros/master"
->
+<html metal:use-macro="here/main_template/macros/master" >
<body>
<div metal:fill-slot="header"
=== CMF/CMFDefault/skins/zpt_generic/logged_in.pt 1.4 => 1.5 ===
<div metal:fill-slot="main">
<div tal:define="p_props here/portal_properties;
+ p_url here/portal_url;
mtool here/portal_membership;
isAnon mtool/isAnonymousUser|nothing;
member mtool/getAuthenticatedMember;
@@ -60,13 +61,13 @@
Please use the form below to change your password.</p>
<form action="change_password" method="post"
- tal:attributes="action string:${here/portal_url}/change_password"
+ tal:attributes="action string:${p_url}/change_password"
>
<input type="hidden" name="user" value=""
tal:attributes="value member">
<input type="hidden" name="domains:tokens" value="">
<input type="hidden" name="redirect" value=""
- tal:attributes="value p_props/portal_url">
+ tal:attributes="value string:${p_url}/">
<table>
=== CMF/CMFDefault/skins/zpt_generic/login_form.pt 1.3 => 1.4 ===
<h1 class="Desktop">Log in</h1>
<form action="" method="post"
- tal:attributes="action python: here.portal_url() + '/logged_in'"
+ tal:attributes="action string:${here/portal_url}/logged_in"
>
<!-- ****** Enable the automatic redirect ***** -->
@@ -52,18 +52,21 @@
</table>
</form>
-<p><a href="" tal:attributes="href python: here.portal_url() + '/mail_password_form'">I forgot my password!</a></p>
+<p><a href=""
+ tal:attributes="href string:${here/portal_url}/mail_password_form"
+ >I forgot my password!</a>
+</p>
-<p>
-Having trouble logging in? Make sure to enable cookies in your web browser.
+<p> Having trouble logging in? Make sure to enable cookies in
+ your web browser.
</p>
<p>Don't forget to logout or exit your browser when you're done.
</p>
-<p>
-Setting the 'Remember my name' option will set a cookie with your username,
-so that when you next log in, your user name will already be filled in for you.
+<p> Setting the 'Remember my name' option will set a cookie with your
+ username, so that when you next log in, your user name will already
+ be filled in for you.
</p>
</div>
</div>
=== CMF/CMFDefault/skins/zpt_generic/main_template.pt 1.6 => 1.7 ===
portal_object utool/getPortalObject;
portal_title portal_object/Title;
object_title here/Title;
- portal_url here/portal_url;
+ portal_url utool;
member mtool/getAuthenticatedMember;
isAnon mtool/isAnonymousUser;
actions python: atool.listFilteredActionsFor( here );
@@ -48,7 +48,7 @@
tal:attributes="action string:${portal_url}/search">
<td id="PortalLogo">
- <a href="." tal:attributes="href portal_url"
+ <a href="." tal:attributes="href string:${portal_url}/"
><img src="Zope_logo.gif" alt="Zope Logo"
border="0" width="87" height="38"
tal:attributes="src string:${portal_url}/Zope_logo.gif"></a>
@@ -59,7 +59,7 @@
</td>
<td id="NavBar">
- <a href="." tal:attributes="href portal_url">home</a>
+ <a href="." tal:attributes="href string:${portal_url}/">home</a>
<a href="roster"
tal:attributes="href string:${portal_url}/Members">members</a>
<a href="recent_news"
=== CMF/CMFDefault/skins/zpt_generic/personalize_form.pt 1.4 => 1.5 ===
<p><a href="password_form">Click here</a> to change your password.</p>
<form action="personalize" method="post"
- tal:attributes="action string:${here/portal_url}/personalize"
+ tal:attributes="action string:${purl}/personalize"
>
<table class="FormLayout">
=== CMF/CMFDefault/skins/zpt_generic/registered.pt 1.2 => 1.3 ===
xmlns:metal="http://xml.zope.org/namespaces/metal"
metal:use-macro="here/main_template/macros/master">
<body>
-<div metal:fill-slot="main">
+<div metal:fill-slot="main"
+ tal:define="purl here/portal_url;"
+>
<div class="Desktop"
tal:define="pprops here/portal_properties; ve pprops/validate_email">
@@ -11,17 +13,26 @@
<p> You have been registered as a member. </p>
-<p tal:condition="ve"> You will receive an email shortly containing your password
- and instructions on how to activate your membership. </p>
+<p tal:condition="ve"> You will receive an email shortly containing
+ your password and instructions on how to activate your membership.
+</p>
<p tal:condition="python:not(ve)"> You can log on immediately by clicking
<a href=""
- tal:define="pss modules/Products.PythonScripts.standard; uname request/username; username python:pss.url_quote(uname); pword request/password; password python:pss.url_quote(pword)"
- tal:attributes="href python: here.portal_url() + '/logged_in?__ac_name=' + username + '&__ac_password=' + password">here</a>.
+ tal:define="pss modules/Products.PythonScripts.standard;
+ uname request/username;
+ u python:pss.url_quote(uname);
+ pword request/password;
+ p python:pss.url_quote(pword);
+ "
+ tal:attributes="
+ href string:${purl}/logged_in?__ac_name=${u}&__ac_password=${p}"
+ >here</a>.
</p>
<p>
-<a href="" tal:attributes="href python:here.portal_url() + '/index_html'">Return to homepage</a>
+<a href=""
+ tal:attributes="href string:${purl}/">Return to homepage</a>
</p>
</div>
</div>
=== CMF/CMFDefault/skins/zpt_generic/review.pt 1.3 => 1.4 ===
def_start string:0;
bstart request/b_start | def_start;
batch python: Batch( results, 25, int( bstart ), orphan=0 );
+ purl here/portal_url;
">
<div tal:condition="results">
@@ -17,7 +18,7 @@
<h1> Items pending review </h1>
<form action="/" method="GET"
- tal:attributes="action here/portal_url"
+ tal:attributes="action string:${purl}/"
>
<table class="SearchResults">
@@ -46,7 +47,7 @@
<a href="url"
tal:attributes="href objURL"
><img border="0" src="icon" alt="Type" title="Type"
- tal:attributes="src string:${here/portal_url}/${item/getIcon};
+ tal:attributes="src string:${purl}/${item/getIcon};
alt item/Type|nothing;
title item/Type|nothing;
"></a>
=== CMF/CMFDefault/skins/zpt_generic/talkback_tree.pt 1.2 => 1.3 ===
<html>
- <head>
- <title tal:content="template/title">The title</title>
- </head>
- <body tal:define="t python:here.setup_talkback_tree(here); height t/root/height">
- <table cellspacing="0" border="0">
- <tr tal:repeat="row t/rows">
-
-
- <td tal:define="indent python:row.depth - 1"
- tal:condition="indent"
- tal:attributes="colspan indent" colspan="1"></td>
- <td width="16" tal:define="rlink row/branch">
- <a tal:condition="rlink"
- tal:attributes="name row/id;href rlink/link"
- tal:content="structure rlink/img" href name><img src="/p_/pl"></a>
- </td>
- <td tal:attributes="colspan python:height-row.depth"
- tal:define="obj nocall:row/object;url python:obj.absolute_url()"
- colspan="1" width="99%">
- <a tal:attributes="href url">
- <img tal:attributes="src python:obj.portal_url() + '/' + obj.getIcon()"
- border="0" src="" /></a>
-<a tal:attributes="href url"
- tal:content="obj/Title" href="">Title</a>, by <span tal:replace="obj/Creator">Me</span> on <span tal:replace="obj/CreationDate">Today</span>
- </td>
- </tr>
- </table>
- </body>
+<head>
+ <title tal:content="template/title">The title</title>
+</head>
+<body tal:define="t python:here.setup_talkback_tree(here);
+ height t/root/height;
+ purl here/portal_url;
+ ">
+<table cellspacing="0" border="0">
+ <tr tal:repeat="row t/rows">
+ <td tal:define="indent python:row.depth - 1"
+ tal:condition="indent"
+ tal:attributes="colspan indent" colspan="1">
+ </td>
+ <td width="16" tal:define="rlink row/branch">
+ <a href="#" name=""
+ tal:condition="rlink"
+ tal:attributes="name row/id;
+ href rlink/link"
+ tal:content="structure rlink/img"
+ ><img src="/p_/pl"
+ tal:attributes="src string:${purl}/p_pl;" /></a>
+ </td>
+ <td colspan="1" width="99%"
+ tal:attributes="colspan python:height-row.depth"
+ tal:define="obj nocall:row/object;
+ url obj/absolute_url;
+ ">
+ <a tal:attributes="href url"
+ ><img border="0" src=""
+ tal:attributes="src string:${purl}/${obj/getIcon}" /></a>
+ <a href=""
+ tal:attributes="href url"
+ tal:content="obj/Title">Title</a>,
+ by <span tal:replace="obj/Creator">Me</span>
+ on <span tal:replace="obj/CreationDate">Today</span>
+ </td>
+ </tr>
+</table>
+</body>
</html>
-