[Checkins] SVN: z3c.formjs/trunk/src/z3c/formjs/jsaction. Made the event also an argument of the handler callable.

Stephan Richter srichter at cosmos.phy.tufts.edu
Sat Jul 7 02:37:23 EDT 2007


Log message for revision 77558:
  Made the event also an argument of the handler callable.
  

Changed:
  U   z3c.formjs/trunk/src/z3c/formjs/jsaction.py
  U   z3c.formjs/trunk/src/z3c/formjs/jsaction.txt

-=-
Modified: z3c.formjs/trunk/src/z3c/formjs/jsaction.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsaction.py	2007-07-07 06:15:41 UTC (rev 77557)
+++ z3c.formjs/trunk/src/z3c/formjs/jsaction.py	2007-07-07 06:37:23 UTC (rev 77558)
@@ -128,30 +128,29 @@
 class JSHandler(object):
     zope.interface.implements(interfaces.IJSEventHandler)
 
-    def __init__(self, button, func, event=jsevent.CLICK):
-        self.button = button
-        self.func = func
+    def __init__(self, event, func):
         self.event = event
+        self.func = func
 
     def __call__(self, event, selector, request):
-        return self.func(selector.widget.form, selector)
+        return self.func(selector.widget.form, event, selector)
 
     def __repr__(self):
-        return '<%s for %r>' %(self.__class__.__name__, self.button)
+        return '<%s %r>' %(self.__class__.__name__, self.func)
 
 
-def handler(field, **kwargs):
+def handler(field, event=jsevent.CLICK):
     """A decorator for defining a javascript event handler."""
     # As a convenience, we also accept form fields to the handler, but get the
     # real field immediately
     if IField.providedBy(field):
         field = field.field
     def createHandler(func):
-        handler = JSHandler(field, func, **kwargs)
+        handler = JSHandler(event, func)
         frame = sys._getframe(1)
         f_locals = frame.f_locals
         handlers = f_locals.setdefault('jshandlers', JSHandlers())
-        handlers.addHandler(field, handler.event, handler)
+        handlers.addHandler(field, event, handler)
         return handler
     return createHandler
 

Modified: z3c.formjs/trunk/src/z3c/formjs/jsaction.txt
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsaction.txt	2007-07-07 06:15:41 UTC (rev 77557)
+++ z3c.formjs/trunk/src/z3c/formjs/jsaction.txt	2007-07-07 06:37:23 UTC (rev 77558)
@@ -109,11 +109,11 @@
   ...     buttons = button.Buttons(IButtons)
   ...
   ...     @jsaction.handler(buttons['hello'])
-  ...     def showHelloWorldMessage(self, selector):
+  ...     def showHelloWorldMessage(self, event, selector):
   ...         return 'alert("%s");' % selector.widget.title
   ...
   ...     @jsaction.handler(buttons['dblhello'], event=jsevent.DBLCLICK)
-  ...     def showDoubleHelloWorldMessage(self, selector):
+  ...     def showDoubleHelloWorldMessage(self, event, selector):
   ...         return 'alert("%s");' % selector.widget.title
 
 The ``handler()`` decorator takes two arguments, the button (acting as the DOM
@@ -286,11 +286,11 @@
   ...     buttons = button.Buttons(IButtons).select('hello')
   ...
   ...     @jsaction.handler(buttons['hello'])
-  ...     def showHelloWorldMessage(self, selector):
+  ...     def showHelloWorldMessage(self, event, selector):
   ...         return 'alert("Hello World!");'
   ...
   ...     @jsaction.handler(buttons['hello'], event=jsevent.DBLCLICK)
-  ...     def showDoubleHelloWorldMessage(self, selector):
+  ...     def showDoubleHelloWorldMessage(self, event, selector):
   ...         return 'alert("Hello World! x 2");'
 
 Let's now instantiate and update the form:
@@ -301,12 +301,14 @@
 The subscriptions are now available:
 
   >>> list(demoform.jsSubscriptions)
-  [<JSSubscription event=<JSEvent "click">,
-                   selector=<WidgetSelector "form-buttons-hello">,
-                   handler=<JSHandler for <JSButton 'hello' u'Hello World!'>>>,
-   <JSSubscription event=<JSEvent "dblclick">,
-                   selector=<WidgetSelector "form-buttons-hello">,
-                   handler=<JSHandler for <JSButton 'hello' u'Hello World!'>>>]
+  [<JSSubscription
+       event=<JSEvent "click">,
+       selector=<WidgetSelector "form-buttons-hello">,
+       handler=<JSHandler <function showHelloWorldMessage ...>>>,
+   <JSSubscription
+       event=<JSEvent "dblclick">,
+       selector=<WidgetSelector "form-buttons-hello">,
+       handler=<JSHandler <function showDoubleHelloWorldMessage ...>>>]
 
 
 Submit and Javascript Buttons Together
@@ -334,11 +336,11 @@
   ...     fields = field.Fields(IPerson)
   ...
   ...     @jsaction.handler(fields['age'])
-  ...     def ageClickEvent(self, selector):
+  ...     def ageClickEvent(self, event, selector):
   ...         return 'alert("The Age was Clicked!");'
   ...
   ...     @jsaction.handler(fields['name'], event=jsevent.CHANGE)
-  ...     def nameChangeEvent(self, selector):
+  ...     def nameChangeEvent(self, event, selector):
   ...         return 'alert("The Name was Changed!");'
 
 We also need to register all the default form registrations:



More information about the Checkins mailing list