[z3-checkins] r8221 - z3/Five/branch/regebro-forms_support
regebro at codespeak.net
regebro at codespeak.net
Tue Jan 11 18:14:51 MET 2005
Author: regebro
Date: Tue Jan 11 18:14:51 2005
New Revision: 8221
Modified:
z3/Five/branch/regebro-forms_support/browser.py
z3/Five/branch/regebro-forms_support/browserconfigure.py
z3/Five/branch/regebro-forms_support/configure.zcml
z3/Five/branch/regebro-forms_support/edit.pt
Log:
Support for widget macros and a default edit form.
Modified: z3/Five/branch/regebro-forms_support/browser.py
==============================================================================
--- z3/Five/branch/regebro-forms_support/browser.py (original)
+++ z3/Five/branch/regebro-forms_support/browser.py Tue Jan 11 18:14:51 2005
@@ -21,6 +21,11 @@
from zope.component import getView
from zope.component import getViewProviding
from zope.app.traversing.browser.interfaces import IAbsoluteURL
+from zope.app.location.interfaces import ILocation
+from zope.app.location import LocationProxy
+from zope.app.form.utility import setUpEditWidgets, applyWidgetsChanges
+from zope.app.form.browser.submit import Update
+from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
class BrowserView(Acquisition.Explicit):
@@ -89,6 +94,89 @@
'url': context.absolute_url()
},)
+
+class EditView(BrowserView):
+ """Simple edit-view base class
+
+ Subclasses should provide a schema attribute defining the schema
+ to be edited.
+ """
+
+ errors = ()
+ update_status = None
+ label = ''
+
+ # Fall-back field names computes from schema
+ fieldNames = property(lambda self: getFieldNamesInOrder(self.schema))
+ # Fall-back template
+ generated_form = ViewPageTemplateFile('edit.pt')
+
+ def __init__(self, context, request):
+ BrowserView.__init__(self, context, request)
+ self._setUpWidgets()
+
+ def _setUpWidgets(self):
+ adapted = self.schema(self.context)
+ if adapted is not self.context:
+ if not ILocation.providedBy(adapted):
+ adapted = LocationProxy(adapted)
+ adapted.__parent__ = self.context
+ self.adapted = adapted
+ setUpEditWidgets(self, self.schema, source=self.adapted,
+ names=self.fieldNames)
+
+ def setPrefix(self, prefix):
+ for widget in self.widgets():
+ widget.setPrefix(prefix)
+
+ def widgets(self):
+ return [getattr(self, name+'_widget')
+ for name in self.fieldNames]
+
+ def changed(self):
+ # This method is overridden to execute logic *after* changes
+ # have been made.
+ pass
+
+ def update(self):
+ if self.update_status is not None:
+ # We've been called before. Just return the status we previously
+ # computed.
+ return self.update_status
+
+ status = ''
+
+ content = self.adapted
+
+ if Update in self.request.form.keys():
+ changed = False
+ try:
+ changed = applyWidgetsChanges(self, self.schema,
+ target=content, names=self.fieldNames)
+ # We should not generate events when an adapter is used.
+ # That's the adapter's job.
+ if changed and self.context is self.adapted:
+ notify(ObjectModifiedEvent(content))
+ except WidgetsError, errors:
+ self.errors = errors
+ status = _("An error occured.")
+ get_transaction().abort()
+ else:
+ setUpEditWidgets(self, self.schema, source=self.adapted,
+ ignoreStickyValues=True,
+ names=self.fieldNames)
+ if changed:
+ self.changed()
+ formatter = self.request.locale.dates.getFormatter(
+ 'dateTime', 'medium')
+ status = _("Updated on ${date_time}")
+ status.mapping = {'date_time': formatter.format(
+ datetime.utcnow())}
+
+ self.update_status = status
+ return status
+
+
class Macros:
implements(IItemMapping)
@@ -115,3 +203,4 @@
raise KeyError, key
class StandardMacros(BrowserView, Macros): pass
+
Modified: z3/Five/branch/regebro-forms_support/browserconfigure.py
==============================================================================
--- z3/Five/branch/regebro-forms_support/browserconfigure.py (original)
+++ z3/Five/branch/regebro-forms_support/browserconfigure.py Tue Jan 11 18:14:51 2005
@@ -24,11 +24,12 @@
from zope.app.publisher.browser.viewmeta import pages as zope_app_pages
from zope.app.component.metaconfigure import handler
from zope.app.component.interface import provideInterface
+from zope.app.form.browser.metaconfigure import BaseFormDirective
from resource import FileResourceFactory, ImageResourceFactory
from resource import PageTemplateResourceFactory
from resource import DirectoryResourceFactory
-from browser import BrowserView
+from browser import BrowserView, EditView
from metaclass import makeClass
from security import getSecurityInfo, protectClass, protectName, initializeClass
@@ -292,93 +293,6 @@
#
# Form generation from schema
#
-from zope.app.form.browser.metaconfigure import BaseFormDirective
-from zope.app.location.interfaces import ILocation
-from zope.app.form.utility import setUpEditWidgets, applyWidgetsChanges
-from zope.app.form.browser.submit import Update
-
-class EditView(BrowserView):
- """Simple edit-view base class
-
- Subclasses should provide a schema attribute defining the schema
- to be edited.
- """
-
- errors = ()
- update_status = None
- label = ''
-
- # Fall-back field names computes from schema
- fieldNames = property(lambda self: getFieldNamesInOrder(self.schema))
- # Fall-back template
- generated_form = ViewPageTemplateFile('edit.pt')
-
- def __init__(self, context, request):
- BrowserView.__init__(self, context, request)
- self._setUpWidgets()
-
- def _setUpWidgets(self):
- adapted = self.schema(self.context)
- if adapted is not self.context:
- if not ILocation.providedBy(adapted):
- adapted = LocationProxy(adapted)
- adapted.__parent__ = self.context
- self.adapted = adapted
- setUpEditWidgets(self, self.schema, source=self.adapted,
- names=self.fieldNames)
-
- def setPrefix(self, prefix):
- for widget in self.widgets():
- widget.setPrefix(prefix)
-
- def widgets(self):
- return [getattr(self, name+'_widget')
- for name in self.fieldNames]
-
- def changed(self):
- # This method is overridden to execute logic *after* changes
- # have been made.
- pass
-
- def update(self):
- if self.update_status is not None:
- # We've been called before. Just return the status we previously
- # computed.
- return self.update_status
-
- status = ''
-
- content = self.adapted
-
- if Update in self.request.form.keys():
- changed = False
- try:
- changed = applyWidgetsChanges(self, self.schema,
- target=content, names=self.fieldNames)
- # We should not generate events when an adapter is used.
- # That's the adapter's job.
- if changed and self.context is self.adapted:
- notify(ObjectModifiedEvent(content))
- except WidgetsError, errors:
- self.errors = errors
- status = _("An error occured.")
- get_transaction().abort()
- else:
- setUpEditWidgets(self, self.schema, source=self.adapted,
- ignoreStickyValues=True,
- names=self.fieldNames)
- if changed:
- self.changed()
- formatter = self.request.locale.dates.getFormatter(
- 'dateTime', 'medium')
- status = _("Updated on ${date_time}")
- status.mapping = {'date_time': formatter.format(
- datetime.utcnow())}
-
- self.update_status = status
- return status
-
-
def EditViewFactory(name, schema, label, permission, layer,
template, default_template, bases, for_, fields,
fulledit_path=None, fulledit_label=None, menu=u''):
@@ -406,7 +320,7 @@
s.provideView(for_, name, IBrowserRequest, class_, layer)
-
+
class EditFormDirective(BaseFormDirective):
view = EditView
@@ -428,7 +342,7 @@
args=self._args(),
kw={'menu': self.menu},
)
-
+
#
# mixin classes / class factories
#
@@ -471,4 +385,3 @@
return class_
-
\ No newline at end of file
Modified: z3/Five/branch/regebro-forms_support/configure.zcml
==============================================================================
--- z3/Five/branch/regebro-forms_support/configure.zcml (original)
+++ z3/Five/branch/regebro-forms_support/configure.zcml Tue Jan 11 18:14:51 2005
@@ -8,6 +8,7 @@
<include file="permissions.zcml" />
<include package="zope.app.traversing" />
+ <include package="zope.app.form.browser" />
<!-- do 'traditional' traversing by default; needed by ZPT -->
<adapter
Modified: z3/Five/branch/regebro-forms_support/edit.pt
==============================================================================
--- z3/Five/branch/regebro-forms_support/edit.pt (original)
+++ z3/Five/branch/regebro-forms_support/edit.pt Tue Jan 11 18:14:51 2005
@@ -1,7 +1,7 @@
<tal:tag condition="view/update"/>
-<html metal:use-macro="context/@@standard_macros/view">
+<html>
<body>
- <div metal:fill-slot="body">
+ <div>
<div metal:define-macro="body">
@@ -32,11 +32,11 @@
<div class="label">Extra top</div>
<div class="field"><input type="text" style="width:100%" /></div>
</div>
-
- <div metal:use-macro="context/@@form_macros/widget_rows" />
-
+
+ <div metal:use-macro="context/@@widget_macros/widget_rows" />
+
<div class="separator"></div>
-
+
<div class="row"
metal:define-slot="extra_bottom" tal:replace="nothing">
<div class="label">Extra bottom</div>
@@ -47,9 +47,9 @@
<div class="row">
<div class="controls">
- <input type="submit" value="Refresh"
+ <input type="submit" value="Refresh"
i18n:attributes="value refresh-button" />
- <input type="submit" name="UPDATE_SUBMIT" value="Change"
+ <input type="submit" name="UPDATE_SUBMIT" value="Change"
i18n:attributes="value submit-button"/>
</div>
</div>
More information about the z3-checkins
mailing list