[Checkins] SVN: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/
Got events for different widgets to render in a not so pretty way.
Paul Carduner
paulcarduner at gmail.com
Fri Jun 22 21:02:11 EDT 2007
Log message for revision 76951:
Got events for different widgets to render in a not so pretty way.
Changed:
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/README.txt
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
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/jsevent.py
U Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py
-=-
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/README.txt
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/README.txt 2007-06-22 21:45:40 UTC (rev 76950)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/README.txt 2007-06-23 01:02:03 UTC (rev 76951)
@@ -52,7 +52,7 @@
have to specify which javascript library we want to use to handle the
events so as to render the javascript correctly. This is done using
browser layers. The formjs framework implements renderers for
-jquery. The rendered are registered as adapters as follows.
+jquery. The renderers are registered as adapters as follows.
>>> import zope.component
>>> zope.component.provideAdapter(jsevent.JQueryEventRenderer)
@@ -282,37 +282,34 @@
... default=20,
... required=False)
-
- >>> class PersonAddForm(form.AddForm):
+ >>> from z3c.form import field
+ >>> from z3c.form import form
+ >>> class PersonEditForm(form.AddForm):
...
... fields = field.Fields(IPerson)
- ... prefix = "form"
- ... def create(self, data):
- ... return Person(**data)
...
- ... def add(self, object):
- ... self.context[object.name] = object
- ...
- ... def nextURL(self):
- ... return 'index.html'
- ...
- ... @eventHandler('age')
- ... def ageClickEvent(self):
+ ... def ageClickEvent(self, form, id):
... return 'alert("The Age was Clicked!");'
...
- ... @eventHandler('gender', event=jsevent.CHANGE)
- ... def genderChangeEvent(self):
+ ... def genderChangeEvent(self, form, id):
... return 'alert("The Gender was Changed!");'
+ ...
+ ... def updateWidgets(self):
+ ... super(PersonEditForm, self).updateWidgets()
+ ... age = zope.component.getMultiAdapter(
+ ... (jsevent.JSEvents(click=self.ageClickEvent),
+ ... self.widgets['age']), jsinterfaces.IJSEventsWidget)
+ ... gender = zope.component.getMultiAdapter(
+ ... (jsevent.JSEvents(change=self.genderChangeEvent),
+ ... self.widgets['gender']), jsinterfaces.IJSEventsWidget)
-
Now we can update this form and render the widget event handler.
>>> request = TestRequest()
- >>> add = PersonAddForm(root, request)
- >>> add.update()
+ >>> edit = PersonEditForm(root, request)
+ >>> edit.update()
- >>> jsinterfaces.IJSEventWidgetManager(add.widgets).renderEvents()
- <script type="javascript">
- $("#form-age").bind("click", function(){alert("The Age was Clicked!");});
- $("#form-gender").bind("change", function(){alert("The Gender was Changed!");});
- </script>
+ >>> 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!");});
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml 2007-06-22 21:45:40 UTC (rev 76950)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml 2007-06-23 01:02:03 UTC (rev 76951)
@@ -16,6 +16,10 @@
factory=".jsevent.JSEventsRenderer"
/>
+ <adapter
+ factory=".jsevent.JSFormEventsRenderer"
+ />
+
<!-- Widget Factory -->
<adapter
factory=".jswidget.JSEventsWidget"
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py 2007-06-22 21:45:40 UTC (rev 76950)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py 2007-06-23 01:02:03 UTC (rev 76951)
@@ -22,7 +22,7 @@
from zope import schema
from z3c.form.interfaces import IButton, IButtonHandler, IManager, IWidget
-from z3c.form.interfaces import ISelectionManager
+from z3c.form.interfaces import ISelectionManager, IForm
class IJSEvent(Interface):
"""An interface for javascript event objects."""
@@ -67,6 +67,19 @@
"""
+class IJSFormEventsRenderer(Interface):
+ """A renderer that produces javascript code for connecting DOM
+ elements related to a form to javascript events."""
+
+ form = schema.Object(
+ title=u"The form",
+ schema=IForm,
+ required=True)
+
+ def render():
+ """Render the javascript events."""
+
+
class IJSEventsWidget(Interface):
"""Offers a jsEvents attribute."""
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py 2007-06-22 21:45:40 UTC (rev 76950)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py 2007-06-23 01:02:03 UTC (rev 76951)
@@ -84,10 +84,6 @@
self.event = event
def __call__(self, form, id):
- ## TODO: Passing None makes the tests work because the handler
- ## functions take self as the first arg. Instead of passing
- ## None, I should be passing the form that the handler is
- ## defined in - but how do I get this from here?
return self.func(form, id)
def __repr__(self):
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py 2007-06-22 21:45:40 UTC (rev 76950)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py 2007-06-23 01:02:03 UTC (rev 76951)
@@ -21,6 +21,7 @@
import zope.component
from zope.publisher.interfaces.browser import IBrowserRequest
from z3c.form import util
+from z3c.form.interfaces import IForm
from jquery.layer import IJQueryJavaScriptBrowserLayer
import interfaces
@@ -79,6 +80,25 @@
return result
+class JSFormEventsRenderer(object):
+ """IJSEventsRenderer implementation"""
+ implements(interfaces.IJSFormEventsRenderer)
+ zope.component.adapts(IForm)
+
+ def __init__(self, form):
+ self.form = form
+ self.request = form.request
+
+ def render(self):
+ result = ''
+ for widget in filter(interfaces.IJSEventsWidget.providedBy,
+ self.form.widgets.values()):
+ renderer = zope.component.getMultiAdapter((widget.jsEvents, self.request),
+ interfaces.IJSEventsRenderer)
+ result += renderer.render(widget, self.form)
+ return result
+
+
class JQueryEventRenderer(object):
"""IJSEventRenderer implementation.
Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py 2007-06-22 21:45:40 UTC (rev 76950)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/testing.py 2007-06-23 01:02:03 UTC (rev 76951)
@@ -24,6 +24,7 @@
from zope.publisher.browser import TestRequest
from zope.app.testing import setup
import z3c.form.interfaces
+import z3c.form.testing
import jquery.layer
from z3c.formjs import jsbutton, jswidget, jsevent
@@ -40,6 +41,7 @@
def setUp(test):
test.globs = {'root': setup.placefulSetUp(True)}
+ z3c.form.testing.setupFormDefaults()
zope.component.provideAdapter(jsbutton.JSButtonAction,
(jquery.layer.IJQueryJavaScriptBrowserLayer,
interfaces.IJSButton),
More information about the Checkins
mailing list