[Checkins] SVN: z3c.formjs/trunk/ Factored out jquery-specific code into its own module. Unfortunately I

Stephan Richter srichter at cosmos.phy.tufts.edu
Thu Jul 5 20:39:27 EDT 2007


Log message for revision 77493:
  Factored out jquery-specific code into its own module. Unfortunately  I 
  could not name it "jquery.py", because then I cannot access the jquery 
  package anymore, since Python gives precendence to local imports. 
  *Sigh*
  
  Improved doctest file formatting a little bit.
  
  

Changed:
  U   z3c.formjs/trunk/buildout.cfg
  U   z3c.formjs/trunk/src/z3c/formjs/__init__.py
  U   z3c.formjs/trunk/src/z3c/formjs/browser/__init__.py
  U   z3c.formjs/trunk/src/z3c/formjs/configure.zcml
  A   z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.py
  A   z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.zcml
  U   z3c.formjs/trunk/src/z3c/formjs/jsevent.py
  U   z3c.formjs/trunk/src/z3c/formjs/jsevent.txt
  U   z3c.formjs/trunk/src/z3c/formjs/jsvalidator.py
  U   z3c.formjs/trunk/src/z3c/formjs/jsvalidator.txt
  U   z3c.formjs/trunk/src/z3c/formjs/testing.py

-=-
Modified: z3c.formjs/trunk/buildout.cfg
===================================================================
--- z3c.formjs/trunk/buildout.cfg	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/buildout.cfg	2007-07-06 00:39:26 UTC (rev 77493)
@@ -1,5 +1,5 @@
 [buildout]
-develop = .
+develop = . z3c.form
 parts = test coverage
 
 [test]

Modified: z3c.formjs/trunk/src/z3c/formjs/__init__.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/__init__.py	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/__init__.py	2007-07-06 00:39:26 UTC (rev 77493)
@@ -0,0 +1 @@
+# Make a package.

Modified: z3c.formjs/trunk/src/z3c/formjs/browser/__init__.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/browser/__init__.py	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/browser/__init__.py	2007-07-06 00:39:26 UTC (rev 77493)
@@ -0,0 +1 @@
+# Make a package

Modified: z3c.formjs/trunk/src/z3c/formjs/configure.zcml
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/configure.zcml	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/configure.zcml	2007-07-06 00:39:26 UTC (rev 77493)
@@ -1,6 +1,5 @@
 <configure
     xmlns="http://namespaces.zope.org/zope"
-    xmlns:browser="http://namespaces.zope.org/zope"
     i18n_domain="z3c.formjs">
 
   <!-- Action Managers and Handlers -->
@@ -10,10 +9,6 @@
       />
 
   <adapter
-      factory=".jsevent.JQueryEventRenderer"
-      />
-
-  <adapter
       factory=".jsevent.JSEventsRenderer"
       />
 
@@ -22,10 +17,6 @@
       />
 
   <!-- JavaScript Validation -->
-  <adapter
-      factory=".jsvalidator.JQueryMessageValidationRenderer"
-      />
-
   <browser:view
       for=".interfaces.IAJAXValidator"
       type="zope.publisher.interfaces.http.IHTTPRequest"
@@ -164,4 +155,8 @@
       component="z3c.formjs.jsevent.SUBMIT"
       />
 
+  <!-- Specific Javascript-backend implementations -->
+
+  <include file="jqueryrenderer.zcml" />
+
 </configure>

