[Checkins] SVN: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/ initial attempt at getting validate traverser to work. For some reason PluggableTraverser is still not being called

Paul Carduner paulcarduner at gmail.com
Thu Jul 5 09:33:44 EDT 2007


Log message for revision 77457:
  initial attempt at getting validate traverser to work.  For some reason PluggableTraverser is still not being called

Changed:
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.py
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.txt

-=-
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml	2007-07-05 12:56:35 UTC (rev 77456)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml	2007-07-05 13:33:43 UTC (rev 77457)
@@ -1,5 +1,6 @@
 <configure
     xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/zope"
     i18n_domain="z3c.formjs">
 
   <!-- Action Managers and Handlers -->
@@ -20,6 +21,34 @@
       factory=".jsevent.JSFormEventsRenderer"
       />
 
+  <!-- JavaScript Validation -->
+  <adapter
+      factory=".jsvalidator.JQueryMessageValidationRenderer"
+      />
+
+  <browser:view
+      for=".interfaces.IAJAXValidator"
+      type="zope.publisher.interfaces.http.IHTTPRequest"
+      provides="zope.publisher.interfaces.http.IHTTPPublisher"
+      factory="z3c.traverser.traverser.PluggableTraverser"
+      permission="zope.Public"
+      />
+
+  <browser:view
+      for=".interfaces.IAJAXValidator"
+      type="zope.publisher.interfaces.browser.IBrowserRequest"
+      provides="zope.publisher.interfaces.browser.IBrowserPublisher"
+      factory="z3c.traverser.browser.PluggableBrowserTraverser"
+      permission="zope.Public"
+      />
+
+  <subscriber
+      for=".interfaces.IAJAXValidator
+	   zope.publisher.interfaces.IPublisherRequest"
+      provides="z3c.traverser.interfaces.ITraverserPlugin"
+      factory=".jsvalidator.ValidateTraverser"
+      />
+
   <!-- Widget Factory -->
   <adapter
       factory=".jswidget.JSEventsWidget"

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.py	2007-07-05 12:56:35 UTC (rev 77456)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.py	2007-07-05 13:33:43 UTC (rev 77457)
@@ -1,5 +1,7 @@
 import zope.interface
 import zope.component
+
+from z3c.traverser.traverser import SingleAttributeTraverserPlugin
 from z3c.form.interfaces import IWidget, IField
 
 from jquery.layer import IJQueryJavaScriptBrowserLayer
@@ -15,20 +17,18 @@
 
 class JQueryBaseValidationRenderer(object):
 
-    def __init__(self, form, field, request):
+    def __init__(self, form, widgetID, request):
         self.form = form
-        self.field = field # z3c.form.field.Field instance!!!
+        self.widgetID = widgetID
         self.request = request
 
     def _ajaxURL(self):
-        widget = self.form.widgets[self.field.__name__]
-
         # build js expression for extracting widget value
         # XXX: Maybe we should adapt the widget to IJSValueExtractorRenderer?
-        valueString = '$("#%s").val()' % (widget.id, )
+        valueString = '$("#%s").val()' % (self.widgetID, )
 
         # build a js expression that joins valueString expression
-        queryString = '"?widget-id=%s&value=" + %s' % (widget.id, valueString)
+        queryString = '"?widget-id=%s&value=" + %s' % (self.widgetID, valueString)
 
         # build a js expression that joins form url, validate path, and query string
         ajaxURL = '"'+self.form.request.getURL() + '/validate" + ' + queryString
@@ -42,7 +42,7 @@
 
     zope.interface.implements(interfaces.IJSMessageValidationRenderer)
     zope.component.adapts(interfaces.IAJAXValidator,
-                          IField,
+                          zope.interface.Interface,
                           IJQueryJavaScriptBrowserLayer)
 
     def render(self):
@@ -68,6 +68,7 @@
         self.field = field
 
     def render(self):
+        import pdb; pdb.set_trace()
         jsrenderer = zope.component.queryMultiAdapter(
             (self.form, self.field, self.form.request), interfaces.IJSMessageValidationRenderer)
         return jsrenderer.render()
@@ -80,7 +81,8 @@
 
     def _validate(self):
         widgetID = self.request.get('widget-id')
-        self.fields = self.fields.select(widgetID)
+        fieldName = widgetID.replace('form-widgets-','')
+        self.fields = self.fields.select(fieldName)
         self.updateWidgets()
         return self.widgets.extract()
 
@@ -92,6 +94,7 @@
     def validate(self):
         data, errors = self._validate()
         if errors:
-            return errors[0].doc()
+            return errors[0].message
         return u'' # all OK
 
+ValidateTraverser = SingleAttributeTraverserPlugin('validate')

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.txt
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.txt	2007-07-05 12:56:35 UTC (rev 77456)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsvalidator.txt	2007-07-05 13:33:43 UTC (rev 77457)
@@ -13,6 +13,9 @@
     >>> from z3c.formjs import jsvalidator, jsevent
     >>> from z3c.form import form, field, interfaces
 
+    >>> from z3c.form.testing import setupFormDefaults
+    >>> setupFormDefaults()
+
     >>> import zope.interface
     >>> import zope.schema
     >>> class IAddress(zope.interface.Interface):
@@ -40,3 +43,21 @@
     function(data){
     alert(data);
     })
+
+    >>> from zope.publisher.interfaces import IPublisherRequest
+    >>> from z3c.traverser import traverser
+    >>> zope.component.provideSubscriptionAdapter(traverser.AttributeTraverserPlugin,
+    ...                                           (jsinterfaces.IAJAXValidator, IPublisherRequest))
+    >>> from z3c.traverser.traverser import PluggableTraverser
+    >>> request = TestRequest(form={'widget-id':'form-widgets-zip',
+    ...                             'form.widgets.zip':'29132'})
+    >>> edit = AddressEditForm(None, request)
+    >>> edit.update()
+    >>> PluggableTraverser(edit, request).publishTraverse(request, 'validate')()
+    u''
+    >>> request = TestRequest(form={'widget-id':'form-widgets-zip',
+    ...                             'form.widgets.zip':'notazipcode'})
+    >>> edit = AddressEditForm(None, request)
+    >>> edit.update()
+    >>> PluggableTraverser(edit, request).publishTraverse(request, 'validate')()
+    u''
\ No newline at end of file



More information about the Checkins mailing list