[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