[Checkins] SVN: plone.z3cform/trunk/ Add support for traversing to widgets via a namespace adapter
Martin Aspeli
optilude at gmx.net
Mon Aug 25 20:38:29 EDT 2008
Log message for revision 90254:
Add support for traversing to widgets via a namespace adapter
Changed:
U plone.z3cform/trunk/docs/HISTORY.txt
U plone.z3cform/trunk/plone/z3cform/configure.zcml
A plone.z3cform/trunk/plone/z3cform/traversal.py
-=-
Modified: plone.z3cform/trunk/docs/HISTORY.txt
===================================================================
--- plone.z3cform/trunk/docs/HISTORY.txt 2008-08-25 22:44:22 UTC (rev 90253)
+++ plone.z3cform/trunk/docs/HISTORY.txt 2008-08-26 00:38:28 UTC (rev 90254)
@@ -4,6 +4,9 @@
0.5.2 - Unreleased
------------------
+* Add a namespace traversal adpater that allows traversal to widgets. This
+ is useful for AJAX calls, for example.
+
0.5.1 - 2008-08-21
------------------
Modified: plone.z3cform/trunk/plone/z3cform/configure.zcml
===================================================================
--- plone.z3cform/trunk/plone/z3cform/configure.zcml 2008-08-25 22:44:22 UTC (rev 90253)
+++ plone.z3cform/trunk/plone/z3cform/configure.zcml 2008-08-26 00:38:28 UTC (rev 90254)
@@ -10,6 +10,8 @@
<includeOverrides file="overrides.zcml" />
<include file="templates.zcml" />
+ <adapter factory=".traversal.WidgetTraversal" name="widget" />
+
<i18n:registerTranslations directory="locales"/>
</configure>
Added: plone.z3cform/trunk/plone/z3cform/traversal.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/traversal.py (rev 0)
+++ plone.z3cform/trunk/plone/z3cform/traversal.py 2008-08-26 00:38:28 UTC (rev 90254)
@@ -0,0 +1,32 @@
+from zope.interface import implements
+from zope.component import adapts
+
+from zope.traversing.interfaces import ITraversable
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+from plone.z3cform.interfaces import IFormWrapper
+from plone.z3cform import z2
+
+class WidgetTraversal(object):
+ """Allow traversal to widgets via the ++widget++ namespace. The context
+ is the from layout wrapper.
+
+ Note that widgets may need to mixing in Acquisition.Explicit for this to
+ work.
+ """
+
+ implements(ITraversable)
+ adapts(IFormWrapper, IBrowserRequest)
+
+ def __init__(self, context, request=None):
+ self.context = context
+ self.request = request
+
+ def traverse(self, name, ignored):
+ name = name.split('.')[-1]
+
+ form = self.context.form_instance
+ z2.switch_on(self.context, request_layer=self.context.request_layer)
+
+ form.update()
+ return form.widgets.get(name)
\ No newline at end of file
More information about the Checkins
mailing list