[Checkins] SVN: z3c.formui/trunk/ - Bug: added missing display IContentTemplate, otherwise we can run into a

Roger Ineichen roger at projekt01.ch
Sat Dec 29 22:53:35 EST 2007


Log message for revision 82563:
  - Bug: added missing display IContentTemplate, otherwise we can run into a 
    recursion in some case
  - Feature: Use IContentTemplate instead of IPageTemplate in layout base 
    classes. This will help to prevent running into recursion errors if there 
    is a missing layout template.
  - Feature: Added subform content and layout template. This allows you to
    configure real sub forms which do not render the form tag for sub forms.
  - Added tests for layout templates
  
  Note, 
  right now we use develop externals for unreleased z3c.form!
  

Changed:
  U   z3c.formui/trunk/CHANGES.txt
  U   z3c.formui/trunk/buildout.cfg
  U   z3c.formui/trunk/src/z3c/formui/README.txt
  A   z3c.formui/trunk/src/z3c/formui/div-form-display.pt
  U   z3c.formui/trunk/src/z3c/formui/div-form.zcml
  U   z3c.formui/trunk/src/z3c/formui/form.py
  A   z3c.formui/trunk/src/z3c/formui/subform-layout.pt
  A   z3c.formui/trunk/src/z3c/formui/subform.pt
  A   z3c.formui/trunk/src/z3c/formui/table-form-display.pt
  U   z3c.formui/trunk/src/z3c/formui/table-form.zcml

-=-
Modified: z3c.formui/trunk/CHANGES.txt
===================================================================
--- z3c.formui/trunk/CHANGES.txt	2007-12-30 03:49:56 UTC (rev 82562)
+++ z3c.formui/trunk/CHANGES.txt	2007-12-30 03:53:34 UTC (rev 82563)
@@ -5,18 +5,30 @@
 Version 1.4.0 (unreleased)
 -------------------------
 
-- Bugfix, rename table macro argument from ´´form-required-info´´ to 
+- Bug: added missing display IContentTemplate, otherwise we can run into a 
+  recursion in some case
+
+- Bug: rename table macro argument from ´´form-required-info´´ to 
   ´´required-info´´. The macro ´´form-required-info´´ did not exist.
 
-- Improve layout implementation, support built in layout templates
+- Feature: Added subform content and layout template. This allows you to
+  configure real sub forms which do not render the form tag for sub forms.
 
-- Added form module which offers built in layout support.
+- Feature: Improve layout implementation, support built in layout templates
 
+- Feature: Use IContentTemplate instead of IPageTemplate in layout base 
+  classes. This will help to prevent running into recursion errors if there 
+  is a missing layout template.
+
+- Feature: Added form module which offers built in layout support.
+
 - Added unittests for layout support
 
 - Added tests for layout macros
 
+- Added tests for layout templates
 
+
 Version 1.3.0 (8/24/2007)
 -------------------------
 

Modified: z3c.formui/trunk/buildout.cfg
===================================================================
--- z3c.formui/trunk/buildout.cfg	2007-12-30 03:49:56 UTC (rev 82562)
+++ z3c.formui/trunk/buildout.cfg	2007-12-30 03:53:34 UTC (rev 82563)
@@ -1,5 +1,6 @@
 [buildout]
 develop = .
+          externals/z3c.form
 parts = test
 
 [test]

Modified: z3c.formui/trunk/src/z3c/formui/README.txt
===================================================================
--- z3c.formui/trunk/src/z3c/formui/README.txt	2007-12-30 03:49:56 UTC (rev 82562)
+++ z3c.formui/trunk/src/z3c/formui/README.txt	2007-12-30 03:53:34 UTC (rev 82563)
@@ -316,8 +316,8 @@
 Form Macros
 -----------
 
-Try at least to load the confguration, which will make sure that all macros
-get registered correctly.
+Load the confguration, which will make sure that all macros get registered 
+correctly.
 
   >>> from zope.configuration import xmlconfig
   >>> import zope.component
