[Checkins]
SVN: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/
create a basic renderer for an object event.
Paul Carduner
paulcarduner at gmail.com
Thu Jul 10 18:33:54 EDT 2008
Log message for revision 88218:
create a basic renderer for an object event.
Changed:
U z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py
U z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py
U z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt
U z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml
U z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt
U z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py
-=-
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py 2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py 2008-07-10 22:33:53 UTC (rev 88218)
@@ -430,14 +430,3 @@
class IClientEvent(IObjectEvent):
"""Marker interface for an event that has an effect on the client."""
-class IEventRenderer(zope.interface.Interface):
- """A representation of an event for a client side framework.
-
- Could possibly be a JSON representation of the arguments passed to
- the event."""
-
- def update():
- """Perform any necessary updates"""
-
- def render():
- """Return the javascript representation of the event."""
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py 2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py 2008-07-10 22:33:53 UTC (rev 88218)
@@ -19,6 +19,7 @@
import zope.component
import zope.interface
from zope.traversing.browser import absoluteURL
+from zope.component.interfaces import IObjectEvent
from jquery.layer import IJQueryJavaScriptBrowserLayer
@@ -100,7 +101,27 @@
return '$(document).ready(function(){\n %s\n})' %(
'\n '.join([r.render() for r in self.renderers]) )
+class JQueryObjectEventRenderer(object):
+ zope.component.adapts(IObjectEvent,
+ IJQueryJavaScriptBrowserLayer)
+ zope.interface.implements(interfaces.IRenderer)
+ def __init__(self, event, request):
+ self.event = event
+ self.request = request
+
+ def update(self):
+ pass
+
+ def render(self):
+ attrs = set([])
+ for interface in zope.interface.providedBy(self.event):
+ attrs.update(interface.names())
+ content = '{%s}' % ','.join(['"%s":"%s"' % (attr,getattr(self.event, attr))
+ for attr in attrs])
+ return content
+
+
class JQueryNotifyClientHandlerRenderer(object):
zope.component.adapts(interfaces.INotifyClientHandler,
IJQueryJavaScriptBrowserLayer)
@@ -115,7 +136,7 @@
def render(self):
renderer = zope.component.queryMultiAdapter(
- (self.handler.event, self.request), interfaces.IEventRenderer)
+ (self.handler.event, self.request), interfaces.IRenderer)
if renderer is not None:
renderer.update()
event = renderer.render()
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt 2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt 2008-07-10 22:33:53 UTC (rev 88218)
@@ -304,3 +304,26 @@
$() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
.trigger("zope.component.interfaces.IObjectEvent", {});
+``IObjectEvent`` Renderer
+-------------------------
+
+This renderer defines how to represent an object event in javascript.
+
+Let's create an ``ObjectEvent`` instance.
+
+ >>> from zope.component.interfaces import ObjectEvent
+ >>> event = ObjectEvent("foo")
+
+Let's now register the renderer:
+
+ >>> zope.component.provideAdapter(
+ ... jqueryrenderer.JQueryObjectEventRenderer)
+
+Now we can render the script:
+
+ >>> renderer = zope.component.getMultiAdapter(
+ ... (event, request), interfaces.IRenderer)
+ >>> renderer.update()
+ >>> print renderer.render()
+ {"object":"foo"}
+
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml 2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml 2008-07-10 22:33:53 UTC (rev 88218)
@@ -27,6 +27,9 @@
factory=".jqueryrenderer.JQueryWidgetSaverRenderer"
/>
<adapter
+ factory=".jqueryrenderer.JQueryObjectEventRenderer"
+ />
+ <adapter
factory=".jqueryrenderer.JQueryNotifyClientHandlerRenderer"
/>
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt 2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt 2008-07-10 22:33:53 UTC (rev 88218)
@@ -363,12 +363,15 @@
>>> editform.update()
>>> print editform.eventInjections
- $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
- .trigger("zope.component.interfaces.IObjectEvent", {});
- $() .trigger("z3c.formjs.interfaces.IClientEvent", {})
- .trigger("zope.component.interfaces.IObjectEvent", {});
+ $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent",
+ {"object":"<Article object at ...>"})
+ .trigger("zope.component.interfaces.IObjectEvent",
+ {"object":"<Article object at ...>"});
+ $() .trigger("z3c.formjs.interfaces.IClientEvent",
+ {"object":"<ArticleEditForm object at ...>"})
+ .trigger("zope.component.interfaces.IObjectEvent",
+ {"object":"<ArticleEditForm object at ...>"});
-
Lets not forget to end the interaction we created.
>>> management.endInteraction()
@@ -384,8 +387,12 @@
>>> viewlet.update()
>>> print viewlet.render()
<script type="text/javascript">
- $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
- .trigger("zope.component.interfaces.IObjectEvent", {});
- $() .trigger("z3c.formjs.interfaces.IClientEvent", {})
- .trigger("zope.component.interfaces.IObjectEvent", {});
+ $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent",
+ {"object":"<Article object at ...>"})
+ .trigger("zope.component.interfaces.IObjectEvent",
+ {"object":"<Article object at ...>"});
+ $() .trigger("z3c.formjs.interfaces.IClientEvent",
+ {"object":"<ArticleEditForm object at ...>"})
+ .trigger("zope.component.interfaces.IObjectEvent",
+ {"object":"<ArticleEditForm object at ...>"});
</script>
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py 2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py 2008-07-10 22:33:53 UTC (rev 88218)
@@ -21,6 +21,7 @@
import zope.interface
from zope.app.pagetemplate import viewpagetemplatefile
from zope.app.testing import setup
+from zope.component.interfaces import IObjectEvent
from zope.publisher.interfaces.browser import IBrowserRequest
import z3c.formjs.tests
@@ -162,6 +163,27 @@
return "$.get('saveValue', function(msg){%s}\n)" % saveCall
+class ObjectEventRenderer(object):
+ zope.component.adapts(IObjectEvent,
+ IBrowserRequest)
+ zope.interface.implements(interfaces.IRenderer)
+
+ def __init__(self, event, request):
+ self.event = event
+ self.request = request
+
+ def update(self):
+ pass
+
+ def render(self):
+ attrs = set([])
+ for interface in zope.interface.providedBy(self.event):
+ attrs.update(interface.names())
+ content = '{%s}' % ','.join(['"%s":"%s"' % (attr,getattr(self.event, attr))
+ for attr in attrs])
+ return content
+
+
class NotifyClientHandlerRenderer(object):
zope.component.adapts(interfaces.INotifyClientHandler,
IBrowserRequest)
@@ -176,7 +198,7 @@
def render(self):
renderer = zope.component.queryMultiAdapter(
- (self.handler.event, self.request), interfaces.IEventRenderer)
+ (self.handler.event, self.request), interfaces.IRenderer)
if renderer is not None:
renderer.update()
event = renderer.render()
@@ -200,6 +222,7 @@
zope.component.provideAdapter(WidgetSwitcherRenderer)
zope.component.provideAdapter(LabelWidgetSwitcherRenderer)
zope.component.provideAdapter(WidgetSaverRenderer)
+ zope.component.provideAdapter(ObjectEventRenderer)
zope.component.provideAdapter(NotifyClientHandlerRenderer)
More information about the Checkins
mailing list