[Checkins] SVN: z3ext.layoutform/tags/1.2.1/ release tag

Nikolay Kim fafhrd at datacom.kz
Tue Oct 7 15:47:01 EDT 2008


Log message for revision 91881:
  release tag

Changed:
  A   z3ext.layoutform/tags/1.2.1/
  D   z3ext.layoutform/tags/1.2.1/CHANGES.txt
  A   z3ext.layoutform/tags/1.2.1/CHANGES.txt
  U   z3ext.layoutform/tags/1.2.1/setup.py
  D   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py
  D   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml
  D   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/form.css
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.pt
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.py
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/styles.css
  D   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml
  D   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/error.py
  D   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py
  A   z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py

-=-
Copied: z3ext.layoutform/tags/1.2.1 (from rev 91853, z3ext.layoutform/trunk)

Deleted: z3ext.layoutform/tags/1.2.1/CHANGES.txt
===================================================================
--- z3ext.layoutform/trunk/CHANGES.txt	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/CHANGES.txt	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,62 +0,0 @@
-=======
-CHANGES
-=======
-
-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.2.1/CHANGES.txt (from rev 91880, z3ext.layoutform/trunk/CHANGES.txt)
===================================================================
--- z3ext.layoutform/tags/1.2.1/CHANGES.txt	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/CHANGES.txt	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,68 @@
+=======
+CHANGES
+=======
+
+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

Modified: z3ext.layoutform/tags/1.2.1/setup.py
===================================================================
--- z3ext.layoutform/trunk/setup.py	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/setup.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -21,7 +21,7 @@
 def read(*rnames):
     return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
 
-version='1.2.1dev'
+version='1.2.1'
 
 
 setup(name='z3ext.layoutform',

Deleted: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/add.py	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,93 +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.traversing.browser import absoluteURL
-from zope.app.container.interfaces import IAdding
-from zope.app.container.interfaces import IWriteContainer
-from zope.app.container.interfaces import IContainerNamesContainer
-
-from z3c.form import form, button
-from z3ext.statusmessage.interfaces import IStatusMessage
-
-from form import PageletForm
-from interfaces import _, IPageletAddForm, IAddButton, ICancelButton
-
-
-class PageletAddForm(form.AddForm, PageletForm):
-    interface.implements(IPageletAddForm)
-
-    render = PageletForm.render
-    __call__ = PageletForm.__call__
-
-    _addedObject = None
-
-    formCancelMessage = _(u'Action has been canceled.')
-
-    @button.buttonAndHandler(_(u'Add'), name='add', provides=IAddButton)
-    def handleAdd(self, action):
-        data, errors = self.extractData()
-
-        if errors:
-            IStatusMessage(self.request).add(self.formErrorsMessage, 'warning')
-        else:
-            obj = self.createAndAdd(data)
-
-            if obj is not None:
-                self._addedObject = obj
-                self._finishedAdd = True
-                self.redirect(self.nextURL())
-
-    @button.buttonAndHandler(_(u'Cancel'), name='cancel', provides=ICancelButton)
-    def handleCancel(self, action):
-        self._finishedAdd = True
-        self.redirect(self.cancelURL())
-        IStatusMessage(self.request).add(self.formCancelMessage)
-
-    def createAndAdd(self, data):
-        obj = self.create(data)
-        addedObj = self.add(obj)
-        if addedObj is not None:
-            return addedObj
-        return obj
-
-    def nextURL(self):
-        if self._addedObject is None:
-            return '%s/@@SelectedManagementView.html'%\
-                   absoluteURL(self.context, self.request)
-        else:
-            return absoluteURL(self._addedObject, self.request) + '/'
-
-    def cancelURL(self):
-        context = self.context
-
-        if IAdding.providedBy(context):
-            return '%s/'%absoluteURL(context.context, self.request)
-        else:
-            return '%s/'%absoluteURL(context, self.request)
-
-    def nameAllowed(self):
-        """Return whether names can be input by the user."""
-        context = self.context
-
-        if IAdding.providedBy(context):
-            context = context.context
-
-        if IWriteContainer.providedBy(context):
-            return not IContainerNamesContainer.providedBy(context)
-        else:
-            return False

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/add.py)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/add.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,97 @@
+##############################################################################
+#
+# 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.traversing.browser import absoluteURL
+from zope.app.container.interfaces import IAdding
+from zope.app.container.interfaces import IWriteContainer
+from zope.app.container.interfaces import IContainerNamesContainer
+
+from z3c.form import form, button
+from z3ext.statusmessage.interfaces import IStatusMessage
+
+from form import PageletForm
+from interfaces import _, IPageletAddForm, IAddButton, ICancelButton
+
+from zope.proxy import removeAllProxies
+
+
+class PageletAddForm(form.AddForm, PageletForm):
+    interface.implements(IPageletAddForm)
+
+    render = PageletForm.render
+    __call__ = PageletForm.__call__
+
+    _addedObject = None
+
+    formCancelMessage = _(u'Action has been canceled.')
+
+    @button.buttonAndHandler(_(u'Add'), name='add', provides=IAddButton)
+    def handleAdd(self, action):
+        data, errors = self.extractData()
+
+        if errors:
+            IStatusMessage(self.request).add(
+                (self.formErrorsMessage,) + errors, 'formError')
+        else:
+            obj = self.createAndAdd(data)
+
+            if obj is not None:
+                self._addedObject = obj
+                self._finishedAdd = True
+                self.redirect(self.nextURL())
+
+    @button.buttonAndHandler(
+        _(u'Cancel'), name='cancel', provides=ICancelButton)
+    def handleCancel(self, action):
+        self._finishedAdd = True
+        self.redirect(self.cancelURL())
+        IStatusMessage(self.request).add(self.formCancelMessage)
+
+    def createAndAdd(self, data):
+        obj = self.create(data)
+        addedObj = self.add(obj)
+        if addedObj is not None:
+            return addedObj
+        return obj
+
+    def nextURL(self):
+        if self._addedObject is None:
+            return '%s/@@SelectedManagementView.html'%\
+                   absoluteURL(self.context, self.request)
+        else:
+            return absoluteURL(self._addedObject, self.request) + '/'
+
+    def cancelURL(self):
+        context = self.context
+
+        if IAdding.providedBy(context):
+            return '%s/'%absoluteURL(context.context, self.request)
+        else:
+            return '%s/'%absoluteURL(context, self.request)
+
+    def nameAllowed(self):
+        """Return whether names can be input by the user."""
+        context = self.context
+
+        if IAdding.providedBy(context):
+            context = context.context
+
+        if IWriteContainer.providedBy(context):
+            return not IContainerNamesContainer.providedBy(context)
+        else:
+            return False

