[Checkins] SVN: z3ext.layoutform/tags/1.3.0/ release tag
Nikolay Kim
fafhrd at datacom.kz
Mon Dec 22 12:57:40 EST 2008
Log message for revision 94249:
release tag
Changed:
A z3ext.layoutform/tags/1.3.0/
D z3ext.layoutform/tags/1.3.0/CHANGES.txt
A z3ext.layoutform/tags/1.3.0/CHANGES.txt
D z3ext.layoutform/tags/1.3.0/buildout.cfg
A z3ext.layoutform/tags/1.3.0/buildout.cfg
D z3ext.layoutform/tags/1.3.0/setup.py
A z3ext.layoutform/tags/1.3.0/setup.py
D z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py
A z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py
A z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt
D z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml
A z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml
D z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py
A z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py
-=-
Deleted: z3ext.layoutform/tags/1.3.0/CHANGES.txt
===================================================================
--- z3ext.layoutform/trunk/CHANGES.txt 2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/CHANGES.txt 2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,126 +0,0 @@
-=======
-CHANGES
-=======
-
-1.3.0 (Unreleased)
-------------------
-
-- Added subforms based on new z3ext.layout pagelet api
-
-- Fixed 'formError' status message
-
-- Use button.handler instead of buttonAndHandler
-
-- Use new pagelet api for rendering widgets
-
-
-1.2.8 (2008-11-21)
-------------------
-
-- Fixed 'formError' status message
-
-
-1.2.7 (2008-11-20)
-------------------
-
-- Use new z3ext.statusmessage api
-
-
-1.2.6 (2008-11-06)
-------------------
-
-- Use updated pagelet api for nameless pagelets
-
-
-1.2.5 (2008-10-22)
-------------------
-
-- Update translations
-
-
-1.2.4 (2008-10-20)
-------------------
-
-- Added support of display form
-
-- Added tranlsations: nl, ru
-
-
-1.2.3 (2008-10-14)
-------------------
-
-- Groups support restored
-
-- Use IPageletType for views
-
-
-1.2.2 (2008-10-08)
-------------------
-
-- Added extra views for form
-
-
-1.2.1 (2008-10-08)
-------------------
-
-- Show all form errors
-
-
-1.2.0 (2008-10-06)
-------------------
-
-- Added default css styles
-
-- Removed z3c packages dependencies
-
-- Use pagelets instead of macros
-
-
-1.1.2 (2008-09-26)
-------------------
-
-- Added group support
-
-- Return added object in createAndAdd method
-
-
-1.1.1 (2008-08-05)
-------------------
-
-- Fixed wrong `for` in label tag
-
-
-1.1.0 (2008-07-22)
-------------------
-
-- Remove cancel button from edit form
-
-
-1.0.1 (2008-06-02)
-------------------
-
-- Redirect to nextURL after success 'apply'
-
-
-1.0.0 (2008-05-13)
-------------------
-
-- Use `includeDependencies` instead `autoinclude`
-
-
-0.2.0 (2008-??-??)
-------------------
-
-- Use z3c.autoinclude
-
-
-0.1.1 (2008-01-22)
-------------------
-
-- Fixed missing import in add.py
-
-
-0.1 (2008-01-19)
-----------------
-
-- Initial release
Copied: z3ext.layoutform/tags/1.3.0/CHANGES.txt (from rev 94248, z3ext.layoutform/trunk/CHANGES.txt)
===================================================================
--- z3ext.layoutform/tags/1.3.0/CHANGES.txt (rev 0)
+++ z3ext.layoutform/tags/1.3.0/CHANGES.txt 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,126 @@
+=======
+CHANGES
+=======
+
+1.3.0 (2008-12-22)
+------------------
+
+- Added subforms based on new z3ext.layout pagelet api
+
+- Fixed 'formError' status message
+
+- Use button.handler instead of buttonAndHandler
+
+- Use new pagelet api for rendering widgets
+
+
+1.2.8 (2008-11-21)
+------------------
+
+- Fixed 'formError' status message
+
+
+1.2.7 (2008-11-20)
+------------------
+
+- Use new z3ext.statusmessage api
+
+
+1.2.6 (2008-11-06)
+------------------
+
+- Use updated pagelet api for nameless pagelets
+
+
+1.2.5 (2008-10-22)
+------------------
+
+- Update translations
+
+
+1.2.4 (2008-10-20)
+------------------
+
+- Added support of display form
+
+- Added tranlsations: nl, ru
+
+
+1.2.3 (2008-10-14)
+------------------
+
+- Groups support restored
+
+- Use IPageletType for views
+
+
+1.2.2 (2008-10-08)
+------------------
+
+- Added extra views for form
+
+
+1.2.1 (2008-10-08)
+------------------
+
+- Show all form errors
+
+
+1.2.0 (2008-10-06)
+------------------
+
+- Added default css styles
+
+- Removed z3c packages dependencies
+
+- Use pagelets instead of macros
+
+
+1.1.2 (2008-09-26)
+------------------
+
+- Added group support
+
+- Return added object in createAndAdd method
+
+
+1.1.1 (2008-08-05)
+------------------
+
+- Fixed wrong `for` in label tag
+
+
+1.1.0 (2008-07-22)
+------------------
+
+- Remove cancel button from edit form
+
+
+1.0.1 (2008-06-02)
+------------------
+
+- Redirect to nextURL after success 'apply'
+
+
+1.0.0 (2008-05-13)
+------------------
+
+- Use `includeDependencies` instead `autoinclude`
+
+
+0.2.0 (2008-??-??)
+------------------
+
+- Use z3c.autoinclude
+
+
+0.1.1 (2008-01-22)
+------------------
+
+- Fixed missing import in add.py
+
+
+0.1 (2008-01-19)
+----------------
+
+- Initial release
Deleted: z3ext.layoutform/tags/1.3.0/buildout.cfg
===================================================================
--- z3ext.layoutform/trunk/buildout.cfg 2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/buildout.cfg 2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,57 +0,0 @@
-[buildout]
-develop = .
- externals/z3ext.layout
-parts = test coverage-test coverage-report i18n i18nall i18ncheck i18ndude
-
-[test]
-recipe = zc.recipe.testrunner
-eggs = z3ext.layoutform [test]
-
-[coverage-test]
-recipe = zc.recipe.testrunner
-eggs = z3ext.layoutform [test]
-defaults = ['--coverage', '../../coverage']
-
-[coverage-report]
-recipe = zc.recipe.egg
-eggs = z3c.coverage
-scripts = coverage=coverage-report
-arguments = ('coverage', 'coverage/report')
-
-
-[i18n]
-recipe = z3c.recipe.i18n:i18n
-packages = z3ext.layoutform
-domain = z3ext.layoutform
-output = ${buildout:directory}/src/z3ext/layoutform/locales
-eggs = z3ext.layoutform [test]
-zcml =
- <configure i18n_domain="zope"
- xmlns:zcml="http://namespaces.zope.org/zcml"
- xmlns:browser="http://namespaces.zope.org/browser">
- <include package="zope.component" file="meta.zcml" />
- <include package="zope.app.component" file="meta.zcml" />
- <include package="zope.app.security" file="meta.zcml" />
- <include package="zope.app.pagetemplate" file="meta.zcml" />
- <include package="zope.app.security" />
- <include package="zope.app.zcmlfiles" />
- <include package="zope.app.authentication" />
-
- <include package="z3c.autoinclude" file="meta.zcml" />
- <include package="z3ext.layoutform" />
- </configure>
-
-[i18nall]
-recipe = buildout_script
-template_dir = ${buildout:directory}/scripts/
-template = i18nall.in
-
-[i18ncheck]
-recipe = buildout_script
-template_dir = ${buildout:directory}/scripts/
-template = i18ncheck.in
-
-[i18ndude]
-unzip = true
-recipe = zc.recipe.egg
-eggs = i18ndude
Copied: z3ext.layoutform/tags/1.3.0/buildout.cfg (from rev 94247, z3ext.layoutform/trunk/buildout.cfg)
===================================================================
--- z3ext.layoutform/tags/1.3.0/buildout.cfg (rev 0)
+++ z3ext.layoutform/tags/1.3.0/buildout.cfg 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,56 @@
+[buildout]
+develop = .
+parts = test coverage-test coverage-report i18n i18nall i18ncheck i18ndude
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = z3ext.layoutform [test]
+
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = z3ext.layoutform [test]
+defaults = ['--coverage', '../../coverage']
+
+[coverage-report]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+scripts = coverage=coverage-report
+arguments = ('coverage', 'coverage/report')
+
+
+[i18n]
+recipe = z3c.recipe.i18n:i18n
+packages = z3ext.layoutform
+domain = z3ext.layoutform
+output = ${buildout:directory}/src/z3ext/layoutform/locales
+eggs = z3ext.layoutform [test]
+zcml =
+ <configure i18n_domain="zope"
+ xmlns:zcml="http://namespaces.zope.org/zcml"
+ xmlns:browser="http://namespaces.zope.org/browser">
+ <include package="zope.component" file="meta.zcml" />
+ <include package="zope.app.component" file="meta.zcml" />
+ <include package="zope.app.security" file="meta.zcml" />
+ <include package="zope.app.pagetemplate" file="meta.zcml" />
+ <include package="zope.app.security" />
+ <include package="zope.app.zcmlfiles" />
+ <include package="zope.app.authentication" />
+
+ <include package="z3c.autoinclude" file="meta.zcml" />
+ <include package="z3ext.layoutform" />
+ </configure>
+
+[i18nall]
+recipe = buildout_script
+template_dir = ${buildout:directory}/scripts/
+template = i18nall.in
+
+[i18ncheck]
+recipe = buildout_script
+template_dir = ${buildout:directory}/scripts/
+template = i18ncheck.in
+
+[i18ndude]
+unzip = true
+recipe = zc.recipe.egg
+eggs = i18ndude
Deleted: z3ext.layoutform/tags/1.3.0/setup.py
===================================================================
--- z3ext.layoutform/trunk/setup.py 2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/setup.py 2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,70 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 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.
-#
-##############################################################################
-"""Setup for z3ext.layoutform package
-
-$Id$
-"""
-import sys, os
-from setuptools import setup, find_packages
-
-def read(*rnames):
- return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-
-version='1.3.0dev'
-
-
-setup(name='z3ext.layoutform',
- version=version,
- description="UI Skin for z3c.form based on z3ext.layout",
- long_description=(
- 'Detailed Documentation\n' +
- '======================\n'
- + '\n\n' +
- read('CHANGES.txt')
- ),
- classifiers=[
- 'Development Status :: 5 - Production/Stable',
- 'Environment :: Web Environment',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: Zope Public License',
- 'Programming Language :: Python',
- 'Natural Language :: English',
- 'Operating System :: OS Independent',
- 'Topic :: Internet :: WWW/HTTP',
- 'Framework :: Zope3'],
- author='Nikolay Kim',
- author_email='fafhrd91 at gmail.com',
- url='http://z3ext.net/',
- license='ZPL 2.1',
- packages=find_packages('src'),
- package_dir = {'':'src'},
- namespace_packages=['z3ext'],
- install_requires = ['setuptools',
- 'zope.publisher',
- 'zope.component',
- 'zope.pagetemplate',
- 'zope.app.pagetemplate',
- 'zope.i18n',
- 'zope.i18nmessageid',
- 'z3c.form',
- 'z3c.autoinclude',
- 'z3ext.layout>=1.5.6',
- 'z3ext.resource>=1.2.0',
- 'z3ext.resourcepackage>=1.2.0',
- 'z3ext.statusmessage',
- ],
- extras_require = dict(test=['zope.testing']),
- include_package_data = True,
- zip_safe = False
- )
Copied: z3ext.layoutform/tags/1.3.0/setup.py (from rev 94248, z3ext.layoutform/trunk/setup.py)
===================================================================
--- z3ext.layoutform/tags/1.3.0/setup.py (rev 0)
+++ z3ext.layoutform/tags/1.3.0/setup.py 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,70 @@
+##############################################################################
+#
+# Copyright (c) 2007 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.
+#
+##############################################################################
+"""Setup for z3ext.layoutform package
+
+$Id$
+"""
+import sys, os
+from setuptools import setup, find_packages
+
+def read(*rnames):
+ return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
+
+version='1.3.0'
+
+
+setup(name='z3ext.layoutform',
+ version=version,
+ description="UI Skin for z3c.form based on z3ext.layout",
+ long_description=(
+ 'Detailed Documentation\n' +
+ '======================\n'
+ + '\n\n' +
+ read('CHANGES.txt')
+ ),
+ classifiers=[
+ 'Development Status :: 5 - Production/Stable',
+ 'Environment :: Web Environment',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Zope Public License',
+ 'Programming Language :: Python',
+ 'Natural Language :: English',
+ 'Operating System :: OS Independent',
+ 'Topic :: Internet :: WWW/HTTP',
+ 'Framework :: Zope3'],
+ author='Nikolay Kim',
+ author_email='fafhrd91 at gmail.com',
+ url='http://z3ext.net/',
+ license='ZPL 2.1',
+ packages=find_packages('src'),
+ package_dir = {'':'src'},
+ namespace_packages=['z3ext'],
+ install_requires = ['setuptools',
+ 'zope.publisher',
+ 'zope.component',
+ 'zope.pagetemplate',
+ 'zope.app.pagetemplate',
+ 'zope.i18n',
+ 'zope.i18nmessageid',
+ 'z3c.form',
+ 'z3c.autoinclude',
+ 'z3ext.layout',
+ 'z3ext.resource',
+ 'z3ext.resourcepackage',
+ 'z3ext.statusmessage',
+ ],
+ extras_require = dict(test=['zope.testing']),
+ include_package_data = True,
+ zip_safe = False
+ )
Deleted: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/form.py 2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py 2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,149 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2007 Zope Foundation 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.
-#
-##############################################################################
-"""Support for Layout Templates
-
-$Id$
-"""
-from zope import interface
-from zope.component import getAdapters
-from zope.component import getMultiAdapter, queryMultiAdapter
-from zope.pagetemplate.interfaces import IPageTemplate
-
-from z3c.form import form
-from z3c.form.interfaces import IForm, IGroup, ISubForm
-
-from z3ext.layout.interfaces import IPagelet
-from z3ext.layout.pagelet import BrowserPagelet
-
-from interfaces import IPageletForm, IPageletSubform
-from interfaces import IPageletDisplayForm, IPageletFormView
-
-
-class PageletBaseForm(form.BaseForm, BrowserPagelet):
-
- __call__ = BrowserPagelet.__call__
-
- def render(self):
- if self.template is not None:
- return self.template()
- else:
- view = queryMultiAdapter((self, self.request), IPageletFormView)
- if view is not None:
- view.update()
- return view.render()
-
- raise LookupError("Can't find IPageletFormView view for this form.")
-
-
-class PageletForm(form.Form, PageletBaseForm):
- interface.implements(IPageletForm)
-
- label = u''
- description = u''
-
- forms = ()
- groups = ()
- subforms = ()
- views = ()
-
- render = PageletBaseForm.render
- __call__ = PageletBaseForm.__call__
-
- def extractData(self):
- data, errors = super(PageletForm, self).extractData()
- for form in self.groups:
- if not IForm.providedBy(form):
- continue
-
- formData, formErrors = form.extractData()
- data.update(formData)
- if formErrors:
- if errors:
- errors += formErrors
- else:
- errors = formErrors
-
- for form in self.subforms:
- if not IForm.providedBy(form):
- continue
-
- formData, formErrors = form.extractData()
- if formErrors:
- if errors:
- errors += formErrors
- else:
- errors = formErrors
-
- return data, errors
-
- def _loadSubforms(self):
- return [form for name, form in
- getAdapters((self.context, self, self.request), IPageletSubform)]
-
- def updateForms(self):
- forms = []
- groups = []
- subforms = []
- views = []
- for form in self._loadSubforms():
- form.update()
- if not form.isAvailable():
- continue
-
- if IGroup.providedBy(form):
- groups.append((form.weight, form.__name__, form))
- elif ISubForm.providedBy(form):
- subforms.append((form.weight, form.__name__, form))
- elif IPageletForm.providedBy(form):
- forms.append((form.weight, form.__name__, form))
- else:
- views.append((form.weight, form.__name__, form))
-
- groups.sort()
- self.groups = [form for weight, name, form in groups]
-
- subforms.sort()
- self.subforms = [form for weight, name, form in subforms]
-
- forms.sort()
- self.forms = [form for weight, name, form in forms]
-
- views.sort()
- self.views = [view for weight, name, view in views]
-
- def update(self):
- self.updateWidgets()
- self.updateActions()
- self.updateForms()
-
- if not IPageletSubform.providedBy(self):
- self.actions.execute()
-
- for form in self.subforms:
- form.postUpdate()
- for form in self.forms:
- form.postUpdate()
-
- def isAvailable(self):
- return True
-
- def postUpdate(self):
- self.actions.execute()
-
-
-class PageletDisplayForm(PageletForm, form.DisplayForm):
- interface.implements(IPageletDisplayForm)
-
- render = PageletForm.render
- __call__ = PageletForm.__call__
Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/form.py)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/form.py 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,137 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation 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.
+#
+##############################################################################
+"""Support for Layout Templates
+
+$Id$
+"""
+from zope import interface
+from zope.component import getAdapters
+from zope.component import getMultiAdapter, queryMultiAdapter
+from zope.pagetemplate.interfaces import IPageTemplate
+
+from z3c.form import form
+from z3c.form.interfaces import IForm, IGroup, ISubForm
+
+from z3ext.layout.interfaces import IPagelet
+from z3ext.layout.pagelet import BrowserPagelet
+
+from interfaces import IPageletForm, IPageletSubform
+from interfaces import IPageletDisplayForm, IPageletFormView
+
+
+class PageletBaseForm(form.BaseForm, BrowserPagelet):
+
+ __call__ = BrowserPagelet.__call__
+
+ def render(self):
+ if self.template is not None:
+ return self.template()
+ else:
+ view = queryMultiAdapter((self, self.request), IPageletFormView)
+ if view is not None:
+ view.update()
+ return view.render()
+
+ raise LookupError("Can't find IPageletFormView view for this form.")
+
+
+class PageletForm(form.Form, PageletBaseForm):
+ interface.implements(IPageletForm)
+
+ label = u''
+ description = u''
+
+ forms = ()
+ groups = ()
+ subforms = ()
+ views = ()
+
+ render = PageletBaseForm.render
+ __call__ = PageletBaseForm.__call__
+
+ def extractData(self):
+ data, errors = super(PageletForm, self).extractData()
+ for form in self.groups:
+ formData, formErrors = form.extractData()
+ data.update(formData)
+ if formErrors:
+ errors += formErrors
+
+ for form in self.subforms:
+ formData, formErrors = form.extractData()
+ if formErrors:
+ errors += formErrors
+
+ return data, errors
+
+ def _loadSubforms(self):
+ return [form for name, form in
+ getAdapters((self.context, self, self.request), IPageletSubform)]
+
+ def updateForms(self):
+ forms = []
+ groups = []
+ subforms = []
+ views = []
+ for form in self._loadSubforms():
+ form.update()
+ if not form.isAvailable():
+ continue
+
+ if IGroup.providedBy(form):
+ groups.append((form.weight, form.__name__, form))
+ elif ISubForm.providedBy(form):
+ subforms.append((form.weight, form.__name__, form))
+ elif IPageletForm.providedBy(form):
+ forms.append((form.weight, form.__name__, form))
+ else:
+ views.append((form.weight, form.__name__, form))
+
+ groups.sort()
+ self.groups = [form for weight, name, form in groups]
+
+ subforms.sort()
+ self.subforms = [form for weight, name, form in subforms]
+
+ forms.sort()
+ self.forms = [form for weight, name, form in forms]
+
+ views.sort()
+ self.views = [view for weight, name, view in views]
+
+ def update(self):
+ self.updateWidgets()
+ self.updateActions()
+ self.updateForms()
+
+ if not IPageletSubform.providedBy(self):
+ self.actions.execute()
+
+ for form in self.subforms:
+ form.postUpdate()
+ for form in self.forms:
+ form.postUpdate()
+
+ def isAvailable(self):
+ return True
+
+ def postUpdate(self):
+ self.actions.execute()
+
+
+class PageletDisplayForm(PageletForm, form.DisplayForm):
+ interface.implements(IPageletDisplayForm)
+
+ render = PageletForm.render
+ __call__ = PageletForm.__call__
Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/tests/form.txt)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/form.txt 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,298 @@
+===========
+PageletForm
+===========
+
+ >>> from zope import interface, component, schema
+ >>> from zope.app.testing.functional import getRootFolder
+ >>> root = getRootFolder()
+ >>> sm = component.getSiteManager()
+
+ >>> class IPerson(interface.Interface):
+ ...
+ ... name = schema.TextLine(
+ ... title=u'Name',
+ ... missing_value = u'',
+ ... required=True)
+ ...
+ ... age = schema.Int(
+ ... title=u'Age',
+ ... description=u"The person's age.",
+ ... min=0,
+ ... default=20,
+ ... required=False)
+
+ >>> from z3c.form import group, button
+ >>> from z3ext.layoutform import interfaces, subform
+ >>> from z3ext.layoutform import Fields, PageletForm
+
+ >>> class PersonForm(PageletForm):
+ ...
+ ... ignoreContext = True
+ ... fields = Fields(IPerson)
+ ...
+ ... @button.buttonAndHandler(u'Save', name='save',
+ ... provides=interfaces.ISaveAction)
+ ... def handleSave(self, action):
+ ... pass
+
+Let's create a request:
+
+ >>> from z3c.form.testing import TestRequest
+ >>> request = TestRequest()
+
+And support the layout form layer for our request:
+
+ >>> from z3ext.layoutform.interfaces import ILayoutFormLayer
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+Now create the form:
+
+ >>> form = PersonForm(root, request)
+
+Let's now render the page. Note the output doesn't contain the layout template:
+
+ >>> form.update()
+ >>> print form.render()
+ <div class="z-form z-form-standard"><form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" name="form" id="form">
+ <div class="z-form-fieldset">
+ <div class="z-form-field">
+ <label for="form-widgets-name" title="">Name</label>
+ <span class="z-form-fieldRequired"> </span>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ <div class="z-form-field">
+ <label for="form-widgets-age" title="The person's age.">Age</label>
+ <div class="z-form-help">The person's age.</div>
+ <div><input type="text" id="form-widgets-age"
+ name="form.widgets.age" class="text-widget int-field"
+ value="20" />
+ </div>
+ </div>
+ </div>
+ <div class="z-form-controls">
+ <span>
+ <hr />
+ <input type="submit" id="form-buttons-save"
+ name="form.buttons.save"
+ class="z-form-savebutton button-field" value="Save" />
+ </span>
+ </div>
+ </form>
+ </div>
+
+Subforms
+
+ >>> class IPersonEducation(interface.Interface):
+ ...
+ ... education = schema.TextLine(
+ ... title = u'Education',
+ ... default = u'',
+ ... required = False)
+
+Group
+
+
+ >>> class PersonEducation(group.Group):
+ ... interface.implements(interfaces.IPageletSubform)
+ ...
+ ... weight = 10
+ ... fields = Fields(IPersonEducation)
+ ... ignoreContext = True
+ ...
+ ... def __init__(self, context, form, request):
+ ... super(PersonEducation, self).__init__(context, request, form)
+ ...
+ ... def isAvailable(self):
+ ... return True
+ ...
+ ... def postUpdate(self):
+ ... pass
+
+ >>> form.groups
+ []
+
+ >>> component.getSiteManager().registerAdapter(
+ ... PersonEducation, (interface.Interface, PersonForm, interface.Interface),
+ ... interfaces.IPageletSubform, name='edu')
+
+ >>> form.update()
+
+ >>> print form.groups
+ [<PersonEducation ...>]
+
+ >>> print form.render()
+ <div class="z-form z-form-standard"><form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" name="form" id="form">
+ <div class="z-form-fieldset">
+ <div class="z-form-field">
+ <label for="form-widgets-name" title="">Name</label>
+ <span class="z-form-fieldRequired"> </span>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ <div class="z-form-field">
+ <label for="form-widgets-age" title="The person's age.">Age</label>
+ <div class="z-form-help">The person's age.</div>
+ <div><input type="text" id="form-widgets-age"
+ name="form.widgets.age" class="text-widget int-field"
+ value="20" />
+ </div>
+ </div>
+ </div>
+ <div class="z-form-group">
+ <div class="z-form-fieldset">
+ <div class="z-form-field">
+ <label for="form-widgets-education" title="">Education</label>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-education"
+ name="form.widgets.education"
+ class="text-widget textline-field" value="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="z-form-controls">
+ <span>
+ <hr />
+ <input type="submit" id="form-buttons-save"
+ name="form.buttons.save"
+ class="z-form-savebutton button-field" value="Save" />
+ </span>
+ </div>
+ </form>
+ </div>
+
+Subform
+
+ >>> class IPersonInfo(interface.Interface):
+ ...
+ ... info = schema.Text(
+ ... title=u'Information',
+ ... default = u'',
+ ... required=False)
+
+ >>> class PersonInfo(subform.PageletEditSubForm):
+ ... interface.implements(interfaces.IPageletSubform)
+ ...
+ ... weight = 10
+ ... fields = Fields(IPersonInfo)
+ ... ignoreContext = True
+ ...
+ ... def getContent(self):
+ ... return {}
+
+ >>> form.subforms
+ []
+
+ >>> component.getSiteManager().registerAdapter(
+ ... PersonInfo, (interface.Interface, PersonForm, interface.Interface),
+ ... interfaces.IPageletSubform, name='info')
+
+ >>> form.update()
+
+ >>> print form.subforms
+ [<PersonInfo ...>]
+
+ >>> print form.render()
+ <div class="z-form z-form-standard">...
+ ...
+ <label for="form-widgets-info" title="">Information</label>
+ <div class="z-form-help"></div>
+ <div><textarea id="form-widgets-info" name="form.widgets.info"
+ class="textarea-widget text-field" rows="5"></textarea>
+ </div>
+ ...
+ </div>
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': 'University',
+ ... 'form.widgets.info': 'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+ >>> form.extractData()
+ ({'age': 50}, (<ErrorViewSnippet for RequiredMissing>, <ErrorViewSnippet for WrongType>, <ErrorViewSnippet for WrongType>))
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': u'University',
+ ... 'form.widgets.info': u'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+ >>> data = form.extractData()
+ >>> print form.render()
+ <div class="z-form z-form-standard">...
+ ...
+ <div class="z-form-field error">
+ <label for="form-widgets-name" title="">Name</label>
+ <span class="z-form-fieldRequired"> </span>
+ <div class="error">Required input is missing.</div>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ ...
+ </div>
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'Nikolay',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': u'University',
+ ... 'form.widgets.info': u'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+ >>> form.extractData()
+ ({'age': 50, 'education': u'University', 'name': u'Nikolay'}, ())
+
+
+ >>> class IItem(interface.Interface):
+ ...
+ ... title = schema.TextLine(
+ ... title = u'Title',
+ ... required = True)
+
+
+ >>> class ItemForm(PageletForm):
+ ... prefix = 'title.'
+ ... fields = Fields(IItem)
+ ... ignoreContext = True
+ ... weight = 0
+
+ >>> component.getSiteManager().registerAdapter(
+ ... ItemForm, (interface.Interface, PersonForm, interface.Interface),
+ ... interfaces.IPageletSubform, name='item')
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'Nikolay',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': u'University',
+ ... 'form.widgets.info': u'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+
+ >>> form.forms
+ [<ItemForm object ...>]
+
Deleted: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml 2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml 2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,14 +0,0 @@
-<configure
- xmlns="http://namespaces.zope.org/zope">
-
- <include package="zope.component" file="meta.zcml" />
- <include package="zope.app.component" file="meta.zcml" />
- <include package="zope.app.security" file="meta.zcml" />
- <include package="zope.app.pagetemplate" file="meta.zcml" />
- <include package="zope.app.security" />
- <include package="zope.app.zcmlfiles" />
-
- <include package="z3c.autoinclude" file="meta.zcml" />
- <include package="z3ext.layoutform" />
-
-</configure>
Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/ftesting.zcml 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,15 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope">
+
+ <include package="zope.component" file="meta.zcml" />
+ <include package="zope.app.component" file="meta.zcml" />
+ <include package="zope.app.security" file="meta.zcml" />
+ <include package="zope.app.pagetemplate" file="meta.zcml" />
+ <include package="zope.app.security" />
+ <include package="zope.app.zcmlfiles" />
+
+ <include package="z3c.autoinclude" file="meta.zcml" />
+ <include package="z3ext.layoutform" />
+ <adapter factory="z3ext.statusmessage.tests.tests.getSession" />
+
+</configure>
Deleted: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py 2008-12-22 12:46:01 UTC (rev 94243)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py 2008-12-22 17:57:35 UTC (rev 94249)
@@ -1,33 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2008 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.
-#
-##############################################################################
-"""
-
-$Id: 2007-12-12 12:27:02Z fafhrd $
-"""
-import unittest, os
-from zope.testing import doctest
-from zope.app.testing.functional import ZCMLLayer, FunctionalDocFileSuite
-
-layoutformLayer = ZCMLLayer(
- os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
- __name__, 'layoutformLayer', allow_teardown=True)
-
-
-def test_suite():
- tests = FunctionalDocFileSuite(
- "tests.txt",
- optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
- tests.layer = layoutformLayer
-
- return unittest.TestSuite((tests,))
Copied: z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py (from rev 94247, z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py)
===================================================================
--- z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py (rev 0)
+++ z3ext.layoutform/tags/1.3.0/src/z3ext/layoutform/tests/tests.py 2008-12-22 17:57:35 UTC (rev 94249)
@@ -0,0 +1,38 @@
+##############################################################################
+#
+# Copyright (c) 2008 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.
+#
+##############################################################################
+"""
+
+$Id: 2007-12-12 12:27:02Z fafhrd $
+"""
+import unittest, os
+from zope.testing import doctest
+from zope.app.testing.functional import ZCMLLayer, FunctionalDocFileSuite
+
+layoutformLayer = ZCMLLayer(
+ os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
+ __name__, 'layoutformLayer', allow_teardown=True)
+
+
+def test_suite():
+ form = FunctionalDocFileSuite(
+ "form.txt",
+ optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
+ form.layer = layoutformLayer
+
+ tests = FunctionalDocFileSuite(
+ "tests.txt",
+ optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
+ tests.layer = layoutformLayer
+
+ return unittest.TestSuite((form, tests,))
More information about the Checkins
mailing list