[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