[Checkins] SVN: megrok.z3cform.layout/ Initial import of megrok.z3cform.layout form dolmen repo

Christian Klinger cklinger at novareto.de
Mon Sep 14 11:41:40 EDT 2009


Log message for revision 103949:
  Initial import of megrok.z3cform.layout form dolmen repo
  

Changed:
  A   megrok.z3cform.layout/branches/
  A   megrok.z3cform.layout/tags/
  A   megrok.z3cform.layout/trunk/
  A   megrok.z3cform.layout/trunk/README.txt
  A   megrok.z3cform.layout/trunk/bootstrap.py
  A   megrok.z3cform.layout/trunk/buildout.cfg
  A   megrok.z3cform.layout/trunk/docs/
  A   megrok.z3cform.layout/trunk/docs/HISTORY.txt
  A   megrok.z3cform.layout/trunk/setup.py
  A   megrok.z3cform.layout/trunk/src/
  A   megrok.z3cform.layout/trunk/src/megrok/
  A   megrok.z3cform.layout/trunk/src/megrok/__init__.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/__init__.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/README.txt
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/__init__.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/configure.zcml
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/directives.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/__init__.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/ftesting.zcml
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/test_all.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/handlers.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/interfaces.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views.py
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views_templates/
  A   megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views_templates/simpleform.pt
  A   megrok.z3cform.layout/trunk/versions.cfg

-=-
Added: megrok.z3cform.layout/trunk/README.txt
===================================================================
--- megrok.z3cform.layout/trunk/README.txt	                        (rev 0)
+++ megrok.z3cform.layout/trunk/README.txt	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+

Added: megrok.z3cform.layout/trunk/bootstrap.py
===================================================================
--- megrok.z3cform.layout/trunk/bootstrap.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/bootstrap.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,55 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id: bootstrap.py 90212 2008-08-25 14:15:22Z thefunny42 $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout',
+    dict(os.environ,
+         PYTHONPATH=
+         ws.find(pkg_resources.Requirement.parse('setuptools')).location
+         ),
+    ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)

Added: megrok.z3cform.layout/trunk/buildout.cfg
===================================================================
--- megrok.z3cform.layout/trunk/buildout.cfg	                        (rev 0)
+++ megrok.z3cform.layout/trunk/buildout.cfg	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,16 @@
+[buildout]
+develop = .
+parts = sources test
+extends = versions.cfg
+versions = versions
+newest = false
+
+[sources]
+recipe=infrae.subversion
+repository=svn://svn.zope.org/repos/main/megrok.z3cform.base megrok.z3cform.base
+as_eggs=True
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = megrok.z3cform.layout
+defaults = ['--tests-pattern', '^f?tests$', '-v', '-c']

Added: megrok.z3cform.layout/trunk/docs/HISTORY.txt
===================================================================
--- megrok.z3cform.layout/trunk/docs/HISTORY.txt	                        (rev 0)
+++ megrok.z3cform.layout/trunk/docs/HISTORY.txt	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+1.0 - Unreleased
+----------------
+
+* Initial release
+