Added: z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.py	                        (rev 0)
+++ z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.py	2007-07-06 00:39:26 UTC (rev 77493)
@@ -0,0 +1,85 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""JQuery-backend implementation
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+import zope.component
+import zope.interface
+
+from jquery.layer import IJQueryJavaScriptBrowserLayer
+
+from z3c.formjs import interfaces
+
+
+class JQueryEventRenderer(object):
+    """IJSEventRenderer implementation.
+
+    See ``interfaces.IJSEventRenderer``.
+    """
+    zope.interface.implements(interfaces.IJSEventRenderer)
+    zope.component.adapts(
+        interfaces.IJSEvent, IJQueryJavaScriptBrowserLayer)
+
+    def __init__(self, event, request):
+        self.request = request
+        self.event = event
+
+    def render(self, handler, id, form):
+        return '$("#%s").bind("%s", function(){%s});' % (
+                          id, self.event.name, handler(form, id))
+
+
+class JQueryBaseValidationRenderer(object):
+
+    def __init__(self, form, field, request):
+        self.form = form
+        self.field = field
+        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
+
+        # build a js expression that joins valueString expression
+        queryString = '"?widget-id=%s&%s=" + %s' % (
+            widget.id, widget.name, valueString)
+
+        # build a js expression that joins form url, validate path, and query
+        # string
+        ajaxURL = '"'+self.form.request.getURL() + '/validate" + ' + queryString
+
+        return ajaxURL
+
+
+class JQueryMessageValidationRenderer(JQueryBaseValidationRenderer):
+
+    zope.interface.implements(interfaces.IJSMessageValidationRenderer)
+    zope.component.adapts(interfaces.IAJAXValidator,
+                          zope.interface.Interface,
+                          IJQueryJavaScriptBrowserLayer)
+
+    def render(self):
+        ajaxURL = self._ajaxURL()
+        # build a js expression that shows the user the error message
+        # XXX: later this should query for a renderer based on the widget
+        #     jsrenderer = zope.component.queryMultiAdapter(
+        #         (widget, self.request), interfaces.IJSErrorMessageRenderer)
+        #     messageSetter = jsrenderer.render()
+        messageSetter = 'alert(data);'
+        ajax = '$.get(%s,\nfunction(data){\n%s\n})' % (ajaxURL, messageSetter)
+        return ajax


Property changes on: z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.zcml
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.zcml	                        (rev 0)
+++ z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.zcml	2007-07-06 00:39:26 UTC (rev 77493)
@@ -0,0 +1,12 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.formjs">
+
+  <adapter
+      factory=".jqueryrenderer.JQueryEventRenderer" />
+
+  <adapter
+      factory=".jqueryrenderer.JQueryMessageValidationRenderer"
+      />
+
+</configure>


Property changes on: z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: z3c.formjs/trunk/src/z3c/formjs/jsevent.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsevent.py	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/jsevent.py	2007-07-06 00:39:26 UTC (rev 77493)
@@ -88,9 +88,8 @@
         for eventName, handler in self.events.items():
             event = zope.component.getUtility(
                 interfaces.IJSEvent, name=eventName)
-            renderer = zope.component.queryMultiAdapter(
-                (event, self.request), interfaces.IJSEventRenderer,
-                default=JQueryEventRenderer(event, self.request))
+            renderer = zope.component.getMultiAdapter(
+                (event, self.request), interfaces.IJSEventRenderer)
             result += renderer.render(handler, widget.id, form) + '\n'
         return result
 
@@ -129,8 +128,9 @@
                 for key, button in self.form.buttons.items():
                     handler = self.form.jshandlers.getHandler(button)
                     if handler is not None:
-                        renderer = zope.component.getMultiAdapter((handler.event, self.request),
-                                                                  interfaces.IJSEventRenderer)
+                        renderer = zope.component.getMultiAdapter(
+                            (handler.event, self.request),
+                            interfaces.IJSEventRenderer)
                         # XXX: is this a safe way to get ids?
                         id = self.form.actions[key].id
                         result += renderer.render(handler, id, self.form) + '\n'
@@ -138,24 +138,6 @@
         return result
 
 
-class JQueryEventRenderer(object):
-    """IJSEventRenderer implementation.
-
-    See ``interfaces.IJSEventRenderer``.
-    """
-    implements(interfaces.IJSEventRenderer)
-    zope.component.adapts(interfaces.IJSEvent,
-                          IJQueryJavaScriptBrowserLayer)
-
-    def __init__(self, event, request):
-        self.request = request
-        self.event = event
-
-    def render(self, handler, id, form):
-        return '$("#%s").bind("%s", function(){%s});' % (
-                          id, self.event.name, handler(form, id))
-
-
 class Handlers(button.Handlers):
     """Event Handlers for Javascript Buttons."""
 

Modified: z3c.formjs/trunk/src/z3c/formjs/jsevent.txt
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsevent.txt	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/jsevent.txt	2007-07-06 00:39:26 UTC (rev 77493)
@@ -81,7 +81,7 @@
   ...     return ('alert("Some event was called '
   ...                    'for the element with id %s '
   ...                    'and for the form %s");'
-  ...                    % (id, form)) 
+  ...                    % (id, form))
 
 Another aspect of javascript events is that they get attached to a
 specific dom element using an id.  So let us make an imaginary dom