@@ -335,12 +335,50 @@
   >>> xmlconfig.XMLConfig('meta.zcml', z3c.template)()
   >>> xmlconfig.XMLConfig('configure.zcml', z3c.formui)()
 
+Div IContentTemplate
+--------------------
 
+Create some dummy form discriminators for calling div layout templates and 
+macros and check the div IContentTemplates:
+
+  >>> objects = (addForm, divRequest)
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate).filename
+  '...div-form.pt'
+
+  >>> objects = (form.DisplayForm(None, None), divRequest) 
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, '').filename
+  '...div-form-display.pt'
+
+We offer the following named IContentTemplate:
+
+  >>> objects = (form.DisplayForm(None, None), divRequest) 
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, 
+  ...     'display').filename
+  '...div-form-display.pt'
+
+  >>> objects = (form.DisplayForm(None, None), divRequest) 
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, 
+  ...     'subform').filename
+  '...subform.pt'
+
+
+Table ILayoutTemplate
+---------------------
+
+There is one generic layout template for build sub forms:
+
+  >>> objects = (form.DisplayForm(None, None), divRequest) 
+  >>> zope.component.getMultiAdapter(objects, ILayoutTemplate, 
+  ...     'subform').filename
+  '...subform-layout.pt'
+
+
 Div layout macros
 -----------------
 
-Now we can see that we have different form macros available:
+We have different form macros available for IInputForm:
 
+
   >>> from z3c.macro.interfaces import IMacroTemplate
   >>> objects = (None, addForm, divRequest)
   >>> zope.component.getMultiAdapter(objects, IMacroTemplate, 'form')
@@ -383,9 +421,56 @@
   [...div-form.pt'), ...define-macro', u'buttons'...
 
 
+And we have different form macros available for IDisplayForm:
+
+  >>> zope.component.getMultiAdapter(objects, IMacroTemplate, 'subform-display')
+  [...div-form-display.pt'), ...define-macro': u'subform-display'...
+
+
+Table IContentTemplate
+----------------------
+
+Create some dummy form discriminators for calling table layout templates and 
+macros and check the div IContentTemplates:
+
+  >>> objects = (addForm, tableRequest)
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, '').filename
+  '...table-form.pt'
+
+  >>> objects = (form.DisplayForm(None, None), tableRequest) 
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, '').filename
+  '...table-form-display.pt'
+
+We offer the following named IContentTemplate:
+
+  >>> objects = (form.DisplayForm(None, None), tableRequest) 
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, 
+  ...     'display').filename
+  '...table-form-display.pt'
+
+  >>> objects = (form.DisplayForm(None, None), tableRequest) 
+  >>> zope.component.getMultiAdapter(objects, IContentTemplate, 
+  ...     'subform').filename
+  '...subform.pt'
+
+
+
+Table ILayoutTemplate
+---------------------
+
+There is one generic layout template for build sub forms:
+
+  >>> objects = (form.DisplayForm(None, None), tableRequest) 
+  >>> zope.component.getMultiAdapter(objects, ILayoutTemplate, 
+  ...     'subform').filename
+  '...subform-layout.pt'
+
+
 Table layout macros
 -------------------
 