Added: megrok.z3cform.layout/trunk/setup.py
===================================================================
--- megrok.z3cform.layout/trunk/setup.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/setup.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,33 @@
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+setup(name='megrok.z3cform.layout',
+      version=version,
+      description="",
+      long_description=open("README.txt").read() + "\n" +
+                       open(os.path.join("docs", "HISTORY.txt")).read(),
+      classifiers=[
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        ],
+      keywords='Grok Form Templates Layout',
+      author='Souheil Chelfouh',
+      author_email='trollfot at gmail.com',
+      url='',
+      license='GPL',
+      package_dir={'': 'src'},
+      packages=find_packages('src', exclude=['ez_setup']),
+      namespace_packages=['megrok', 'megrok.z3cform'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'megrok.z3cform.base',
+          'megrok.pagetemplate',
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )

Added: megrok.z3cform.layout/trunk/src/megrok/__init__.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/__init__.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/__init__.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/__init__.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/__init__.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/README.txt
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/README.txt	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/README.txt	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,146 @@
+=====================
+megrok.z3cform.layout
+=====================
+
+`megrok.z3cform.layout` provides several useful templates that can be
+used out-of-the-box with `megrok.z3cform.base`. These templates are
+totally independent from the megrok.z3cform.base library, meaning you
+can simply swap or override them.
+
+`megrok.z3cform.layout` also provides some common handlers to enhance
+a basic form such as a Cancel Button.
+
+
+Setup
+-----
+
+Let's start with a simple example. We create a person object:
+
+   >>> from zope.interface import Interface, implements
+   >>> from zope.schema import TextLine
+
+The Interface of our Object:
+
+   >>> class IPerson(Interface):
+   ...     name = TextLine(title = u'Name')
+   ...     age = TextLine(title = u'Age')
+
+The class of our Object:
+
+   >>> class Person(object):
+   ...     implements(IPerson)
+   ...     name = u""
+   ...     age = u""
+
+And our instance:
+
+   >>> peter = Person()
+   >>> peter
+   <megrok.z3cform.base.ftests.Person object at ...>
+
+   >>> IPerson.providedBy(peter)
+   True
+
+
+Creating some Forms for it
+--------------------------
+
+   >>> from megrok.z3cform.base import EditForm, Fields
+   >>> from grokcore.component import context, implements
+   >>> from grokcore.component.testing import grok, grok_component
+
+To include a cancel Button in your Form, it simply needs to declare it
+using the directive
+
+   >>> from megrok.z3cform.layout import cancellable
+
+   >>> class Add(EditForm):
+   ...     cancellable(True)
+   ...     context(Interface)
+   ...     fields = Fields(IPerson)
+
+   >>> grok_component('add', Add)
+   True
+
+   >>> from zope.component import getMultiAdapter
+   >>> from zope.publisher.browser import TestRequest
+   >>> request = TestRequest()
+
+   >>> add = getMultiAdapter((peter, request), name="add")
+   >>> print add()
+   <form action="http://127.0.0.1" method="post"
+         enctype="multipart/form-data" class="form-add">
+     <div class="errors">
+     </div>
+     <p class="documentDescription"></p>
+     <input type="hidden" name="camefrom" />
+       <div id="edition-fields">
+       <div class="field ">
+         <label for="form-widgets-name">
+           <span>Name</span>
+           <span class="fieldRequired" title="Required">
+             <span class="textual-info">(Required)</span>
+           </span>
+         </label>
+         <div class="widget">
+       <input id="form-widgets-name" name="form.widgets.name"
+              class="text-widget required textline-field"
+              value="" type="text" />
+   </div>
+       </div>
+       <div class="field ">
+         <label for="form-widgets-age">
+           <span>Age</span>
+           <span class="fieldRequired" title="Required">
+             <span class="textual-info">(Required)</span>
+           </span>
+         </label>
+         <div class="widget">
+       <input id="form-widgets-age" name="form.widgets.age"
+              class="text-widget required textline-field"
+              value="" type="text" />
+   </div>
+       </div>
+       </div>
+       <div id="actionsView">
+         <span class="actionButtons">
+   <input id="form-buttons-apply" name="form.buttons.apply"
+          class="submit-widget button-field" value="Apply"
+          type="submit" />
+   <input id="form-buttons-cancel" name="form.buttons.cancel"
+          class="submit-widget cancelbutton-field"
+          value="Cancel" accesskey="c" type="submit" />
+         </span>
+       </div>
+   </form>
+
+
+As it's a martian directive, it's inherited :
+
+   >>> class AnotherForm(Add):
+   ...     context(Interface)
+   ...     fields = Fields(IPerson)
+
+   >>> grok_component('anotherform', AnotherForm)
+   True
+
+   >>> anotherform = getMultiAdapter((peter, request), name="anotherform")
+   >>> "form.buttons.cancel" in anotherform()
+   True
+
+
+If you need to explicitly remove the use of a Cancel button from a
+form, you can remove it by declaring the cancellable directive set to False:
+
+   >>> class YetAnotherForm(Add):
+   ...     context(Interface)
+   ... 	   cancellable(False)
+   ...     fields = Fields(IPerson)
+
+   >>> grok_component('yetanotherform', YetAnotherForm)
+   True
+
+   >>> yetanotherform = getMultiAdapter((peter, request),
+   ...                                  name="yetanotherform")
+   >>> "form.buttons.cancel" in yetanotherform()
+   False

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/__init__.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/__init__.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/__init__.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,2 @@
+from interfaces import *
+from directives import cancellable

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/configure.zcml
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/configure.zcml	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/configure.zcml	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,9 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="megrok.z3cform.base" />
+  <include package="megrok.pagetemplate" file="meta.zcml" />
+  <grok:grok package="." />
+
+</configure>

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/directives.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/directives.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/directives.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,6 @@
+import martian
+
+class cancellable(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    default = False

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/__init__.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/__init__.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/__init__.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1 @@
+#

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/ftesting.zcml
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/ftesting.zcml	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/ftesting.zcml	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,25 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="zope.component" file="meta.zcml"/>
+  <include package="zope.i18n" file="meta.zcml"/>
+  <include package="zope.app.zcmlfiles" file="meta.zcml" />
+  <include package="zope.app.publisher" file="meta.zcml" />
+  <include package="zope.app.component" file="meta.zcml" />
+  <include package="grokcore.component" file="meta.zcml"/>
+  <include package="grokcore.view" file="meta-minimal.zcml" />
+  <include package="megrok.pagetemplate" file="meta.zcml"/>
+  <include package="zope.traversing" />
+  <include package="zope.publisher"/>
+  <include package="zope.app.zcmlfiles" />
+  <include package="zope.app.publisher"/>
+  <include package="zope.app.i18n" />
+
+  <include package="megrok.z3cform.base" file="meta.zcml"/>
+  <include package="megrok.z3cform.base"/>
+  <include package="megrok.z3cform.base" file="default_form_layer.zcml"/>
+  <include package="megrok.z3cform.layout" />
+
+</configure>
+

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/test_all.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/test_all.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/ftests/test_all.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+import re
+import os.path
+import unittest
+
+from pkg_resources import resource_listdir
+from zope.testing import doctest, module
+from zope.app.testing import functional
+
+ftesting_zcml = os.path.join(os.path.dirname(__file__), 'ftesting.zcml')
+FunctionalLayer = functional.ZCMLLayer(
+    ftesting_zcml, __name__, 'FunctionalLayer', allow_teardown=True
+    )
+
+def setUp(test):
+    module.setUp(test, 'megrok.z3cform.base.ftests')
+
+def tearDown(test):
+    module.tearDown(test)
+
+def FsetUp(test):
+    functional.FunctionalTestSetup().setUp()
+
+def FtearDown(test):
+    functional.FunctionalTestSetup().tearDown()
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    readme = functional.FunctionalDocFileSuite(
+            '../README.txt', setUp=setUp, tearDown=tearDown,
+            optionflags=(doctest.ELLIPSIS+
+                         doctest.NORMALIZE_WHITESPACE)
+            )
+    readme.layer = FunctionalLayer
+    suite.addTest(readme)
+    return suite
+

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/handlers.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/handlers.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/handlers.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+
+"""
+z3c.form allows to define buttons as multi adapters, in order to have
+fully customizable forms.
+"""
+import grokcore.component as grok
+
+from zope.interface import Interface
+from zope.i18nmessageid import MessageFactory
+from zope.traversing.browser import AbsoluteURL
+
+from megrok.z3cform.base import button, IGrokForm
+from megrok.z3cform.layout import cancellable, ICancelButton
+
+_ = MessageFactory("dolmen")
+
+
+class CancelButton(button.Button):
+    """A cancel button.
+    """
+    grok.implements(ICancelButton)
+
+    def __init__(self, *args, **kwargs):
+        button.Button.__init__(self, *args, **kwargs)
+        self.condition = cancellable.bind().get
+    
+
+class FormActions(button.ButtonActions, grok.MultiAdapter):
+    grok.adapts(IGrokForm, Interface, Interface)
+
+    def update(self):
+        self.form.buttons = button.Buttons(
+            self.form.buttons,
+            CancelButton('cancel', _(u'Cancel'), accessKey=u'c')
+            )
+        super(FormActions, self).update()
+
+
+class AddActionHandler(button.ButtonActionHandler, grok.MultiAdapter):
+    grok.adapts(IGrokForm, Interface, Interface, button.ButtonAction)
+
+    def __call__(self):
+        if self.action.name == 'form.buttons.cancel':
+            self.form.redirect(AbsoluteURL(self.form.context, self.request))
+            return
+        return super(AddActionHandler, self).__call__()
+

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/interfaces.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/interfaces.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/interfaces.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+
+from z3c.form.interfaces import IButton
+
+
+class ICancelButton(IButton):
+    """A button to cancel a form.
+    """
+
+
+__all__ = ['ICancelButton']

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views.py
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views.py	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views.py	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,9 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import grokcore.viewlet as grok
+from megrok.pagetemplate import PageTemplate
+from megrok.z3cform.base.components import GrokForm
+
+class SimpleForm(PageTemplate):
+    grok.view(GrokForm)

Added: megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views_templates/simpleform.pt
===================================================================
--- megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views_templates/simpleform.pt	                        (rev 0)
+++ megrok.z3cform.layout/trunk/src/megrok/z3cform/layout/views_templates/simpleform.pt	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,84 @@
+<form action="."
+      i18n:domain="dolmen"
+      tal:attributes="action request/URL;
+		      class string:form-${view/__name__}"
+      method="post"
+      enctype="multipart/form-data">
+  
+  <div class="form-status"
+       tal:define="status view/status"
+       tal:condition="status">
+    
+    <dl class="info-message"
+	tal:condition="view/status">
+      <dt i18n:translate="">Status</dt>
+      <dd tal:content="view/status" />
+    </dl>
+  </div>
+  
+  <div class="errors">
+    <ul class="errors"
+	tal:condition="view/widgets/errors">
+      <li tal:repeat="error view/widgets/errors">
+	<strong tal:condition="error/widget"
+		tal:replace="error/widget/label" />
+	<span tal:replace="structure error/render">Error Type</span>
+      </li>
+    </ul>
+  </div>
+  
+  <h1 tal:condition="view/label" tal:content="view/label" />
+  
+  <p class="documentDescription"
+     tal:content="view/description|nothing" />
+  
+  <input type="hidden" name="camefrom"
+	 tal:attributes="value request/camefrom | nothing" />
+  
+  <fieldset tal:define="form_name view/form_name|nothing"
+	    tal:omit-tag="not:form_name">
+    <legend tal:condition="form_name"
+	    tal:content="form_name">Form name</legend>
+    
+    <div id="edition-fields">
+      <tal:block tal:repeat="widget view/widgets/values">
+	<div tal:define="description widget/description|nothing;
+			 error widget/error;
+			 error_class python:error and 'errored-field' or ''"
+	     tal:attributes="class string:field ${error_class}">
+	  <label tal:attributes="for widget/id">
+	    <span i18n:translate=""
+		  tal:content="widget/label">label</span>
+	    <span class="fieldRequired" title="Required"
+		  tal:condition="widget/required"
+		  i18n:translate="label_required"
+		  i18n:attributes="title title_required;">
+	      <span class="textual-info">(Required)</span>
+	    </span>
+	  </label>
+	  <div class="formHelp"
+	       i18n:translate=""
+	       tal:content="description"
+	       tal:condition="description"
+	       >field description</div>
+	  <div class="field-error"
+	       tal:condition="widget/error">
+	    <span tal:replace="structure widget/error/render">error</span>
+	  </div>
+	  <div class="widget"
+	       tal:content="structure widget/render">
+	    <input type="text" />
+	  </div>
+	</div>
+      </tal:block>
+    </div>
+    
+    <div id="actionsView"  tal:condition="view/actions">
+      <span class="actionButtons">
+	<input tal:repeat="action view/actions/values"
+	       tal:replace="structure action/render"
+	       />
+      </span>
+    </div>
+    </fieldset>
+</form>

Added: megrok.z3cform.layout/trunk/versions.cfg
===================================================================
--- megrok.z3cform.layout/trunk/versions.cfg	                        (rev 0)
+++ megrok.z3cform.layout/trunk/versions.cfg	2009-09-14 15:41:39 UTC (rev 103949)
@@ -0,0 +1,115 @@
+[versions]
+zope.container = 3.8.1
+grok = 1.0a4
+ClientForm = 0.2.9
+docutils = 0.4
+grokcore.component = 1.6
+grokcore.formlib = 1.1
+grokcore.security = 1.0
+grokcore.view = 1.7
+grokcore.viewlet = 1.0
+grokui.admin = 0.3.2
+martian = 0.11
+mechanize = 0.1.7b
+Pygments = 0.8.1
+pytz = 2007k
+RestrictedPython = 3.4.2
+simplejson = 1.7.1
+z3c.autoinclude = 0.2.2
+z3c.flashmessage = 1.0
+z3c.testsetup = 0.2.1
+zc.catalog = 1.2.0
+ZConfig = 2.5.1
+zc.recipe.testrunner = 1.0.0
+zdaemon = 2.0.2
+ZODB3 = 3.8.1
+zodbcode = 3.4.0
+zope.annotation = 3.4.1
+zope.app.apidoc = 3.4.3
+zope.app.applicationcontrol = 3.4.3
+zope.app.appsetup = 3.4.1
+zope.app.authentication = 3.4.4
+zope.app.basicskin = 3.4.0
+zope.app.broken = 3.4.0
+zope.app.catalog = 3.5.1
+zope.app.component = 3.4.1
+zope.app.container = 3.5.6
+zope.app.content = 3.4.0
+zope.app.debug = 3.4.1
+zope.app.dependable = 3.4.0
+zope.app.error = 3.5.1
+zope.app.exception = 3.4.1
+zope.app.file = 3.4.4
+zope.app.folder = 3.4.0
+zope.app.form = 3.4.1
+zope.app.generations = 3.4.1
+zope.app.http = 3.4.1
+zope.app.i18n = 3.4.4
+zope.app.interface = 3.4.0
+zope.app.intid = 3.4.1
+zope.app.keyreference = 3.4.1
+zope.app.locales = 3.4.5
+zope.app.onlinehelp = 3.4.1
+zope.app.pagetemplate = 3.4.1
+zope.app.preference = 3.4.1
+zope.app.principalannotation = 3.4.0
+zope.app.publication = 3.4.3
+zope.app.publisher = 3.5.1
+zope.app.renderer = 3.4.0
+zope.app.rotterdam = 3.4.1
+zope.app.schema = 3.4.0
+zope.app.security = 3.5.2
+zope.app.securitypolicy = 3.4.6
+zope.app.server = 3.4.2
+zope.app.session = 3.5.1
+zope.app.skins = 3.4.0
+zope.app.testing = 3.4.3
+zope.app.tree = 3.4.0
+zope.app.twisted = 3.4.1
+zope.app.wsgi = 3.4.1
+zope.app.zapi = 3.4.0
+zope.app.zcmlfiles = 3.4.3
+zope.app.zopeappgenerations = 3.4.0
+zope.cachedescriptors = 3.4.1
+zope.component = 3.4.0
+zope.configuration = 3.4.0
+zope.contentprovider = 3.4.0
+zope.contenttype = 3.4.0
+zope.copypastemove = 3.4.0
+zope.datetime = 3.4.0
+zope.deferredimport = 3.4.0
+zope.deprecation = 3.4.0
+zope.dottedname = 3.4.2
+zope.dublincore = 3.4.0
+zope.error = 3.5.1
+zope.event = 3.4.0
+zope.exceptions = 3.4.0
+zope.filerepresentation = 3.4.0
+zope.formlib = 3.4.0
+zope.hookable = 3.4.0
+zope.i18n = 3.4.0
+zope.i18nmessageid = 3.4.3
+zope.index = 3.4.1
+zope.interface = 3.4.1
+zope.lifecycleevent = 3.4.0
+zope.location = 3.4.0
+zope.minmax = 1.1.0
+zope.modulealias = 3.4.0
+zope.pagetemplate = 3.4.0
+zope.proxy = 3.4.2
+zope.publisher = 3.4.6
+zope.schema = 3.4.0
+zope.security = 3.4.1
+zope.securitypolicy = 3.4.1
+zope.server = 3.4.3
+zope.session = 3.4.1
+zope.size = 3.4.0
+zope.structuredtext = 3.4.0
+zope.tal = 3.4.1
+zope.tales = 3.4.0
+zope.testbrowser = 3.4.2
+zope.testing = 3.7.6
+zope.thread = 3.4
+zope.traversing = 3.4.1
+zope.viewlet = 3.4.2
+



More information about the checkins mailing list