[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>&nbsp;&nbsp;
-        <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>&nbsp;&nbsp;
+         <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%">&nbsp;</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%">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;
+    <a href="." tal:attributes="href string:${portal_url}/">home</a>&nbsp;
     <a href="roster"
        tal:attributes="href string:${portal_url}/Members">members</a>&nbsp;
     <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>
-