Deleted: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/browser/configure.zcml	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,136 +0,0 @@
-<configure 
-   xmlns="http://namespaces.zope.org/zope"
-   xmlns:z3ext="http://namespaces.zope.org/z3ext">
-
-  <!-- buttons -->
-  <adapter 
-     provides="z3c.form.interfaces.IButtonAction"
-     factory=".buttons.ButtonAction" />
-
-  <adapter 
-     provides="z3c.form.interfaces.IButtonAction"
-     factory=".buttons.AddButtonAction" />
-
-  <adapter 
-     provides="z3c.form.interfaces.IButtonAction"
-     factory=".buttons.SaveButtonAction" />
-
-  <adapter 
-     provides="z3c.form.interfaces.IButtonAction"
-     factory=".buttons.CancelButtonAction" />
-
-  <!-- TextArea widget -->
-  <class class=".textarea.TextAreaWidget">
-    <require
-       permission="zope.Public"
-       interface="z3c.form.interfaces.ITextAreaWidget" />
-  </class>
-  
-  <adapter 
-     for="zope.schema.interfaces.IText
-          ..interfaces.ILayoutFormLayer"
-     factory=".textarea.TextAreaFieldWidget" />
-
-  <!-- templates -->
-  <z3ext:pagelet
-     template="form.pt"
-     for="..interfaces.IPageletForm"
-     layer="..interfaces.ILayoutFormLayer"
-     provides="..interfaces.IPageletFormView"
-     permission="zope.Public" />
-
-  <z3ext:pagelet
-     template="formadd.pt"
-     for="..interfaces.IPageletAddForm"
-     layer="..interfaces.ILayoutFormLayer"
-     provides="..interfaces.IPageletFormView"
-     permission="zope.Public" />
-
-  <z3ext:pagelet
-     template="formedit.pt"
-     for="..interfaces.IPageletEditForm"
-     layer="..interfaces.ILayoutFormLayer"
-     provides="..interfaces.IPageletFormView"
-     permission="zope.Public" />
-
-  <z3ext:pagelet
-     template="subform.pt"
-     for="z3c.form.interfaces.ISubForm"
-     layer="..interfaces.ILayoutFormLayer"
-     provides="..interfaces.IPageletFormView"
-     permission="zope.Public" />
-
-  <z3ext:pagelet
-     template="formgroup.pt"
-     for="z3c.form.group.Group"
-     layer="..interfaces.ILayoutFormLayer"
-     provides="..interfaces.IPageletFormView"
-     permission="zope.Public" />
-
-  <!-- Error View -->
-  <z3ext:pagelet
-     for="z3c.form.interfaces.IErrorViewSnippet"
-     template="error.pt"
-     layer="..interfaces.ILayoutFormLayer"
-     permission="zope.Public" />
-
-  <!-- form view -->
-  <z3ext:pagelet
-     for="z3c.form.interfaces.IForm"
-     template="formview.pt"
-     provides="z3ext.layoutform.browser.interfaces.IForm"
-     layer="..interfaces.ILayoutFormLayer"
-     permission="zope.Public" />
-
-  <!-- viewspace view -->
-  <z3ext:pagelet
-     for="..interfaces.IPageletForm"
-     template="formviewspace.pt"
-     provides="z3ext.layoutform.browser.interfaces.IViewspace"
-     layer="..interfaces.ILayoutFormLayer"
-     permission="zope.Public" />
-
-  <!-- form buttons -->
-  <z3ext:pagelet
-     for="..interfaces.IPageletForm"
-     template="formbuttons.pt"
-     provides="z3ext.layoutform.browser.interfaces.IFormButtons"
-     layer="..interfaces.ILayoutFormLayer"
-     permission="zope.Public" />
-
-  <!-- widget view -->
-  <z3ext:pagelet
-     for="z3c.form.interfaces.IWidget"
-     template="widget.pt"
-     provides="z3ext.layoutform.browser.interfaces.IWidget"
-     layer="..interfaces.ILayoutFormLayer"
-     permission="zope.Public" />
-
-  <!-- add form buttons -->
-  <z3ext:pagelet
-     for="..interfaces.IPageletAddForm"
-     template="formaddbuttons.pt"
-     provides="z3ext.layoutform.browser.interfaces.IFormButtons"
-     layer="..interfaces.ILayoutFormLayer"
-     permission="zope.Public" />
-
-  <!-- styles -->
-  <z3ext:resourceinclude
-     name="z3ext-layoutform.css"
-     library="z3ext"
-     type="stylesheet"
-     file="form.css" filetype="zrt" />
-
-  <z3ext:resource
-     file="required.gif"
-     name="z3ext-layoutform-required.gif" />
-
-  <z3ext:resource
-     file="linkOpaque.gif"
-     name="z3ext-layoutform-linkOpaque.gif" />
-
-  <z3ext:resource
-     file="linkTransparent.gif"
-     name="z3ext-layoutform-linkTransparent.gif" />
-
-</configure>

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/browser/configure.zcml)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/configure.zcml	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,139 @@
+<configure 
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:z3ext="http://namespaces.zope.org/z3ext">
+
+  <!-- buttons -->
+  <adapter 
+     provides="z3c.form.interfaces.IButtonAction"
+     factory=".buttons.ButtonAction" />
+
+  <adapter 
+     provides="z3c.form.interfaces.IButtonAction"
+     factory=".buttons.AddButtonAction" />
+
+  <adapter 
+     provides="z3c.form.interfaces.IButtonAction"
+     factory=".buttons.SaveButtonAction" />
+
+  <adapter 
+     provides="z3c.form.interfaces.IButtonAction"
+     factory=".buttons.CancelButtonAction" />
+
+  <!-- TextArea widget -->
+  <class class=".textarea.TextAreaWidget">
+    <require
+       permission="zope.Public"
+       interface="z3c.form.interfaces.ITextAreaWidget" />
+  </class>
+  
+  <adapter 
+     for="zope.schema.interfaces.IText
+          ..interfaces.ILayoutFormLayer"
+     factory=".textarea.TextAreaFieldWidget" />
+
+  <!-- templates -->
+  <z3ext:pagelet
+     template="form.pt"
+     for="..interfaces.IPageletForm"
+     layer="..interfaces.ILayoutFormLayer"
+     provides="..interfaces.IPageletFormView"
+     permission="zope.Public" />
+
+  <z3ext:pagelet
+     template="formadd.pt"
+     for="..interfaces.IPageletAddForm"
+     layer="..interfaces.ILayoutFormLayer"
+     provides="..interfaces.IPageletFormView"
+     permission="zope.Public" />
+
+  <z3ext:pagelet
+     template="formedit.pt"
+     for="..interfaces.IPageletEditForm"
+     layer="..interfaces.ILayoutFormLayer"
+     provides="..interfaces.IPageletFormView"
+     permission="zope.Public" />
+
+  <z3ext:pagelet
+     template="subform.pt"
+     for="z3c.form.interfaces.ISubForm"
+     layer="..interfaces.ILayoutFormLayer"
+     provides="..interfaces.IPageletFormView"
+     permission="zope.Public" />
+
+  <z3ext:pagelet
+     template="formgroup.pt"
+     for="z3c.form.group.Group"
+     layer="..interfaces.ILayoutFormLayer"
+     provides="..interfaces.IPageletFormView"
+     permission="zope.Public" />
+
+  <!-- Error View -->
+  <z3ext:pagelet
+     for="z3c.form.interfaces.IErrorViewSnippet"
+     template="error.pt"
+     layer="..interfaces.ILayoutFormLayer"
+     permission="zope.Public" />
+
+  <!-- form view -->
+  <z3ext:pagelet
+     for="z3c.form.interfaces.IForm"
+     template="formview.pt"
+     provides="z3ext.layoutform.browser.interfaces.IForm"
+     layer="..interfaces.ILayoutFormLayer"
+     permission="zope.Public" />
+
+  <!-- viewspace view -->
+  <z3ext:pagelet
+     for="..interfaces.IPageletForm"
+     template="formviewspace.pt"
+     provides="z3ext.layoutform.browser.interfaces.IViewspace"
+     layer="..interfaces.ILayoutFormLayer"
+     permission="zope.Public" />
+
+  <!-- form buttons -->
+  <z3ext:pagelet
+     for="..interfaces.IPageletForm"
+     template="formbuttons.pt"
+     provides="z3ext.layoutform.browser.interfaces.IFormButtons"
+     layer="..interfaces.ILayoutFormLayer"
+     permission="zope.Public" />
+
+  <!-- widget view -->
+  <z3ext:pagelet
+     for="z3c.form.interfaces.IWidget"
+     template="widget.pt"
+     provides="z3ext.layoutform.browser.interfaces.IWidget"
+     layer="..interfaces.ILayoutFormLayer"
+     permission="zope.Public" />
+
+  <!-- add form buttons -->
+  <z3ext:pagelet
+     for="..interfaces.IPageletAddForm"
+     template="formaddbuttons.pt"
+     provides="z3ext.layoutform.browser.interfaces.IFormButtons"
+     layer="..interfaces.ILayoutFormLayer"
+     permission="zope.Public" />
+
+  <!-- status message -->
+  <adapter factory=".message.Message" />
+
+  <!-- styles -->
+  <z3ext:resourceinclude
+     name="z3ext-layoutform.css"
+     library="z3ext"
+     type="stylesheet"
+     file="styles.css" filetype="zrt" />
+
+  <z3ext:resource
+     file="required.gif"
+     name="z3ext-layoutform-required.gif" />
+
+  <z3ext:resource
+     file="linkOpaque.gif"
+     name="z3ext-layoutform-linkOpaque.gif" />
+
+  <z3ext:resource
+     file="linkTransparent.gif"
+     name="z3ext-layoutform-linkTransparent.gif" />
+
+</configure>

