[Checkins] SVN: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/
moved button event handler to jsevent,
as it should be distinguished from a button.
Paul Carduner
paulcarduner at gmail.com
Wed Jun 27 12:58:40 EDT 2007
Log message for revision 77145:
moved button event handler to jsevent, as it should be distinguished from a button.
Changed:
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.txt
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt
-=-
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py 2007-06-27 16:56:53 UTC (rev 77144)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py 2007-06-27 16:58:39 UTC (rev 77145)
@@ -97,7 +97,7 @@
"""Button widget."""
-class IJSButtonHandler(IButtonHandler):
+class IJSEventHandler(IButtonHandler):
"""A button handler for javascript buttons."""
def __call__(form, id):
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py 2007-06-27 16:56:53 UTC (rev 77144)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py 2007-06-27 16:58:39 UTC (rev 77145)
@@ -55,53 +55,6 @@
zope.interface.implements(interfaces.IJSButton)
-class Handlers(button.Handlers):
- """Event Handlers for Javascript Buttons."""
-
- def addHandler(self, button, handler):
- """See z3c.form.interfaces.IButtonHandlers"""
- # Create a specification for the button
- buttonSpec = util.getSpecification(button)
- if isinstance(buttonSpec, util.classTypes):
- buttonSpec = zope.interface.implementedBy(buttonSpec)
- # Register the handler
- self._registry.register(
- (buttonSpec,), interfaces.IJSButtonHandler, '', handler)
- self._handlers += ((button, handler),)
-
- def getHandler(self, button):
- """See z3c.form.interfaces.IButtonHandlers"""
- buttonProvided = zope.interface.providedBy(button)
- return self._registry.lookup1(buttonProvided, interfaces.IJSButtonHandler)
-
-
-class Handler(object):
- zope.interface.implements(interfaces.IJSButtonHandler)
-
- def __init__(self, button, func, event=jsevent.CLICK):
- self.button = button
- self.func = func
- self.event = event
-
- def __call__(self, form, id):
- return self.func(form, id)
-
- def __repr__(self):
- return '<%s for %r>' %(self.__class__.__name__, self.button)
-
-
-def handler(button, **kwargs):
- """A decorator for defining a javascript event handler."""
- def createHandler(func):
- handler = Handler(button, func, event=kwargs.get('event', jsevent.CLICK))
- frame = sys._getframe(1)
- f_locals = frame.f_locals
- jshandlers = f_locals.setdefault('jshandlers', Handlers())
- jshandlers.addHandler(button, handler)
- return handler
- return createHandler
-
-
class JSButtonAction(action.Action, ButtonWidget, zope.location.Location):
zope.interface.implements(IFieldWidget)
zope.component.adapts(
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.txt
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.txt 2007-06-27 16:56:53 UTC (rev 77144)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.txt 2007-06-27 16:58:39 UTC (rev 77145)
@@ -36,11 +36,11 @@
... buttons = button.Buttons(IButtons)
... prefix = 'form'
...
- ... @jsbutton.handler(buttons['apply'])
+ ... @jsevent.handler(buttons['apply'])
... def apply(self, id):
... return 'alert("You Clicked the Apply Button!");'
...
- ... @jsbutton.handler(buttons['cancel'], event=jsevent.DBLCLICK)
+ ... @jsevent.handler(buttons['cancel'], event=jsevent.DBLCLICK)
... def cancel(self, id):
... return 'alert("You Double Clicked the Cancel Button!");'
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py 2007-06-27 16:56:53 UTC (rev 77144)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py 2007-06-27 16:58:39 UTC (rev 77145)
@@ -17,10 +17,12 @@
"""
__docformat__ = "reStructuredText"
+import sys
+
from zope.interface import implements
import zope.component
from zope.publisher.interfaces.browser import IBrowserRequest
-from z3c.form import util
+from z3c.form import util, button
from z3c.form.interfaces import IForm
from jquery.layer import IJQueryJavaScriptBrowserLayer
@@ -126,3 +128,50 @@
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."""
+
+ def addHandler(self, button, handler):
+ """See z3c.form.interfaces.IButtonHandlers"""
+ # Create a specification for the button
+ buttonSpec = util.getSpecification(button)
+ if isinstance(buttonSpec, util.classTypes):
+ buttonSpec = zope.interface.implementedBy(buttonSpec)
+ # Register the handler
+ self._registry.register(
+ (buttonSpec,), interfaces.IJSEventHandler, '', handler)
+ self._handlers += ((button, handler),)
+
+ def getHandler(self, button):
+ """See z3c.form.interfaces.IButtonHandlers"""
+ buttonProvided = zope.interface.providedBy(button)
+ return self._registry.lookup1(buttonProvided, interfaces.IJSEventHandler)
+
+
+class Handler(object):
+ zope.interface.implements(interfaces.IJSEventHandler)
+
+ def __init__(self, button, func, event=CLICK):
+ self.button = button
+ self.func = func
+ self.event = event
+
+ def __call__(self, form, id):
+ return self.func(form, id)
+
+ def __repr__(self):
+ return '<%s for %r>' %(self.__class__.__name__, self.button)
+
+
+def handler(button, **kwargs):
+ """A decorator for defining a javascript event handler."""
+ def createHandler(func):
+ handler = Handler(button, func, event=kwargs.get('event', CLICK))
+ frame = sys._getframe(1)
+ f_locals = frame.f_locals
+ jshandlers = f_locals.setdefault('jshandlers', Handlers())
+ jshandlers.addHandler(button, handler)
+ return handler
+ return createHandler
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt 2007-06-27 16:56:53 UTC (rev 77144)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.txt 2007-06-27 16:58:39 UTC (rev 77145)
@@ -241,3 +241,33 @@
>>> 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!");});
+
+
+Attaching Events to Form Fields
+-------------------------------
+
+The above method is pretty ugly, and we would really prefer something
+like what is done with buttons. So here is how it would work.
+
+# >>> class PersonEditForm(form.AddForm):
+# ...
+# ... fields = field.Fields(IPerson)
+# ...
+# ... @jsevent.handler(fields['age'])
+# ... def ageClickEvent(self, form, id):
+# ... return 'alert("The Age was Clicked!");'
+# ...
+# ... @jsevent.handler(fields['gender'], event=jsevent.CHANGE)
+# ... def genderChangeEvent(self, form, id):
+# ... return 'alert("The Gender was Changed!");'
+#
+#Now we can update this form and render the widget event handler.
+#
+# >>> request = TestRequest()
+# >>> edit = PersonEditForm(root, request)
+# >>> 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!");});
More information about the Checkins
mailing list