From c8be0780f1b55413fd3c2f300196f9b216e6b220 Mon Sep 17 00:00:00 2001
From: Vincent Pelletier <vincent@nexedi.com>
Date: Tue, 7 Mar 2006 13:25:13 +0000
Subject: [PATCH] Add layout support for forms (keep backward compatibility).

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@6016 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 .../erp5_html_style/form_view.xml             | 141 +++++++++---------
 1 file changed, 72 insertions(+), 69 deletions(-)

diff --git a/product/ERP5/bootstrap/erp5_html_style/SkinTemplateItem/portal_skins/erp5_html_style/form_view.xml b/product/ERP5/bootstrap/erp5_html_style/SkinTemplateItem/portal_skins/erp5_html_style/form_view.xml
index a430802143..d0decee23d 100755
--- a/product/ERP5/bootstrap/erp5_html_style/SkinTemplateItem/portal_skins/erp5_html_style/form_view.xml
+++ b/product/ERP5/bootstrap/erp5_html_style/SkinTemplateItem/portal_skins/erp5_html_style/form_view.xml
@@ -54,89 +54,92 @@
             <key> <string>_text</string> </key>
             <value> <string encoding="cdata"><![CDATA[
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n
- "DTD/xhtml1-strict.dtd">\n
+<tal:block tal:define="layout_form_id here/getApplicableLayout | nothing;\n
+                       editable_mode request/editable_mode | nothing;\n
+                       ignore_layout request/ignore_layout | nothing;\n
+                       global layout_form python:(not layout_form_id or ignore_layout) or getattr(here, layout_form_id, None);\n
+                       layout_id layout_form/pt | string:view_master">\n
+<tal:block tal:condition="python: not layout_form_id or ignore_layout">\n
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">\n
 <?xml-stylesheet  href="erp5.css" rel="stylesheet" type="text/css"?>\n
-\n
-<tal:block tal:replace="nothing">\n
-<!--\n
-Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.\n
-                   Jean-Paul Smets     <jp@nexedi.com>\n
-                   Thierry Faucher     \n
-\n
-This program is Free Software; you can redistribute it and/or\n
-modify it under the terms of the GNU General Public License\n
-as published by the Free Software Foundation; either version 2\n
-of the License, or (at your option) any later version.\n
-\n
-This program is distributed in the hope that it will be useful,\n
-but WITHOUT ANY WARRANTY; without even the implied warranty of\n
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n
-GNU General Public License for more details.\n
-\n
-You should have received a copy of the GNU General Public License\n
-along with this program; if not, write to the Free Software\n
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n
--->\n
 </tal:block>\n
-\n
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en"\n
       xml:lang="en"\n
       xmlns:tal="http://xml.zope.org/namespaces/tal"\n
       xmlns:metal="http://xml.zope.org/namespaces/metal"\n
       xmlns:i18n="http://xml.zope.org/namespaces/i18n"\n
-      metal:use-macro="here/view_master/macros/master">\n
-\n
-  <head tal:define="dummy python:request.RESPONSE.setHeader(\'Content-Type\', \'text/html;; charset=utf-8\')">\n
-    <meta name="description" content="Generated by form_view" />\n
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n
-    <title tal:content="template/title_or_id"\n
-           i18n:translate="" i18n:domain="ui">\n
-      The title\n
-    </title>\n
-    <link href="erp5.css" rel="stylesheet" type="text/css" />\n
-  </head>\n
-  <body>\n
-\n
-    <tal:block metal:fill-slot="main">         \n
-      <div class="Main" metal:define-macro="form_layout">\n
-        <tal:block tal:define="groups python: form.get_groups(include_empty=1);\n
-                               field_errors python: request.get(\'field_errors\',{});\n
-                               dummy python: request.set(\'here\',here)">\n
-          <table class="Border" width="100%" tal:condition="python:\n
-                                      (len(form.get_fields_in_group(groups[0])) > 0) or\n
-                                      (len(form.get_fields_in_group(groups[1])) > 0)">\n
-            <tal:block tal:repeat="group python: groups[:2]">\n
-              <td valign="top">\n
-                <table>\n
-                  <tal:block tal:repeat="field python:form.get_fields_in_group(group)">\n
-                    <tal:block metal:use-macro="here/field_render/macros/field_render"/>\n
-                  </tal:block>\n
-                </table>\n
-              </td>\n
-            </tal:block>\n
-          </table>\n
-          <tal:block tal:condition="python: \n
-                                      (len(groups) > 2) and\n
-                                      (len(form.get_fields_in_group(groups[2])) > 0)">\n
-            <table class="Border">\n
-              <tal:block tal:repeat="field python:form.get_fields_in_group(groups[2])">\n
+      metal:use-macro="python:getattr(here,layout_id).macros[\'master\']">\n
+  <tal:block metal:fill-slot="main">\n
+    <tal:block metal:define-macro="form_render">\n
+      <tal:block tal:define="field_errors python: request.get(\'field_errors\',{});\n
+                             dummy python: request.set(\'here\',here)"\n
+                 tal:condition="python: layout_form_id and not ignore_layout">\n
+        <tal:block tal:condition="not: editable_mode" tal:repeat="group python: form.get_groups()">\n
+          <div tal:attributes="class group" tal:condition="python: group.find(\'content\') >= 0">\n
+            <tal:block tal:repeat="field python:form.get_fields_in_group(group)"\n
+             tal:replace="structure python: field.render(None, request)"/>\n
+          </div>\n
+        </tal:block>\n
+        <tal:block tal:condition="editable_mode" tal:repeat="group python: form.get_groups()">\n
+          <div tal:attributes="class group">\n
+            <table tal:condition="python: \'content\' not in group">\n
+              <tal:block tal:repeat="field python:form.get_fields_in_group(group)">\n
                 <tal:block metal:use-macro="here/field_render/macros/field_render"/>\n
               </tal:block>\n
             </table>\n
-          </tal:block>\n
-          <tal:block tal:condition="python: len(groups)>3">\n
-            <tal:block tal:repeat="field python:form.get_fields_in_group(groups[3])">\n
+            <tal:block tal:condition="python: \'content\' in group" tal:repeat="field python:form.get_fields_in_group(group)">\n
               <tal:block tal:define="value python:request.get(field.id, None)"\n
-                         tal:replace="structure python:field.render(value, request)" />\n
+               tal:replace="structure python:field.render(value, request)" />\n
+            </tal:block>\n
+          </div>\n
+        </tal:block>\n
+      </tal:block>\n
+      <tal:block tal:condition="python: not layout_form_id or ignore_layout">\n
+        <tal:block metal:define-macro="form_layout">\n
+          <div class="Main" tal:define="field_errors python: request.get(\'field_errors\',{});\n
+                                        dummy python: request.set(\'here\',here)">\n
+            <tal:block tal:define="groups python: form.get_groups();\n
+                                    rows python:[];">\n
+              <tal:block tal:repeat="group groups">\n
+                <tal:block tal:condition="python: not (\'right\' in group) or\n
+                                                  len(rows)==0">\n
+                  <tal:block tal:define="dummy python: rows.append([])"/>\n
+                </tal:block>\n
+                <tal:block tal:condition="python: \'hidden\' not in group">\n
+                  <tal:block tal:define="dummy python: rows[-1].append(repeat[\'group\'].index)"/>\n
+                </tal:block>\n
+              </tal:block>\n
+              <tal:block tal:repeat="row rows">\n
+                <tal:block tal:condition="python: \'bottom\' not in groups[row[0]]">\n
+                  <table width="100%" class="Border">\n
+                    <tr>\n
+                      <td tal:repeat="cell row" valign="top">\n
+                        <table width="100%">\n
+                          <tal:block tal:repeat="field python:form.get_fields_in_group(groups[cell])">\n
+                            <tal:block metal:use-macro="here/field_render/macros/field_render"/>\n
+                          </tal:block>\n
+                        </table>\n
+                      </td>\n
+                    </tr>\n
+                  </table>\n
+                </tal:block>\n
+                <tal:block tal:condition="python: \'bottom\' in groups[row[0]]">\n
+                  <tal:block tal:repeat="cell row">\n
+                    <tal:block tal:repeat="field python:form.get_fields_in_group(groups[cell])">\n
+                      <tal:block tal:define="value python:request.get(field.id, None)"\n
+                       tal:replace="structure python:field.render(value, request)" />\n
+                    </tal:block>\n
+                  </tal:block>\n
+                </tal:block>\n
+              </tal:block>\n
             </tal:block>\n
-          </tal:block>\n
+          </div>\n
         </tal:block>\n
-      </div>\n
+      </tal:block>\n
     </tal:block>\n
-\n
-  </body>\n
-</html>
+  </tal:block>\n
+</html>\n
+</tal:block>
 
 ]]></string> </value>
         </item>
-- 
2.30.9