Deleted: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/form.css
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/browser/form.css	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/form.css	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,187 +0,0 @@
-/* zrt-cssregistry: */
-
- at media all {
-
-  .z-form {
-  }
-
-  .z-page .z-form-add,
-  .z-page .z-form-edit,
-  .page .z-form-add,
-  .page .z-form-edit {
-    border: borderWidth borderStyle globalExtraBorderColor;
-    margin-top: 0em;
-    padding: 1em;
-    background: contentBackgroundColor;
-  }
-  
-  .z-frame .z-form-edit,
-  .z-frame .z-form-standard,
-  .z-topframe .z-form-standard,
-  .frame .z-form-edit,
-  .frame .z-form-standard,
-  .topframe .z-form-standard,
-  #z-context-view .z-form-edit,
-  #z-context-view .z-form-standard {
-    border: none;
-    padding: 0em;
-  }
-
-  .z-add-form {
-    padding: 1em;
-  }
-
-  .z-form-description { 
-    color: discreetColor;
-    margin-bottom: 1.5em;
-    font-size: 90%;
-  }
-  
-  .z-form-field .z-form-description {
-    color: discreetColor;
-    font-size: fontSmallSize;
-    font-weight: normal;
-    margin-bottom: 1.5em;
-  }
-  
-  .z-form-fieldset {
-    margin-bottom: 1em;
-    color: fontColor !important;
-    background-color: backgroundColor;
-    padding: 0.5em 1em 0.5em 1em;
-  }
-  
-  .z-form-fieldset.last {
-    margin-bottom: 0em;
-  }
-  
-  .z-form form:first-child > .z-form-fieldset {
-    margin-top: 0em;
-  }
-  
-  .z-form-fieldset ul a {
-    text-decoration: none;
-    border-bottom: borderWidth dotted discreetColor;
-  }
-  
-  .z-form-fieldset label {
-    font-weight: normal;
-  }
-  
-  .z-form-fieldset h2 { 
-    font-weight: bold;
-  }
-  
-  .z-form-fieldset .header {
-    border-bottom: borderWidth borderStyle globalBorderColor;
-  }
-  
-  /* The edit form elements */
-  .z-form-field {
-    margin: 0 1em 1em 0;
-  }
-  
-  .z-form-field .z-form-field {
-    margin: 1em 0 0 0;
-  }
-  
-  .z-form-field label {
-    font-size: 100%;
-  }
-  
-  .z-form-fieldRequired {
-    background: url(z3ext-layoutform-required.gif) center left no-repeat;
-    padding: 0 0 0 8px;
-    color: backgroundColor;
-  }
-  
-  .z-form-fieldUploadFile {
-    text-align: right; 
-    margin-right: 0.75em;
-    display: none;
-  }
-  
-  .z-form-fieldTextFormat {
-    text-align: right;
-    margin-right: 0.75em
-  }
-  
-  .z-form-help {
-    font-size: fontSmallSize;
-    color: discreetColor;
-    margin: 0 0 0.2em 0;
-  }
-  
-  .z-form-help:hover {
-    color: fontColor;
-    cursor: default;
-  }
-  
-  .z-form-field.error {
-    /* Class for error indication in forms */
-    background-color: notifyBackgroundColor;
-    border: borderWidth borderStyle notifyBorderColor;
-    padding: 1em;
-    margin: 0 0 1em 0;
-    width: 95%;
-  }
-  
-  .z-form-field.error .x-form-fieldRequired {
-    color: notifyBackgroundColor;
-  }
-  
-  .z-form-controls {
-    clear: both;
-    margin-top: 1em;
-  }
-  
-  
-  .z-form-button {
-    background: transparent url(z3ext-layoutform-linkTransparent.gif) no-repeat;
-    background-position: 5px center;
-    cursor: pointer;
-    font-size: fontSmallSize;
-    padding: 1px 1px 1px 14px;
-  }
-  
-  .z-form-standalonebtn {
-    background: globalBackgroundColor url(z3ext-layoutform-linkOpaque.gif) no-repeat;
-    background-position: 5px center;
-    cursor: pointer;
-    font-size: fontSmallSize;
-    padding: 1px 1px 1px 14px;
-  }
-  
-  .z-form-addbutton {
-    background: transparent url(z3ext-layoutform-linkTransparent.gif) no-repeat;
-    background-position: 5px center;
-    cursor: pointer;
-    font-size: fontSmallSize;
-    padding: 1px 1px 1px 14px;
-  }
-  
-  .z-form-savebutton {
-    background: transparent url(z3ext-layoutform-linkTransparent.gif) no-repeat;
-    background-position: 5px center;
-    cursor: pointer;
-    font-size: fontSmallSize;
-    padding: 1px 1px 1px 14px;
-  }
-  
-  .z-form-cancelbutton {
-    background: globalBackgroundColor url(z3ext-layoutform-linkOpaque.gif) no-repeat;
-    background-position: 5px center;
-    cursor: pointer;
-    font-size: fontSmallSize;
-    padding: 1px 1px 1px 14px;
-  }
-  
-  .z-form-removebutton {
-    background: globalBackgroundColor url(z3ext-layoutform-linkOpaque.gif) no-repeat;
-    background-position: 5px center;
-    cursor: pointer;
-    font-size: fontSmallSize;
-    padding: 1px 1px 1px 14px;
-  }
-
-}
\ No newline at end of file

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.pt (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/browser/message.pt)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.pt	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.pt	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,11 @@
+<div class="statusWarningMessage">
+  <tal:block content="context/message" />
+  <tal:block condition="context/errors">
+    <br />
+    <ul>
+      <li tal:repeat="err context/errors"
+	  tal:content="structure err/render">
+      </li>
+    </ul>
+  </tal:block>
+</div>

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.py (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/browser/message.py)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/message.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,35 @@
+##############################################################################
+#
+# 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 $
+"""
+from zope import component, interface
+from zope.app.pagetemplate import ViewPageTemplateFile
+from z3ext.statusmessage.interfaces import IMessageView
+from z3ext.layoutform.interfaces import IFormErrorStatusMessage
+
+
+class Message(object):
+    interface.implements(IMessageView)
+    component.adapts(IFormErrorStatusMessage, interface.Interface)
+
+    index = ViewPageTemplateFile('message.pt')
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+
+    def render(self):
+        return self.index()

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/styles.css (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/browser/styles.css)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/styles.css	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/browser/styles.css	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,187 @@
+/* zrt-cssregistry: */
+
+ at media all {
+
+  .z-form {
+  }
+
+  .z-page .z-form-add,
+  .z-page .z-form-edit,
+  .page .z-form-add,
+  .page .z-form-edit {
+    border: borderWidth borderStyle globalExtraBorderColor;
+    margin-top: 0em;
+    padding: 1em;
+    background: contentBackgroundColor;
+  }
+  
+  .z-frame .z-form-edit,
+  .z-frame .z-form-standard,
+  .z-topframe .z-form-standard,
+  .frame .z-form-edit,
+  .frame .z-form-standard,
+  .topframe .z-form-standard,
+  #z-context-view .z-form-edit,
+  #z-context-view .z-form-standard {
+    border: none;
+    padding: 0em;
+  }
+
+  .z-add-form {
+    padding: 1em;
+  }
+
+  .z-form-description { 
+    color: discreetColor;
+    margin-bottom: 1.5em;
+    font-size: 90%;
+  }
+  
+  .z-form-field .z-form-description {
+    color: discreetColor;
+    font-size: fontSmallSize;
+    font-weight: normal;
+    margin-bottom: 1.5em;
+  }
+  
+  .z-form-fieldset {
+    margin-bottom: 1em;
+    color: fontColor !important;
+    background-color: backgroundColor;
+    padding: 0.5em 1em 0.5em 1em;
+  }
+  
+  .z-form-fieldset.last {
+    margin-bottom: 0em;
+  }
+  
+  .z-form form:first-child > .z-form-fieldset {
+    margin-top: 0em;
+  }
+  
+  .z-form-fieldset ul a {
+    text-decoration: none;
+    border-bottom: borderWidth dotted discreetColor;
+  }
+  
+  .z-form-fieldset label {
+    font-weight: normal;
+  }
+  
+  .z-form-fieldset h2 { 
+    font-weight: bold;
+  }
+  
+  .z-form-fieldset .header {
+    border-bottom: borderWidth borderStyle globalBorderColor;
+  }
+  
+  /* The edit form elements */
+  .z-form-field {
+    margin: 0 1em 1em 0;
+  }
+  
+  .z-form-field .z-form-field {
+    margin: 1em 0 0 0;
+  }
+  
+  .z-form-field label {
+    font-size: 100%;
+  }
+  
+  .z-form-fieldRequired {
+    background: url(z3ext-layoutform-required.gif) center left no-repeat;
+    padding: 0 0 0 8px;
+    color: backgroundColor;
+  }
+  
+  .z-form-fieldUploadFile {
+    text-align: right; 
+    margin-right: 0.75em;
+    display: none;
+  }
+  
+  .z-form-fieldTextFormat {
+    text-align: right;
+    margin-right: 0.75em
+  }
+  
+  .z-form-help {
+    font-size: fontSmallSize;
+    color: discreetColor;
+    margin: 0 0 0.2em 0;
+  }
+  
+  .z-form-help:hover {
+    color: fontColor;
+    cursor: default;
+  }
+  
+  .z-form-field.error {
+    /* Class for error indication in forms */
+    background-color: notifyBackgroundColor;
+    border: borderWidth borderStyle notifyBorderColor;
+    padding: 1em;
+    margin: 0 0 1em 0;
+    width: 95%;
+  }
+  
+  .z-form-field.error .x-form-fieldRequired {
+    color: notifyBackgroundColor;
+  }
+  
+  .z-form-controls {
+    clear: both;
+    margin-top: 1em;
+  }
+  
+  
+  .z-form-button {
+    background: transparent url(z3ext-layoutform-linkTransparent.gif) no-repeat;
+    background-position: 5px center;
+    cursor: pointer;
+    font-size: fontSmallSize;
+    padding: 1px 1px 1px 14px;
+  }
+  
+  .z-form-standalonebtn {
+    background: globalBackgroundColor url(z3ext-layoutform-linkOpaque.gif) no-repeat;
+    background-position: 5px center;
+    cursor: pointer;
+    font-size: fontSmallSize;
+    padding: 1px 1px 1px 14px;
+  }
+  
+  .z-form-addbutton {
+    background: transparent url(z3ext-layoutform-linkTransparent.gif) no-repeat;
+    background-position: 5px center;
+    cursor: pointer;
+    font-size: fontSmallSize;
+    padding: 1px 1px 1px 14px;
+  }
+  
+  .z-form-savebutton {
+    background: transparent url(z3ext-layoutform-linkTransparent.gif) no-repeat;
+    background-position: 5px center;
+    cursor: pointer;
+    font-size: fontSmallSize;
+    padding: 1px 1px 1px 14px;
+  }
+  
+  .z-form-cancelbutton {
+    background: globalBackgroundColor url(z3ext-layoutform-linkOpaque.gif) no-repeat;
+    background-position: 5px center;
+    cursor: pointer;
+    font-size: fontSmallSize;
+    padding: 1px 1px 1px 14px;
+  }
+  
+  .z-form-removebutton {
+    background: globalBackgroundColor url(z3ext-layoutform-linkOpaque.gif) no-repeat;
+    background-position: 5px center;
+    cursor: pointer;
+    font-size: fontSmallSize;
+    padding: 1px 1px 1px 14px;
+  }
+
+}
\ No newline at end of file

Deleted: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/configure.zcml	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,9 +0,0 @@
-<configure 
-   xmlns="http://namespaces.zope.org/zope"
-   xmlns:z3c="http://namespaces.zope.org/z3c">
-
-  <includeDependencies package="z3ext.layoutform" />
-
-  <include package=".browser" />
-
-</configure>

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/configure.zcml)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/configure.zcml	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,19 @@
+<configure 
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:z3c="http://namespaces.zope.org/z3c">
+
+  <includeDependencies package="z3ext.layoutform" />
+
+  <!-- form error status message -->
+  <utility
+     name="formError"
+     provides="z3ext.statusmessage.interfaces.IMessageFactory"
+     component=".error.FormErrorStatusMessage" />
+
+  <class class=".error.FormErrorStatusMessage">
+    <allow interface=".interfaces.IFormErrorStatusMessage" />
+  </class>
+
+  <include package=".browser" />
+
+</configure>

Deleted: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/edit.py	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,55 +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$
-"""
-from zope import interface, event
-from zope.traversing.browser import absoluteURL
-from zope.app.container.interfaces import IAdding
-from zope.app.container.interfaces import IWriteContainer
-from zope.app.container.interfaces import IContainerNamesContainer
-
-from z3c.form import form, button
-from z3ext.statusmessage.interfaces import IStatusMessage
-
-from form import PageletForm
-from interfaces import _, IPageletEditForm, ISaveButton
-
-
-class PageletEditForm(form.EditForm, PageletForm):
-    interface.implements(IPageletEditForm)
-
-    render = PageletForm.render
-    __call__ = PageletForm.__call__
-
-    @button.buttonAndHandler(
-        _(u'Save'), name='save', provides=ISaveButton)
-    def handleApply(self, action):
-        data, errors = self.extractData()
-        if errors:
-            IStatusMessage(self.request).add(self.formErrorsMessage, 'warning')
-        else:
-            changes = self.applyChanges(data)
-            if changes:
-                IStatusMessage(self.request).add(self.successMessage)
-            else:
-                IStatusMessage(self.request).add(self.noChangesMessage)
-
-            nextURL = self.nextURL()
-            if nextURL:
-                self.redirect(nextURL)
-
-    def nextURL(self):
-        return ''

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/edit.py)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/edit.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,56 @@
+##############################################################################
+#
+# 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$
+"""
+from zope import interface, event
+from zope.traversing.browser import absoluteURL
+from zope.app.container.interfaces import IAdding
+from zope.app.container.interfaces import IWriteContainer
+from zope.app.container.interfaces import IContainerNamesContainer
+
+from z3c.form import form, button
+from z3ext.statusmessage.interfaces import IStatusMessage
+
+from form import PageletForm
+from interfaces import _, IPageletEditForm, ISaveButton
+
+
+class PageletEditForm(form.EditForm, PageletForm):
+    interface.implements(IPageletEditForm)
+
+    render = PageletForm.render
+    __call__ = PageletForm.__call__
+
+    @button.buttonAndHandler(
+        _(u'Save'), name='save', provides=ISaveButton)
+    def handleApply(self, action):
+        data, errors = self.extractData()
+        if errors:
+            IStatusMessage(self.request).add(
+                (self.formErrorsMessage,) + errors, 'formError')
+        else:
+            changes = self.applyChanges(data)
+            if changes:
+                IStatusMessage(self.request).add(self.successMessage)
+            else:
+                IStatusMessage(self.request).add(self.noChangesMessage)
+
+            nextURL = self.nextURL()
+            if nextURL:
+                self.redirect(nextURL)
+
+    def nextURL(self):
+        return ''

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/error.py (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/error.py)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/error.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/error.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,29 @@
+##############################################################################
+#
+# 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 $
+"""
+from zope import interface
+from z3ext.statusmessage.message import Message
+
+from interfaces import IFormErrorStatusMessage
+
+
+class FormErrorStatusMessage(Message):
+    interface.implements(IFormErrorStatusMessage)
+
+    def __init__(self, message):
+        self.message = message[0]
+        self.errors = [err for err in message[1:] if err.widget is None]