+We have different form macros available for IInputForm:
+
   >>> objects = (None, addForm, tableRequest)
   >>> zope.component.getMultiAdapter(objects, IMacroTemplate, 'form')
   [...table-form.pt'), ...metal:define-macro': u'form'...
@@ -435,6 +520,176 @@
   [...table-form.pt'), ...define-macro', u'buttons'...
 
 
+And we have different form macros available for IDisplayForm:
+
+  >>> zope.component.getMultiAdapter(objects, IMacroTemplate, 'subform-display')
+  [...table-form-display.pt'), ...define-macro': u'subform-display'...
+
+
+Subform
+-------
+
+Let's give a quick overview how subform content and layout template get used:
+First define a new form which uses the template getter method methods offered
+from z3.template
+
+  >>> from z3c.template.template import getPageTemplate
+  >>> from z3c.template.template import getLayoutTemplate
+
+We also need the provider TALES expression which is a part of the lookup
+concept:
+
+  >>> from zope.app.pagetemplate import metaconfigure
+  >>> from zope.contentprovider import tales
+  >>> metaconfigure.registerType('provider', tales.TALESProviderExpression)
+
+and the TALES expression called ´´macro´´ which can lookup our macro adapters.
+Yes, macros are adapters in our content/layout template concept. See z3c.macro
+form mor information about the implementation:
+
+  >>> from zope.app.pagetemplate import metaconfigure
+  >>> from z3c.macro import tales
+  >>> metaconfigure.registerType('macro', tales.MacroExpression)
+
+and at least we need a pagelet renderer. By default we use the provider called
+´´PageletRenderer´´ defined in the z3c.pagelet package. Bubt right now, we 
+don't have a dependency to this package. So let's implement a simple renderer
+and use them as a IContentProvider:
+
+  >>> class PageletRenderer(object):
+  ...     zope.component.adapts(zope.interface.Interface,
+  ...         zope.publisher.interfaces.browser.IBrowserRequest,
+  ...         zope.interface.Interface)
+  ... 
+  ...     def __init__(self, context, request, pagelet):
+  ...         self.__updated = False
+  ...         self.__parent__ = pagelet
+  ...         self.context = context
+  ...         self.request = request
+  ... 
+  ...     def update(self):
+  ...         pass
+  ... 
+  ...     def render(self):
+  ...         return self.__parent__.render()
+
+  >>> from zope.contentprovider.interfaces import IContentProvider
+  >>> zope.component.provideAdapter(PageletRenderer,
+  ...     provides=IContentProvider, name='pagelet')
+
+Now define the form:
+
+  >>> class PersonEditForm(form.EditForm):
+  ...     """Edit form including layout support. See z3c.formui.form."""
+  ... 
+  ...     template = getPageTemplate('subform')
+  ...     layout = getLayoutTemplate('subform')
+  ...
+  ...     fields = field.Fields(IPerson)
+
+Now we can render the form with our previous created person instance:
+
+  >>> person = Person(u'Jessy', 6)
+  >>> editForm = PersonEditForm(person, divRequest)
+
+Now we call the form which will update and render them:
+
+  >>> print editForm()
+  <div class="viewspace">
+    <div class="required-info">
+      <span class="required">*</span>
+      &ndash; required
+    </div>
+    <div>
+      <div id="form-widgets-name-row" class="row">
+        <div class="label">
+          <label for="form-widgets-name">
+            <span>Name</span>
+            <span class="required">*</span>
+          </label>
+        </div>
+        <div class="widget"><input type="text" id="form-widgets-name"
+             name="form.widgets.name"
+             class="text-widget required textline-field"
+             value="Jessy" />
+        </div>
+      </div>
+      <div id="form-widgets-age-row" class="row">
+        <div class="label">
+          <label for="form-widgets-age">
+            <span>Age</span>
+          </label>
+        </div>
+        <div class="widget"><input type="text" id="form-widgets-age"
+           name="form.widgets.age" class="text-widget int-field"
+           value="6" />
+        </div>
+      </div>
+    </div>
+  </div>
+  <div>
+    <div class="buttons">
+      <input type="submit" id="form-buttons-apply"
+             name="form.buttons.apply"
+             class="submit-widget button-field" value="Apply" />
+    </div>
+  </div>
+
+You can see that the form above is a realy subform. It doesn't define the form
+tag which makes it usable as a subform in parent forms.
+
+Of corse this works with table layout based forms too. Let's use our table
+request and render the form again:
+
+  >>> editForm = PersonEditForm(person, tableRequest)
+  >>> print editForm()
+  <div class="viewspace">
+    <div class="required-info">
+      <span class="required">*</span>
+      &ndash; required
+    </div>
+    <div>
+      <table class="form-fields">
+        <tr class="row">
+          <td class="label">
+            <label for="form-widgets-name">
+              <span>Name</span>
+              <span class="required"> * </span>
+            </label>
+          </td>
+          <td class="field">
+            <div class="widget"><input type="text" id="form-widgets-name"
+                 name="form.widgets.name"
+                 class="text-widget required textline-field"
+                 value="Jessy" />
+            </div>
+          </td>
+        </tr>
+        <tr class="row">
+          <td class="label">
+            <label for="form-widgets-age">
+              <span>Age</span>
+            </label>
+          </td>
+          <td class="field">
+            <div class="widget"><input type="text" id="form-widgets-age"
+                 name="form.widgets.age" class="text-widget int-field"
+                 value="6" />
+            </div>
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+  <div>
+    <div class="buttons">
+      <input type="submit" id="form-buttons-apply"
+             name="form.buttons.apply"
+            class="submit-widget button-field" value="Apply" />
+    </div>
+  </div>
+
+
 Cleanup
 -------
 

Added: z3c.formui/trunk/src/z3c/formui/div-form-display.pt
===================================================================
--- z3c.formui/trunk/src/z3c/formui/div-form-display.pt	                        (rev 0)
+++ z3c.formui/trunk/src/z3c/formui/div-form-display.pt	2007-12-30 03:53:34 UTC (rev 82563)
@@ -0,0 +1,77 @@
+<form action="." method="post" enctype="multipart/form-data" class="display-form"
+      metal:define-macro="form"
+      tal:attributes="method view/method;
+                      enctype view/enctype;
+                      acceptCharset view/acceptCharset;
+                      accept view/accept;
+                      action view/action;
+                      name view/name;
+                      id view/id">
+  <metal:block define-macro="subform-display">
+  <div class="viewspace" metal:define-slot="viewspace">
+    <metal:block define-slot="label">
+      <h1 metal:define-macro="label"
+          tal:condition="view/label|nothing"
+          tal:content="view/label">
+        Form Label
+      </h1>
+    </metal:block>
+    <div metal:define-slot="extra-info" tal:replace="nothing">
+    </div>
+    <div metal:define-slot="main">
+      <metal:block define-macro="widget-rows">
+        <tal:block repeat="widget view/widgets/values">
+          <div id="" class="row"
+               tal:attributes="id string:${widget/id}-row"
+               tal:condition="python:widget.mode != 'hidden'">
+            <metal:block define-macro="widget-row">
+              <div class="label">
+                <label tal:attributes="for widget/id">
+                  <span i18n:translate=""
+                      tal:content="widget/label">label</span>
+                </label>
+              </div>
+              <div class="widget" tal:content="structure widget/render">
+                <input type="text" size="24" value="" />
+              </div>
+            </metal:block>
+          </div>
+          <input type="hidden" value=""
+                 tal:condition="python:widget.mode == 'hidden'"
+                 tal:replace="structure widget/render" />
+        </tal:block>
+      </metal:block>
+      <metal:block define-macro="groups">
+        <fieldset tal:condition="view/groups|nothing"
+                    tal:repeat="view view/groups">
+          <legend tal:condition="view/label"
+                  tal:content="view/label">Label</legend>
+          <metal:block define-slot="group-header">
+            <div class="status"
+                 tal:condition="view/widgets/errors">
+              <div metal:use-macro="template/macros/errors" />
+            </div>
+          </metal:block>
+          <metal:block define-slot="group-rows">
+            <div metal:use-macro="template/macros/widget-rows" />
+          </metal:block>
+        </fieldset>
+      </metal:block>
+    </div>
+    <metal:block define-slot="above-buttons">
+    </metal:block>
+  </div>
+  <metal:block define-slot="buttons">
+  <div metal:define-macro="buttons">
+    <div class="buttons"
+          metal:define-slot="bottom-buttons">
+      <input tal:repeat="action view/actions/values"
+           tal:replace="structure action/render"
+           />
+    </div>
+  </div>
+  </metal:block>
+  <metal:block define-slot="bottom">
+  </metal:block>
+  </metal:block>
+</form>


Property changes on: z3c.formui/trunk/src/z3c/formui/div-form-display.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: z3c.formui/trunk/src/z3c/formui/div-form.zcml
===================================================================
--- z3c.formui/trunk/src/z3c/formui/div-form.zcml	2007-12-30 03:49:56 UTC (rev 82562)
+++ z3c.formui/trunk/src/z3c/formui/div-form.zcml	2007-12-30 03:53:34 UTC (rev 82563)
@@ -21,6 +21,8 @@
       permission="zope.Public"
       layer=".interfaces.IDivFormLayer"
       />
+
+  <!-- form macros -->
   <z3c:macro
       name="form"
       template="div-form.pt"
@@ -32,6 +34,11 @@
       layer=".interfaces.IDivFormLayer"
       />
   <z3c:macro
+      name="subform-display"
+      template="div-form-display.pt"
+      layer=".interfaces.IDivFormLayer"
+      />
+  <z3c:macro
       name="form-label"
       macro="label"
       template="div-form.pt"
@@ -79,10 +86,39 @@
       template="div-form.pt"
       layer=".interfaces.IDivFormLayer"
       />
+
+  <!-- IContentTemplate -->
   <z3c:template
       template="div-form.pt"
       for="z3c.form.interfaces.IInputForm"
       layer=".interfaces.IDivFormLayer"
       />
+  <z3c:template
+      template="div-form-display.pt"
+      for="z3c.form.interfaces.IDisplayForm"
+      layer=".interfaces.IDivFormLayer"
+      />
 
+  <!-- named IContentTemplate -->
+  <z3c:template
+      name="display"
+      template="div-form-display.pt"
+      for="z3c.form.interfaces.IForm"
+      layer=".interfaces.IDivFormLayer"
+      />
+  <z3c:template
+      name="subform"
+      template="subform.pt"
+      for="z3c.form.interfaces.IForm"
+      layer=".interfaces.IDivFormLayer"
+      />
+
+  <!-- named ILayoutTemplate -->
+  <z3c:layout
+      name="subform"
+      template="subform-layout.pt"
+      for="z3c.form.interfaces.IForm"
+      layer=".interfaces.IDivFormLayer"
+      />
+
 </configure>

Modified: z3c.formui/trunk/src/z3c/formui/form.py
===================================================================
--- z3c.formui/trunk/src/z3c/formui/form.py	2007-12-30 03:49:56 UTC (rev 82562)
+++ z3c.formui/trunk/src/z3c/formui/form.py	2007-12-30 03:53:34 UTC (rev 82563)
@@ -17,29 +17,50 @@
 """
 __docformat__ = "reStructuredText"
 
+import zope.component
 from z3c.form import form
 from z3c.formui import layout
+from z3c.template.interfaces import IContentTemplate
 
 # offer built in layout support
 extends = form.extends
 applyChanges = form.applyChanges
 
 
-class BaseForm(layout.FormLayoutSupport, form.BaseForm):
+class ContentTemplateMixin(object):
+    """Use IContentTemplate instead of IPageTemplate.
+    
+    This prevents us running into a recusrion because of mess up layout and
+    content templates. This is the default template interface if you use the
+    z3c.template directive.
+    """
+
+    def render(self):
+        '''See interfaces.IForm'''
+        # render content template
+        if self.template is None:
+            template = zope.component.getMultiAdapter((self, self.request),
+                IContentTemplate)
+            return template(self)
+        return self.template()
+
+
+class BaseForm(ContentTemplateMixin, layout.FormLayoutSupport, form.BaseForm):
     """Layout aware base form."""
 
 
-class DisplayForm(layout.FormLayoutSupport, form.DisplayForm):
+class DisplayForm(ContentTemplateMixin, layout.FormLayoutSupport,
+    form.DisplayForm):
     """Layout aware display form."""
 
 
-class Form(layout.FormLayoutSupport, form.Form):
+class Form(ContentTemplateMixin, layout.FormLayoutSupport, form.Form):
     """Layout aware form."""
 
 
-class AddForm(layout.AddFormLayoutSupport, form.AddForm):
+class AddForm(ContentTemplateMixin, layout.AddFormLayoutSupport, form.AddForm):
     """Layout aware add form."""
 
 
-class EditForm(layout.FormLayoutSupport, form.EditForm):
+class EditForm(ContentTemplateMixin, layout.FormLayoutSupport, form.EditForm):
     """Layout aware edit form."""

Added: z3c.formui/trunk/src/z3c/formui/subform-layout.pt
===================================================================
--- z3c.formui/trunk/src/z3c/formui/subform-layout.pt	                        (rev 0)
+++ z3c.formui/trunk/src/z3c/formui/subform-layout.pt	2007-12-30 03:53:34 UTC (rev 82563)
@@ -0,0 +1,3 @@
+<tal:block replace="structure provider:pagelet">
+  content
+</tal:block>
\ No newline at end of file


Property changes on: z3c.formui/trunk/src/z3c/formui/subform-layout.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.formui/trunk/src/z3c/formui/subform.pt
===================================================================
--- z3c.formui/trunk/src/z3c/formui/subform.pt	                        (rev 0)
+++ z3c.formui/trunk/src/z3c/formui/subform.pt	2007-12-30 03:53:34 UTC (rev 82563)
@@ -0,0 +1 @@
+<div metal:use-macro="macro:subform" />


Property changes on: z3c.formui/trunk/src/z3c/formui/subform.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.formui/trunk/src/z3c/formui/table-form-display.pt
===================================================================
--- z3c.formui/trunk/src/z3c/formui/table-form-display.pt	                        (rev 0)
+++ z3c.formui/trunk/src/z3c/formui/table-form-display.pt	2007-12-30 03:53:34 UTC (rev 82563)
@@ -0,0 +1,88 @@
+<form action="." method="post" enctype="multipart/form-data" class="edit-form"
+      metal:define-macro="form"
+      tal:attributes="method view/method;
+                      enctype view/enctype;
+                      acceptCharset view/acceptCharset;
+                      accept view/accept;
+                      action view/action;
+                      name view/name;
+                      id view/id">
+  <metal:block define-macro="subform-display">
+  <div class="viewspace" metal:define-slot="viewspace">
+    <metal:block define-slot="label">
+      <h1 metal:define-macro="label"
+          tal:condition="view/label|nothing"
+          tal:content="view/label">
+        Form Label
+      </h1>
+    </metal:block>
+    <div metal:define-slot="extra_info" tal:replace="nothing">
+    </div>
+    <div metal:define-slot="main">
+      <table class="form-fields" metal:define-macro="formtable">
+        <tr class="extraTopRow"
+            metal:define-slot="extra_top"
+            tal:replace="nothing">
+          <td class="label"> Extra top </td>
+          <td class="field"><input type="text" />
+          </td>
+        </tr>
+        <tbody metal:define-slot="formbody" tal:omit-tag="">
+          <tal:block omit-tag="" repeat="widget view/widgets/values">
+            <tr metal:define-macro="formrow" class="row"
+                tal:condition="python:widget.mode != 'hidden'">
+              <td class="label" metal:define-macro="labelcell">
+                <label tal:attributes="for widget/id">
+                  <span i18n:translate=""
+                        tal:content="widget/label"> label </span>
+                </label>
+              </td>
+              <td class="field" metal:define-macro="widgetcell">
+                <div class="widget" tal:content="structure widget/render">
+                  <input type="text" />
+                </div>
+              </td>
+            </tr>
+          </tal:block>
+        </tbody>
+        <tr class="extraBottomRow"
+            metal:define-slot="extra_bottom"
+            tal:replace="nothing">
+          <td class="label"> Extra bottom </td>
+          <td class="label"><input type="text" />
+          </td>
+        </tr>
+      </table>
+      <metal:block define-macro="groups">
+        <fieldset tal:condition="view/groups|nothing"
+                    tal:repeat="view view/groups">
+          <legend tal:condition="view/label"
+                  tal:content="view/label">Label</legend>
+          <metal:block define-slot="group-header">
+          </metal:block>
+          <metal:block define-slot="group-rows">
+            <div metal:use-macro="template/macros/formtable" />
+          </metal:block>
+        </fieldset>
+      </metal:block>
+      <tal:block repeat="widget view/widgets/values"
+	    ><input type="hidden" value=""
+                    tal:condition="python:widget.mode == 'hidden'"
+                    tal:replace="structure widget/render"
+      /></tal:block>
+    </div>
+    <metal:block define-slot="above-buttons">
+    </metal:block>
+  </div>
+  <metal:block define-slot="buttons">
+    <div metal:define-macro="buttons">
+      <div class="buttons" metal:define-slot="bottom-buttons">
+        <input tal:repeat="action view/actions/values"
+               tal:replace="structure action/render" />
+      </div>
+    </div>
+  </metal:block>
+  <metal:block define-slot="bottom">
+  </metal:block>
+  </metal:block>
+</form>


Property changes on: z3c.formui/trunk/src/z3c/formui/table-form-display.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: z3c.formui/trunk/src/z3c/formui/table-form.zcml
===================================================================
--- z3c.formui/trunk/src/z3c/formui/table-form.zcml	2007-12-30 03:49:56 UTC (rev 82562)
+++ z3c.formui/trunk/src/z3c/formui/table-form.zcml	2007-12-30 03:53:34 UTC (rev 82563)
@@ -21,6 +21,8 @@
       permission="zope.Public"
       layer=".interfaces.ITableFormLayer"
       />
+
+  <!-- form macros -->
   <z3c:macro
       name="form"
       template="table-form.pt"
@@ -32,6 +34,11 @@
       layer=".interfaces.ITableFormLayer"
       />
   <z3c:macro
+      name="subform-display"
+      template="table-form-display.pt"
+      layer=".interfaces.ITableFormLayer"
+      />
+  <z3c:macro
       name="form-label"
       macro="label"
       template="table-form.pt"
@@ -91,10 +98,39 @@
       template="table-form.pt"
       layer=".interfaces.ITableFormLayer"
       />
+
+  <!-- IContentTemplate -->
   <z3c:template
       template="table-form.pt"
       for="z3c.form.interfaces.IInputForm"
       layer=".interfaces.ITableFormLayer"
       />
+  <z3c:template
+      template="table-form-display.pt"
+      for="z3c.form.interfaces.IDisplayForm"
+      layer=".interfaces.ITableFormLayer"
+      />
 
+  <!-- named IContentTemplate -->
+  <z3c:template
+      name="display"
+      template="table-form-display.pt"
+      for="z3c.form.interfaces.IForm"
+      layer=".interfaces.ITableFormLayer"
+      />
+  <z3c:template
+      name="subform"
+      template="subform.pt"
+      for="z3c.form.interfaces.IForm"
+      layer=".interfaces.ITableFormLayer"
+      />
+
+  <!-- named ILayoutTemplate -->
+  <z3c:layout
+      name="subform"
+      template="subform-layout.pt"
+      for="z3c.form.interfaces.IForm"
+      layer=".interfaces.ITableFormLayer"
+      />
+
 </configure>



More information about the Checkins mailing list