@@ -96,7 +96,8 @@
 jquery.  The renderers are registered as adapters as follows.
 
   >>> import zope.component
-  >>> zope.component.provideAdapter(jsevent.JQueryEventRenderer)
+  >>> from z3c.formjs import jqueryrenderer
+  >>> zope.component.provideAdapter(jqueryrenderer.JQueryEventRenderer)
 
   >>> from z3c.formjs.testing import TestRequest
   >>> from jquery.layer import IJQueryJavaScriptBrowserLayer
@@ -104,12 +105,13 @@
   >>> IJQueryJavaScriptBrowserLayer.providedBy(request)
   True
 
-  >>> renderer = zope.component.getMultiAdapter((jsevent.CLICK,
-  ...                                            request), jsinterfaces.IJSEventRenderer)
+  >>> renderer = zope.component.getMultiAdapter(
+  ...     (jsevent.CLICK, request), jsinterfaces.IJSEventRenderer)
   >>> renderer.render(simpleHandler, id, None)
   '$("#form-field-age").bind("click", function(){alert("Some event was
   called for the element with id form-field-age and for the form None");});'
 
+
 =======
 Widgets
 =======
@@ -136,7 +138,9 @@
   >>> textWidgetTemplate = tempfile.mktemp('text.pt')
   >>> open(textWidgetTemplate, 'w').write('''\
   ... <input type="text" name="" value=""
-  ...        tal:attributes="id view/name; name view/name; value view/value;" />\
+  ...        tal:attributes="id view/name;
+  ...                        name view/name;
+  ...                        value view/value;" />\
   ... ''')
 
   >>> from z3c.form.widget import WidgetTemplateFactory
@@ -160,7 +164,8 @@
   ...     return 'alert("This Widget was Double Clicked!");'
   >>> events = jsevent.JSEvents(click=ageClickHandler,
   ...                           dblclick=ageDblClickHandler)
-  >>> age = zope.component.getMultiAdapter((events, age), jsinterfaces.IJSEventsWidget)
+  >>> age = zope.component.getMultiAdapter(
+  ...     (events, age), jsinterfaces.IJSEventsWidget)
 
 Now we can update and render this widget.
 
@@ -176,8 +181,10 @@
   ...                                           jsinterfaces.IJSEventsRenderer)
   >>> age.id = 'age'
   >>> print renderer.render(age, None)
-  $("#age").bind("click", function(){alert("This Widget was Clicked!");});
-  $("#age").bind("dblclick", function(){alert("This Widget was Double Clicked!");});
+  $("#age").bind("click",
+      function(){alert("This Widget was Clicked!");});
+  $("#age").bind("dblclick",
+      function(){alert("This Widget was Double Clicked!");});
 
 
 Rendering Widgets with Attached Events
@@ -238,8 +245,10 @@
 
   >>> zope.component.provideAdapter(jsevent.JSFormEventsRenderer)
   >>> print jsinterfaces.IJSFormEventsRenderer(edit).render()
-  $("#form-widgets-gender").bind("change", function(){alert("The Gender was Changed!");});
-  $("#form-widgets-age").bind("click", function(){alert("The Age was Clicked!");});
+  $("#form-widgets-gender").bind("change",
+      function(){alert("The Gender was Changed!");});
+  $("#form-widgets-age").bind("click",
+      function(){alert("The Age was Clicked!");});
 
 
 Attaching Events to Form Fields
@@ -267,5 +276,7 @@
   >>> edit.update()
   >>> zope.component.provideAdapter(jsevent.JSFormEventsRenderer)
   >>> print jsinterfaces.IJSFormEventsRenderer(edit).render()
-  $("#form-widgets-gender").bind("change", function(){alert("The Gender was Changed!");});
-  $("#form-widgets-age").bind("click", function(){alert("The Age was Clicked!");});
\ No newline at end of file
+  $("#form-widgets-gender").bind("change",
+      function(){alert("The Gender was Changed!");});
+  $("#form-widgets-age").bind("click",
+      function(){alert("The Age was Clicked!");});