Deleted: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/interfaces.py	2008-10-07 15:26:40 UTC (rev 91853)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -1,73 +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.
-#
-##############################################################################
-""" z3ext.layoutform interfaces
-
-$Id$
-"""
-from zope import interface
-from zope.i18nmessageid import MessageFactory
-from z3c.form.interfaces import IFormLayer
-from z3ext.layout.interfaces import IPagelet
-
-_ = MessageFactory('z3ext')
-
-
-class ILayoutFormLayer(IFormLayer):
-    """ browser layer """
-
-
-class IPageletFormView(IPagelet):
-    """ pagelet form view """
-
-
-class IPageletForm(IPagelet):
-    """Form mixin for pagelet implementation."""
-
-    label = interface.Attribute('Form label')
-
-    description = interface.Attribute('Form label')
-
-
-class IPageletAddForm(IPageletForm):
-    """Add form mixin for pagelet implementation."""
-
-    formCancelMessage = interface.Attribute('Form cancel message')
-
-    def nextURL():
-        """ as next url use newly created content url """
-
-    def cancelURL():
-        """ cancel url """
-
-    def nameAllowed():
-        """Return whether names can be input by the user."""
-
-
-class IPageletEditForm(IPageletForm):
-    """Edit form mixin for pagelet implementation."""
-
-    def nextURL():
-        """ as next url use newly created content url """
-
-
-class IAddButton(interface.Interface):
-    """ add button """
-
-
-class ISaveButton(interface.Interface):
-    """ save button """
-
-
-class ICancelButton(interface.Interface):
-    """ cancel button """