Modified: z3c.formjs/trunk/src/z3c/formjs/jsvalidator.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsvalidator.py	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/jsvalidator.py	2007-07-06 00:39:26 UTC (rev 77493)
@@ -1,3 +1,21 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Javascript Form Framework Interfaces.
+
+$Id: $
+"""
+__docformat__ = "reStructuredText"
 import zope.interface
 import zope.component
 
@@ -5,62 +23,9 @@
 from z3c.traverser.interfaces import IPluggableTraverser, ITraverserPlugin
 from z3c.form.interfaces import IWidget, IField
 
-from jquery.layer import IJQueryJavaScriptBrowserLayer
-
 from z3c.formjs import interfaces
 
 
-## @zope.component.adapter(IWidget, IJQueryJavaScriptBrowserLayer)
-## @zope.interface.implementer(interfaces.IJSErrorMessageRenderer)
-## def JQueryErrorMessageRenderer(widgetID):
-##     return '''$.get()'''
-
-
-class JQueryBaseValidationRenderer(object):
-
-    def __init__(self, form, field, request):
-        self.form = form
-        self.field = field
-        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
-
-        # build a js expression that joins valueString expression
-        queryString = '"?widget-id=%s&%s=" + %s' % (
-            widget.id, widget.name, valueString)
-
-        # build a js expression that joins form url, validate path, and query
-        # string
-        ajaxURL = '"'+self.form.request.getURL() + '/validate" + ' + queryString
-
-        # it should look something like this now:
-        # "path/to/form.html/validate" + "?widget-id=some-id&value=" + $("#some-id").val()
-        return ajaxURL
-
-
-class JQueryMessageValidationRenderer(JQueryBaseValidationRenderer):
-
-    zope.interface.implements(interfaces.IJSMessageValidationRenderer)
-    zope.component.adapts(interfaces.IAJAXValidator,
-                          zope.interface.Interface,
-                          IJQueryJavaScriptBrowserLayer)
-
-    def render(self):
-        ajaxURL = self._ajaxURL()
-        # build a js expression that shows the user the error message
-        # XXX: later this should query for a renderer based on the widget
-        #     jsrenderer = zope.component.queryMultiAdapter(
-        #         (widget, self.request), interfaces.IJSErrorMessageRenderer)
-        #     messageSetter = jsrenderer.render()
-        messageSetter = 'alert(data);'
-        ajax = '$.get(%s,\nfunction(data){\n%s\n})' % (ajaxURL, messageSetter)
-        return ajax
-
-
 class MessageValidationRenderer(object):
     """An intermediate class that performs adapter look ups.
 

Modified: z3c.formjs/trunk/src/z3c/formjs/jsvalidator.txt
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsvalidator.txt	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/jsvalidator.txt	2007-07-06 00:39:26 UTC (rev 77493)
@@ -42,8 +42,9 @@
 We will register a jquery renderer.
 
     >>> import zope.component
+    >>> from z3c.formjs import jqueryrenderer
     >>> zope.component.provideAdapter(
-    ...     jsvalidator.JQueryMessageValidationRenderer)
+    ...     jqueryrenderer.JQueryMessageValidationRenderer)
 
     >>> print edit.fieldValidator(edit, edit.fields['zip'])
     $.get("http://127.0.0.1/validate" +

Modified: z3c.formjs/trunk/src/z3c/formjs/testing.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/testing.py	2007-07-05 23:29:41 UTC (rev 77492)
+++ z3c.formjs/trunk/src/z3c/formjs/testing.py	2007-07-06 00:39:26 UTC (rev 77493)
@@ -27,7 +27,7 @@
 from zope.app.testing import setup
 
 from z3c.formjs import jsbutton, jswidget, jsevent
-from z3c.formjs import interfaces, browser
+from z3c.formjs import interfaces, browser, jqueryrenderer
 
 class TestRequest(TestRequest):
     zope.interface.implements(jquery.layer.IJQueryJavaScriptBrowserLayer,
@@ -64,7 +64,7 @@
         jsbutton.JSButtonAction, provides=z3c.form.interfaces.IFieldWidget)
     zope.component.provideAdapter(
         jswidget.JSEventsWidget, provides=interfaces.IJSEventsWidget)
-    zope.component.provideAdapter(jsevent.JQueryEventRenderer)
+    zope.component.provideAdapter(jqueryrenderer.JQueryEventRenderer)
 
     setUpEventUtilities()
 



More information about the Checkins mailing list