Copied: z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py (from rev 91880, z3ext.layoutform/trunk/src/z3ext/layoutform/interfaces.py)
===================================================================
--- z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py	                        (rev 0)
+++ z3ext.layoutform/tags/1.2.1/src/z3ext/layoutform/interfaces.py	2008-10-07 19:46:59 UTC (rev 91881)
@@ -0,0 +1,78 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+""" z3ext.layoutform interfaces
+
+$Id$
+"""
+from zope import interface
+from zope.i18nmessageid import MessageFactory
+from z3c.form.interfaces import IFormLayer
+from z3ext.layout.interfaces import IPagelet
+from z3ext.statusmessage.interfaces import IMessage
+
+_ = MessageFactory('z3ext')
+
+
+class ILayoutFormLayer(IFormLayer):
+    """ browser layer """
+
+
+class IPageletFormView(IPagelet):
+    """ pagelet form view """
+
+
+class IPageletForm(IPagelet):
+    """Form mixin for pagelet implementation."""
+
+    label = interface.Attribute('Form label')
+
+    description = interface.Attribute('Form label')
+
+
+class IPageletAddForm(IPageletForm):
+    """Add form mixin for pagelet implementation."""
+
+    formCancelMessage = interface.Attribute('Form cancel message')
+
+    def nextURL():
+        """ as next url use newly created content url """
+
+    def cancelURL():
+        """ cancel url """
+
+    def nameAllowed():
+        """Return whether names can be input by the user."""
+
+
+class IPageletEditForm(IPageletForm):
+    """Edit form mixin for pagelet implementation."""
+
+    def nextURL():
+        """ as next url use newly created content url """
+
+
+class IAddButton(interface.Interface):
+    """ add button """
+
+
+class ISaveButton(interface.Interface):
+    """ save button """
+
+
+class ICancelButton(interface.Interface):
+    """ cancel button """
+
+
+class IFormErrorStatusMessage(IMessage):
+    """ form error status message """



More information about the Checkins mailing list